Monday, February 04, 2008

CentOS 4 upgrade CentOS 5

CentOS4 升級到 CentOS5 有點麻煩
試了好幾次 總算整理出一個比較順利的步驟

以下是 CentOS4.6 升級到 CentOS5.1 過程
安裝之前請開兩個以上 telnet session, 因為升級過程中(Step2後) 就無法再開新的連線
另外該停服務先停 以免發生一些慘事 尤其是資料庫如 mysql

1.首先先安裝 centos-release 套件
centos-release-5-1.0.el5.centos.1.i386.rpm
centos-release-notes-5.1.0-2.i386.rpm

rpm -Uvh centos-release-5-1.0.el5.centos.1.i386.rpm centos-release-notes-5.1.0-2.i386.rpm

2. 安裝升級前套件
下載以下 rpm 放在 /tmp/Upgrades, 以下為 5.1
beecrypt-4.1.2-10.1.1.i386.rpm
beecrypt-python-4.1.2-10.1.1.i386.rpm
binutils-2.17.50.0.6-5.el5.i386.rpm
db4-4.3.29-9.fc6.i386.rpm
elfutils-0.125-3.el5.i386.rpm
elfutils-libelf-0.125-3.el5.i386.rpm
elfutils-libs-0.125-3.el5.i386.rpm
glibc-2.5-18.i686.rpm
glibc-common-2.5-18.i386.rpm
glibc-devel-2.5-18.i386.rpm
glibc-headers-2.5-18.i386.rpm
krb5-libs-1.6.1-17.el5.i386.rpm
libselinux-1.33.4-4.el5.i386.rpm
libsepol-1.15.2-1.el5.i386.rpm
libxml2-2.6.26-2.1.2.i386.rpm
libxml2-python-2.6.26-2.1.2.i386.rpm
m2crypto-0.16-6.el5.1.i386.rpm
mcstrans-0.2.6-1.el5.i386.rpm
neon-0.25.5-5.1.i386.rpm
openssl-0.9.8b-8.3.el5_0.2.i686.rpm
popt-1.10.2-47.el5.i386.rpm
python-2.4.3-19.el5.i386.rpm
python-devel-2.4.3-19.el5.i386.rpm
python-elementtree-1.2.6-5.i386.rpm
python-sqlite-1.1.7-1.2.1.i386.rpm
python-urlgrabber-3.1.0-2.noarch.rpm
readline-5.1-1.1.i386.rpm
rpm-4.4.2-47.el5.i386.rpm
rpm-libs-4.4.2-47.el5.i386.rpm
rpm-python-4.4.2-47.el5.i386.rpm
yum-3.0.5-1.el5.centos.5.noarch.rpm

執行安裝
cd /tmp/Upgrades
rpm -Uvh *.rpm --nodeps --force

3. 測試一下 yum upgrade 發生的問題
[root@test Upgrades]# yum -c /etc/yum-upgrade.conf upgrade
Traceback (most recent call last):
File "/usr/bin/yum", line 4, in ?
import yum
File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 36, in ?
import config
File "/usr/lib/python2.4/site-packages/yum/config.py", line 23, in ?
from parser import ConfigPreProcessor
File "/usr/lib/python2.4/site-packages/yum/parser.py", line 3, in ?
import urlgrabber
File "/usr/lib/python2.4/site-packages/urlgrabber/__init__.py", line 53, in ?
from grabber import urlgrab, urlopen, urlread
File "/usr/lib/python2.4/site-packages/urlgrabber/grabber.py", line 406, in ?
import keepalive
File "/usr/lib/python2.4/site-packages/urlgrabber/keepalive.py", line 339, in ?
class HTTPSHandler(KeepAliveHandler, urllib2.HTTPSHandler):
AttributeError: 'module' object has no attribute 'HTTPSHandler'

出現上面的錯誤 其實是缺少新版的 wget 及 keyutils-libs 跟 python 一點都無關
這個錯誤實在很難解 還曾試著把別台正確的 /usr/lib/python2.4 拷貝一份也沒用
想了很久 後來忽然想到 CentOS Wiki 提到升級 CentOS 4.4ServerCD to 5
有提到 wget 於是把把 CentOS5 的 wget 及相依 keyutils-libs 套件裝上去
yum 又活過來了

安裝之前也是要重建 rpmdb 否則是無法安裝的
rm -f /var/lib/rpm/__*
rpm --rebuilddb
rpm -Uvh wget-1.10.2-7.el5.i386.rpm keyutils-libs-1.2-1.el5.i386.rpm --nodeps --force

4. 安裝新版 kernel 以及移除舊版 kernel
a. 安裝新版 kernel
rpm -ivh kernel-2.6.18-53.el5.i686.rpm --nodeps

b. 移除舊版 kernel
用 --justdb 選項移除 rpmdb 刪除舊版的 kernel 資訊, 不做真正移除
等下 yum upgrade 才不會出現舊版的 kernel 與新的 rpm 產生相依性或衝突的問題
rpm -e --nodeps --justdb kernel-2.6.9-67.EL kernel-2.6.9-67.0.1.EL

5. 升級整個系統
正是要做 整個 upgrade 之前, 要先做 rpm db 的重整 rebuild
rm -f /var/lib/rpm/__*
rpm --rebuilddb
好了 可以開始 upgrade 了
yum -c /etc/yum-upgrade.conf upgrade

做完後還是得重建 rpm db 一次
rm -f /var/lib/rpm/__*
rpm --rebuilddb

然後請檢察 /etc/grub.conf 及 /boot 是否正確再開機

6. 清理垃圾
由於升級過程中 有些軟體可以接受比較舊的版本
導致還是會有些軟體停留在 el4 而不是 el5
我們可以檢查還有哪些是 el4
rpm -qa | grep el4, rpm -qa | grep EL4

建議先用 yum list xxx 查看有哪幾個版本
然後用 rpm -e xxx -nodeps 移除
再用 yum install xxx 裝上新版

參考文章
CentOS Wiki - Upgrade Server 4.4 to 5
http://wiki.centos.org/HowTos/MigrationGuide/ServerCD_4.4_to_5
在線centos4.4升級到centos5.0
http://www.haw-haw.org/node/242

No comments:

Post a Comment