วันจันทร์, มีนาคม 14, 2548

update pkg software บน RH AS, ในแบบฉบับของผม

เนื่องจากเมื่อก่อน ตัว server ของผมมีกลุ่มหนึ่งซึ่งใช้ RedHat AS 3 เวลามี security patch or fix ต่างๆ ตัวผมเองต้องทำการเอา src rpm มา compile เอง ซึ่งในบางครั้งก็ยุ่งมากจนไม่มีเวลาทำ และอีกอย่างในบางครั้งทำให้ server ที่เป็นตัว compile src pkg เต็มไปด้วย devel pkg ทำให้รกและเกะกะ เครื่องเป็นอย่างมากทั้งๆ ที่ไม่ได้ใช้ประโยชน์อย่างอื่นเลย


จนกระทั่งวันหนึ่งในบอร์ดของเรานี่ล่ะมีคนมาแนะนำ Linux Distro อีกตัวมา ทำให้ผมพบทางสว่างในแบบขี้เกียจๆ ของผม -"- ซึ่ง Linux Distro ที่เป็นประเด็นที่พูดถึงเมื่อกี้ มันก็คือ CentOS นั้นเอง


ซึ่งบางคนอาจจะทราบหรือบางคนไม่ทราบเลย เจ้า CentOS มันคือไรวะ ไม่เห็นจะรู้จัก มันก็คือ Linux Distro ที่นำเจ้า src rpm ของทาง RedHat AS มาทำการ compile และ build pkg รวมถึง reconfiguration บางส่วนเป็น distro ตัวใหม่ ถามว่าผิดไหม ไม่ผิดครับ เนื่องจากตัว licensed GPL กำหนดไว้ว่าหากมีการแก้ไขหรือเปลี่ยนแปลง sourcecode สู่เจ้าต้องนำ code ตัวนั้นๆ ออก released ออกสู่สาธารณะด้วย ดังนั้นเราจึงสามารถใช้ RedHat AS ในอีก version ได้ ^-^


แต่เนื่องด้วย เหตุผลบางประการตัวผมต้องใช้ RedHat AS เป็น base อยู่เนื่องจาก software หลายๆ ตัวที่ใช้งานอยู่บางครั้งมันอ้างอิง RedHat distro จึงไม่อาจจะเสี่ยงเปลี่ยนไปใช้ CentOS ได้ แล้วมันจะมีคำถามว่า แล้วจะทำอย่างไรดีล่ะ ที่จะสบายเหมือนแต่ก่อน โดยที่ไม่ต้องมานั่ง compile src pkg อ่ะ ง่ายๆ อุอุ เอา CentOS rpm pkg มาใช้ซะเลย กร๊ากกกกก... (บางตัวอาจจะไม่ compattible กรุณาแน่ใจในการกระทำของตนเอง หากเกิดความผิดพลาดต่อ server คุณเอง ผมไม่รับผิดชอบด้วยนะเออ :P )


เรามาเริ่มวิธีการทำกันเถอะ หลังจากพล่ามมานาน คอเริ่มแห้งแหละ การทำครั้งนี้ทำบน RedHat AS 4 เด้อ:

ครั้งแรกให้เราทำการ import GPG key ของ CentOS เข้ามาในระบบก่อนเพื่อ verify pkg ว่าถูกต้องไม่มีอะไรแอบแฝง ทำดังนี้

[root@wap ~]# rpm --import hxxp://ftp2.tnc.edu.tw/pub1/centos/centos/RPM-GPG-KEY-centos4



เท่านี้การ Import GPG ก็เสร็จเรียบร้อยแล้ว

หลังจากนั้นให้นำระบบ Management pkg ของ CentOS มาใช้ซะ มันก็คือ yum นั้นเอง จัดการ download มันมาแล้วลงซะ จะใช้ pkg เกี่ยวข้อง 2 ตัว ทำตามนี้ (ในที่นี้ผมใช้ mirror site ของไต้หวัน)

[root@wap ~]# wget hxxp://ftp2.tnc.edu.tw/pub1/centos/centos/4.0/os/x86_64/CentOS/RPMS/yum-2.2.0-1.centos4.2.noarch.rpm
--11:57:53-- hxxp://ftp2.tnc.edu.tw/pub1/centos/centos/4.0/os/x86_64/CentOS/RPMS/yum-2.2.0-1.centos4.2.noarch.rpm
=> `yum-2.2.0-1.centos4.2.noarch.rpm'
Resolving ftp2.tnc.edu.tw... 163.26.200.6
Connecting to ftp2.tnc.edu.tw[163.26.200.6]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 388,365 [audio/x-pn-realaudio-plugin]

100%[================================================>] 388,365 31.62K/s ETA 00:00

11:58:12 (20.12 KB/s) - `yum-2.2.0-1.centos4.2.noarch.rpm' saved [388,365/388,365]
[root@wap ~]# wget hxxp://ftp2.tnc.edu.tw/pub1/centos/centos/4.0/os/x86_64/CentOS/RPMS/centos-yumconf-4-4.1.noarch.rpm
--12:13:38-- hxxp://ftp2.tnc.edu.tw/pub1/centos/centos/4.0/os/x86_64/CentOS/RPMS/centos-yumconf-4-4.1.noarch.rpm
=> `centos-yumconf-4-4.1.noarch.rpm'
Resolving ftp2.tnc.edu.tw... 163.26.200.6
Connecting to ftp2.tnc.edu.tw[163.26.200.6]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3,008 [audio/x-pn-realaudio-plugin]

100%[================================================>] 3,008 --.--K/s

12:13:41 (558.89 KB/s) - `centos-yumconf-4-4.1.noarch.rpm' saved [3,008/3,008]



