更換 Linux 核心是每一位 Linux 主機管理者經常要面對的問題, 本文將一些文件串聯在一起, 供各位參考
更換 Linux 核心(Kernel) 對剛接觸 Linux 管理者而言, 多少會覺得有點困難; 其實只要試個幾次, 很快地, 您就會感到駕輕就熟.
早期更換 Linux Kernel 只有採用原始碼編譯一途, 近幾年由於套件管理模式大行其道, 因此又多了另一新選擇, 其中 RPM 是最為流行的方式之一.
注意! 不管您打算採用那一種方式, 您都應該先做好一開機片, 以防萬一
製作開機片的方法如下:
1.
uname -r
比如出現以下訊息
2.4.18-10
2.
將它放在以下指令之後, 此時請放入一片空白磁片:
mkbootdisk --device /dev/fd0
完整指令為:
mkbootdisk --device /dev/fd0 2.4.18-10
接著您便可以安心來做核心的更換工作了.
以下先介紹原始碼編譯安裝的方法:(by OLS3 技術文件)
一. 原始碼 Kernel 重製:
流程:
1.
先至 ftp.tnc.edu.tw/sysop/Linux-kernels/
或 http://www.kernel.org 去下載 Linux 核心
其中, 版本代碼 2.4 開頭者為穩定版(建議), 2.5 為實驗版(不建議).
2.
設定 kernel 選項
3.
編譯 kernel
4.
編譯 modules, 安裝 modules
5.
安裝 kernel
6.
設定 boot loader
7.
重新開機
步驟:
1.
cd 您解壓後的目錄下的 linux 目錄中
2.
make mrproper
3.
make xconfig (menuconfig 或 config), 它會存成 .config
這個步驟是最困難的, 因為您必須了解很多個選項的意義才行! 這個部份也是必須充份練功的地方!
4.
make dep
5.
make bzImage
6.
make modules
7.
make modules_install
8.
cp arch/i386/boot/bzImage /boot
9.
編輯 /etc/lilo.conf 或 /boot/grub/grub.conf
lilo.conf 的修改範例:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linuxnew
image=/boot/vmlinuz-2.2.14-5.0
label=linux
read-only
root=/dev/hda1
image=/boot/bzImage
label=linuxnew
read-only
root=/dev/hda1
==========================
grub.conf 的修改樣本:
default=0
timeout=3
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.18-10)
root (hd0,0)
kernel /vmlinuz-2.4.18-10 ro root=/dev/hda3
initrd /initrd-2.4.18-10.img
title Red Hat Linux (2.4.18-5)
root (hd0,0)
kernel /vmlinuz-2.4.18-5 ro root=/dev/hda3
initrd /initrd-2.4.18-5.img
title Red Hat Linux (2.4.18-3)
root (hd0,0)
kernel /vmlinuz-2.4.18-3 ro root=/dev/hda3
initrd /initrd-2.4.18-3.img
10.
執行 lilo -v -v; 若是使用 grub, 則不必.
11.
reboot
*
為安全起見, 應該在 lilo 中保留舊核心, 以免萬一新核心出問題, 而無法開機.
說明:
1.
make mrproper 會移除先前重製核心時不必要的殘餘檔案, 這樣可以避免這些檔案對原始碼目錄樹產生不必要的干擾. 執行 make mrproper 時, 會砍除設定配置檔 .config, 如果您認為它很重要的話, 應該予以備份.
2.
make config 是文字選項模式, 也是傳統的方式, 這個方式的缺點是: 在選擇時, 無法回頭.
make menuconfig 是文字選單模式.
make xconfig 是圖型選單模式, 需要 X Windows.(推薦此方式)
make config 時, 它會先執行 /bin/sh scripts/Config arch/i386/config.in
二. 使用 RPM 更換核心:
必須注意您的硬碟是 IDE 或是 SCSI, 以及您的主機 CPU 是單顆或雙顆!
另外, 我建議各位在更換核心之前, 先安裝 urh, 把大部份套件自動予以更新, 它也會把核心相關的 RPM 更新, 如 kernel-header*.rpm; 俟 urh 執行完畢, 才來進行以下動作!
A. 若是 IDE 硬碟, 那麼更換的方式十分簡單:
1. 若有安裝 autoURPM(ftp.tnc.edu.tw/sysop/urh) 者,
可 cd /var/spool/autoupdate
rpm -ivh kernel-2.2.19-6.2.16*.rpm
若無安裝 autoURPM 者,
可至教網中心 ftp.tnc.edu.tw/sysop/rpms 中去下載
kernel-2.2.19*.rpm
若是雙 CPU , 則要安裝 kernel-smp*.rpm 的套件.
2. 編輯 /etc/lilo.conf 修改成如下:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linuxnew
image=/boot/vmlinuz-2.2.14-5.0
label=linux
read-only
root=/dev/hda1
image=/boot/vmlinuz-2.2.19-6.2.16
label=linuxnew
read-only
root=/dev/hda1
注意! 您的開機區未必是 /dev/hda1
必須視貴校主機 lilo.conf 中原有的設定而定
3. lilo -v -v
4. 重新開機即可.(注意, 上述已改由新的核心來開機)
若是使用 GRUB 來開機者, 只要執行以下指令即可
rpm -ivh kernel-2.2.19-6.2.16*.rpm
不必再去修改 /boot/grub/grub.conf
因為安裝這個 kernel RPM 套件時, 它會自動幫您修改 grub.conf
您唯一要做的是: 把 grub.conf 中的開機順序改成新的核心
比如: 以下的 default=0 即表示是由最新的 kernel 來開機
default=0
timeout=3
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.18-10)
root (hd0,0)
kernel /vmlinuz-2.4.18-10 ro root=/dev/hda3
initrd /initrd-2.4.18-10.img
title Red Hat Linux (2.4.18-5)
root (hd0,0)
kernel /vmlinuz-2.4.18-5 ro root=/dev/hda3
initrd /initrd-2.4.18-5.img
title Red Hat Linux (2.4.18-3)
root (hd0,0)
kernel /vmlinuz-2.4.18-3 ro root=/dev/hda3
initrd /initrd-2.4.18-3.img
B. SCSI 硬碟:
若是 SCSI 硬碟, 且 /boot 中有 initrd 的 image
則要多做一個動作: (註: 若您是安裝 RedHat 7.2 以後的版本,
可直接像 IDE 硬碟的作法一樣,
使用 rpm -ivh kernel*.rpm 即可升級)
以 RedHat 6.2 為例:
mkinitrd /boot/initrd-2.2.19-6.2.16.img 2.2.19-6.2.16
lilo.conf 要修改, 加入以下設定:
image=/boot/vmlinuz-2.2.19-6.2.16
label=linuxnew
root=/dev/sda1 (這個地方, 要視您原先的 root=/dev/sda?? 而定)
initrd=/boot/initrd-2.2.19-6.2.16.img
read-only
再 lilo -v -v
重新開機一次
當然, 開機 bootdisk 一定要先準備好.
若還是不成?, 可用 RedHat 7.3 光碟直接升級.
再用 urh-7.3 來大量升級套件. (下載位址: ftp.tnc.edu.tw/sysop/urh)
(以上是 OLS3 在網管討論區的回應)
C. 以下問題您可能也會碰到喔!(SCSI硬碟)
底下是敝縣網管討論區中二位網管先進的對話內容節錄, 對您可能有所幫助.
=======================
sammy 留言:
重新開機後出現LI
二字就都不動了
還好我有做舊kernel的開機片,
暫時用開機片開機server可工作
我的猜測是 lilo -v -v時
電腦以為我的開機碟是hda,
所以把開機程式寫入hda,但我真正的開機碟是sda
但實際情形是否如此,我也不知
目前暫時只能用磁片開機
請問要如何是好
========================
hsmhsm 回覆 sammy 如下:
之前去中山上課,老師說ide的硬碟就是會先被讀取
所以他在前兩行中間再加了兩行
(不過當時裝的是trustix)
boot=/dev/sda
disk=/dev/sda
bios=0x80
map=/boot/map
反正你有開機片,要不要試試??
=======================
sammy 回覆 hsmhsm 如下:
從暑假一直放到現在,
放了一個月,一直使用開機片開機
今天終於有空試了一下
在加了那二行後,
果然成功,真是謝了
摘自:http://www.csie.nctu.edu.tw/~tsaiwn/course/introcs/history/linux/linux.tnc.edu.tw/techdoc/kernel2.html
沒有留言:
張貼留言