




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、升級CentOS6.5安裝鏡像中的Linux內核版本前言因為之前筆者所在公司的一款虛擬化平臺產品在數據中心服務器上部署時出現不兼容現象,懷疑是安裝介質中我們所定制的Linux內核與新服務器硬件不兼容導致,于是就牽涉到升級安裝介質中Linux內核的工作。由于這款虛擬化平臺產品是在CentOS6.5的基礎上定制得到,所以本質上相當于直接更新CentOS6安裝介質中Linux內核。關于如何定制一張Linux發行版光盤,以及如何在一個完整現有的Linux系統上升級內核,網上各種文章鋪天蓋地幾乎已成大路貨。然而直接升級發行版介質中的內核卻少有提及,為此我將整個工作過程記錄下來,所用方式方法不一定最優,但
2、意在拋磚引玉。在我進行這項工作的時候,發現上的內核最新版本已悄然變為4.8.6,這是一個stable版本,于是乎決定就用它了。安裝光盤目錄結構分析CentOS6.5安裝介質目錄結構如下圖所示:圖1 CentOS發行版ISO目錄樹(1) EFI目錄主要用于64位的基于EFI的系統引導。其中的BOOT目錄下的BOOTX64.conf為grub的配置文件,用于顯示引導菜單。(2) images目錄:包含有各種引導鏡像。最重要的是引導第二階段安裝程序需要用到的鏡像文件install.img(CentOS7安裝盤中該文件名稱是squashfs.img),該鏡像文件內部文件系統類型是s
3、quashfs,未經壓縮,可以直接掛載(只讀),anaconda程序就在這個鏡像文件中。該目錄中還包含一個pxeboot目錄,主要用于制作PXE安裝方式引導介質。(3) isolinux目錄:有開機引導系統安裝的內核(vmlinuz)及臨時文件系統(initrd.img),在引導系統時會載入內存。(4) Packages目錄:包含安裝所需的所有二進制RPM包。(5) repodata目錄:一個位于光盤介質上的yum源,內部包含了軟件倉庫所有的配置文件。(6) TRANS.TBL文件:記錄當前目錄的列表,用mkisofs的-T參數重新生成,主要是為了支持長文件名稱。(7) .discinfo文件
4、是安裝介質的識別信息。.treeinfo文件記錄不同安裝方式安裝程序所在的目錄結構,如PXE方式時,內核kernel=images/pxeboot/vmlinuz,根文件系統initrd=images/pxeboot/initrd.img。CentOS安裝光盤是一張引導盤,啟動時,引導程序會分別將vmlinuz和initrd.img載入內存,待內核初始化完成后,會執行initrd中的/sbin/init,/sbin/init加載/sbin/loader,最終加載運行install.img中的anaconda安裝程序。anaconda會根據配置和用戶操作分別安裝Packages文件夾下的rpm包
5、,操作系統內核也以rpm包的形式存在其中。因此,需要更新的文件主要是光盤中isolinux、image/pxeboot下的vmlinuz和initrd.img文件,Packages目錄下的內核RPM包。編譯內核及模塊第一步,從/上下載新版本的內核源碼,linux內核版本號中的第二位(即次版本號)為偶數的版本為穩定版,為奇數的版本是處于開發中的非穩定版,本文考慮到更新后的安裝程序需要用于生產環境,因此,選擇的版本號為4.8.6,即穩定版。下載后直接用tar將源碼解壓到/usr/src/kernels路徑下。第二步,配置和編譯內核。在配置和編譯內核前,需先
6、準備好相關工具環境,先執行yum y install gcc ncurses-devel openssl createrepo,在源碼目錄下分別執行下述命令即可生成內核二進制文件:# make menuconfig /啟動一個圖形化內核配置界面,該配置工具會將當前系統內核配置作為默認配置,配置好后選擇<save>按鈕,會再內核源碼目錄中生成一個.config文件保存配置。# make bzImage /編譯內核源碼,得到內核壓縮文件vmlinuz# make modules /編譯內核模塊# make modules_install /安裝內核模塊# make install /安
7、裝內核另外,還可能用到的make目標有:# make clean /清除構建過程中生成的中間文件和目標文件,但保留內核配置及構建版本號# make mrproper /清除構建過程中的中間文件和目標文件,同時,清除內核配置及構建版本號生成內核RPM包執行:# make rpm-pkg可以生成內核RPM包,該命令生成的內核RPM包可在現有完整系統上直接安裝,執行:# rpm ivh kernel-4.8.6-1.el6.x86_64.rpm < -force > < -nodeps >但是,如果將新生成的內核RPM包替換掉Packages目錄中原有的內核RPM包,則系統在
8、安裝后啟動時可能會拋出Kernel Panic,原因是內核RPM包在執行過程中需要依賴其它一些第三方工具來最終完成安裝流程, 這些依賴關系需要配置到RPM包中,使得在安裝內核前,先安裝這些被依賴的工具包,否則就會導致安裝不完整。下圖是原有2.6版本內核RPM包和新生成的4.8.6版本的RPM包依賴關系對比圖:圖2 2.6.32版本內核包默認依賴圖3 4.8.6版本內核包默認依賴從上述兩張圖中可以看出明顯的差別,完成內核安裝需執行module-init-tools、initscripts、grubby、dracut等幾個包中的腳本,因此這幾個包必須先于內核安裝。為了實現這一目的,我所采用的辦法是
9、修改/usr/src/kernels/linux-4.8.6/scripts/package下的mkspec腳本,這是因為在make rpm-pkg時,會調用到該腳本來生成內核RPM的SPEC文件。最終在mkspec文件中增加如下內容:echo "PreReq: fileutils, module-init-tools, initscripts, grubby >= 7.0.4-1, dracut-kernel, /sbin/new-kernel-pkg, device-mapper-event-libs, device-mapper-libs, device-mapper-m
10、ultipath, device-mapper-multipath-libs, NetworkManager, NetworkManager-glib, crypto-utils, cryptsetup-luks, cryptsetup-luks-libs, lvm2, dmraid, dmraid-events, dracut, file, python, python-cryptsetup, sysvinit-tools"其中,“PreReq”表示依賴類型為install前。保存mkspec文件并重新make rpm-pkg,之后生成的RPM就可以直接放入到Packages目錄中
11、用于系統全新安裝了,檢查新生成的內核RPM可以看到如下景象:圖4 新生成的kernel-4.8.6 RPM依賴項圖4中的這些依賴項是我初步整理之后的一個結果,可能有個別依賴不是必要的,但由于編譯構建內核花費時間較長,為了減少失敗次數,保險起見將其加到PreReq中了。具體依賴關系還有待進一步深入分析。更新initrd.imgCentOS6.5安裝鏡像中的initrd.img文件是一個CPIO包,采用LZMA壓縮算法進行了壓縮,可以直接用lzma和cpio進行解壓解包后得到一個完整的目錄樹。這個文件本質上是一個ramfs,它的地位和作用與系統中/boot/initramfs-<versio
12、n>.<EL>.<arch>.img文件是一致的,即:為安裝程序內核提供了一個帶有驅動模塊的臨時內存文件系統,同時initrd.img中還包含了安裝程序第一階段所需要的初始化程序/init、/sbin/loader。更新initrd就是要將新編譯出來的模塊文件添加到它內部/modules中,但是,我將更新后的操作系統/lib/modules/下的內容直接添加進去卻失敗了,內核啟動時同樣出現panic,而且這種方式也導致initrd.img文件尺寸暴增,后來我又將編譯后生成的initramfs文件中的modules添加進去,也失敗了,內核啟動時識別不了網絡設備,因為
13、initramfs中的modules不完整??磥?,只能通過dracut重新生成一份帶完整驅動模塊的initramfs文件,并從該文件中得到modules。#dracut -f -v -hostonly -k "/lib/modules/4.8.6/" /boot/initramfs-4.8.6.img 4.8.6上述命令利用dracut生成一份用于本地使用的initramfs文件,該文件包含了當前宿主機上已經被加載的模塊文件。如果想將生成的initramfs文件放到別的主機上使用,則去掉“- hostonly”即可,執行:#dracut -f -v -k "/li
14、b/modules/4.8.6/" /boot/initramfs-4.8.6.img 4.8.6這樣可以讓initramfs內的驅動模塊相對完整一些。但CentOS安裝鏡像需要在不同硬件環境下使用,因此需要將盡可能多的驅動模塊包含進去,dracut提供了一種配置機制讓我們可以定制模塊或驅動。在/etc/dracut.conf中可以看到如下內容:圖5 dracut.conf文件可以將需要添加和濾除的模塊驅動追加到上述“dracutmodules”、“omit_dracutmodules”、“add_dracutmodules”、“add_drivers”等變量中,關于這些變量的具體含
15、義在其上方都有注釋說明。不難看出,為了實現將盡可能完整的驅動模塊打包進initramfs文件這一目的,只需要將所有待定制的驅動模塊文件的文件名(包含路徑且不含后綴)添加到dracutmodules這個變量中,在進行具體操作前,還有兩件事情需要完成:第一,dracut.conf是老版本dracut所使用的配置文件,根據要求新版本的配置文件須放入到/etc/dracut.conf.d/目錄下,文件名可自定義,但后綴必須是conf,因此,事先將dracut.conf拷貝一份進dracut.conf.d并重命名為mydracut.conf。第二,由于待添加的驅動模塊文件數量眾多,一個個手動加到add_
16、driver中是件苦差。我采用的辦法是寫一個腳本,把這些文件路徑和文件名都提出來導出為一個環境變量,然后將環境變量加到mydracut.conf中,具體地,可以創建一個expmod.sh文件并添加如下內容:#!/bin/bashALL_DRVS=all_drvs_l="$(find /lib/modules/4.8.6/kernel/ -name '*.ko')" #找到所有后綴為ko的模塊文件for i in $all_drvs_l; do ALL_DRVS=$ALL_DRVS$i/.ko/ #dracut要求濾掉文件后綴名kodoneexport ALL
17、_DRVS接著,修改/etc/dracut.conf.d/mydracut.conf中第13行為:add_drivers+="$ALL_DRVS"之后開始生成一個initramfs,可暫時命名為tmpinitramfs.img。# chmod u+x expmod.sh# source expmod.sh# dracut -f -v -k "/lib/modules/4.8.6/" /tmp/tmpinitramfs.img這時,生成的tmpinitramfs.img包含的驅動模塊會非常完整,生成這個文件的目的當然是為了得到其中/lib/modules的
18、內容。下面開始正式升級光盤中的initrd.img文件。第1步,創建兩個臨時目錄# mkdir -pv /tmp/initrd.d /tmp/initrd.d.tmp將原來CentOS光盤鏡像中的initrd.img拷貝到/tmp/initrd.d中,將新生成的tmpinitramfs.img拷貝到/tmp/initrd.d.tmp中。第2步,將原有的initrd.img解壓解包# cd /tmp/initrd.d# mv initrd.img initrd.img.lzma# lzma -d initrd.img.lzma# cpio -ivmd< initrd.img第3步,提取新版
19、本(4.8.6)的modules,并將其中所有文件拷貝至第2步操作后的目錄結構中# cd /tmp/initrd.d.tmp# mv tmpinitramfs.img tmpinitramfs.img.gz# gunzip tmpinitramfs.img.gz# cpio -ivmd<tmpinitramfs.img# cp -r lib/modules/4.8.6 /tmp/initrd.d/modules第4步,生成新的initrd.img# cd /tmp/initrd.d# rm -f initrd.img# find . | cpio -o -H newc>initrd
20、.img至此,新的initrd.img生成了。更新光盤介質中軟件倉庫更新Packages目錄中的內核及相關工具,并生成新的yum倉庫。第1步,用過yum工具更新內核工具包module-init-tools,initscripts,grubby,sysvinit-tools,事先確保系統已經安裝了yum-utils # yum install yum-utils然后,下載上述工具及其依賴包# yum install y module-init-tools,initscripts,grubby,sysvinit-tools -downloadonly -downloaddir=./第2步,在/tmp內建立一個臨時目錄作為新軟件倉庫base目錄# cd /tmp && cd $(mktemp -d Packages.XXXXX)掛載原有光盤鏡像,將光盤鏡像中Packages目錄拷貝到/tmp/ Packages.XXXXX中。# mount t iso9660 /dev/sr0 /mnt#cp -r /mnt/Packages ./第3步,將第1步下載的RPM包連同kernel-4.8.6-1.x86_64.rpm一并替換到
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 信用卡公交優惠活動方案
- 修繕公司年會策劃方案
- 俱樂部套餐活動方案
- 俱樂部網球活動方案
- 值班團建活動方案
- 假日彩電促銷活動方案
- 假期引流活動方案
- 假期美術之星活動方案
- 做月餅宣傳活動方案
- 健康團隊競技活動方案
- 酒店項目規劃設計方案(模板)
- 2025年民營經濟發展的相關政策考試試題及答案
- 貴州國企招聘2025貴州省糧食儲備集團有限公司招聘76人筆試參考題庫附帶答案詳解析版
- 欠款購買材料合同協議書
- 網絡安全基礎知識試題及答案
- 第18課《文言文二則》(《鐵杵成針》)公開課一等獎創新教學設計及反思
- 2025年透明質酸鈉項目市場調查研究報告
- 2025-2030中國冷熱交換器行業市場現狀分析及競爭格局與投資發展研究報告
- 裝修公司合同保密協議書
- 購電使用協議書
- 戶外場地安全課件
評論
0/150
提交評論