Kickstart批量安裝系統
Liunx系統批量自動安裝
實現原理:將手動安裝的所有的詳細步驟記錄到一個文件中,然後有一種軟件通過讀取這個文件就可以實現自動化安裝系統。
這個工具叫做Kickstart,kickstart是RedHat公司開源的工具,所以對Centos兼容性最好。註意Kickstart是一個項目的名稱
,沒有這個軟件。
cobbler是對kickstart的所有組件的封裝。本質上就是網頁版的Kickstart
PXE原理
PXE(Pre-boot Execution Environment,預啟動執行環境)是由Intel公司開發的最新技術,工作於Client/Server的網絡模式,支持工作站(主機)通過網絡從遠端服務器下載映像,並由此支持通過網絡啟動操作系統,在啟動過程中,終端要求服務器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協議下載一個啟動軟件包到本機內存中執行,由這個啟動軟件包完成終端基本軟件設置,從而引導預先安裝在服務器中的終端操作系統。
PXE的工作過程:
- PXE Client 從自己的PXE網卡啟動,向本網絡中的DHCP服務器索取IP;
- DHCP 服務器返回分配給客戶機的IP 以及PXE文件的放置位置(該文件一般是放在一臺TFTP服務器上) ;
- PXE Client 向本網絡中的TFTP服務器索取pxelinux.0 文件;
- PXE Client 取得pxelinux.0 文件後之執行該文件;
- 根據pxelinux.0 的執行結果,通過TFTP服務器加載內核和文件系統 ;
- 進入安裝畫面, 此時可以通過選擇HTTP、FTP、NFS 方式之一進行安裝;
詳細工作流程,請參考下面這幅圖:
什麽是Kickstart
Kickstart是一種無人值守的安裝方式。它的工作原理是在安裝過程中記錄典型的需要人工幹預填寫的各種參數,並生成一個名為ks.cfg
ks.cfg
文件,然後就去忙自己的事情。等安裝完畢,安裝程序會根據ks.cfg
中的設置重啟系統,並結束安裝。
PXE+Kickstart 無人值守安裝操作系統完整過程如下:
Kickstart部署
1.環境準備
[root@Kickstart ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@Kickstart ~]# uname -r 3.10.0-693.el7.x86_64 [root@Kickstart ~]# getenforce Disabled [root@Kickstart ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1)
DHCP部署
需要把虛擬機的DHCP分配的功能關閉,網卡模式不能使用橋接模式,首選NAT模式
#1.yum安裝DHCP
[root@Kickstart ~]# yum install dhcp -y
#2.修改DHCP配置文件/etc/dhcp/dhcpd.conf,添加如下參數:
#在該配置文件中默認是沒有任何關於DHCP的配置參數
cat >>/etc/dhcp/dhcpd.conf<<EOF
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.199;
option subnet-mask 255.255.255.0;
default-lease-time 21600;
max-lease-time 43200;
next-server 10.0.0.201;
filename "/pxelinux.0";
}
EOF
#針對上述DHCP配置一些參數解釋:
range #可分配的IP地址範圍(起始..結束)
option subnet-mask #給客戶端設置子網掩碼(netmask)
default-lease-time #設置默認的IP租期時間
max-lease-time #設置最大的IP租期時間
next-server #告訴客戶端TFTP服務器的IP地址
filename "/pxelinux.0"; #告訴客戶端從TFTP根目錄下載pxelinux.0文件
註意 :DHCP配置文件裏的range可分配地址的範圍需要減半在計算可以對多少臺主機進行批量的系統安裝,導致整個問題的原因是因為:①PXE客戶端第一次獲取IP地址(需要一個IP) ②配置應答文件的時候客戶端會重新獲得一個IP地址(需要一個IP)。
/usr/share/doc/dhcp*/dhcpd.conf.example #該文件存放有dhcp的配置參數案例
#3.啟動dhcp服務
[root@Kickstart ~]# systemctl start dhcpd.service
#4.在啟動dhcp服務之前偵聽日誌文件,可以看到dhcp的啟動過程和錯誤
[root@Kickstart ~]# tail -f /var/log/messages
Dec 4 17:26:55 jason-c7 dhcpd: Listening on LPF/eth1/00:50:56:38:92:85/172.16.1.0/24
Dec 4 17:26:55 jason-c7 dhcpd: Sending on LPF/eth1/00:50:56:38:92:85/172.16.1.0/24
批量安裝系統的主機最好不要將dhcp服務開啟自啟動,不然有可能會導致在同一個局域網中的其它服務器自動重裝系統。
TFTP部署
TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務(用來傳遞啟動文件)。端口號為69。
#1.yum安裝TFTP和xinetd,xinetd 用於管理TFTP的服務
[root@Kickstart /]# yum install xinetd tftp-server -y
#2.自行創建/tftpboot目錄作為tftp的根目錄,通過xinetd來指定TFTP的根目錄
[root@Kickstart /]# mkdir /tftpboot
[root@Kickstart /]# cat /etc/xinetd.d/tftp |grep -E "server_args|disable"
server_args = -s /tftpboot #新根目錄的位置
disable = no #是否開啟tftp服務(no=開啟,yes=不開啟)
#3.啟動xinetd服務,TFTP服務時通過xinetd來管理重啟和啟動。
[root@Kickstart /]# systemctl start xinetd
[root@Kickstart /]# lsof -i:69
TFTP的根目錄不管在哪裏創建都無所謂,看個人,不過如果不適用默認的TFTP的根目錄就得需要在/etc/xinetd.d/tftp文件中將server_args參數指定為新的根目錄
HTTP部署
可以用Apache或Nginx提供HTTP服務。Python的命令web服務不行,會有報錯。
#1.安裝並啟動Httpd
[root@Kickstart ~]# yum install httpd -y
[root@Kickstart ~]# systemctl start httpd
[root@Kickstart ~]# sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf
#2.鏡像掛載和目錄創建
#/var/www/html/該目錄是httpd的網站站點目錄
[root@Kickstart ~]# mkdir -p /var/www/html/CentOS7
[root@Kickstart ~]# mount /dev/cdrom /var/www/html/CentOS7
#不管怎麽操作,只要把安裝光盤內容能通過web發布即可。因為是演示,如果復制鏡像就有點浪費時間。但生產環境就一定要復制了,光盤讀取速度有限。
瀏覽器訪問 http://10.0.0.201/CentOS7/ 校驗是否正確
配置支持PXE啟動程序
syslinux是一個功能強大的引導加載程序,而且兼容各種介質。SYSLINUX是一個小型的Linux操作系統,它的目的是簡化首次安裝Linux的時間,並建立修護或其它特殊用途的啟動盤。如果沒有找到pxelinux.0這個文件,可以安裝一下。
#1.安裝syslinux,將/usr/share/syslinux/下的pxelinux.0和reboot.32文件將其拷貝到TFTP的根目錄
[root@Kickstart /]# cd /var/lib/tftpboot/ #TFTP的根目錄
[root@Kickstart /]# yum install syslinux -y #通過安裝syslinux獲得pxelinux.0文件
[root@Kickstart /]# rpm -ql syslinux |grep pxelinux.0 #pxelinux.0文件的路徑
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/pxelinux.0
[root@Kickstart /]# cp /usr/share/syslinux/reboot.c32 /tftpboot/
[root@Kickstart /]# cp /usr/share/syslinux/pxelinux.0 /tftpboot/
#2.從鏡像中找到相關的配置文件並拷貝到tftp的根目錄
[root@Kickstart /]# cp /var/www/html/CentOS7/isolinux/* /tftpboot/
[root@Kickstart /]# ls /tftpboot/
TRANS.TBL boot.msg initrd.img isolinux.cfg pxelinux.0 splash.png vmlinuz
boot.cat grub.conf isolinux.bin memtest reboot.c32 vesamenu.c32
文件說明:
pxelinux.0 #該文件用於啟動PXE的環境
reboot.c32 #裝完系統後自動啟動文件
vmlinuz #vm內核文件
initrd.img #啟動文件
vesamenu.c32 #框架文件(歡迎界面)
#3.新鍵一個pxelinux.cnf目錄,isolinux.cfg文件拷貝到/tftpboot/pxelinux.cfg目錄下並重命名為default
[root@Kickstart /]# mkdir -p /tftpboot/pxelinux.cfg
[root@Kickstart /]# cp /var/www/html/CentOS7/isolinux/isolinux.cfg ./tftpboot/pxelinux.cfg/default #該文件決定了pxe的安裝界面樣式和選項等
手動網絡安裝
該方式是通過網絡的方式手動的安裝系統,那麽PXE客戶端需要手工的選擇菜單進行系統的安裝
1.編輯default文件,/tftpboot/pxelinux.cfg/default,其它參數不需要修改保持默認即可,只需要修改append initrd=initrd.img這項
[root@Kickstart /]# vim /tftpboot/pxelinux.cfg/default
default jason-ks
timeout 600
prompt 0
label jason-ks
kernel vmlinuz
append initrd=initrd.img inst.repo=http://10.0.0.201/CentOS7/
2.如果需要安裝系統的時候(針對Centos7),網卡以ethXX 命名,配置參數如下:
append initrd=initrd.img inst.repo=http://10.0.0.201/CentOS7/ net.ifnames=0 biosdevname=0
3.啟動虛擬機,會出現以下界面:
自動化安裝
編寫KS文件(包含安裝的所有步驟)
方法1:新裝CentOS系統會自動生成文件,存放在/root/anaconda-ks.cfg
方法2:圖形CentOS系統提供的圖形工具
方法3:了解ks文件語法,編寫ks文件。(推薦)
KS文件語法
官網文檔
CentOS6 : https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-kickstart2-options.html
CentOS7:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html-single/installation_guide/
官網支持中文語言
ks文件組成
命令段
包組段 以%packages開頭,以%end結束
腳本段 以%post開頭,以%end結束,在安裝完系統之後執行的相關Linux命令、腳本
以%pre開頭,以%end結束,在安裝完系統之前執行的相關Linux命令、腳本
kickstart文件語法檢查
yum install pykickstart
ksvalidator /var/www/html/ks_config/CentOS-7-ks.cfg
請記住這個驗證工具有其局限性。Kickstart 文件可能會很復雜;ksvalidator 可保證其語法正確,且該文件不包含淘汰的選項,但它無法保證安裝會成功。它也不會嘗試驗證 Kickstart 文件的 %pre、%post 和 %packages 部分。
root加密密碼生成
python -c ‘import crypt; print(crypt.crypt("密碼"))‘
ks文件解析
install #告知安裝程序,這是一次全新安裝,而不是升級upgrade。
url --url=" " #通過FTP或HTTP從遠程服務器上的安裝樹中安裝。
url --url="http://10.0.0.201/CentOS7/"
url --url ftp://<username>:<password>@<server>/<dir>
nfs #從指定的NFS服務器安裝。
nfs --server=nfsserver.example.com --dir=/tmp/install-tree
text #使用文本模式安裝。
lang #設置在安裝過程中使用的語言以及系統的缺省語言。lang en_US.UTF-8
keyboard #設置系統鍵盤類型。keyboard us
zerombr #清除mbr引導信息。
bootloader #系統引導相關配置。
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
--location= #指定引導記錄被寫入的位置.有效的值如下:mbr(缺省),partition(在包含內核的分區的第一個扇區安裝引導裝載程序)或none(不安裝引導裝載程序)。
--driveorder #指定在BIOS引導順序中居首的驅動器。
--append= #指定內核參數.要指定多個參數,使用空格分隔它們。
network #為通過網絡的kickstart安裝以及所安裝的系統配置聯網信息。
network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6
--bootproto=[dhcp/bootp/static]中的一種,缺省值是dhcp。bootp和dhcp被認為是相同的。
static方法要求在kickstart文件裏輸入所有的網絡信息。
network --bootproto=static --ip=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2
請註意所有配置信息都必須在一行上指定,不能使用反斜線來換行。
--ip= #要安裝的機器的IP地址.
--gateway= #IP地址格式的默認網關.
--netmask= #安裝的系統的子網掩碼.
--hostname= #安裝的系統的主機名.
--onboot= #是否在引導時啟用該設備.
--noipv6= #禁用此設備的IPv6.
--nameserver= #配置dns解析.
timezone #設置系統時區。timezone --utc Asia/Shanghai
authconfig #系統認證信息。authconfig --enableshadow --passalgo=sha512
#設置密碼加密方式為sha512 啟用shadow文件。
rootpw #root密碼
clearpart #清空分區。clearpart --all --initlabel
--all #從系統中清除所有分區,--initlable 初始化磁盤標簽
part #磁盤分區。
part /boot --fstype=ext4 --asprimary --size=200
part swap --size=1024
part / --fstype=ext4 --grow --asprimary --size=200
--fstype= #為分區設置文件系統類型.有效的類型為ext2,ext3,swap和vfat。
--asprimary #強迫把分區分配為主分區,否則提示分區失敗。
--size= #以MB為單位的分區最小值.在此處指定一個整數值,如500.不要在數字後面加MB。
--grow #告訴分區使用所有可用空間(若有),或使用設置的最大值。
firstboot #負責協助配置redhat一些重要的信息。
firstboot --disable
selinux #關閉selinux。selinux --disabled
firewall #關閉防火墻。firewall --disabled
logging #設置日誌級別。logging --level=info
reboot #設定安裝完成後重啟,此選項必須存在,不然kickstart顯示一條消息,並等待用戶按任意鍵後才重新引導,也可以選擇halt關機。
KS配置文件
通過KS配置文件實現自動化安裝系統
1.先要將default文件清空,然後添加如下內容:
[root@Kickstart ~]# cp /tftpboot/pxelinux.cfg/default{,.bak}
[root@Kickstart ~]# > /tftpboot/pxelinux.cfg/default
[root@Kickstart ~]# cat /tftpboot/pxelinux.cfg/default
#jason centos 7 kickstart configure
default jason-ks
timeout 600
prompt 0
label jason-ks
kernel vmlinuz
append initrd=initrd.img ks=http://10.0.0.201/ks.config/CentOS7-ks.cfg ksdevice=eth0 net.ifnames=0 biosdevname=0
#參數解釋:
append initrd=initrd.img ks #存放ks配置文件的服務器地址和路徑,通過該路徑找到對應的ks.cfg文件來引導系統安裝
ksdevice=eth0 #指定該網卡進行ks的數據交互(可忽略)
net.ifnames=0 biosdevname=0 #修改內核參數,讓網卡命名變為ethXX
2.創建存放ks文件的目錄
如果ks文件有需要執行的腳本文件,那麽該腳本文件需要和ks文件在同一個目錄下
[root@Kickstart ~]# mkdir -p /var/www/html/ks.config/
3.ks配置文件如下:
[root@Kickstart ~]# cat /var/www/html/ks.config/CentOS7-ks.cfg
# Kickstart Configurator for CentOS 7 by yao zhang
install
url --url="http://10.0.0.201/CentOS7/"
text
lang en_US.UTF-8
keyboard us
zerombr
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
network --bootproto=static --device=eth0 --gateway=10.0.0.2 --ip=10.0.0.202 --nameserver=223.5.5.5 --netmask=255.255.255.0 --activate
network --bootproto=static --device=eth1 --ip=172.16.1.202 --netmask=255.255.255.0 --activate
network --hostname=Addie
#network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS7
timezone --utc Asia/Shanghai
authconfig --enableshadow --passalgo=sha512
#rootpw 123456
rootpw --iscrypted $6$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/
clearpart --all --initlabel
part /boot --fstype xfs --size 1024
part swap --size 1024
part / --fstype xfs --size 1 --grow
firstboot --disable
selinux --disabled
firewall --disabled
logging --level=info
reboot
%packages
@^minimal
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet
wget
vim
bash-completion
net-tools
%end
%post
systemctl disable postfix.service
%end
#該ks配置文件只用於CentOS7的系統自動化安裝。
4.啟動空白虛擬機,觀察自動安裝過程
註意,如果是安裝Centos7,需要把內存設置到大於2G,不然安裝很可能會出現報錯
5.等待數十分鐘後,系統安裝完畢(登錄賬號:root,密碼:123456)
Kickstart批量安裝系統