首先,我們來介紹一下與之相關的原理和概念。
1. 什麼是PXE
嚴格來說,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 上下載所需的文件了。
2. 什麼是Kickstart
Kickstart是一種無人值守的安裝方式。它的工作原理是在安裝過程中記錄典型的需要人工干預填寫的各種參數,並生成一個名為 ks.cfg的文件。如果在安裝過程中(不只局限於生成Kickstart安裝文件的機器)出現要填寫參數的情況,安裝程序首先會去查找 Kickstart生成的文件,如果找到合適的參數,就採用所找到的參數;如果沒有找到合適的參數,便需要安裝者手工干預了。所以,如果Kickstart文件涵蓋了安裝過程中可能出現的所有需要填寫的參數,那麼安裝者完全可以只告訴安裝程序從何處取ks.cfg文件,然後就去忙自己的事情。等安裝完畢,安裝程序會根據ks.cfg中的設置重啟系統,並結束安裝。
3. PXE + Kickstart的安裝條件和詳細步驟
執行 PXE + Kickstart安裝需要的設備為:
系統環境介紹如下:
伺服器系統為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光碟上的/image/pxeboot/initrd.img和vmlinux複製到/tftpboot/中,如下所示。
cp /var/www/html/images/pxeboot/initrd.img /tftpboot cp /var/www/html/images/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
系統完成最小化后安裝后,大家可以根據自己公司的實際情況來進行系統的優化,此最小化優化腳本init.sh還可以讓puppet伺服器進行推送,此腳本內容如下所示:
- #/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為內核優化部分,在這裡我只做了基礎處理,大家有需求可以自行修改,記住:一切以系統穩定為原則。
#vim setting選項為vim的個性化配置,如果想vim語法高亮,則必須安裝vim-enhanced包,另外,vim在使用搜索功能,搜索選中內容為高亮,感覺不是特別舒服,所以我這裡用了set nohlsearch選項,如果大家不介意此項功能,則不需要添加此語句;
#disable ipv6選項我在測試時發現,在CentOS5.8 x86_64系統下,如果不添加install ipv6 /bin/true此語句到/etc/modprobe.conf文件里,是關閉不了ipv6選項的,而測試的CentOS5.5 | 5.6不添加此句均可以順利關閉ipv6,這點請大家注意,當然了,最後要reboot系統讓此配置生效。
引申:相信大家的開發環境應該有不少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。
作者簡介:
余洪春(撫琴煮酒),英文名Andrew.Yu。
個人博客地址:http://andrewyu.blog.51cto.com/,
Sina微博地址:http://weibo.com/yuhongchun027。
[火星人 ] 無人值守安裝CentOS5.8已經有682次圍觀