本文介紹PXE方式引導自動化安裝CentOS6.5系統,主要用到的系統服務有DHCP、TFTP、Vsftpd和Kickstart。經過配置Kickstart自動化應答腳本,實現客戶端批量、無人值守安裝系統。html
1.PXE介紹
python
PXE(Preboot Execution Environment,預啓動執行環境)由Intel公司開發,工做於Client/Server的網絡模式,支持客戶端經過網絡從遠端服務器下載映像,並由此支持經過網絡啓動操做系統。PXE能夠引導windows2003/2008/XP/win7/linux系列等多種系統。linux
圖 1 PXE網絡安裝服務架構圖算法
圖 2 支持PXE啓動的網卡vim
PXE啓動流程:進行PXE引導安裝的必要條件是有一個支持PXE啓動的網卡(NIC),即網卡ROM中必需要有PXE Client。當客戶端計算機啓動引導時,BIOS 把PXE Client 調入內存中執行,首先經過ARP協議廣播請求IP地址與TFTP服務器地址,在獲取到IP後,嘗試向TFTP服務器發起TFTP請求,並將TFTP服務器根目錄中的pxelinux.0文件下載到本地並執行,pxelinux.0引導程序執行後,會從TFTP根目錄的pxelinux.cfg文件夾中下載default配置文件,而後根據default配置文件中指定的位置,去下載操做系統內核vmlinuz和虛擬文件系統initrd.img,同時default配置文件中還指明瞭ks.cfg文件的位置,ks.cfg也會被一併下載到本地,在經過網絡下載操做系統安裝的過程當中,PXE引導程序會嘗試讀取ks.cfg文件內容,用於初始化系統配置,實現全自動無人值守安裝。windows
2.kickstart自動化安裝實例centos
2.1 安裝環境介紹安全
實驗環境以兩臺VMware虛擬機爲例:bash
虛擬機A:CentOS 6.5系統,做爲PXE安裝服務器,網絡鏈接到NAT網絡,並關閉VMnet8的DHCP服務,IP地址:192.168.2.60/24,網關192.168.2.1/24;服務器
虛擬機B:新建空白虛擬機,做爲PXE客戶端,網絡鏈接到NAT網絡,也能夠和虛擬機A一塊兒放在「僅主機」或「橋接」網絡(相同便可),移除DVD及其餘不用的設備;
在正式進行服務配置前,最好關閉PXE服務器的防火牆和Selinux:
關閉防火牆iptables:
[root@localhost ~]#iptables -F [root@localhost ~]#service iptables stop
關閉Selinux:
[root@localhost ~]#setenforce 0 [root@localhost ~]#vim /etc/selinux/config SELINUX=disabled
PXE啓動流程第一階段須要經過DHCP服務爲客戶端分配IP地址,指定TFTP服務器地址,指定pxelinux.0引導程序。
1. 安裝DHCP服務
[root@localhost ~]# yum -y install dhcp
2. 設置DHCP服務開機啓動
[root@localhost ~]#chkconfig --level dhcpd 2345 on [root@localhost ~]#chkconfig --list dhcpd 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
3. 修改DHCP服務主配置文件
[root@localhost ~]#vim /etc/dhcp/dhcpd.conf #響應客戶端的啓動查詢(開機時發送的DHCP請求) allow booting; allow bootp; #不使用DNS動態更新,忽略客戶端DNS更新 ddns-update-style none; ignore client-updates; #爲客戶端指定DNS名稱和DNS服務器的IP地址 option domain-name "example.org"; option domain-name-servers 192.168.2.60; #指定客戶端DHCP租期和鏈接DHCP服務器超時時間即最大租期 default-lease-time 3600; max-lease-time 7200; #指定DHCP服務器發送的日誌信息的日誌級別 log-facility local7; #子網區域 subnet 192.168.2.0 netmask 255.255.255.0 { #設置客戶端子網掩碼 option subnet-mask 255.255.255.0; #客戶端IP地址池 range dynamic-bootp 192.168.2.100 192.168.2.200; #tftp服務器的地址 next-server 192.168.2.60; #須要從tftp服務器下載並執行的PXE引導文件 filename "pxelinux.0"; default-lease-time 3600; max-lease-time 7200; #指定客戶端默認網關IP地址 option routers 192.168.2.1; }
4. 重啓DHCP服務
[root@localhost ~]#service dhcpd restart
TFTP服務是一個沒有主服務程序的輕量級服務,它依靠系統xinetd守護進程啓動。xinetd進程監聽不一樣網絡端口,根據端口發送數據到不一樣的服務進程。在安裝好TFTP服務後,xinetd服務就監聽UDP的69號端口,將這個端口收到的數據發送給TFTP程序。
1. 安裝xinetd和tftp-server
[root@localhost ~]#yum -y install xinetd tftp-server
2. 設置xinetd服務開機啓動
[root@localhost ~]#chkconfig --level xinetd 345 on [root@localhost ~]#chkconfig --list xinetd 0:關閉 1:關閉 2:關閉 3:啓用 4:啓用 5:啓用 6:關閉 基於 xinetd 的服務: tftp: 啓用
3. 編輯tftp配置文件,開啓tftp服務
[root@localhost ~]#vim /etc/xinetd.d/tftp #將配置文件中disable後面的yes改爲no service tftp { …… disable = no …… }
4. 重啓xinetd服務
[root@localhost ~]#service xinetd restart
PXE系統啓動引導須要一些必須的文件,其中pxelinux.0文件經過安裝syslinux包得到;vmlinuz是壓縮的可引導、可執行的linux內核文件,initrd.img是「initial ramdisk」,用於臨時引導硬件到內核vmlinuz接管,加載文件系統和SCSI設備驅動,這兩個文件能夠從安裝光盤images/pxeboot目錄複製;
1. 安裝syslinux包,複製引導文件pxelinux.0
[root@localhost ~]#yum -y install syslinux [root@localhost ~]#locate pxelinux.0 /usr/share/syslinux/pxelinux.0 #將pxe引導文件複製到TFTP根目錄中 [root@localhost ~]#cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
2. 掛載CentOS光盤,複製系統引導必須文件
[root@localhost ~]#mount /dev/cdrom /media/cdrom [root@localhost cdrom]#cp images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ [root@localhost cdrom]#cp isolinux/{vesamenu.c32,boot.msg} /var/lib/tftpboot/
3. 建立系統引導模版文件default
[root@localhost cdrom]#mkdir /var/lib/tftpboot/pxelinux.cfg [root@localhost cdrom]#cp isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
4. 編輯系統引導模版文件default
[root@localhost ~]#vim /var/lib/tftpboot/pxelinux.cfg/default #須要修改兩處 #第1處:將第一行default後面標籤改爲linux,表示引導時使用這個標籤下指定的內容去查找操做系統的位置 default linux #第2處:找到linux標籤,修改inst.stage2和ks後面配置指向FTP服務器 label linux menu label ^Install CentOS 6.5 32bit menu default kernel vmlinuz append initrd=initrd.img inst.stage2=ftp://192.168.2.60 ks=ftp://192.168.2.60/pub/ks.cfg quiet
Vsftpd服務經過FTP協議發送系統光盤文件和自動化應答腳本文件ks.cfg到客戶端。
1. 安裝Vsftpd服務
[root@localhost cdrom]#yum -y install vsftpd
2. 設置Vsftpd開機啓動
[root@localhost ~]#chkconfig --level vsftpd 2345 on [root@localhost ~]#chkconfig --list vsftpd 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
3. 將CentOS6.5系統安裝光盤全部文件複製到FTP根目錄
[root@localhost ~]#cp -a /media/cdrom/* /var/ftp/
Kickstart是一種無人值守安裝方式,它的工做原理是經過記錄典型的安裝過程當中所需人工干預填寫的各類參數,並生成一個名爲ks.cfg的自動應答腳本文件,在其後的安裝過程當中,當出現要求填寫參數的狀況時,安裝程序會首先去查找Kickstart生成的文件,當找到合適的參數時,就採用找到的參數;當沒有找到合適的參數時,才須要安裝者手工干預。這樣,若是告訴安裝程序ks.cfg文件位置,而且文件涵蓋了安裝過程當中出現的全部須要填寫的參數時,就能實現全自動無人值守安裝。
1. 在RHEL桌面環境下配置Kickstart
[root@localhost ~]#yum –y install system-config-kickstart [root@localhost ~]#system-config-kickstart
A:開始設置語言,鍵盤,時區,Root密碼,安裝完畢自動重啓;
B:設置安裝方式(ftp/http/nfs);
C:安裝MBR;
D:設置分區;
E:配置網絡;
F:認證配置;
G:SELinux 和防火牆配置;
H:軟件包安裝選擇
圖 3 Kickstart配置界面
通過各類設置,最後是生成的ks.cfg文件預覽界面, 文件保存在/var/www/html/文件夾。
圖 4 Kickstart生成ks.cfg預覽界面
2. 使用系統現有ks.cfg模版文件
在已安裝好的CentOS系統root用戶家目錄,存在一個anaconda.cfg文件即爲本系統的自動化應答腳本文件,能夠以此爲模版進行配置。
[root@localhost ~]#ls -l anaconda-ks.cfg -rw------- 1 root root 1080 5月 24 11:08 anaconda-ks.cfg
注意:此配置文件權限爲其餘人不可讀,使用前須要設置權限爲其餘人可讀,不然自動化安裝時候anaconda程序會報錯「找不到ks.cfg文件」。
#複製一份anaconda-ks.cfg到FTP共享目錄pub下: [root@localhost ~]#cp anaconda-ks.cfg /var/ftp/pub/ks.cfg #修改權限爲其餘人可讀 [root@localhost pub]#chmod 644 ks.cfg [root@localhost pub]#ls -l -rw-r--r-- 1 root root 1353 5月 28 08:59 ks.cfg
下面是一個典型的ks.cfg配置文件:
[root@localhost pub]#vim ks.cfg # Kickstart file automatically generated by anaconda. #version=DEVEL install graphical url --url="ftp://192.168.2.60/" lang zh_CN.UTF-8 keyboard us timezone --utc Asia/Shanghai rootpw --iscrypted $6$VfvSB5Zx$ufvfpkzYy/nHoDukZXm1Z6LBlUg1n2OrO1.K7F8d2fRlYDdHwwR7MVUqT2h0Qab7rRPnRGPFa1/VYyBSDeGTt1 firewall --disabled selinux --disabled authconfig --enableshadow --passalgo=sha512 firstboot --disable network --onboot yes --hostname=localhost.localdomain --device eth0 --bootproto dhcp --noipv6 user --name=todd --password=$6$vTfBqgQT$Xkjrx/kpRYEGfS1wRnsZw5MNRMUCZ3/Ld969pTG0wv4WBrMHUpWEwRSzPqJ95dIaZasWOU3pbS2at/dRZZZA11 --iscrypted bootloader --location=mbr --driveorder=sda zerombr yes clearpart --all --initlabel part /boot --fstype=ext4 --size=200 part swap --size=2048 part / --fstype=ext4 --grow --size=200 reboot %packages @^minimal @core @base @development @chinese-support net-tools vim wget %post /bin/tar zcPf centos.repo.tar.gz /etc/yum.repos.d/*.repo > /dev/null 2>&1 /bin/rm -f /etc/yum.repos.d/*.repo > /dev/null 2>&1 cat >> /etc/yum.repos.d/base.repo << EOF [base] name=CentOS6.5 baseurl=ftp://192.168.2.60/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 EOF %end
說明:
①key --skip 若是是紅帽系統,此選項能夠跳過輸入序列號過程;若是是CentOS 系列,則能夠不保留此項內容;
②reboot選項必須存在,不然安裝完畢後kickstart顯示等待用戶按任意鍵從新引導;
③clearpart --all –initlabel 此條命令必須添加,不然系統會讓用戶手動選擇是否清除全部數據,這就須要人爲干預了,從而致使自動化過程失敗;
④安裝完畢後登陸系統,root用戶密碼爲root,todd用戶密碼爲todd;
⑤%post安裝後腳本打包備份原有yum倉庫文件,生成新的base.repo倉庫。
補充解釋:
如下補充解釋一下加密的密碼密文生成方法,以下這樣的密碼有幾種生成方法:
password=$6$vTfBqgQT$Xkjrx/kpRYEGfS1wRnsZw5MNRMUCZ3/Ld969pTG0wv4WBrMHUpWEwRSzPqJ95dIaZasWOU3pbS2at/dRZZZA11
(1) 複製/etc/shadow中的加密過的密碼密文
[root@localhost ~]# echo hello | passwd --stdin leven 更改用戶 leven 的密碼 。 passwd: 全部的身份驗證令牌已經成功更新。 [root@localhost ~]# grep leven /etc/shadow leven:$6$K3DVGnpn$r/yZY.RoyM6dHKsqwKLllvj0M98XPiak9Kefh6X/NA5Tpmp3F/jBYhc4d.kCcGOnHsey33XBvWGqixo6Rl7oP0:17928:0:99999:7:::
這一段「$6$K3DVGnpn$r/yZY.RoyM6dHKsqwKLllvj0M98XPiak9Kefh6X/NA5Tpmp3F/jBYhc4d.kCcGOnHsey33XBvWGqixo6Rl7oP0」就是使用sha-512方式加密後的密碼密文。(開頭的$6$代表)
(2) 使用OpenSSL生成加密過的密碼密文
[root@localhost ~]# openssl passwd -1 -salt 'world' Password: $1$world$6A5UXMoQ04WBPD9pce/FT0
「-1」指加密算法使用md5算法,不指定加密算法的話默認使用Unix標準加密算法,即不指定默認使用-crypt算法;
「-salt」指定加密時候須要添加的「鹽」(雜質),不指定的話默認隨機生成。
此方法缺點是OpenSSL不支持生成sha-256和sha-512算法的密碼,目前Linux默認的密碼加密算法已是sha-512了,md5算法不安全,詳見/etc/shadow中加密密碼「$6$」代表sha-512算法。
(3)使用grub-crypt生成加密過的密碼密文
[root@localhost ~]# grub-crypt -h Usage: grub-crypt [OPTION]... Encrypt a password. --md5 Use MD5 to encrypt the password --sha-256 Use SHA-256 to encrypt the password --sha-512 Use SHA-512 to encrypt the password (default) [root@localhost ~]# grub-crypt --sha-512 Password: Retype password: $6$RD4Mt5EjtHgGopk2$GrGNdH5kMUNIo5rnCl6qAJhn6mOruc9QcFcTbN/7fPhInJvsiiTqrXORMeFn.m7k73WKKa9qs0lu2m3j79ABj1
grub-crypt實際上是一個python腳本,交互式生成密碼。在CentOS 6上,能夠藉助grub提供的密碼生成工具grub-crypt生成。遺憾的是CentOS 7上默認安裝的是grub2,它不提供grub-crypt。
可是咱們能夠參照grub-crypt腳本內容,使用下面的python語句簡單地代替grub-crypt,如下是交互式方式獲取密碼:
python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'
若是不想交互式,能夠改爲以下形式:
python -c 'import crypt,getpass;pw="123456";print(crypt.crypt(pw))'
如今就方便多了,直接將結果賦值給變量便可。
[root@localhost ~]# a=$(python -c 'import crypt,getpass;pw="123456";print(crypt.crypt(pw))') [root@localhost ~]# echo $a $6$uKhnBg5A4/jC8KaU$scXof3ZwtYWl/6ckD4GFOpsQa8eDu6RDbHdlFcRLd/2cDv5xYe8hzw5ekYCV5L2gLBBSfZ.Uc166nz6TLchlp.
3.測試安裝
自動化應答腳本文件ks.cfg配置完畢後,初始化一個VMware虛擬機,將網絡鏈接到NAT網絡(必須和做爲PXE服務器的虛擬機A在同一個網絡,而且VMnet8關閉DHCP服務),移除客戶端虛擬機B的DVD及其餘不用的設備。
圖 5 新建空白虛擬機PXE Client
啓動PXE Client虛擬機B,自動選擇從網卡PXE引導,DHCP 服務器開始給客戶機分配IP地址,並指定TFTP服務器地址。
圖 6 PXE Client向DHCP Server請求IP地址和TFTP服務器地址
圖 7 加載vmlinuz和initrd.img文件
圖 8 啓動CentOS6.5安裝過程