คราวนี้เราก็ได้มันมาแล้วล่ะ จัดการลงต่อเลย ไม่รอช้า


[root@wap ~]# rpm -ivh centos-yumconf-4-4.1.noarch.rpm yum-2.2.0-1.centos4.2.noarch.rpm
Preparing... ########################################### [100%]
1:centos-yumconf ########################################### [ 50%]
2:yum ########################################### [100%]


ลอง run ดูซักนิดว่าคำสั่งทำงานได้สมบูรณ์หรือไม่

[root@wap ~]# yum

Usage: yum [options] <>

Options:
-c [config file] - specify the config file to use
-e [error level] - set the error logging level
-d [debug level] - set the debugging level
-y - answer yes to all questions
-R [time in minutes] - set the max amount of time to randomly run in
-C run from cache only - do not update the cache
--installroot=[path] - set the install root (default '/')
--version - output the version of yum
--rss-filename=[path/filename] - set the filename to generate rss to
--exclude=package to exclude
--disablerepo=repository id to disable (overrides config file)
--enablerepo=repository id to enable (overrides config file)

-h, --help - this screen


ok เรียบร้อยแล้ว มาม่ะ มาต่อกันต่อไปเลย หากเราสั่ง run yum แบบที่ทำการ upgrade pkg เหมือนใน fedora หรืออะไรก็ตามที่ใช้ิคำสั่ง yum เหมือนกัน มันจะ error นะ มันต้องแก้อีก เราไปแก้ config กันเถอะ

# จัดการเก็บ config เก่าซะก่อน เผื่อมีปัญหาจะได้เอากลับมาแก้ทีหลังได้

[root@wap ~]# cd /etc/yum.repos.d/
[root@wap yum.repos.d]# cp CentOS-Base.repo CentOS-Base.repo.new; bzip2 -9v CentOS-Base.repo; mv CentOS-Base.repo.new CentOS-Base.repo
CentOS-Base.repo: 2.827:1, 2.830 bits/byte, 64.63% saved, 1145 in, 405 out.


จัดการแก้ file CentOS-Base.repo โดยใช้ vim ทำตามดังนี้

  1. [root@wap yum.repos.d]# vim CentOS-Base.repo
  2. พิมพ์ เครื่องหมาย :
  3. ใส่ข้อความตามนี้ %s/\$releasever/4.0/gi มันจะทำการ search และ replace ข้อความที่เป็น $releasever ทั้งหมด โดยแทนที่ด้วย 4.0
  4. จากนั้น save มันซะ โดยสั่ง :wq!

เราจะได้ file ที่ทำการแก้ไข repo มาเรียบร้อย สั่ง update ซะเลย

[root@wap ~]# yum check-update
Setting up Update Process
Setting up Repos
update 100% |=========================| 951 B 00:00
base 100% |=========================| 1.1 kB 00:00
addons 100% |=========================| 951 B 00:00
extras 100% |=========================| 1.1 kB 00:00
Reading repository metadata in from local files
primary.xml.gz 100% |=========================| 9.0 kB 00:02
MD Read : ################################################## 21/21
update : ################################################## 21/21
primary.xml.gz 100% |=========================| 532 kB 00:23
MD Read : ################################################## 1405/1405
base : ################################################## 1404/1404
primary.xml.gz 100% |=========================| 991 B 00:00
MD Read : ################################################## 2/2
addons : ################################################## 2/2
primary.xml.gz 100% |=========================| 6.4 kB 00:00
MD Read : ################################################## 24/24
extras : ################################################## 24/24
Resolving Dependencies
...
...


จากนั้นจะทำอะไร ก็ทำเหมือน yum ทั่วๆ ไปนั้นล่ะ ระวังอย่างหนึ่งครับ package ที่มีชื่อ centos อยู่ด้วย อย่าทำการ update เพราะอาจจะมีการแก้ไขตำแหน่งที่อยู่ของ file บางตัวแล้วอาจจะทำให้ RedHat AS ของคุณมีปัญหาได้


จบ ปล. ใครมีวิธีดีๆ มา post ให้ทราบบ้างก็ดีครับ :-)

.