ทำไมแพ็คเกจล้าสมัยที่ติดตั้งโดย yum บน CentOS? (เฉพาะ PHP 5.1) จะแก้ไขได้อย่างไร?


14

ฉันกำลังทำงานบนเซิร์ฟเวอร์ CentOS ที่สดใหม่และฉันรู้สึกรำคาญอย่างยิ่งที่พบว่า yum ไม่ทำงานอย่างราบรื่นและยอดเยี่ยมเหมือนที่ "apt-get install" ทำบน Ubuntu

การติดตั้งสแต็ค LAMP ฉันรันสิ่งต่อไปนี้:

$ yum install php
$ yum install mysql

นอกจากนี้:

$ yum install mysql-server
$ yum install mysql-devel
$ yum install php-mysql

กำลังทำงาน:

$ rpm -qa | grep php

... แสดงว่าฉันติดตั้งแพ็คเกจ php 5.1.6 ทุกชนิดแล้วและฉันต้องการขั้นต่ำ 5.2 นอกจากนี้ฉันเห็นว่ามันติดตั้ง mysql 5.0.77 แม้ว่ารุ่นปัจจุบันคือ 5.5.20 แต่หวังว่า mysql 5.0 จะใช้งานได้ PHP 5.1 จะไม่

ดังนั้นคำถามจริงคือ (คือ):

ฉันจะแก้ไข PHP ของฉันเพื่อให้เป็นรุ่นเสถียรล่าสุด (5.3.9 ตาม PHP.net) ได้อย่างไร ฉันจะทำให้เครื่อง CentOS ทำงานเหมือน Ubuntu ได้อย่างไรฉันจึงไม่ต้องจัดการกับสิ่งนี้อีก

ขอบคุณมาก ๆ.

แก้ไข: CentOS 5.7 ได้รับการติดตั้งโดย บริษัท โฮสติ้งเมื่อสัปดาห์ที่แล้วดังนั้นฉันจึงไม่รู้ว่าทำไมพวกเขาจึงต้องติดตั้ง CentOS เวอร์ชันเก่าแทนที่จะเป็นรุ่นล่าสุด ฉันต้องการ PHP 3.2 อย่างน้อยฉันก็ขอขอบคุณข้อเสนอแนะเกี่ยวกับวิธีการทำเช่นนั้น ฉันไม่คุ้นเคยกับแพ็คเกจและที่เก็บ แต่ดูเหมือนว่าทุกคนสามารถเริ่มต้นที่เก็บได้ดังนั้นฉันจึงกังวลเกี่ยวกับการติดตั้งสิ่งต่าง ๆ จากที่เก็บแบบสุ่มที่อาจติดเซิร์ฟเวอร์


1
เราสามารถชี้ให้เห็นได้ว่าหากคุณยึดติดกับ Ubuntu รุ่น LTS ฮาร์ดีอยู่ใน php 5.2 และ Lucid อยู่ใน 5.3.2 ที่ค่อนข้างไม่เงางามใหม่ มีเซิร์ฟเวอร์ mysql รุ่น "คล้ายกัน" ใน repos Ubuntu LTS มาตรฐาน RHEL5 ออกมาหนึ่งปีก่อนที่ Hardy ดังนั้นจึงไม่น่าแปลกใจที่มันเป็น php 5.1 RHEL และ Ubuntu LTS สร้างขึ้นเพื่อความเสถียรของแพ็คเกจ หากคุณต้องการอะไรที่ทันสมัยกว่านี้ให้ใช้ Fedora หรือ Ubuntu ที่ไม่ใช่ LTS
cjc

ที่นี่คือที่ที่คุณสามารถอัปเดตเวอร์ชัน PHP ของคุณเป็นPHP5.5 webtatic.com/packages/php55
Mirza Selimovic

คำตอบ:


11

CentOS เป็น DERIVATIVE ของ Red Hat Enterprise Linux ที่อนุรักษ์นิยมมากดังนั้นโดยทั่วไปการปรับปรุงแพ็คเกจจะล่าช้ากว่า RHEL แพ็คเกจในการแจกจ่ายอย่างใดอย่างหนึ่งจะเก่าไปหน่อย

หากคุณใช้งาน CentOS 5 คุณควรลองใช้ CentOS 6 เพื่อดูว่าเหมาะสมกับความต้องการของคุณหรือไม่

