由於CentOS 5.5作業系統自身沒有整合Logic MegaRAID SAS 1078驅動,所以在標配有此類raid卡的伺服器需要安裝CentOS 5.5時,需要我們用軟碟機或者U盤的方式來載入raid驅動,進而完成系統的安裝。針對此種情況,本人突發奇想,想自定製一套滿足此類raid卡的CentOS 5.5系統盤,此係統盤除了只需手動分割槽外(由於分割槽會因業務的不同會有所變化,故此處不定製),其餘所有要實現自動安裝之目的,而且需增加一些第三方的軟體包與做一些系統安全方面的設定,從而達到真正自動運維之目的,為了這個夢想,本人找遍谷歌與百度,網上都能難找到一篇完全的教程與文件來實現我的這個想法。緊接著…下面就有了我自己艱難的定製之路。
在定製之前,本人開始直接想嘗試修改光碟根目錄下的isolinux目錄下的引導檔案isolinux.cfg,直接在引導選項加入Logic MegaRAID SAS 1078卡的驅動檔案megasr.img,即操作方式:dd=cdrom:/megasr.img檔案,可是事與願違,啟動安裝過程中,提示讓我們再次選擇裝置驅動器來載入第三方驅動,故只有另闢蹊徑,重謀對策。考慮到系統安裝識別驅動是靠initrd.img這個映象來實現的,需initrd.img這個檔案解開,把Logic MegaRAID SAS 1078 raid卡驅動檔案中的.ko檔案匯入到initrd.img檔案,進行再次打包,以實現系統的順利安裝;同時為了實現安裝好的系統順利啟動,我們再次需要編輯ks.cfg這個kickstart檔案,將Logic MegaRAID SAS 1078 raid卡驅動檔案中的.ko檔案匯入到/lib/modules/`uname -r`/updates/目錄下,mkinitrd重新制作initrd檔案來實現安裝後系統的引導,具體步驟如下:
1、掛載光碟機
[root@localhost ~]# mount /dev/cdrom /mnt
2、建立臨時目錄
[root@localhost ~]# mkdir -p /root/iso/CentOS
3、提取安裝好系統需要RPM包
正常安裝好作業系統在/root目錄下會有install.log檔案,這個就是作業系統安裝RPM包的記錄,我們從這些記錄中,將所需的RPM包從/mnt/CentOS中複製到/root/iso/CentOS裡面去,這裡我們編寫指令碼package.sh。
[root@localhost ~]# vi package.sh
#!/bin/bash
cd /root
awk `/Installing/{print $2}` install.log | sed `s/^[0-9]*://g` >package.txt
DVD=`/mnt/CentOS`
PACKDIR=`/root/package.txt`
NEW_DVD=`/root/iso/CentOS/`
while read LINE
do
cp ${DVD}/${LINE}*.rpm /${NEW_DVD} || echo "$LINE don`t cp......."
done < package.txt
rm -f package.txt
執行package.sh指令碼,會篩選出我們需要的一些rpm包,rpm包放置在我們定製系統盤的/root/iso目錄下的CentOS目錄中。
[root@localhost ~]# sh package.sh
4、把原映象除了CentOS目錄外的檔案全部複製至/root/iso目錄下
[root@localhost ~]# rsync -av --exclude=CentOS /mnt/ /root/iso
5、解開initrd.img檔案(file /root/iso/isolinux/initrd.img檢視是gzip檔案)
[root@localhost ~]# mkdir /tmp/initrd
[root@localhost ~]# cd /tmp/initrd
[root@localhost initrd]# gzip -dc /root/iso/isolinux/initrd.img | cpio -ivd
[root@localhost initrd]# cd modules
[root@localhost modules]# gzip -dc modules.cgz | cpio -ivd
modules子目錄中的modules.cgz是經過gzip壓縮過的cpio包,將其解開。
6、解壓Logic MegaRAID SAS 1078 raid卡驅動檔案megasr.img檔案(這裡以附件的形式上傳到博文後面,請自行解壓,匯入)
[root@localhost modules]# mkdir /tmp/megasr
[root@localhost modules]# mount -o loop /root/megasr.img /media
[root@localhost modules]# cp /media/* /tmp/megasr
[root@localhost modules]# cd /tmp/megasr/
[root@localhost megasr]# gzip -dc modules.cgz | cpio -ivd
[root@localhost megasr]# cp 2.6.18-194.el5/megasr.ko /tmp/initrd/modules/2.6.18-194.el5/x86_64/
[root@localhost megasr]# cat modules.alias >> /tmp/initrd/modules/modules.alias
mkdir /tmp/megasr
7、生成新的initrd.img檔案
就像我們以前所做的,修改了原始碼包中的內容就勢必再次打包恢復,這裡我們需要把修改過的內容打包成一個initrd.img檔案,不過這裡要注意打包時的壓縮格式,modules.cgz檔案用的是crc格式,而initrd.img檔案用的是newc格式,命令引數不要弄錯。
[root@localhost megasr]# cd /tmp/initrd/modules
[root@localhost modules]# find 2.6.18-53.el5 | cpio -o -H crc | gzip -9 > modules.cgz
[root@localhost modules]# rm -rf 2.6.18-53.el5
[root@localhost modules]# cd ..
[root@localhost initrd]# find . | cpio -o -H newc | gzip -9 > /tmp/initrd.img
8、將打包好的initrd.img檔案複製到 /root/iso/isolinux 目錄
[root@localhost initrd]# cp /tmp/initrd.img /root/iso/isolinux
9、上述第3步操作中,在/root/iso/CentOS目錄下的軟體包僅是我們定製的一些系統自帶的rpm軟體包;除此之外,我們還需要增加一些系統不自帶的軟體包,如:MegaCli與nload,並且禁止了ipv6協議。(其中MegaCli-2.00.15-1.i386.rpm與nload-0.7.4.tar.gz軟體包詳見博文後面的nload與MegaCli工具附件,請自行解壓開來,上傳到伺服器上)
[root@localhost initrd]# cd
[root@localhost ~]# mkdir /root/iso/Custom
[root@localhost ~]# cp MegaCli-2.00.15-1.i386.rpm /root/iso/CentOS
[root@localhost ~]# cp /tmp/megasr/2.6.18-194.el5/megasr.ko /root/iso/Custom
[root@localhost ~]# cp nload-0.7.4.tar.gz /root/iso/Custom
10、安裝上述定製的軟體包,我們需要配置ks.cfg檔案,具體ks.cfg的配置檔案如下:
[root@localhost ~]# cd /root/iso
[root@localhost iso]# vi ks.cfg
- # Kickstart file automatically generated by anaconda.
- install
- cdrom
- lang en_US.UTF-8
- langsupport --default=en_AU.UTF-8 en_US.UTF-8 zh_CN.UTF-8 zh_HK.UTF-8 zh_CN.UTF-8 zh_SG.UTF-8 zh_TW.UTF-8 en_AU.UTF-8
- keyboard us
- # Network information
- network --device=eth0 --bootproto=dhcp --onboot=on
- rootpw 123456.
- authconfig --enableshadow --enablemd5
- firewall --disabled
- selinux --disabled
- timezone Asia/Shanghai
- bootloader --location=mbr
- # The following is the partition information you requested
- # Note that any partitions you deleted are not expressed
- # here so unless you clear all partitions first, this is
- # not guaranteed to work
- clearpart --all --drives=sda
- # part /boot --fstype ext3 --size=200
- # part swap --size=8196
- # part / --fstype ext3 --size=50000
- # part /movies --fstype ext3 --size=100 --grow
- # Reboot after installation
- reboot
- %packages
- @base
- @chinese-support
- @core
- @development-libs
- @development-tools
- @dialup
- @editors
- @ftp-server
- @legacy-network-server
- @legacy-software-development
- @legacy-software-support
- @server-cfg
- @system-tools
- @text-internet
- keyutils
- trousers
- fipscheck
- device-mapper-multipath
- perl-Convert-ASN1
- imake
- lsscsi
- audit
- net-snmp-utils
- sysstat
- iptraf
- dstat
- expect
- MegaCli
- gfs-utils
- gfs2-utils
- OpenIPMI-tools
- %post --nochroot
- # 掛載光碟機
- mkdir -p /mnt/cdrom
- mount -r -t iso9660 /tmp/cdrom /mnt/cdrom
- # 拷貝Logic MegaRAID SAS 1078 raid卡驅動檔案到系統驅動目錄下
- cp /mnt/cdrom/Custom/megasr.ko /mnt/sysp_w_picpath/lib/modules/2.6.18-194.el5/updates/
- # 拷貝自定製的第三方軟體包
- cp /mnt/cdrom/Custom/nload-0.7.4.tar.gz /mnt/sysp_w_picpath/tmp/nload-0.7.4.tar.gz > /dev/null
- # 解壓自定製的第三方軟體包
- cd /mnt/sysp_w_picpath/tmp
- tar -zxvf nload-0.7.4.tar.gz > /dev/null
- # 解除安裝光碟機
- umount /mnt/cdrom
- %post
- # 使安裝後的系統支援Logic MegaRAID SAS 1078 raid上的磁碟
- echo "alias scsi_hostadapter megasr" >> /etc/modprobe.conf
- depmod -v 2.6.18-194.el5
- mv /boot/initrd-2.6.18-194.el5.img /boot/initrd-2.6.18-194.el5.img.bak
- mkinitrd --with=megasr /boot/initrd-2.6.18-194.el5.img 2.6.18-194.el5
- # 安裝自定製軟體
- cd /tmp/nload-0.7.4
- ./configure > /dev/null 2>&1
- make > /dev/null 2>&1
- make install > /dev/null 2>&1
- rm -rf /tmp/* > /dev/null 2>&1
- # 禁止ipv6協議
- echo "alias ipv6 off" >> /etc/modprobe.conf
- echo "alias net-pf-10 off" >> /etc/modprobe.conf
- # 停止一些不常用的系統服務
- for service in NetworkManager NetworkManagerDispatcher acpid anacron apmd atd auditd autofs bluetooth conman cpuspeed cups dc_client dc_server dhcdbd dund firstboot gpm haldaemon hidd ip6tables irda irqbalance lm_sensors lvm2-monitor mcstrans mdmonitor mdmpd messagebus microcode_ctl netconsole netfs netplugd nfslock nscd ntpd pand pcscd portmap psacct rdisc readahead_early readahead_later restorecond rhnsd rpcgssd rpcidmapd rpcsvcgssd saslauthd smartd snmptrapd wpa_supplicant ypbind
- do
- chkconfig --level 35 $service off
- done
- # 開啟一些常用的系統服務
- for service in ipmi crond
- do
- chkconfig --level 35 $service on
- done
- # 系統安裝完成,彈出光碟機
- eject
11、為了使用系統安裝按照ks.cfg檔案來執行安裝,編輯/root/iso/isolinux目錄下的isolinux.cfg檔案,如下:
[root@localhost iso]# cd /root/iso/isolinux/
[root@localhost isolinux]# vi isolinux.cfg
- default kickstart
- prompt 1
- timeout 60
- display boot.msg
- F1 boot.msg
- F2 options.msg
- F3 general.msg
- F4 param.msg
- F5 rescue.msg
- label linux
- kernel vmlinuz
- append initrdinitrd=initrd.img
- label text
- kernel vmlinuz
- append initrdinitrd=initrd.img text
- label ks
- kernel vmlinuz
- append ks initrdinitrd=initrd.img
- label local
- localboot 1
- label memtest86
- kernel memtest
- append -
- label kickstart
- kernel vmlinuz
- append text initrdinitrd=initrd.img ks=cdrom:/ks.cfg ramdisk_size=16384 ksdevice=eth0 console=tty0
12、生成comps.xml檔案
[root@localhost isolinux]# cd ..
[root@localhost iso]# createrepo -g repodata/*comps.xml /root/iso/
13、製作自定製CentOS 5.5系統映象
[root@localhost iso]# mkisofs -o /root/CentOS-5.5-x86_64-bin-DVD.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T /root/iso/
好了,這樣在root根目錄下就生成了我們製作的系統映象CentOS-5.5-x86_64-bin-DVD.iso,到此為止,這樣一個整合Logic MegaRAID SAS 1078 raid卡的CentOS 5.5系統盤已經定製完成了,下載下來刻盤就可以安裝了!~~~