定制CentOS 5.1(Redhat AS 5.1)安裝盤
CentOS(Redhat)提供了一套完整的自動化安裝機制,利用該機制,我們可以自己定制無人值守的自動安裝CD光牒,也可以進行系統裁減,甚至可以以CentOS為基礎制作自己軟體系統的系統安裝盤。
以下全部内容以CentOS 5.1版本為準
自定制安裝盤主要有以下幾個步驟
1、選取必要服務,去除不必要的RPM包
2、定制自動安裝過程
3、定制安裝界面(可選)
4、生成新安裝盤
1 建立源盤
首先我們需要從CentOS 5.1的完整dvd版本建立源盤,假設我們已經有一個完整的CentOS5.1的dvd放在光驅中,源盤的位置為/disk,則執行以下操作
1. mount dvd
#mkdir /cdrom
#mount –o loop /dev/cdrom /cdrom
2.複制CD光牒内容
#mkdir /disk
#cp –R /cdrom/. /disk
3.清除非必須的RPM
注意,此時/disk目錄下實際上是一個DVD的備份景象,我們需要根據第5節的内容選取自定義安裝盤所需的RPM包,然後在/disk/CentOS目錄裡删除所有不必要的RPM,以減小安裝盤容量。
上述步驟完成後,我們已經有了一個與原版DVD基本相同,但是完全去除了無用RPM包的源盤,後續的定制工作将在該路徑中進行。
典型的CentOS安裝盤中,與CD光牒定制有關的主要有以下幾個目錄和檔案:
/CentOS
/isolinux
/repodata
.discinfo
ks.cfg(此時尚未建立)
CentOS目錄存放所有在安裝過程中需要使用的RPM包
isolinux目錄存放CD光牒啟動時的安裝界面資訊
repodata目錄是與RPM包安裝相關的依賴資訊
.discinfo是CentOS的識别資訊,直接從CentOS DVD版本中擷取,如果該檔案丢失,會導緻安裝過程中,系統提示找不到CentOSCD光牒
ks.cfg是自動安裝過程的主要配置檔案
CentOS的自動安裝過程如下:
1、CD光牒自動引導,調用isolinux中的資訊生成啟動界面
2、根據使用者輸入,選擇ks.cfg作為安裝控制檔案
3、進入自動安裝過程,根據ks.cfg安裝RPM包、配置網絡、進行硬碟分區等等
4、系統安裝完成後,根據ks.cfg進行使用者自定義的安裝過程
5、安裝完成,系統重起
2 自定義啟動界面
在isolinux裡面有三個檔案和自定義安裝界面有關
boot.msg是定義啟動界面如何顯示
isolinux.cfg決定如何處理使用者的輸入,并執行對應的安裝過程
splash.lss是啟動界面的背景圖檔
2.1 boot.msg
boot.msg内容大緻如下:
^L
^Xsplash.lss
- XXXX auto-instiall, press the ^O0f<ENTER>^O07 key to begin.
文檔中的^X用ctrl+X輸入
^Xsplash.lss表示使用splash.lss作為啟動界面的背景圖檔
後面就是啟動時界面下的提示資訊^O0f和^O07之間的内容作為高亮顯示
2.2 isolinux.cfg
isolinux.cfg設定進入啟動頁面後,系統如何處理使用者輸入。
主要内容如下:
default auto
預設執行auto段的安裝程序
prompt 1
timeout 6000
設定使用者輸入的逾時時間,機關:秒。逾時未輸入則執行預設的安裝程序
display boot.msg
将boot.msg作為顯示的啟動界面
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
F7 snake.msg
label auto
kernel vmlinuz
append ks=cdrom:/ks.cfg initrd=initrd.img ramdisk_size=8192 acpi=off noapic skipddc
标記auto段,使用光驅根目錄下的ks.cfg檔案作為kickstart的配置檔案
label manual
append ks=cdrom:/ks_manual.cfg initrd=initrd.img ramdisk_size=8192 acpi=off noapic skipddc
标記manual段,使用光驅根目錄下的ks_manual.cfg檔案作為kickstart的配置檔案。如果使用者在啟動界面輸入manual,則執行該段
2.3 splash.lss
splash.lss是啟動界面的背景圖檔,該圖形檔案比較特殊,隻能使用14色(标準16色除去黑白兩色)的原始圖檔來生成。
首先建立一個16色(包含黑白兩色)的gif文檔,名為splash.gif
将該檔案轉換為lss格式
#giftopnm < splash.gif | ppmtolss16 > splash.lss
3 自定義安裝過程
CentOS的安裝主要是由anaconda來實作的,它通過kickstart配置檔案來控制整個安裝程序,以到達無人值守安裝的效果。
kickstart檔案具體配置可以參看:
<a href="http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/en-US/RHEL510/Installation_Guide/ch-kickstart2.html">http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/en-US/RHEL510/Installation_Guide/ch-kickstart2.html</a>
進行配置前,需要建立目标ks檔案
#cd /disk
#vi ks.cfg
ks檔案主要分為三個部分
1、系統安裝及配置
2、自定義安裝準備(%post --nochroot)
3、使用者自定義安裝(%post)
3.1 系統安裝及配置
kickstart檔案首先進行系統的設定,比如機器語言、時區、鍵盤等參數的設定,然後檢查安裝所需RPM是否都完整,然後根據分區資訊進行格式化。
這部配置設定置資訊寫在ks檔案的最前面,以“%post --nochroot”為結束,典型的配置資訊如下:
#System language
#系統語言 簡體中文
lang zh_CN
#Language modules to install
#要安裝的語言子產品以及預設語言
langsupport zh_CN --default=zh_CN
#System keyboard
#系統鍵盤類型
keyboard us
#System mouse
mouse
#Sytem timezone
#系統時區
timezone Asia/Shanghai
#Root password
#管理者密碼,值為已加密字元串
rootpw --iscrypted $1$MGv8U4W0$BS7JLb3MZT70Z30mutWwO1
#Reboot after installation
#安裝完成後是否自動重起
reboot
#Use text mode install
#使用文本安裝界面
text
#Install OS instead of upgrade
install
#Use CDROM installation media
#使用CD光牒作為安裝媒體
cdrom
#System bootloader configuration
bootloader --location=mbr
#Clear the Master Boot Record
zerombr yes
#Partition clearing information
#清除原有分區資訊
clearpart --all --initlabel
#Disk partitioning information
#建立一個200-500M的引導區,一個300-500M的交換區,剩餘磁盤空間劃分給根路徑/
part /boot --fstype ext3 --size 200 --grow --maxsize 500
part swap --size 300 --grow --maxsize 500
part / --fstype ext3 --size 1 --grow
#System authorization information
#設定系統驗證方式
auth --useshadow --enablemd5
#Network information
#使用dhcp擷取ip
network --bootproto=dhcp --device=eth0
#Firewall configuration
#關閉防火牆
firewall --disabled
selinux --disabled
#Do not configure XWindows
#不設定xwindows
skipx
#Package install information
%packages –resolvedeps
#以下全部是系統需要安裝的rpm包,我們假設此時已經知道所有需要的包,并且全部放在/CentOS路徑下
kernel
#autoconf
#e2fsprogs
#fonts-chinese
#...
請注意必須保證要安裝的RPM包以及被依賴的RPM都存放在/CentOS目錄下,在ks配置檔案裡隻需要寫要安裝的RPM包名即可,anaconda會解析依賴關系并自動安裝關聯的包,如果沒有需要的包,則會報錯并終止安裝。
3.2 自定義安裝準備
自定義安裝準備部分以“%post --nochroot”作為開始,以“%post”作為結束。該部分腳本使用bash文法,通常在這一段腳本中将使用者自己的安裝包從安裝CD光牒複制到已經安裝好的系統上。
這一階段的腳本編寫需要注意兩個問題
1、此時要通路磁盤路徑,則要在目标路徑前增加“/mnt/sysimage”,例如要将某個檔案複制硬碟的/var/log,則腳本應為#cp somefile /mnt/sysimage/var/log。
2、如果要從CD光牒複制檔案到硬碟,需要先将光驅mount到系統,但是根據主機闆不同,此時的CD光牒裝置名不一定是/dev/cdrom,是以可能需要根據自己的情況建立一個link,以便進行mount,如:
#mkdir /mnt/cdrom/
光驅為usb外接光驅,建立連結
#ln -s /dev/scd0 /dev/cdrom
mount裝置為隻讀
#mount /dev/cdrom /mnt/cdrom/ -o ro
3.3 自定義安裝
自定義安裝部分以“%post”作為開始,在前一部分将自定義安裝包複制到硬碟之後,就可以在這裡使用bash腳本進行軟體的安裝控制了。唯一需要注意的是,此時通路磁盤路徑已經不需要添加“/mnt/sysimage”,直接通路即可,如
#cp somefile /var/log
此外,因為此時還沒有設定使用者的環境路徑,是以調用系統指令時最好盡量帶上完整地路徑名,如:
/usr/sbin/groupadd xxxx
/usr/sbin/adduser xxxx -g xxxx
4 生成安裝盤
現在我們已經完成了自定義安裝CD光牒的全部調整,就可以制作CD光牒鏡像了。生成安裝盤ISO鏡像,需要先在系統安裝好createrepo和mkisofs兩個軟體包。
首先,必須同步CD光牒中RPM包的查詢資訊,否則安裝過程中會提示找不到RPM包
# createrepo -g /disk/repodata/comps.xml /disk/
comps.xml是CentOS自帶的RPM所屬功能組以及依賴關系的資訊,createrepo需要根據該檔案來同步資訊,最好不要手動修改該檔案。
同步成功之後,就可以進行iso的建立了,我們假定CD光牒标簽為sample,輸出iso檔案名為/sample.iso
#mkisofs -o /sample.iso -A ‘sample’ -V ‘sample’ -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -allow-leading-dots -allow-multidot -udf -R -r -T -boot-info-table -J /disk/
該指令執行成功之後就會在生成sample.iso的鏡像,刻錄到CD光牒上就可以作為自制CentOS安裝盤使用了。
5 裁減RPM包
CentOS 5.1完整版本容量接近4G,其中大部分功能包都不是必要的,完整安裝不僅耗費磁盤空間,增加安裝時間,還會因為運作無用服務影響系統性能,是以必須要對RPM包裁減。
RPM裁減,即是選出需要的包,去掉其他無用包。但是Linux下安裝RPM時,常常還需要依賴其他包,否則安裝會失敗,而被依賴的RPM包也常常需要依賴其他包,經常導緻多層依賴,手動檢查起來非常麻煩。還好CentOS提供了RPM包安裝工具yum,我們可以通過這個工具自動擷取所有的關聯包。
5.1準備工作:
1、 安裝yum
2、 準備CentOS 5.1完整版的DVD
yum查找RPM依賴包,首先需要提供全部可用RPM,yum會自動檢查RPM包并檢查關聯資訊,以确定所依賴的RPM包,是以首先我們要準備好全部RPM。
5.2加載CD光牒的RPM
#cd /mnt
#mkdir cdrom
#mount –o loop /dev/cdrom cdrom
加載完成後,/mnt/cdrom/CentOS就是RPM包的存放位置
5.3設定yum的RPM搜尋資訊
#cd /etc/yum.repos.d/
# ls
CentOS-Base.repo CentOS-Media.repo
該目錄有兩個檔案,第一個檔案是從網絡讀取RPM資訊的配置檔案,第二個是從本地媒體讀取RPM資訊的配置檔案,因為yum優先從網絡讀取資訊,是以我們必須修改第一個檔案的名字,強制yum從本地媒體搜尋檔案。
#mv CentOS-Base.repo CentOS-Base.repo.bak
然後修改CentOS-Media.repo,把搜尋位置指向/mnt/cdrom/,那麼yum會自動在/mnt/cdrom/repodata的repomd.xml去尋找資訊
#vi CentOS-Media.repo
修改内容如下:
baseurl=file:///mnt/cdrom/
gpgcheck=1
enabled=1
#rpm --import /mnt/cdrom/RPM-GPG-KEY-beta
5.4 擷取依賴包資訊
按照上面步驟配置完成之後,就可以自動擷取依賴包了。以下以擷取selinux-policy相關依賴包為例
進入RPM存放目錄
#cd /mnt/cdrom/CentOS
使用指令嘗試安裝目标RPM包
#yum install selinux-policy
則yum輸出類似如下資訊:
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
Installing:
selinux-policy noarch 2.4.6-104.el5 c5-media 365 k
Installing for dependencies:
libsemanage i386 1.9.1-3.el5 c5-media 135 k
Transaction Summary
Install 2 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 500 k
Is this ok [y/N]:
顯然,根據檢索結果libsemanage是安裝selinux-policy所依賴的RPM包。此時可以選擇N則傳回指令行,選擇y則會自動安裝selinux-policy及其所有依賴包。
我們可以通過這種方式擷取,我們所需RPM包的全部依賴包,然後将其他無關包全部裁減掉。