หากคุณต้องการบางสิ่งที่ล้ำสมัยกว่า CentOS 6 คุณควรมองหา Fedora

การติดตาม: CentOS ได้รับการ "นำเข้า" และรวมเข้าด้วยกันอย่างแน่นหนายิ่งขึ้น CentOS ที่ใหม่กว่าจะเห็นประโยชน์ของวัฏจักรการปล่อยที่เข้มงวดมากขึ้น แต่สำหรับรุ่นที่เก่ากว่าคำตอบนี้จะยังคงเป็นจริง


2
จำนวนข้อมูลที่ผิดในหัวข้อนี้เป็นสิ่งที่น่าตกใจอย่างยิ่ง CentOS 5 ได้บรรจุ PHP 5.3 มานานกว่าหนึ่งปีแล้ว แต่นี่ไม่ใช่เวอร์ชันที่ติดตั้งเริ่มต้นเนื่องจาก ABI กังวล yum install php53คุณจะได้รับในทางของคุณ
jgoldschrafe

จริง ฉันตัดสินใจที่จะสอนเขาถึงวิธีการตกปลาแทนที่จะให้ปลาแก่เขา และฉันคิดว่ามันเป็นความจริงที่น่าสะอิดสะเอียนเล็กน้อย แต่ฉันได้นอนสองสามชั่วโมงใน 36 และจะไม่นอนมากในสุดสัปดาห์นี้เช่นกันเนื่องจากไฟดับ SPOF
Magellan

2
@jgoldschrafe - ฉันขอแนะนำให้เขียนคำตอบของคุณเอง - ซึ่งจะมีประสิทธิผลมากกว่าการแสดงความคิดเห็นด้วยการแก้ไข
EEAA

เป็นเซิร์ฟเวอร์เฉพาะที่ บริษัท โฮสต์ โดยส่วนตัวแล้วฉันต้องการมีเซิร์ฟเวอร์อยู่ในพื้นที่ของเรา แต่เจ้านายรู้สึกปลอดภัยมากขึ้นด้วยวิธีนี้ ฉันสงสัยว่าทำไม บริษัท โฮสติ้งจะติดตั้ง CentOS 5.7 แทนรุ่นล่าสุด
Buttle Butkus

4
@ jgoldschrafe สำหรับฉันคำถามดูเหมือนจะไม่ได้เฉพาะเจาะจงเกี่ยวกับรุ่น php ดูเหมือนว่าคำถามนั้นเกี่ยวกับนโยบายการปล่อยแบบอนุรักษ์นิยมซึ่งฉันคิดว่าโพสต์พยายามตอบ ฉันคิดว่ามันเป็นเรื่องที่ดีที่จะเรียกข้อมูลพลาดนี้
Zoredache

6

พวกเขาไม่ล้าสมัย เป็น CentOS 5 ล่าสุดที่มีอยู่ในที่เก็บของ

Red Hat (และ Ubuntu สำหรับเรื่องนั้น) ไม่เคยเคยเผยแพร่ซอฟต์แวร์รุ่นใหญ่ใหม่ลงในที่เก็บแพ็คเกจสำหรับระบบปฏิบัติการรุ่นใดรุ่นหนึ่งเพื่อความเสถียร - คุณไม่ต้องการรันการอัพเกรด งาน.

แต่พวกเขากลับแก้ไขความปลอดภัยและแก้ไขข้อผิดพลาดที่สำคัญในรุ่นของซอฟต์แวร์ที่ 'เสถียร' เมื่อระบบปฏิบัติการเปิดตัวหลีกเลี่ยงการแนะนำคุณสมบัติใหม่ (และข้อบกพร่อง)

เนื่องจากคุณอยู่บน CentOS 5 คลังเก็บอย่างเป็นทางการมีบางสิ่งบางอย่างที่ค่อนข้างเก่า แต่อย่ากลัวเลย - คุณสามารถหาที่เก็บของบุคคลที่สามได้อย่างง่ายดายด้วยซอฟต์แวร์เวอร์ชั่นที่คุณต้องการ

หรือทำไมไม่อัพเกรดเป็น 6


นี้ไม่เป็นความจริงอย่างสมบูรณ์ - PHP 5.3 อยู่ใน Repos yum install php53หลักและคุณเพียงแค่ต้อง
jgoldschrafe

