1.導言
已經或未來將從事Linux系統運維工作的讀者,經常會遇到一些機器式的重復的共走,例如:有時間同時上線幾十甚至上百台服務器,而且需要我們在短時間內完成系統安裝。
q 光盤安裝系統===>一個的服務器DVD內置光驅百千塊,百台服務器都配光驅就浪費了,因為一台服務器也就開始裝系統能用的上,以后用的機會屈指可數。用USB外置光驅,插來插去也是醉了。
q U盤安裝系統===>還是同樣的問題,要一台一台服務器插U盤。
q 網絡安裝系統(ftp,http,nfs) ===>這個方法不錯,只要服務器能聯網就可以安裝系統了,但是還需要一台台服務器去敲鍵盤點鼠標。時刻想着偷懶的我們,有沒有更好的方法!
1.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服務器時需要增加2的PXE設置。此外,在PXE Client的ROM中,已經存在了TFTP Client,那么它就可以通過TFTP協議到TFTP Server上下載所需的文件了。
1.2什么是KickStart
KickStart是一種無人值守的安裝方法。它的工作原理時在安裝過程中記錄典型的需要人工干預填寫的各種參數,並生成一個名為ks.cfg的文件。如果在安裝過程中(不只局限於生成KickStart安裝文件的機器)出現要填寫參數的情況,安裝程序首選會去查找KickStart生成的文件,如果找到合適的參數,就采用所找到的參數;如果沒有找到合適的參數,便需要安裝着手工干預了。所以如果KickStart文件涵蓋了安裝過程中可能出現的所有需要填寫的參數,那么安裝着完全可以只告訴安裝程序從何處去ks.cfg文件,然后就去忙自己的事情。等安裝完畢,安裝程序會根據ks.cfg中設置重啟系統,並結束安裝。
2.DHCP工作過程的六個主要步驟
對於學習 DHCP來說,很重要的一部分就是對於DHCP工作過程的理解。那么首先DHCP分為兩個部分:一個是服務器端,另一個是客戶端。所有客戶機的IP地址設 定資料都由DHCP服務器集中管理,並負責處理客戶端的DHCP要求;而客戶端則會使用從服務器分配下來的IP地址。
DHCP服務器提供三 種IP分配方式:自動分配(Automatic Allocation)、動態分配(Dynamic Allocation)和手動分配。自動分配是當DHCP客戶端第一次成功地從DHCP服務器端分配到一個IP地址之后,就永遠使用這個地址。動態分配是 當DHCP客戶端第一次從DHCP服務器分配到IP地址后,並非永久地使用該地址,每次使用完后,DHCP客戶端就得釋放這個IP地址,以給其他客戶端使 用,而手動分配是由DHCP服務器管理員專門指定IP地址。
DHCP客戶機在啟動時,會搜尋網絡中是否存在DHCP服務器。如果找到,則給 DHCP服務器發送一個請求。DHCP服務器接到請求后,為DHCP客戶機選擇TCP/IP配置的參數,並把這些參數發送給客戶端。如果已配置沖突檢測設置,則 DHCP 服務器在將租約中的地址提供給客戶機之前會試用Ping測試作用域中每個可用地址的連通性。這可確保提供給客戶的每個IP地址都沒有被使用手動 TCP/IP配置的另一台非 DHCP 計算機使用。
根據客戶端是否第一次登錄網絡,DHCP的工作形式會有所不同。客戶端從DHCP服務器上獲得IP地址的整個過程分為以下六個步驟:
2.1尋找DHCP服務器
當DHCP客戶端第一次登錄網絡的時候,計算機發現本機上沒有任何IP地址設定,將以廣播方式發送DHCP discover發現信息來尋找DHCP服務器,即向255.255.255.255發送特定的廣播信息。網絡上每一台安裝了TCP/IP協議的主機都會 介紹這個廣播信息,但只有DHCP服務器才會做出響應。
4.2分配IP地址
在網絡中接收到DHCP discover發現信息的DHCP服務器都會做出相應,它從尚未分配的IP地址中挑選一個分配給DHCP客戶機,向DHCP客戶機發送一個包含分配的IP地址和其他設置的DHCP offer提供信息。
2.3接受 IP地址
DHCP客戶端接受到DHCP offer提供信息之后,選擇第一個接收到的提供信息,然后以廣播的方式回答一個DHCP request請求信息,該信息包含向它所選定的DHCP服務器請求IP地址的內容。
2.4IP地址分配確認
當DHCP服務器收到DHCP客戶端回答的DHCP request請求信息之后,便向DHCP客戶端發送一個包含它所提供的IP地址和其他設置的DHCP ack確認信息,告訴DHCP客戶端可以使用它提供的IP地址。然后,DHCP客戶機便將其TCP/IP協議與網卡綁定,另外,除了DHCP客戶機選中的 服務器外,其他的DHCP服務器將收回曾經提供的IP地址。
2.5重新登錄
以后DHCP客戶端每次重新登錄網絡時,就不需要再發送DHCP discover發現信息了,而是直接發送包含前一次所分配的IP地址的DHCP request請求信息。當DHCP服務器收到這一信息后,它會嘗試讓DHCP客戶機繼續使用原來的IP地址,並回答一個DHCP ack確認信息。如果此IP地址已無法再分配給原來的DHCP客戶機使用時,則DHCP服務器給DHCP客戶機回答一個DHCP nack否認信息。當原來的DHCP客戶機收到此DHCP nack否認信息后,它就必須重新發送DHCPdiscover發現信息來請求新的IP地址。
客戶端重新登錄.如圖1-1
圖1-1
如果客戶端DHCP request 內的IP地址在服務器端沒有被使用,DHCP服務器回復DHCP ACK繼續使用IP。如圖1-2
圖1-2
如果客戶端DHCP request 內的IP地址在服務器端已被使用,DHCP服務器回復DHCP NACK告訴客戶端IP已被使用。圖1-3
圖1-3
客戶端重新開始DHCP流程。如圖1-4
圖1-4
2.6更新租約
DHCP 服務器向DHCP客戶機出租的IP地址一般都有一個租借期限,期滿后DHCP服務器便會收回出租的IP地址。如果DHCP客戶機要延長其IP租約,則必須更新其IP租約。DHCP客戶機啟動時和IP租約期限過一半時,DHCP客戶機都會自動向DHCP服務器發送更新其IP租約的信息。
3.PXE+KickStart自動部署操作系統實戰
執行PXE+KickStart安裝需要的設備:
q DHCP服務器
q TFTP服務器
q KickStart所生成的ks.cfg配置文件
q 一台存放系統安裝文件的服務器,如NFS、HTTP、或FTP服務器
q 一個帶有PXE支持網卡的主機。
通過Kickstart+Dhcp+tftp+httpd實現
3.1查看當前系統版本
[root@kickstart ~]# cat /etc/redhat-release
CentOS release 6.7 (Final)
3.2准備環境
必須關閉selinux防火牆,臨時關閉會不生效,建議修改配置文件后,重啟操作系統。
[root@kickstart ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
測試環境IP地址:外網eth0為NAT模式,可以上網
[root@kickstart ~]# ifconfig eth0
eth0Link encap:Ethernet HWaddr 00:1C:42:C4:75:DD
inet addr:10.0.0.3 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::21c:42ff:fec4:75dd/64 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500 Metric:1
RX packets:501 errors:0 dropped:0 overruns:0 frame:0
TX packets:216 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:61453 (60.0 KiB) TX bytes:27706 (27.0 KiB)
3.3安裝DHCP服務
[root@kickstart ~]# yum -y install dhcp
[root@kickstart ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf #拷貝dhcp配置文件
#修改配置文件/etc/dhcpd/dhcpd.conf;添加如下
ddns-update-style none;
ignore client-updates;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.200;
option subnet-mask 255.255.255.0;
option domain-name "internal.example.org";
default-lease-time 600;
max-lease-time 7200;
next-server 10.0.0.3;
filename "/pxelinux.0";
}
[root@kickstart ~]# cat /etc/sysconfig/dhcpd #修改/etc/sysconfig/dhcpd配置文件, 表示dhcp將只在eth0網絡接口上提供DHCP服務。
# Command line options here
DHCPDARGS=eth0
[root@kickstart ~]# /etc/init.d/dhcpd start #啟動dhcpd服務
DHCP注釋:
ddns-update-style none; #設置與DHCP服務相關聯的DNS數據動態更新模式,實際的DHCP應用中很少用改參數,設置為none即可。
ignore client-updates; #不允許客戶機更新DNS記錄
subnet 172.16.10.0 netmask 255.255.255.0 {
range 172.16.10.100 172.16.10.200; #可分配的起始IP-結束IP
option subnet-mask 255.255.255.0; #設置netmask
default-lease-time 21600; #設置默認的IP租用期限
max-lease-time 43200; #設置最大的IP租用期限
next-server 172.16.10.20; #告知客戶端TFTP服務器ip
filename "/pxelinux.0"; #告知客戶端從TFTP根目錄下載pexlinux.0
}
3.4安裝TFTP服務
TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。端口號為69。
[root@kickstart ~]# yum -y install tftp-server #安裝tftp-server服務
#修改配置文件/etc/xinetd.d/tftp disabled修改為no
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot #指定目錄,保持默認,不用修改
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
[root@kickstart ~]# /etc/init.d/xinetd start #啟動服務xinetd代理服務
3.5安裝httpd服務
可以用Apache或Nginx提供HTTP服務。Python的命令web服務不行,會有報錯。
[root@kickstart ~]# yum -y install httpd #安裝httpd服務
[root@kickstart ~]#sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf #修改apache配置文件
[root@kickstart ~]# /etc/init.d/httpd start #啟動apache服務
[root@kickstart ~]# mkdir /var/www/html/centos6/ #創建centos66目錄
[root@kickstart ~]# mount /dev/cdrom /var/www/html/centos6/ #掛載鏡像文件
# 不管怎么弄,只要把安裝光盤內容能通過web發布即可。因為是演示,如果復制鏡像就有點浪費時間。但生產環境就一定要復制了,光盤讀取速度有限。
3.6PXE配置引導
syslinux是一個功能強大的引導加載程序,而且兼容各種介質。SYSLINUX是一個小型的Linux操作系統,它的目的是簡化首次安裝Linux的時間,並建立修護或其它特殊用途的啟動盤。如果沒有找到pxelinux.0這個文件,可以安裝一下。
[root@kickstart ~]# yum -y install syslinux #安裝syslinux
復制配置文件
[root@kickstart ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@kickstart ~]# cp -a /var/www/html/centos6/isolinux/* /var/lib/tftpboot/
[root@kickstart ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg
[root@kickstart ~]# cp /var/www/html/centos6/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
添加如下,配置文件
[root@kickstart ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
default ks
prompt 0
label ks
kernel vmlinuz
append initrd=initrd.img ks=http://10.0.0.3/config/Centos6-ks.cfg ksdevice=eth0
# ksdevice=eth0代表當客戶端有多塊網卡的時候,要實現自動化需要設置從eth0安裝,不指定的話,安裝的時候系統會讓你選擇,那就不叫全自動化了。
3.6.1PXE配置文件default解析
[root@kickstart ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32 #默認加載一個菜單
#prompt 1 #開啟會顯示命令行’boot:’ 提示符。prompt值為0時則不提示,將會直接啟動’default’參數中指定的內容
timeout 600#timeout時間是引導等待用戶手動選擇的時間,設為1可直接引導,單位為1/10秒。
display boot.msg
#菜單背景圖片、標題、顏色。
menu background splash.jpg
menu title Welcome to CentOS 6.7!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
#lable指定在boot:提示符下輸入的關鍵字,比如boot:linux[ENTER],這個會啟動lable linux下標記的kernel和initrd.img文件
label linux#一個標簽就是前面圖片的一行選項。
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz #指定要啟動的內核。同樣要注意路徑,默認是/tftpboot目錄
append initrd=initrd.img #指定追加給內核的參數,initrd.img是一個最小的linux系統
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img nomodeset
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append -
3.7上傳kscfg配置文件
[root@kickstart ~]# grub-crypt #配置root使用密碼,加入修改Centos6-ks.cfg文件
Password:
Retype password:
$6$006TOzR9rk18CPQw$t/xTyZEw60OWqAho.J1oj3PRo2ib93blCIlVuFCPc6/fuCADB02LKHfNV4x7jtpNAX98TK3K8Zpem8Qkv92111
[root@kickstart ]#mkdir /var/www/html/config ß創建配置文件及優化腳本站點目錄
[root@kickstart html]# cat /var/www/html/config/Centos6-ks.cfg
install ß安裝
url --url="http://10.0.0.3/centos6" ß系統文件地址,這里使用http
text ß文本界面安裝
lang en_US.UTF-8ß語言
keyboard usß鍵盤
zerombr ß清空mbr
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" ß引導加載程序參數
network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS6ßeth1網絡配置
timezone --utc Asia/Shanghai ß時區
authconfig --enableshadow --passalgo=sha512 ß驗證配置
rootpw--iscrypted $6$006TOzR9rk18CPQw$t/xTyZEw60OWqAho.J1oj3PRo2ib93blCIlVuFCPc6/fuCADB02LKHfNV4x7jtpNAX98TK3K8Zpem8Qkv92111 ßroot密碼,使用grub-crypt生成
clearpart --all --initlabel ß清空分區
part /boot --fstype=ext4 --asprimary --size=100 ß分區/boot 100M
part swap --size=1500 ß分區swap 1500M
part / --fstype=ext4 --grow --asprimary --size=200 ß分區/ 所有
firstboot --disable ß關閉一系列服務
selinux --disabled
firewall --disabled
logging --level=info ß日志記錄等級info級別
reboot ß重啟
%packages ß包組-軟件名
@base
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet
%post ß安裝完執行腳本
wget -O /tmp/optimization.sh http://10.0.0.3/config/optimization.sh &>/dev/null ß下載腳本,然后執行
/bin/sh /tmp/optimization.sh ß執行腳本
%end
3.8准備全新服務器
需要和pxe服務器內網同網段,開機通過dhcp自動獲取,然后自動開始裝機
3.9kickstart錯誤匯總
解決辦法:
1)我們先證明安裝源服務器是正常的,我們用其他機器下載install.img文件,使用下面的命令:
wget spacer.gifhttp://192.168.0.3/centos6/images/install.img
若可以正常的下載這個文件,說明安裝源服務器(即kickstart服務器)正常。
2)查找install.img文件的前一階段是配置網卡、網關階段,檢查你的ks文件的配置的網卡部分,是否與安裝源的ip不是一個網段,若不是一個網段就會造成網絡不通,產生這個錯誤。這個問題也是困擾了我好幾個小時的問題,迷惑性很大。
報錯原因:selinux沒關 解決辦法:關閉Selinux防火牆,然后重啟,否則不生效