由於以前的工做須要搭建紅帽實驗室環境,因爲機器數量比較多,全部須要批量自動化無人值守安裝系統,因此我嘗試使用RHEL5+PXE+DHCP+Apache+Kickstart安裝了RHCE5.1 i386實驗室環境,並取得了成功,不過過程比較漫長,因此我特意記錄下PXE+DHCP+Apache+Kickstart無人值守安裝的過程。另外,我在博客發表了相應的文章,不少熱心的讀者根據文章內容已成功批量安裝了紅帽RHEL系統或CentOS5.x,並提出了許多寶貴的意見,在這裏表示感謝。現階段,因爲須要大規模應用CentOS5.8 x86_64系統用於集羣環境,因此將此方法主要用於在公司內網批量安裝新服務器系統,這極大地簡化了用光盤重複安裝CentOS5.8 x86_64的過程,再加上分佈式自動化運維工具puppet進行批量部署,達到了自動化運維的目的,避免了重複性勞動,極大的提升了工做效率。
html
首先,咱們來介紹一下與之相關的原理和概念。node
1. 什麼是PXElinux
嚴格來講,PXE 並非一種安裝方式,而是一種引導方式。進行 PXE 安裝的必要條件是在要安裝的計算機中必須包含一個 PXE 支持的網卡(NIC),即網卡中必需要有 PXE Client。PXE (Pre-boot Execution Environment)協議可使計算機經過網絡啓動。此協議分爲 Client端和 Server 端,而PXE Client則在網卡的 ROM 中。當計算機引導時,BIOS 把 PXE Client 調入內存中執行,而後由 PXE Client 將放置在遠端的文件經過網絡下載到本地運行。運行 PXE 協議須要設置 DHCP 服務器和 TFTP 服務器。DHCP 服務器會給 PXE Client(將要安裝系統的主機)分配一個 IP 地址,因爲是給 PXE Client 分配 IP 地址,因此在配置 DHCP 服務器時須要增長相應的 PXE 設置。此外,在 PXE Client 的 ROM 中,已經存在了 TFTP Client,那麼它就能夠經過 TFTP 協議到 TFTP Server 上下載所需的文件了。windows
2. 什麼是Kickstartbash
Kickstart是一種無人值守的安裝方式。它的工做原理是在安裝過程當中記錄典型的須要人工干預填寫的各類參數,並生成一個名爲 ks.cfg的文件。若是在安裝過程當中(不僅侷限於生成Kickstart安裝文件的機器)出現要填寫參數的狀況,安裝程序首先會去查找 Kickstart生成的文件,若是找到合適的參數,就採用所找到的參數;若是沒有找到合適的參數,便須要安裝者手工干預了。因此,若是Kickstart文件涵蓋了安裝過程當中可能出現的全部須要填寫的參數,那麼安裝者徹底能夠只告訴安裝程序從何處取ks.cfg文件,而後就去忙本身的事情。等安裝完畢,安裝程序會根據ks.cfg中的設置重啓系統,並結束安裝。服務器
3. PXE + Kickstart的安裝條件和詳細步驟網絡
執行PXE+Kickstart安裝須要的設備爲:運維
DHCP 服務器。dom
TFTP 服務器。socket
Kickstart所生成的ks.cfg配置文件。
一臺存放系統安裝文件的服務器,如 NFS、HTTP 或 FTP 服務器。
一個帶有 PXE 支持網卡的主機。
系統環境介紹以下:
服務器系統爲CentOS5.6 x86_64,IP爲192.168.11.29(此服務器並不是必定要限定爲CentOS5.8 x86_64系統),因爲是最小化安裝的,咱們在後面要用到system-config-kickstart工具,它必須依賴於X windows,因此咱們要提早安裝好X windows及gnome並重啓系統,步驟以下所示:
先裝X windows和GNOME桌面環境,命令以下所示:
yum -y groupinstall 'X Window System' yum -y groupinstall 'GNOME Desktop Environment'
而後修改/etc/inittab文件並重啓服務器,使其運行在圖形模式下,主要修改文件內容以下所示:
id:5:initdefault:
重啓服務器命令以下:
reboot
完成上述的準備工做後,PXE+DHCP+Apache+Kickstart無人值守安裝CentOS5.8安裝的步驟以下:
(1)咱們先下載CentOS5.8 x86_64光盤至/usr/local/src下,並掛載至/mnt/cdrom目錄下,並確認系統已安裝好httpd服務,以下:
cd /usr/local/src wget http://mirror.neu.edu.cn/CentOS/5.8/isos/x86_64/CentOS-5.8-x86_64-bin-DVD-1of2.iso mkdir –p /mnt/cdrom
接下來咱們掛載光盤ISO文件至/mnt/cdrom目錄下,以下命令:
mount -o loop CentOS-5.8-x86_64-bin-DVD-1of2.iso /mnt/cdrom
CetnOS5.x x86_64系列已默認安裝Apache,咱們能夠用命令看下其版本號,以下所示:
rpm -q httpd
命令顯示結果以下所示:
httpd-2.2.3-65.el5.CentOS
(2)接下來咱們複製光盤下的全部內容(文件和文件夾)到/var/html/www(此目錄爲Apache默認DocumentRoot目錄)下,不管是紅帽系統仍是CentOS 5.x系統,若是是最小化安裝,基本上第一張DVD光盤文件就夠了,複製命令以下所示:
cp -rf /mnt/cdrom /var/html/www
(3)安裝 tftp-server,並啓用tftp服務,同時啓動xinetd進程,步驟以下所示。
1.咱們用命令安裝tftp-server,命令以下:
yum -y install tftp-server
2.接着修改/etc/xinetd.d/tftp文件,將disable的值由yes變爲no,內容以下所示:
service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 }
3.接着重啓xinetd進程,命令以下所示:
service xinetd restart
(4)配置支持PXE的啓動程序(注意:前面已經將CentOS5.8 x86_64第一張光盤的內容複製到/var/www/html目錄中了,因此須要的文件只須要從/var/www/html目錄中複製就好了)。
a) 創建tftpboot文件夾,以下所示,若該文件夾已經存在則不用創建。
mkdir -p /tftpboot
b) 複製pxelinux.0文件至tftpboot文件夾中,以下所示。
cp /usr/lib/syslinux/pxelinux.0 /tftpboot
c) 把DVD光盤上的/p_w_picpath/pxeboot/initrd.img和vmlinux複製到/tftpboot/中,以下所示。
cp /var/www/html/p_w_picpaths/pxeboot/vmlinuz /tftpboot
d) 複製DVD光盤上的isolinux/*.msg到/tftpboot目錄下,以下所示:
cp /var/www/html/isolinux/*.msg /tftpboot/
e) 在tftpboot中新建一個pxelinux.cfg目錄:
mkdir pxelinux.cfg
f) 將isolinux目錄中的isolinux.cfg複製到pxelinux.cfg目錄中,同時更改文件名稱爲default,命令以下所示:
cd pxelinux.cfg cp /var/www/html/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
g) 在上一個步驟,即第6點中,暫時不要修改default文件,進行到這一步時,雖然已經能夠經過網絡來引導並手動安裝Kickstart了,可是因爲這裏討論的是無人值守安裝,因此先不修改這個default文件。
(5)安裝dhcp服務,同時修改以下配置:
yum –y install dhcp
而後複製配置模板文件到指定的目錄中,並從新命名。
cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
接着修改/etc/dhcpd.conf配置文件,文件最後修改內容以下所示:
ddns-update-style interim; ignore client-updates; next-server 192.168.11.29; filename "/pxelinux.0"; subnet 192.168.11.0 netmask 255.255.255.0 { option routers 192.168.11.1; option subnet-mask 255.255.255.0; option nis-domain "cn7788.com"; option domain-name "cn7788.com"; option domain-name-servers 192.168.11.252; option time-offset -18000; # Eastern Standard Time range dynamic-bootp 192.168.11.34 192.168.11.159; default-lease-time 21600; max-lease-time 43200; }
最後啓動dhcp服務:
service dhcpd start
注:若是機器數量過多的話,注意dhcp服務器的地址池,不要由於耗盡IP而致使dhcpd服務器沒有IP地址release狀況。
(6)用yum工具自動安裝Kickstart,同時配置system-config-kickstart。
a) 首先咱們須要安裝Kickstart這個工具包,在CentOS最小化安裝系統時,此軟件包並無默認安裝,yum安裝命令以下所示:
yum –y install system-config-kickstart
b) 在gnome環境下配置Kickstart,命令以下所示:
system-config-kickstart
運行上面的命令後能夠對系統的一些基本配置進行設置,例如選擇時區、設置root的密碼等。
c) 接下來便要進行安裝了,建議選擇httpd安裝,切記不要輸入任何帳號,而是採用匿名安裝。
在安裝過程當中,根據引導選擇安裝選項,不須要作更改。
d) Kickstart會讓咱們選擇須要批量安裝的CentOS5.8分區信息,按照上一節所介紹的CentOS5.5 x86_64的安裝方法,咱們建立四個分區,即/、/boot、/data和swap分區。
e) 在進行網絡配置時,我使用的靜態分配地址(動態一樣如此),這裏跟前面進行光盤安裝是同樣的。
f) 設置顯示配置時能夠按照咱們的習慣選擇。
g) 關於軟件包的選擇,你們能夠根據實際的工做需求來選擇本身須要的軟件包,因爲服務器安裝後用途都是不同的,建議你們這裏選擇最小化安裝。
h) 其餘都選擇默認設置,不須要修改。
i) 最後將生成的文件ks.cfg保存到/var/www/html下,此爲自動化無人值守安裝的重難點,此文件稍有配置不當的話就會須要人爲干預了,若是你們遇到問題,建議參考我下面的ks.cfg配置文件。
(7)修改/tftpboot/pxelinux.cfg/default文件,指定讀取ks.cfg的方法,即修改文件第一行內容,改動後文件第一行內容以下所示:
default text ks=http://192.168.11.29/ks.cfg
另外,也建議將timeout時間由原先的600改成1,timeout時間是引導時等待用戶手動選擇的時間,設爲「1」可直接引導。
(8)/var/www/html/ks.cfg文件內容以下所示(此內容是整個實驗過程的重難點,請關注):
#platform=x86, AMD64, or Intel EM64T #System authorization information auth --useshadow --enablemd5 # System bootloader configuration key --skip bootloader --location=mbr # Partition clearing information clearpart --none # Use graphical install graphical # Firewall configuration firewall --disabled # Run the Setup Agent on first boot firstboot --disable #System keyboard keyboard us #System language lang en_US # Installation logging level logging --level=info # Use network installation url --url=http://192.168.11.29/ # Network information network --bootproto=dhcp --device=eth0 --onboot=on reboot #Root password rootpw --iscrypted $1$biw2UUzu$/ZrtUhG9gGGGJn6edgUIQ1 # SELinux configuration selinux --disabled # System timezone timezone --isUtc Asia/Shanghai # Install OS instead of upgrade install # X Window System configuration information xconfig --defaultdesktop=GNOME --depth=8 --resolution=640x480 # Disk partitioning information bootloader --location=mbr --driveorder=sda clearpart --all --initlabel part / --bytes-per-inode=4096 --fstype="ext3" --size=5120 part /boot --bytes-per-inode=4096 --fstype="ext3" --size=128 part swap --bytes-per-inode=4096 --fstype="swap" --size=500 part /data --bytes-per-inode=4096 --fstype="ext3" --grow --size=1 %packages @base @development-libs @development-tools
此配置過程當中的重難點我這裏說明下:
分區操做按照目前線上分區來操做,即分紅/、/boot、/data及swap四個分區,其中/data分區是存放數據的,咱們這裏用--grow --size=1參數來將其他的剩餘空間所有分配給/data分區。
key --skip若是是紅帽系統,此選項能夠跳過輸入序列號過程;若是是CentOS 5.x系列,則能夠不保留此項內容;
reboot 此選項必須存在,也必須文中設定位置,否則kickstart顯示一條消息,並等待用戶按任意鍵後才從新引導,此問題是不少朋友在論壇上發言提問的,我在實驗過程當中也遇到此問題,建議多作幾回實驗;
clearpart --all --initlabel此條命令必須添加,否則系統會讓用戶手動選擇是否清除全部數據,這就須要人爲干預了,從而致使自動化過程失敗;
其它方面選項較容易看懂,我這裏就再也不重複了。
(9)將Kickstart須要的服務器均啓動後,此自動化安裝系統的過程就完成了,咱們就能夠在內網機櫃中全自動同時安裝CentOS5.8 x86_64系統了,服務器端啓動相應命令以下:
service httpd start chkconfig httpd on service dhcpd start chkconfig dhcpd on service xinetd restart
引伸:相信你們的開發環境應該有很多Xen虛擬機,雖然Xen有自身的模板文件操做,但咱們也能夠利用Kickstart的方式快速無人值守安裝Xen虛擬機系統,命令以下所示:
virt-install -n vm4 -r 300 -f /data/vm/vm4.img -s 8 -p -l http://192.168.11.29 -x ks=http://192.168.11.29/ks.cfg
因爲Xen結合Kickstart並非本文檔的重點內容,有興趣的朋友能夠能夠自行研究;另外有一點請你們必定要注意:
因爲此安裝方法太智能化,在網絡引導成功之後會自動清除硬盤數據並從新安裝新的系統,因此建議你們將此工做區域和網段獨立出來,或者在進行完安裝工做之後就停用Kickstart服務器,以避免對正常工做的服務器形成沒必要要的麻煩。因爲我的能力有限,鑑於工做環境的嚴謹性,歡迎你們我上述文檔中一切錯誤和不合理之處,歡迎來信與我交流,我的郵箱yuhongchun027@163.com。