1
@jgoldschrafe โทรดีมาก แม้ว่าดูเหมือนว่า repo ของบุคคลที่สามอาจยังจำเป็นสำหรับ MySQL รุ่นใหม่
เชนแมดเดน

"หรือทำไมไม่อัพเกรดเป็น 6" คำถามที่ดีกว่าคือเหตุใด SingleHop ให้เรา 5.7 บนเซิร์ฟเวอร์ @jgoldschrafe จะแทนที่แพ็กเกจที่ติดตั้งหรือฉันจะลบมันด้วยตนเองหรือไม่
Buttle Butkus

CentOS 6 มีวางจำหน่ายเพียงไม่กี่เดือนที่ผ่านมา ถ้ากล่องถูกสั่งเมื่อต้นปีที่แล้วมันจะเป็น 5.7 หากคุณมีตัวเลือกในการ re-image เครื่องด้วย CentOS 6 คุณสามารถทำได้อย่างแน่นอน
cjc

@cjc เพิ่งได้รับคำสั่งประมาณ 2 สัปดาห์ที่ผ่านมา ฉันได้ FTP แล้วประมาณ 80GB ดังนั้นฉันคิดว่าการติดตั้งนี้จะง่ายกว่า ฉันพยายามใช้สิ่งที่แนะนำ jgoldschrafe: yum install php53 แต่มันไม่ทำงานเพราะ php ติดตั้งแล้ว
Buttle Butkus

4

ฉันจะบอกว่าถอนการติดตั้ง CentOS และติดตั้ง Ubuntu ถ้านั่นคือสิ่งที่คุณต้องการใช้ แต่ต้องเป็น CentOS เวอร์ชันเก่าที่คุณใช้ CentOS 6.2 ใช้ PHP 5.3 และ MySQL 5.1

คุณสามารถใช้ที่เก็บ Remiเพื่อรับ Apache / PHP / MySQL เวอร์ชันที่ใหม่กว่า

และคุณไม่ได้ทำให้เครื่อง CentOS ของคุณทำงานเหมือน Ubuntu เพราะไม่ใช่ Ubuntu มันเหมือนกับการพูดว่า "ฉันจะทำให้ไครสเลอร์ขับรถได้อย่างไรเหมือนฟอร์ด"


อัปเดตการตอบสนอง:

ฉันได้รับการลงคะแนนบางส่วนเกี่ยวกับเรื่องนี้ดังนั้นฉันคิดว่าความตั้งใจของฉันถูกเข้าใจผิดให้ฉันลองแก้ไขให้ถูกต้อง

ฉันได้ตั้งค่า VPS ในสภาพแวดล้อมของเราและติดตั้งแพคเกจดังนั้นฉันควรจะเป็นที่ที่คุณอยู่ในขณะนี้:

[root@centos5 /]# cat /etc/issue
CentOS release 5.7 (Final)
Kernel \r on an \m

[root@centos5 /]# rpm -qa |grep php
php-common-5.1.6-27.el5_7.4
php-mysql-5.1.6-27.el5_7.4
php-cli-5.1.6-27.el5_7.4
php-pdo-5.1.6-27.el5_7.4
php-5.1.6-27.el5_7.4

ในการตอบกลับครั้งแรกของฉันฉันคิดว่าคุณต้องการรุ่นล่าสุดจากนั้นคุณควรใช้ที่เก็บ Remi ตามที่ฉันได้กล่าวไว้ข้างต้น อย่างไรก็ตามหากเวอร์ชัน PHP 5.3 ภายใน centOS นั้นใช้ได้ (5.3.3) ให้อ่านต่อไป

เมื่อพยายามติดตั้ง php53 จะบ่นว่ามีข้อขัดแย้งเนื่องจากแพ็คเกจนี้จะครอบคลุมสิ่งเดียวกับแพ็คเกจ PHP 5.1 ในการแก้ปัญหานี้คุณต้องลบแพ็คเกจ PHP ที่เกี่ยวข้องทั้งหมดเพื่อเริ่มต้นด้วย:

[root@centos5 /]# yum remove php*
[root@centos5 /]# rpm -qa |grep php
[root@centos5 /]# 

สิ่งต่อไปที่คุณต้องทำคือติดตั้งแพ็คเกจที่เทียบเท่ากับ php53:

