KICKSTART無人值守安裝系統
-
背景及原理
在工作中常常需要重復的在多台機器上安裝相同的操作系統,對於這些機械式的重復
工作可以采取利用kickstart無人值守安裝操作系統來完成。
PXE,全名Pre-boot Execution Environment,預啟動執行環境。通過網絡接口啟動計算機,不依賴本地存儲設備(如硬盤)或本地已安裝的操作系統,是由Intel公司和Systemsoft公司於1999年9月20日公布的技術,采用Client/Server的工作模式,PXE客戶端會調用網際協議(IP)、用戶數據報協議(UDP)、動態主機設定協議(DHCP)、小型文件傳輸協議(TFTP)等網絡協議。PXE客戶端(client)這個術語是指機器在PXE啟動過程中的角色。一個PXE客戶端可以是一台服務器、筆記本電腦或者其他裝有PXE啟動代碼的機器(我們電腦的網卡)。
- PXE的工作過程
2.1 PXE Client向DHCP發送請求
PXE Client從自己的PXE網卡啟動,通過PXE BootROM(自啟動芯片)會以UDP(簡單用戶數據報協議)發送一個廣播請求,向本網絡中的DHCP服務器索取IP。
2.2 DHCP服務器提供信息
DHCP服務器收到客戶端的請求,驗證是否來至合法的PXE Client的請求,驗證通過它將給客戶端一個"提供"響應,這個"提供"響應中包含了為客戶端分配的IP地址、pxelinux啟動程序(TFTP)位置,以及配置文件所在位置。
2.3 PXE客戶端請求下載啟動文件
客戶端收到服務器的"回應"后,會回應一個幀,以請求傳送啟動所需文件。這些啟動文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
2.4 Boot Server響應客戶端請求並傳送文件
當服務器收到客戶端的請求后,他們之間之后將有更多的信息在客戶端與服務器之間作應答, 用以決定啟動參數。BootROM由TFTP通訊協議從Boot Server下載啟動安裝程序所必須的文件(pxelinux.0、pxelinux.cfg/default)。default文件下載完成后,會根據該文件中定義的引導順序,啟動Linux安裝程序的引導內核。
2.5 請求下載自動應答文件
客戶端通過pxelinux.cfg/default文件成功的引導Linux安裝內核后,安裝程序首先必須確定你通過什么安裝介質來安裝linux,如果是通過網絡安裝(NFS, FTP, HTTP),則會在這個時候初始化網絡,並定位安裝源位置。接着會讀取default文件中指定的自動應答文件ks.cfg所在位置,根據該位置請求下載該文件。
2.6 客戶端安裝操作系統
將ks.cfg文件下載回來后,通過該文件找到OS Server,並按照該文件的配置請求下載安裝過程需要的軟件包。
OS Server和客戶端建立連接后,將開始傳輸軟件包,客戶端將開始安裝操作系統。安裝完成后,將提示重新引導計算機。
3、批量裝機軟件介紹
Redhat系主要有兩種Kickstart和Cobbler。
Kickstart是一種無人值守的安裝方式。它的工作原理是在安裝過程中記錄人工干預填寫的各種參數,並生成一個名為ks.cfg的文件。如果在自動安裝過程中出現要填寫參數的情況,安裝程序首先會去查找ks.cfg文件,如果找到合適的參數,就采用所找到的參數;如果沒有找到合適的參數,便會彈出對話框讓安裝者手工填寫。所以,如果ks.cfg文件涵蓋了安裝過程中所有需要填寫的參數,那么安裝者完全可以只告訴安裝程序從何處下載ks.cfg文件,然后就去忙自己的事情。等安裝完畢,安裝程序會根據ks.cfg中的設置重啟/關閉系統,並結束安裝。
Cobbler集中和簡化了通過網絡安裝操作系統需要使用到的DHCP、TFTP和DNS服務的配置。Cobbler不僅有一個命令行界面,還提供了一個Web界面,大大降低了使用者的入門水平。Cobbler內置了一個輕量級配置管理系統,但它也支持和其它配置管理系統集成,如Puppet,暫時不支持SaltStack。簡單的說,Cobbler是對kickstart的封裝,簡化安裝步驟、使用流程,降低使用者的門檻。
4、環境模擬
4.1 虛擬機准備一台安裝好系統並進行基礎優化的Linux 6.9版本系統作為服務器端,命名為server,一台沒有安裝任何系統的VMware空機器,命名為test。其中server具有eth0和eth1兩塊網卡,eth0為NAT模式,eth1為lan區段。開機后進行網卡的配置,eth0的ip可以設置為dhcp模式自動從虛擬機獲取也可以設置為靜態iP地址,配置該機器能夠上外網;eth1的ip設置為192.168.1.254(屬於192.168.1.0網段)
4.2 配置好server的兩個網卡的ip並能連通外網后,執行命令開啟轉發功能
vim /etc/sysctl.conf —> net.ipv4.ip_forward = 1
sysctl –p #加載內核參數
iptables –F #清空iptables
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE #配置iptables轉發規則
5、配置dhcp服務
yum install dhcp –y #安裝dhcp服務
vim /etc/dhcp/dhcpd.conf #編輯dhcp服務的配置文件
添加以下內容
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.254;
option domain-name-servers 223.5.5.5;
option routers 192.168.1.3;
next-server 192.168.1.3;
filename "/pxelinux.0";
default-lease-time 600;
max-lease-time 7200;
}
/etc/init.d/dhcpd restart #啟動dhcp服務
6、配置tftp服務
yum install tftp-server –y #安裝tftp服務
vim /etc/xinetd.d/tftp #編輯tftp服務的配置文件
修改disable內容為disable = no
/etc/init.d/xinetd start #啟動tftp服務
7、配置http服務
yum install httpd –y #安裝http服務
sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf(可選步驟)
/etc/init.d/httpd start #啟動http服務
cd /var/www/html/
ls
mkdir centos #新建本地站點目錄
ls /dev/cdrom
mount /dev/cdrom centos/ #掛載本地鏡像源到網站目錄
df –h #檢查是否掛載
此時可以通過瀏覽器輸入http://10.0.0.130/centos訪問到鏡像的本地站點目錄,里面包含鏡像文件安裝系統所需要的各種文件
8、准備PXE開機引導文件
yum -y install syslinux #安裝sysLinux軟件
cd /var/lib/tftpboot/ #進入tftp根目錄
cp /usr/share/syslinux/pxelinux.0 . #拷貝啟動菜單程序文件
cp /var/www/html/centos/isolinux/* . #拷貝isolinux所有文件至tftpboot
ls /var/lib/tftpboot/ #查看
mkdir pxelinux.cfg #新建一個pxelinux.cfg目錄,存放客戶端的配置文件
cd pxelinux.cfg #進入到pxelinux.cfg目錄
cp /var/www/html/centos/isolinux/isolinux.cfg default #拷貝pxe配置文件isolinux.cfg並重命名為default
vim default #配置文件default解析,可對一些字段進行自定義,並指定自動應答文件的url地址
9、將test機器開機,進行無人值守自動安裝
等待片刻,就會安裝完成,進行登錄
10、自動應答文件ks.cfg
10.1 可以通過查看當前目錄下anaconda-ks.cfg文件進行參考
# Kickstart file automatically generated by anaconda.
#version=DEVEL #版本=開發
Install #安裝系統途徑光盤
cdrom #安裝的介質
lang en_US.UTF-8 #系統的語言
keyboard us #系統鍵盤布局
network --onboot no --device eth0 --bootproto dhcp --noipv6 #網絡的配置
rootpw --iscrypted #root密碼$6$tnRJPwWVl1GByCWK$1Z5h3JGSuWaYLfcc.02ASJr1bc.T/NXLy28KdSGRaSPEYB2R1TeL6pyYnPZhvQ63vTICKeUMo9WCyIqMqTiyl0
firewall --service=ssh #啟用防火牆,添加ssh例外
authconfig --enableshadow --passalgo=sha512 #系統賬號的認證加密方式為sha-512
selinux --enforcing #selinux的狀態
timezone Asia/Shanghai #時區
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
#系統啟動引導
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --none
#磁盤分區信息
#part swap --asprimary --size=2048
#part / --fstype=ext4 --grow --size=200
repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
repo以及本地安裝包,centos網絡安裝包
%packages #包名
@base
@compat-libraries
@core
@debugging
@development
@server-policy
@workstation-policy
python-dmidecode
sgpio
device-mapper-persistent-data
systemtap-client
10.2 新建並自定義ks.cfg自動應答
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
url --url=http://10.0.0.131/centos/ #url源
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted $6$np50FkEgfj1OXA85$afrVDyovBiEYURUVjrlB58T8rCn4eVGAievcTdJL6P6840rAowEobX7HplSm5uhDWZcbs3XBAgvRM0jaDI0xq1
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
zerombr #清除mbr引導信息
clearpart --all –initlabel #清空分區
part /boot --fstype=ext4 --asprimary --size=200
part swap --asprimary --size=2048
part / --fstype=ext4 --grow --asprimary --size=200
reboot #安裝完重啟
repo --name="CentOS" --baseurl=http://10.0.0.131/centos/ --cost=100 #url源
%packages
@base
@compat-libraries
@core
@debugging
@server-policy
@workstation-policy
python-dmidecode
sgpio
device-mapper-persistent-data
%end
10.3 開機自動進行基礎優化的youhua.ks.cfg自動應答文件
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
url --url=http://10.0.0.130/centos/
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted $6$np50FkEgfj1OXA85$afrVDyovBiEYURUVjrlB58T8rCn4eVGAievcTdJL6P6840rAowEobX7HplSm5uhDWZcbs3XBAgvRM0jaDI0xq1
firewall --disabled #關閉防火牆
authconfig --enableshadow --passalgo=sha512
selinux --disabled #關閉selinux
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
zerombr
clearpart --all --initlabel
part /boot --fstype=ext4 --asprimary --size=200
part swap --asprimary --size=2048
part / --fstype=ext4 --grow --asprimary --size=200
reboot
%packages
@base
@compat-libraries
@core
@debugging
@server-policy
@workstation-policy
python-dmidecode
sgpio
device-mapper-persistent-data
net-tools #安裝常用軟件包
vim
lrzsz
wget
tree
screen
lsof
tcpdump
%end
%post #優化開機啟動項,優化ssh,優化yum源,修改主機名
echo 'begin youhua' >>/tmp/install.log
chkconfig|awk '{print $1}'|grep -Ev 'crond|rsyslog|sshd|sysstat|network'|awk '{print "chkconfig " $0 " off"}'|bash
sed -i 's@#UseDNS yes@UseDNS no@g' /etc/ssh/sshd_config
sed -i '/^GSSAPIAuthentication yes/d' /etc/ssh/sshd_config
>/etc/issue
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
sed -i 's#^HOSTNAME=.*$#HOSTNAME=oldboy#g' /etc/sysconfig/network
%end
10.4 自動應答文件的目錄
自動應答文件的目錄與鏡像文件的目錄不相同,可以直接放在/var/www/html/下,也可以在此目錄下新建一個單獨存放自動應答文件的目錄,不同的目錄在相應的default中要相互對應
11、添加gpt分區
如果硬盤的容量超過了2T,需要采用gpt分區表,可以在自動應答文件中安裝系統前加上gpt格式分區表的命令,加在優化字段前面%pre %end
%pre
parted /dev/sda mklabel gpt
%end
12、MAC地址綁定安裝系統
根據實際需要,不同的機器需要安裝不同系統的包組,不同的優化等等,可以通過采取綁定mac地址的方式,從而使用不同的應答文件
首先需要得到網卡的MAC地址,然后再創建一個內容與/var/lib/tftpboot/pxelinux.cfg/default文件內容相同的文件,文件名命名格式為"01-mac地址",其中mac地址字母需要改為小寫,分隔符將:修改為-
做法如下cp default 01-`echo 00:0C:29:48:EE:6B|tr 'A-Z' 'a-z'|tr ':' '-'`
再修改該文件中的url地址為相應的自動應答文件ks.cfg地址即可
mac地址分配固定ip
vim /etc/dhcp/dhcpd.conf
host lb01{
hardware ethernet 00:50:56:27:CF:7B;
fixed-address 192.168.128.5;
}