




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、升級CentOS6.5安裝鏡像中的Linux內(nèi)核版本前言因?yàn)橹肮P者所在公司的一款虛擬化平臺產(chǎn)品在數(shù)據(jù)中心服務(wù)器上部署時(shí)出現(xiàn)不兼容現(xiàn)象,懷疑是安裝介質(zhì)中我們所定制的Linux內(nèi)核與新服務(wù)器硬件不兼容導(dǎo)致,于是就牽涉到升級安裝介質(zhì)中Linux內(nèi)核的工作。由于這款虛擬化平臺產(chǎn)品是在CentOS6.5的基礎(chǔ)上定制得到,所以本質(zhì)上相當(dāng)于直接更新CentOS6安裝介質(zhì)中Linux內(nèi)核。關(guān)于如何定制一張Linux發(fā)行版光盤,以及如何在一個(gè)完整現(xiàn)有的Linux系統(tǒng)上升級內(nèi)核,網(wǎng)上各種文章鋪天蓋地幾乎已成大路貨。然而直接升級發(fā)行版介質(zhì)中的內(nèi)核卻少有提及,為此我將整個(gè)工作過程記錄下來,所用方式方法不一定最優(yōu),但
2、意在拋磚引玉。在我進(jìn)行這項(xiàng)工作的時(shí)候,發(fā)現(xiàn)上的內(nèi)核最新版本已悄然變?yōu)?.8.6,這是一個(gè)stable版本,于是乎決定就用它了。安裝光盤目錄結(jié)構(gòu)分析CentOS6.5安裝介質(zhì)目錄結(jié)構(gòu)如下圖所示:圖1 CentOS發(fā)行版ISO目錄樹(1) EFI目錄主要用于64位的基于EFI的系統(tǒng)引導(dǎo)。其中的BOOT目錄下的BOOTX64.conf為grub的配置文件,用于顯示引導(dǎo)菜單。(2) images目錄:包含有各種引導(dǎo)鏡像。最重要的是引導(dǎo)第二階段安裝程序需要用到的鏡像文件install.img(CentOS7安裝盤中該文件名稱是squashfs.img),該鏡像文件內(nèi)部文件系統(tǒng)類型是s
3、quashfs,未經(jīng)壓縮,可以直接掛載(只讀),anaconda程序就在這個(gè)鏡像文件中。該目錄中還包含一個(gè)pxeboot目錄,主要用于制作PXE安裝方式引導(dǎo)介質(zhì)。(3) isolinux目錄:有開機(jī)引導(dǎo)系統(tǒng)安裝的內(nèi)核(vmlinuz)及臨時(shí)文件系統(tǒng)(initrd.img),在引導(dǎo)系統(tǒng)時(shí)會載入內(nèi)存。(4) Packages目錄:包含安裝所需的所有二進(jìn)制RPM包。(5) repodata目錄:一個(gè)位于光盤介質(zhì)上的yum源,內(nèi)部包含了軟件倉庫所有的配置文件。(6) TRANS.TBL文件:記錄當(dāng)前目錄的列表,用mkisofs的-T參數(shù)重新生成,主要是為了支持長文件名稱。(7) .discinfo文件
4、是安裝介質(zhì)的識別信息。.treeinfo文件記錄不同安裝方式安裝程序所在的目錄結(jié)構(gòu),如PXE方式時(shí),內(nèi)核kernel=images/pxeboot/vmlinuz,根文件系統(tǒng)initrd=images/pxeboot/initrd.img。CentOS安裝光盤是一張引導(dǎo)盤,啟動(dòng)時(shí),引導(dǎo)程序會分別將vmlinuz和initrd.img載入內(nèi)存,待內(nèi)核初始化完成后,會執(zhí)行initrd中的/sbin/init,/sbin/init加載/sbin/loader,最終加載運(yùn)行install.img中的anaconda安裝程序。anaconda會根據(jù)配置和用戶操作分別安裝Packages文件夾下的rpm包
5、,操作系統(tǒng)內(nèi)核也以rpm包的形式存在其中。因此,需要更新的文件主要是光盤中isolinux、image/pxeboot下的vmlinuz和initrd.img文件,Packages目錄下的內(nèi)核RPM包。編譯內(nèi)核及模塊第一步,從/上下載新版本的內(nèi)核源碼,linux內(nèi)核版本號中的第二位(即次版本號)為偶數(shù)的版本為穩(wěn)定版,為奇數(shù)的版本是處于開發(fā)中的非穩(wěn)定版,本文考慮到更新后的安裝程序需要用于生產(chǎn)環(huán)境,因此,選擇的版本號為4.8.6,即穩(wěn)定版。下載后直接用tar將源碼解壓到/usr/src/kernels路徑下。第二步,配置和編譯內(nèi)核。在配置和編譯內(nèi)核前,需先
6、準(zhǔn)備好相關(guān)工具環(huán)境,先執(zhí)行yum y install gcc ncurses-devel openssl createrepo,在源碼目錄下分別執(zhí)行下述命令即可生成內(nèi)核二進(jìn)制文件:# make menuconfig /啟動(dòng)一個(gè)圖形化內(nèi)核配置界面,該配置工具會將當(dāng)前系統(tǒng)內(nèi)核配置作為默認(rèn)配置,配置好后選擇<save>按鈕,會再內(nèi)核源碼目錄中生成一個(gè).config文件保存配置。# make bzImage /編譯內(nèi)核源碼,得到內(nèi)核壓縮文件vmlinuz# make modules /編譯內(nèi)核模塊# make modules_install /安裝內(nèi)核模塊# make install /安
7、裝內(nèi)核另外,還可能用到的make目標(biāo)有:# make clean /清除構(gòu)建過程中生成的中間文件和目標(biāo)文件,但保留內(nèi)核配置及構(gòu)建版本號# make mrproper /清除構(gòu)建過程中的中間文件和目標(biāo)文件,同時(shí),清除內(nèi)核配置及構(gòu)建版本號生成內(nèi)核RPM包執(zhí)行:# make rpm-pkg可以生成內(nèi)核RPM包,該命令生成的內(nèi)核RPM包可在現(xiàn)有完整系統(tǒng)上直接安裝,執(zhí)行:# rpm ivh kernel-4.8.6-1.el6.x86_64.rpm < -force > < -nodeps >但是,如果將新生成的內(nèi)核RPM包替換掉Packages目錄中原有的內(nèi)核RPM包,則系統(tǒng)在
8、安裝后啟動(dòng)時(shí)可能會拋出Kernel Panic,原因是內(nèi)核RPM包在執(zhí)行過程中需要依賴其它一些第三方工具來最終完成安裝流程, 這些依賴關(guān)系需要配置到RPM包中,使得在安裝內(nèi)核前,先安裝這些被依賴的工具包,否則就會導(dǎo)致安裝不完整。下圖是原有2.6版本內(nèi)核RPM包和新生成的4.8.6版本的RPM包依賴關(guān)系對比圖:圖2 2.6.32版本內(nèi)核包默認(rèn)依賴圖3 4.8.6版本內(nèi)核包默認(rèn)依賴從上述兩張圖中可以看出明顯的差別,完成內(nèi)核安裝需執(zhí)行module-init-tools、initscripts、grubby、dracut等幾個(gè)包中的腳本,因此這幾個(gè)包必須先于內(nèi)核安裝。為了實(shí)現(xiàn)這一目的,我所采用的辦法是
9、修改/usr/src/kernels/linux-4.8.6/scripts/package下的mkspec腳本,這是因?yàn)樵趍ake rpm-pkg時(shí),會調(diào)用到該腳本來生成內(nèi)核RPM的SPEC文件。最終在mkspec文件中增加如下內(nèi)容: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、用于系統(tǒng)全新安裝了,檢查新生成的內(nèi)核RPM可以看到如下景象:圖4 新生成的kernel-4.8.6 RPM依賴項(xiàng)圖4中的這些依賴項(xiàng)是我初步整理之后的一個(gè)結(jié)果,可能有個(gè)別依賴不是必要的,但由于編譯構(gòu)建內(nèi)核花費(fèi)時(shí)間較長,為了減少失敗次數(shù),保險(xiǎn)起見將其加到PreReq中了。具體依賴關(guān)系還有待進(jìn)一步深入分析。更新initrd.imgCentOS6.5安裝鏡像中的initrd.img文件是一個(gè)CPIO包,采用LZMA壓縮算法進(jìn)行了壓縮,可以直接用lzma和cpio進(jìn)行解壓解包后得到一個(gè)完整的目錄樹。這個(gè)文件本質(zhì)上是一個(gè)ramfs,它的地位和作用與系統(tǒng)中/boot/initramfs-<versio
12、n>.<EL>.<arch>.img文件是一致的,即:為安裝程序內(nèi)核提供了一個(gè)帶有驅(qū)動(dòng)模塊的臨時(shí)內(nèi)存文件系統(tǒng),同時(shí)initrd.img中還包含了安裝程序第一階段所需要的初始化程序/init、/sbin/loader。更新initrd就是要將新編譯出來的模塊文件添加到它內(nèi)部/modules中,但是,我將更新后的操作系統(tǒng)/lib/modules/下的內(nèi)容直接添加進(jìn)去卻失敗了,內(nèi)核啟動(dòng)時(shí)同樣出現(xiàn)panic,而且這種方式也導(dǎo)致initrd.img文件尺寸暴增,后來我又將編譯后生成的initramfs文件中的modules添加進(jìn)去,也失敗了,內(nèi)核啟動(dòng)時(shí)識別不了網(wǎng)絡(luò)設(shè)備,因?yàn)?/p>
13、initramfs中的modules不完整。看來,只能通過dracut重新生成一份帶完整驅(qū)動(dòng)模塊的initramfs文件,并從該文件中得到modules。#dracut -f -v -hostonly -k "/lib/modules/4.8.6/" /boot/initramfs-4.8.6.img 4.8.6上述命令利用dracut生成一份用于本地使用的initramfs文件,該文件包含了當(dāng)前宿主機(jī)上已經(jīng)被加載的模塊文件。如果想將生成的initramfs文件放到別的主機(jī)上使用,則去掉“- hostonly”即可,執(zhí)行:#dracut -f -v -k "/li
14、b/modules/4.8.6/" /boot/initramfs-4.8.6.img 4.8.6這樣可以讓initramfs內(nèi)的驅(qū)動(dòng)模塊相對完整一些。但CentOS安裝鏡像需要在不同硬件環(huán)境下使用,因此需要將盡可能多的驅(qū)動(dòng)模塊包含進(jìn)去,dracut提供了一種配置機(jī)制讓我們可以定制模塊或驅(qū)動(dòng)。在/etc/dracut.conf中可以看到如下內(nèi)容:圖5 dracut.conf文件可以將需要添加和濾除的模塊驅(qū)動(dòng)追加到上述“dracutmodules”、“omit_dracutmodules”、“add_dracutmodules”、“add_drivers”等變量中,關(guān)于這些變量的具體含
15、義在其上方都有注釋說明。不難看出,為了實(shí)現(xiàn)將盡可能完整的驅(qū)動(dòng)模塊打包進(jìn)initramfs文件這一目的,只需要將所有待定制的驅(qū)動(dòng)模塊文件的文件名(包含路徑且不含后綴)添加到dracutmodules這個(gè)變量中,在進(jìn)行具體操作前,還有兩件事情需要完成:第一,dracut.conf是老版本dracut所使用的配置文件,根據(jù)要求新版本的配置文件須放入到/etc/dracut.conf.d/目錄下,文件名可自定義,但后綴必須是conf,因此,事先將dracut.conf拷貝一份進(jìn)dracut.conf.d并重命名為mydracut.conf。第二,由于待添加的驅(qū)動(dòng)模塊文件數(shù)量眾多,一個(gè)個(gè)手動(dòng)加到add_
16、driver中是件苦差。我采用的辦法是寫一個(gè)腳本,把這些文件路徑和文件名都提出來導(dǎo)出為一個(gè)環(huán)境變量,然后將環(huán)境變量加到mydracut.conf中,具體地,可以創(chuàng)建一個(gè)expmod.sh文件并添加如下內(nèi)容:#!/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"之后開始生成一個(gè)initramfs,可暫時(shí)命名為tmpinitramfs.img。# chmod u+x expmod.sh# source expmod.sh# dracut -f -v -k "/lib/modules/4.8.6/" /tmp/tmpinitramfs.img這時(shí),生成的tmpinitramfs.img包含的驅(qū)動(dòng)模塊會非常完整,生成這個(gè)文件的目的當(dāng)然是為了得到其中/lib/modules的
18、內(nèi)容。下面開始正式升級光盤中的initrd.img文件。第1步,創(chuàng)建兩個(gè)臨時(shí)目錄# 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步操作后的目錄結(jié)構(gòu)中# 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生成了。更新光盤介質(zhì)中軟件倉庫更新Packages目錄中的內(nèi)核及相關(guān)工具,并生成新的yum倉庫。第1步,用過yum工具更新內(nèi)核工具包module-init-tools,initscripts,grubby,sysvinit-tools,事先確保系統(tǒng)已經(jīng)安裝了yum-utils # yum install yum-utils然后,下載上述工具及其依賴包# yum install y module-init-tools,initscripts,grubby,sysvinit-tools -downloadonly -downloaddir=./第2步,在/tmp內(nèi)建立一個(gè)臨時(shí)目錄作為新軟件倉庫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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓(xùn)部總結(jié)與規(guī)劃
- 城市交通規(guī)劃合同管理著作權(quán)咨詢重點(diǎn)基礎(chǔ)知識點(diǎn)
- 地震安全評估師重點(diǎn)基礎(chǔ)知識點(diǎn)
- 營銷產(chǎn)品培訓(xùn)大綱設(shè)計(jì)
- 河北釘釘協(xié)議書
- 公務(wù)用車車輛租賃合同
- 民間標(biāo)會協(xié)議書
- 超市部分承包合同協(xié)議
- 土地合作居間服務(wù)合同
- 產(chǎn)品質(zhì)量保障與賠償協(xié)議
- 2024秋期國家開放大學(xué)《可編程控制器應(yīng)用實(shí)訓(xùn)》一平臺在線形考(形成任務(wù)5)試題及答案
- 重慶市巴蜀學(xué)校高2025屆高二(下)期末考試+化學(xué)試卷(無答案)
- 廣東省廣州三校2023-2024學(xué)年高二下學(xué)期期末考試+政治試卷(含答案)
- 健康照護(hù)師技能大賽刷題(四)附有答案
- 卷材防水屋面施工
- 聚乳酸纖維的可持續(xù)生產(chǎn)和應(yīng)用
- 9+2×0.75m裝配式鋼筋混凝土簡支T型梁橋設(shè)計(jì)計(jì)算論文
- 擦窗機(jī)安裝工程質(zhì)量驗(yàn)收標(biāo)準(zhǔn)JGJ-T 150-2018
- 網(wǎng)課智慧樹知道《計(jì)算機(jī)科學(xué)導(dǎo)論(聊城大學(xué))》章節(jié)測試答案
- 2023年6月大學(xué)英語三級A級考試真題加詳細(xì)解析
- 無人機(jī)打藥協(xié)議書
評論
0/150
提交評論