由於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軟體包;除此之外,我們還需要增加一些系統不自帶的軟體包,如:MegaClinload,並且禁止了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

  1. # Kickstart file automatically generated by anaconda.
  2. install
  3. cdrom
  4. lang en_US.UTF-8
  5. 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
  6. keyboard us
  7. # Network information
  8. network --device=eth0 --bootproto=dhcp --onboot=on
  9. rootpw 123456.
  10. authconfig --enableshadow --enablemd5
  11. firewall --disabled
  12. selinux --disabled
  13. timezone Asia/Shanghai
  14. bootloader --location=mbr
  15. # The following is the partition information you requested
  16. # Note that any partitions you deleted are not expressed
  17. # here so unless you clear all partitions first, this is
  18. # not guaranteed to work
  19. clearpart --all --drives=sda
  20. # part /boot --fstype ext3 --size=200
  21. # part swap --size=8196
  22. # part / --fstype ext3 --size=50000
  23. # part /movies --fstype ext3 --size=100 --grow
  24. # Reboot after installation
  25. reboot
  26. %packages
  27. @base
  28. @chinese-support
  29. @core
  30. @development-libs
  31. @development-tools
  32. @dialup
  33. @editors
  34. @ftp-server
  35. @legacy-network-server
  36. @legacy-software-development
  37. @legacy-software-support
  38. @server-cfg
  39. @system-tools
  40. @text-internet
  41. keyutils
  42. trousers
  43. fipscheck
  44. device-mapper-multipath
  45. perl-Convert-ASN1
  46. imake
  47. lsscsi
  48. audit
  49. net-snmp-utils
  50. sysstat
  51. iptraf
  52. dstat
  53. expect
  54. MegaCli
  55. gfs-utils
  56. gfs2-utils
  57. OpenIPMI-tools
  58. %post --nochroot
  59. # 掛載光碟機
  60. mkdir -p /mnt/cdrom
  61. mount -r -t iso9660 /tmp/cdrom /mnt/cdrom
  62. # 拷貝Logic MegaRAID SAS 1078 raid卡驅動檔案到系統驅動目錄下
  63. cp /mnt/cdrom/Custom/megasr.ko /mnt/sysp_w_picpath/lib/modules/2.6.18-194.el5/updates/
  64. # 拷貝自定製的第三方軟體包
  65. cp /mnt/cdrom/Custom/nload-0.7.4.tar.gz /mnt/sysp_w_picpath/tmp/nload-0.7.4.tar.gz > /dev/null
  66. # 解壓自定製的第三方軟體包
  67. cd /mnt/sysp_w_picpath/tmp
  68. tar -zxvf nload-0.7.4.tar.gz > /dev/null
  69. # 解除安裝光碟機
  70. umount /mnt/cdrom
  71. %post
  72. # 使安裝後的系統支援Logic MegaRAID SAS 1078 raid上的磁碟
  73. echo "alias scsi_hostadapter megasr" >> /etc/modprobe.conf
  74. depmod -v 2.6.18-194.el5
  75. mv /boot/initrd-2.6.18-194.el5.img /boot/initrd-2.6.18-194.el5.img.bak
  76. mkinitrd --with=megasr /boot/initrd-2.6.18-194.el5.img 2.6.18-194.el5
  77. # 安裝自定製軟體
  78. cd /tmp/nload-0.7.4
  79. ./configure > /dev/null 2>&1
  80. make > /dev/null 2>&1
  81. make install > /dev/null 2>&1
  82. rm -rf /tmp/* > /dev/null 2>&1
  83. # 禁止ipv6協議
  84. echo "alias ipv6 off" >> /etc/modprobe.conf
  85. echo "alias net-pf-10 off" >> /etc/modprobe.conf
  86. # 停止一些不常用的系統服務
  87. 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
  88. do
  89. chkconfig --level 35 $service off
  90. done
  91. # 開啟一些常用的系統服務
  92. for service in ipmi crond
  93. do
  94. chkconfig --level 35 $service on
  95. done
  96. # 系統安裝完成,彈出光碟機
  97. eject

11、為了使用系統安裝按照ks.cfg檔案來執行安裝,編輯/root/iso/isolinux目錄下的isolinux.cfg檔案,如下:

[root@localhost iso]# cd /root/iso/isolinux/ 

[root@localhost isolinux]# vi isolinux.cfg   

  1. default kickstart  
  2. prompt 1  
  3. timeout 60  
  4. display boot.msg  
  5. F1 boot.msg  
  6. F2 options.msg  
  7. F3 general.msg  
  8. F4 param.msg  
  9. F5 rescue.msg  
  10. label linux  
  11.   kernel vmlinuz  
  12.   append initrdinitrd=initrd.img  
  13. label text  
  14.   kernel vmlinuz  
  15.   append initrdinitrd=initrd.img text  
  16. label ks  
  17.   kernel vmlinuz  
  18.   append ks initrdinitrd=initrd.img  
  19. label local  
  20.   localboot 1  
  21. label memtest86  
  22.   kernel memtest  
  23.   append -  
  24. label kickstart  
  25. kernel vmlinuz  
  26. 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系統盤已經定製完成了,下載下來刻盤就可以安裝了!~~~