Pxe-kickstarthtml
Liunx系統批量自動安裝python
實現原理:將手動安裝的全部的詳細步驟記錄到一個文件中,而後有一種軟件經過讀取這個文件就能夠實現自動化安裝系統。linux
這個工具叫作Kickstart,kickstart是RedHat公司開源的工具,因此對Centos兼容性最好。注意Kickstart是一個項目的名稱
,沒有這個軟件。ios
cobbler是對kickstart的全部組件的封裝。本質上就是網頁版的Kickstartweb
PXE原理
PXE(Pre-boot Execution Environment,預啓動執行環境)是由Intel公司開發的最新技術,工做於Client/Server的網絡模式,支持工做站(主機)經過網絡從遠端服務器下載映像,並由此支持經過網絡啓動操做系統,在啓動過程當中,終端要求服務器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協議下載一個啓動軟件包到本機內存中執行,由這個啓動軟件包完成終端基本軟件設置,從而引導預先安裝在服務器中的終端操做系統。vim
PXE的工做過程:centos
- 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
的文件。若是在安裝過程當中(不僅侷限於生成Kickstart安裝文件的機器)出現要填寫參數的狀況,安裝程序首先會去查找Kickstart生成的文件,若是找到合適的參數,就採用所找到的參數;若是沒有找到合適的參數,便須要安裝者手工干預了。因此,若是Kickstart文件涵蓋了安裝過程當中可能出現的全部須要填寫的參數,那麼安裝者徹底能夠只告訴安裝程序從何處取ks.cfg
文件,而後就去忙本身的事情。等安裝完畢,安裝程序會根據ks.cfg
中的設置重啓系統,並結束安裝。bash
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)