[root@centos5 /]# yum install php53 php53-cli php53-mysql
[root@centos5 /]# rpm -qa |grep php
php53-common-5.3.3-1.el5_7.5
php53-cli-5.3.3-1.el5_7.5
php53-pdo-5.3.3-1.el5_7.5
php53-5.3.3-1.el5_7.5
php53-mysql-5.3.3-1.el5_7.5

ดังนั้น PHP ค่อนข้างง่าย แต่ MySQL เป็นอีกเรื่องหนึ่งเนื่องจาก MySQL 5.0 เป็นเพียง MySQL ในคลังข้อมูล CentOS เริ่มต้น ฉันเรียกใช้ CentOS เวอร์ชัน 64 บิตหากคุณไม่ต้องการปรับต่อไปนี้ให้พอดีกับ 32 บิตแทน

มีหลายวิธีในการทำเช่นนี้ แต่ฉันจะไปกับที่เก็บ Remi มีมานานหลายปีและการบำรุงรักษาทำได้ง่ายกว่าด้วย repo มากกว่าการใช้ไฟล์ RPM ธรรมดา

Remi ต้องการที่เก็บ EPELดังนั้นเริ่มต้นด้วยการติดตั้ง:

[root@centos5 /]# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
Retrieving http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
warning: /var/tmp/rpm-xfer.lvLBMJ: Header V3 DSA signature: NOKEY, key ID 217521f6
Preparing...                ########################################### [100%]
   1:epel-release           ########################################### [100%]

ถัดไปคุณติดตั้ง Remi repo RPM

[root@centos5 /]# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
Retrieving http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
warning: /var/tmp/rpm-xfer.ztjinG: Header V3 DSA signature: NOKEY, key ID 00f97f56
Preparing...                ########################################### [100%]
   1:remi-release           ########################################### [100%]

ถัดไปคุณลบเซิร์ฟเวอร์ MySQL ปัจจุบัน (มิฉะนั้นคุณจะได้รับข้อขัดแย้งเมื่อพยายามติดตั้งใหม่) .. หมายเหตุ! หากคุณมีฐานข้อมูลอยู่ให้ทำการสำรองข้อมูลก่อนที่จะทำเช่นนี้!

[root@centos5 /]# yum remove mysql*

จากนั้นคุณสามารถไปที่และติดตั้ง MySQL จากที่เก็บ Remi:

[root@centos5 /]# yum --enablerepo=remi install mysql.x86_64 mysql-server.x86_64

ตอนนี้เมื่อคุณพยายามเริ่ม MySQL มันอาจล้มเหลวเพราะ mysql เก่าทิ้งบางสิ่งไว้ข้างหลังและนี่อาจเป็นเรื่องเจ็บปวดที่จะกำจัดออกไป ในกรณีของฉันที่นี่ฉันจำเป็นต้องลบบางสิ่งบางอย่างเพื่อให้มันทำงานได้ สิ่งเหล่านี้ทำเพื่อฉัน:

# rm -rf /usr/share/mysql
# rm -rf /var/lib/mysql
# yum --enablerepo=remi reinstall mysql-libs
# /usr/libexec/mysqld --skip-grant &
# mysql_install_db
# /etc/init.d/mysqld stop
# /etc/init.d/mysqld start

1
ยินดีด้วยโดยทั่วไปคำถามว่ามีวิธีรับแพ็คเกจที่เป็นปัจจุบันมากกว่าแพ็คเกจที่ล้าสมัยหรือไม่
Buttle Butkus

@ButtleButkus ฉันไม่รู้ว่าคุณได้รับการแจ้งเตือนเมื่อฉันอัปเดตหรือไม่ดังนั้นฉันจึงเขียนความคิดเห็นเพื่อให้แน่ใจว่าคุณทำ :)
Frands Hansen

เพิ่งเห็นการอัปเดตของคุณ ฉันแก้ปัญหาแล้วและคำตอบของคุณดูเหมือนจะตรงกับสิ่งที่ฉันทำลงไป จำเป็นต้องตรวจสอบบันทึกย่อของฉันอีกครั้ง
Buttle Butkus

1
มีแหล่งข้อมูลเพิ่มเติมอีกสองสามแห่งสำหรับ rpms ที่ทันสมัย Rackspace IUS iuscommunity.org/pages/About.htmlและ webtatic webtatic.com/projects/yum-repository
txyoji
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.