使用PXE+Apache+Kickstart無人值守安裝CentOS5.8
原創(chuàng)【51CTO專稿】因為之前的工作需要搭建紅帽實驗室環(huán)境,由于機器數(shù)量比較多,所以需要批量自動化無人值守安裝系統(tǒng),所以我嘗試使用RHEL5+PXE+DHCP+Apache+Kickstart安裝了RHCE5.1 i386實驗室環(huán)境,并取得了成功,不過過程比較漫長,所以我特地記錄下PXE+DHCP+Apache+Kickstart無人值守安裝的過程。另外,我在博客發(fā)表了相應(yīng)的文章,很多熱心的讀者根據(jù)文章內(nèi)容已成功批量安裝了紅帽RHEL系統(tǒng)或CentOS5.x,并提出了許多寶貴的意見,在這里表示感謝。現(xiàn)階段,由于需要大規(guī)模應(yīng)用CentOS5.8 x86_64系統(tǒng)用于集群環(huán)境,所以將此方法主要用于在公司內(nèi)網(wǎng)批量安裝新服務(wù)器系統(tǒng),這極大地簡化了用光盤重復(fù)安裝CentOS5.8 x86_64的過程,再加上分布式自動化運維工具puppet進行批量部署,達到了自動化運維的目的,避免了重復(fù)性勞動,極大的提高了工作效率。
首先,我們來介紹一下與之相關(guān)的原理和概念。
1. 什么是PXE
嚴(yán)格來說,PXE 并不是一種安裝方式,而是一種引導(dǎo)方式。進行 PXE 安裝的必要條件是在要安裝的計算機中必須包含一個 PXE 支持的網(wǎng)卡(NIC),即網(wǎng)卡中必須要有 PXE Client。PXE (Pre-boot Execution Environment)協(xié)議可以使計算機通過網(wǎng)絡(luò)啟動。此協(xié)議分為 Client端和 Server 端,而PXE Client則在網(wǎng)卡的 ROM 中。當(dāng)計算機引導(dǎo)時,BIOS 把 PXE Client 調(diào)入內(nèi)存中執(zhí)行,然后由 PXE Client 將放置在遠端的文件通過網(wǎng)絡(luò)下載到本地運行。運行 PXE 協(xié)議需要設(shè)置 DHCP 服務(wù)器和 TFTP 服務(wù)器。DHCP 服務(wù)器會給 PXE Client(將要安裝系統(tǒng)的主機)分配一個 IP 地址,由于是給 PXE Client 分配 IP 地址,所以在配置 DHCP 服務(wù)器時需要增加相應(yīng)的 PXE 設(shè)置。此外,在 PXE Client 的 ROM 中,已經(jīng)存在了 TFTP Client,那么它就可以通過 TFTP 協(xié)議到 TFTP Server 上下載所需的文件了。
2. 什么是Kickstart
Kickstart是一種無人值守的安裝方式。它的工作原理是在安裝過程中記錄典型的需要人工干預(yù)填寫的各種參數(shù),并生成一個名為 ks.cfg的文件。如果在安裝過程中(不只局限于生成Kickstart安裝文件的機器)出現(xiàn)要填寫參數(shù)的情況,安裝程序首先會去查找 Kickstart生成的文件,如果找到合適的參數(shù),就采用所找到的參數(shù);如果沒有找到合適的參數(shù),便需要安裝者手工干預(yù)了。所以,如果Kickstart文件涵蓋了安裝過程中可能出現(xiàn)的所有需要填寫的參數(shù),那么安裝者完全可以只告訴安裝程序從何處取ks.cfg文件,然后就去忙自己的事情。等安裝完畢,安裝程序會根據(jù)ks.cfg中的設(shè)置重啟系統(tǒng),并結(jié)束安裝。
3. PXE + Kickstart的安裝條件和詳細步驟
執(zhí)行 PXE + Kickstart安裝需要的設(shè)備為:
- DHCP 服務(wù)器。
- TFTP 服務(wù)器。
- Kickstart所生成的ks.cfg配置文件。
- 一臺存放系統(tǒng)安裝文件的服務(wù)器,如 NFS、HTTP 或 FTP 服務(wù)器。
- 一個帶有 PXE 支持網(wǎng)卡的主機。
系統(tǒng)環(huán)境介紹如下:
服務(wù)器系統(tǒng)為CentOS5.6 x86_64,IP為192.168.11.29(此服務(wù)器并非一定要限定為CentOS5.8 x86_64系統(tǒng)),由于是最小化安裝的,我們在后面要用到system-config-kickstart工具,它必須依賴于X windows,所以我們要提前安裝好X windows及gnome并重啟系統(tǒng),步驟如下所示:
先裝X windows和GNOME桌面環(huán)境,命令如下所示:
yum -y groupinstall 'X Window System'
yum -y groupinstall 'GNOME Desktop Environment'
然后修改/etc/inittab文件并重啟服務(wù)器,使其運行在圖形模式下,主要修改文件內(nèi)容如下所示:
id:5:initdefault:
重啟服務(wù)器命令如下:
reboot
#p#
完成上述的準(zhǔn)備工作后,PXE+DHCP+Apache+Kickstart無人值守安裝CentOS5.8安裝的步驟如下:
?。?)我們先下載CentOS5.8 x86_64光盤至/usr/local/src下,并掛載至/mnt/cdrom目錄下,并確認系統(tǒng)已安裝好httpd服務(wù),如下:
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
命令顯示結(jié)果如下所示:
httpd-2.2.3-65.el5.CentOS
(2)接下來我們復(fù)制光盤下的所有內(nèi)容(文件和文件夾)到/var/html/www(此目錄為Apache默認DocumentRoot目錄)下,無論是紅帽系統(tǒng)還是CentOS 5.x系統(tǒng),如果是最小化安裝,基本上第一張DVD光盤文件就夠了,復(fù)制命令如下所示:
cp -rf /mnt/cdrom /var/html/www
(3)安裝 tftp-server,并啟用tftp服務(wù),同時啟動xinetd進程,步驟如下所示。
1.我們用命令安裝tftp-server,命令如下:
yum -y install tftp-server
2.接著修改/etc/xinetd.d/tftp文件,將disable的值由yes變?yōu)閚o,內(nèi)容如下所示:
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
?。?)配置支持PXE的啟動程序(注意:前面已經(jīng)將CentOS5.8 x86_64第一張光盤的內(nèi)容復(fù)制到/var/www/html目錄中了,所以需要的文件只需要從/var/www/html目錄中復(fù)制就行了)。
a) 建立tftpboot文件夾,如下所示,若該文件夾已經(jīng)存在則不用建立。
mkdir -p /tftpboot
b) 復(fù)制pxelinux.0文件至tftpboot文件夾中,如下所示。
cp /usr/lib/syslinux/pxelinux.0 /tftpboot
c) 把DVD光盤上的/image/pxeboot/initrd.img和vmlinux復(fù)制到/tftpboot/中,如下所示。
cp /var/www/html/images/pxeboot/initrd.img /tftpboot
cp /var/www/html/images/pxeboot/vmlinuz /tftpboot
d) 復(fù)制DVD光盤上的isolinux/*.msg到/tftpboot目錄下,如下所示。
cp /var/www/html/isolinux/*.msg /tftpboot/
e) 在tftpboot中新建一個pxelinux.cfg目錄:
mkdir pxelinux.cfg
f) 將isolinux目錄中的isolinux.cfg復(fù)制到pxelinux.cfg目錄中,同時更改文件名稱為default,命令如下所示:
cd pxelinux.cfg
cp /var/www/html/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
g) 在上一個步驟,即第6點中,暫時不要修改default文件,進行到這一步時,雖然已經(jīng)可以通過網(wǎng)絡(luò)來引導(dǎo)并手動安裝Kickstart了,但是由于這里討論的是無人值守安裝,所以先不修改這個default文件。#p#
?。?)安裝dhcp服務(wù),同時修改如下配置:
yum -y install dhcp
然后復(fù)制配置模板文件到指定的目錄中,并重新命名。
cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
接著修改/etc/dhcpd.conf配置文件,文件最后修改內(nèi)容如下所示:
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服務(wù):
service dhcpd start
注:如果機器數(shù)量過多的話,注意dhcp服務(wù)器的地址池,不要因為耗盡IP而導(dǎo)致dhcpd服務(wù)器沒有IP地址release情況。
(6)用yum工具自動安裝Kickstart,同時配置system-config-kickstart。
a) 首先我們需要安裝Kickstart這個工具包,在CentOS最小化安裝系統(tǒng)時,此軟件包并沒有默認安裝,yum安裝命令如下所示:
yum -y install system-config-kickstart
b) 在gnome環(huán)境下配置Kickstart,命令如下所示:
system-config-Kickstart
運行上面的命令后可以對系統(tǒng)的一些基本配置進行設(shè)置,例如選擇時區(qū)、設(shè)置root的密碼等。
c) 接下來便要進行安裝了,建議選擇httpd安裝,切記不要輸入任何賬號,而是采用匿名安裝。
在安裝過程中,根據(jù)引導(dǎo)選擇安裝選項,不需要做更改。
d) Kickstart會讓我們選擇需要批量安裝的CentOS5.8分區(qū)信息,按照上一節(jié)所介紹的CentOS5.5 x86_64的安裝方法,我們創(chuàng)建四個分區(qū),即/、/boot、/data和swap分區(qū)。
e) 在進行網(wǎng)絡(luò)配置時,我使用的靜態(tài)分配地址(動態(tài)同樣如此),這里跟前面進行光盤安裝是一樣的。
f) 設(shè)置顯示配置時可以按照我們的習(xí)慣選擇。
g) 關(guān)于軟件包的選擇,大家可以根據(jù)實際的工作需求來選擇自己需要的軟件包,由于服務(wù)器安裝后用途都是不一樣的,建議大家這里選擇最小化安裝。
h) 其他都選擇默認設(shè)置,不需要修改。
i) 最后將生成的文件ks.cfg保存到/var/www/html下,此為自動化無人值守安裝的重難點,此文件稍有配置不當(dāng)?shù)脑捑蜁枰藶楦深A(yù)了,如果大家遇到問題,建議參考我下面的ks.cfg配置文件。
(7)修改/tftpboot/pxelinux.cfg/default文件,指定讀取ks.cfg的方法,即修改文件第一行內(nèi)容,改動后文件第一行內(nèi)容如下所示:
default text ks=http://192.168.11.29/ks.cfg
另外,也建議將timeout時間由原先的600改為1,timeout時間是引導(dǎo)時等待用戶手動選擇的時間,設(shè)為"1"可直接引導(dǎo)。
?。?)/var/www/html/ks.cfg文件內(nèi)容如下所示(此內(nèi)容是整個實驗過程的重難點,請關(guān)注):
#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
此配置過程中的重難點我這里說明下:
分區(qū)操作按照目前線上分區(qū)來操作,即分成/、/boot、/data及swap四個分區(qū),其中/data分區(qū)是存放數(shù)據(jù)的,我們這里用--grow --size=1參數(shù)來將其余的剩余空間全部分配給/data分區(qū)。
key --skip如果是紅帽系統(tǒng),此選項可以跳過輸入序列號過程;如果是CentOS 5.x系列,則可以不保留此項內(nèi)容;
reboot 此選項必須存在,也必須文中設(shè)定位置,不然kickstart顯示一條消息,并等待用戶按任意鍵后才重新引導(dǎo),此問題是很多朋友在論壇上發(fā)言提問的,我在實驗過程中也遇到此問題,建議多做幾次實驗;
clearpart --all --initlabel此條命令必須添加,不然系統(tǒng)會讓用戶手動選擇是否清除所有數(shù)據(jù),這就需要人為干預(yù)了,從而導(dǎo)致自動化過程失??;
其它方面選項較容易看懂,我這里就不再重復(fù)了。
?。?)將Kickstart需要的服務(wù)器均啟動后,此自動化安裝系統(tǒng)的過程就完成了,我們就可以在內(nèi)網(wǎng)機柜中全自動同時安裝CentOS5.8 x86_64系統(tǒng)了,服務(wù)器端啟動相應(yīng)命令如下:
Service httpd start
chkconfig httpd on
service dhcpd start
chkconfig dhcpd on
service xinetd restart
#p#
系統(tǒng)完成最小化后安裝后,大家可以根據(jù)自己公司的實際情況來進行系統(tǒng)的優(yōu)化,此最小化優(yōu)化腳本init.sh還可以讓puppet服務(wù)器進行推送,此腳本內(nèi)容如下所示:
- #/bin/bash
- #add the epel repo
- cd /usr/local/src
- wget http://mirrors.ustc.edu.cn/fedora/epel//5/x86_64/epel-release-5-4.noarch.rpm
- rpm -ivh epel-release-5-4.noarch.rpm
- #add the rpmforge repo
- cd /usr/local/src
- wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
- rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
- #yum install sysstat
- yum -y install gcc gcc-c++ vim-enhanced unzip unrar sysstat
- #set the ntp
- yum -y install ntp
- echo "01 01 * * * /usr/sbin/ntpdate ntp.api.bz >> /dev/null 2>&1" >> /etc/crontab
- ntpdate ntp.api.bz
- service crond restart
- #set the file limit
- ulimit -SHn 65535
- echo "ulimit -SHn 65535" >> /etc/rc.local
- cat >> /etc/security/limits.conf << EOF
- * soft nofile 60000
- * hard nofile 65535
- EOF
- #tune kernel parametres
- cat >> /etc/sysctl.conf << EOF
- net.ipv4.tcp_syncookies = 1
- net.ipv4.tcp_syn_retries = 1
- net.ipv4.tcp_tw_recycle = 1
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_fin_timeout = 1
- net.ipv4.tcp_keepalive_time = 1200
- net.ipv4.ip_local_port_range = 1024 65535
- EOF
- /sbin/sysctl -p
- #set the control-alt-delete to guard against the misuse
- sed -i 's@ca::ctrlaltdel:/sbin/shutdown -t3 -r now@#ca::ctrlaltdel:/sbin/shutdown -t3 -r now@' /etc/inittab
- #disable selinux
- sed -i 's@SELINUX=enforcing@SELINUX=disabled@' /etc/selinux/config
- #ssh setting
- sed -i -e '74 s/^/#/' -i -e '76 s/^/#/' /etc/ssh/sshd_config
- sed -i 's@#UseDNS yes@UseDNS no@' /etc/ssh/sshd_config
- service sshd restart
- #disable ipv6
- echo "alias net-pf-10 off" >> /etc/modprobe.conf
- echo "alias ipv6 off" >> /etc/modprobe.conf
- echo "install ipv6 /bin/true" >> /etc/modprobe.conf
- echo "IPV6INIT=no" >> /etc/sysconfig/network
- sed -i 's@NETWORKING_IPV6=yes@NETWORKING_IPV6=no@' /etc/sysconfig/network
- chkconfig ip6tables off
- #vim setting
- echo "syntax on" >> /root/.vimrc
- echo "set nohlsearch" >> /root/.vimrc
- #chkconfig off services
- chkconfig bluetooth off
- chkconfig sendmail off
- chkconfig kudzu off
- chkconfig nfslock off
- chkconfig portmap off
- chkconfig iptables off
- chkconfig autofs off
- chkconfig yum-updatesd off
- #reboot system
- Reboot
注意:
#tune kernel parametres為內(nèi)核優(yōu)化部分,在這里我只做了基礎(chǔ)處理,大家有需求可以自行修改,記住:一切以系統(tǒng)穩(wěn)定為原則。
#vim setting選項為vim的個性化配置,如果想vim語法高亮,則必須安裝vim-enhanced包,另外,vim在使用搜索功能,搜索選中內(nèi)容為高亮,感覺不是特別舒服,所以我這里用了set nohlsearch選項,如果大家不介意此項功能,則不需要添加此語句;
#disable ipv6選項我在測試時發(fā)現(xiàn),在CentOS5.8 x86_64系統(tǒng)下,如果不添加install ipv6 /bin/true此語句到/etc/modprobe.conf文件里,是關(guān)閉不了ipv6選項的,而測試的CentOS5.5 | 5.6不添加此句均可以順利關(guān)閉ipv6,這點請大家注意,當(dāng)然了,最后要reboot系統(tǒng)讓此配置生效。
引申:相信大家的開發(fā)環(huán)境應(yīng)該有不少Xen虛擬機,雖然Xen有自身的模板文件操作,但我們也可以利用Kickstart的方式快速無人值守安裝Xen虛擬機系統(tǒng),命令如下所示:
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結(jié)合Kickstart并不是本文檔的重點內(nèi)容,有興趣的朋友可以可以自行研究;另外有一點請大家一定要注意:
由于此安裝方法太智能化,在網(wǎng)絡(luò)引導(dǎo)成功以后會自動清除硬盤數(shù)據(jù)并重新安裝新的系統(tǒng),所以建議大家將此工作區(qū)域和網(wǎng)段獨立出來,或者在進行完安裝工作以后就停用Kickstart服務(wù)器,以免對正常工作的服務(wù)器造成不必要的麻煩。
由于個人能力有限,鑒于工作環(huán)境的嚴(yán)謹(jǐn)性,歡迎大家我上述文檔中一切錯誤和不合理之處,歡迎來信與我交流,個人郵箱yuhongchun027@163.com。
作者簡介:
余洪春(撫琴煮酒),英文名Andrew.Yu。
個人博客地址:http://andrewyu.blog.51cto.com/,
Sina微博地址:http://weibo.com/yuhongchun027。