使用Kickstart自动化安装CentOS6.5
? ? ??本文介紹PXE方式引導自動化安裝CentOS6.5系統,主要用到的系統服務有DHCP、TFTP、Vsftpd和Kickstart。通過配置Kickstart自動化應答腳本,實現客戶端批量、無人值守安裝系統。
????????1.PXE介紹
PXE(Preboot Execution Environment,預啟動執行環境)由Intel公司開發,工作于Client/Server的網絡模式,支持客戶端通過網絡從遠端服務器下載映像,并由此支持通過網絡啟動操作系統。PXE可以引導windows2003/2008/XP/win7/linux系列等多種系統。
? ? ?? ?????????????????????圖?1? PXE網絡安裝服務架構圖
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2? 支持PXE啟動的網卡
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文件內容,用于初始化系統配置,實現全自動無人值守安裝。
????? ?2.kickstart自動化安裝實例
????????? ?2.1 安裝環境介紹
實驗環境以兩臺VMware虛擬機為例:
虛擬機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=disabled2.2?? 配置DHCP服務
PXE啟動流程第一階段需要通過DHCP服務為客戶端分配IP地址,指定TFTP服務器地址,指定pxelinux.0引導程序。
???1.????? 安裝DHCP服務
?????[root@localhost?~]#?yum?-y?install?dhcp2.????? 設置DHCP服務開機啟動
?????[root@localhost?~]#chkconfig?--level?dhcpd?2345?on????[root@localhost?~]#chkconfig?--listdhcpd???????????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?restart2.3?? 配置TFTP服務
TFTP服務是一個沒有主服務程序的輕量級服務,它依靠系統xinetd守護進程啟動。xinetd進程監聽不同網絡端口,根據端口發送數據到不同的服務進程。在安裝好TFTP服務后,xinetd服務就監聽UDP的69號端口,將這個端口收到的數據發送給TFTP程序。
1.????? 安裝xinetd和tftp-server
????[root@localhost?~]#yum?-y?install?xinetd?tftp-server2.????? 設置xinetd服務開機啟動
????[root@localhost?~]#chkconfig?--level?xinetd?345?on????[root@localhost?~]#chkconfig?--listxinetd??????????0:關閉??1:關閉??2:關閉??3:啟用??4:啟用??5:啟用??6:關閉基于?xinetd?的服務:tftp:???????????啟用
3.????? 編輯tftp配置文件,開啟tftp服務
????[root@localhost?~]#vim?/etc/xinetd.d/tftp????#將配置文件中disable后面的yes改成noservice?tftp{……disable?=?no……}
4.????? 重啟xinetd服務
????[root@localhost?~]#service?xinetd?restart2.4?? 配置Syslinux及系統引導必須文件
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?linuxmenu?label?^Install?CentOS?6.5?32bitmenu?defaultkernel?vmlinuzappend?initrd=initrd.img?inst.stage2=ftp://192.168.2.60?ks=ftp://192.168.2.60/pub/ks.cfg?quiet
2.5??配置Vsftpd服務
Vsftpd服務通過FTP協議發送系統光盤文件和自動化應答腳本文件ks.cfg到客戶端。
1.????? 安裝Vsftpd服務
????[root@localhost?cdrom]#yum?-y?install?vsftpd2.????? 設置Vsftpd開機啟動
????[root@localhost?~]#chkconfig?--level?vsftpd?2345?on????[root@localhost?~]#chkconfig?--listvsftpd??????????0:關閉??1:關閉??2:啟用??3:啟用??4:啟用??5:啟用??6:關閉
3.????? 將CentOS6.5系統安裝光盤所有文件復制到FTP根目錄
????[root@localhost?~]#cp?-a?/media/cdrom/*?/var/ftp/2.6?? 配置Kickstart
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=DEVELinstallgraphicalurl?--url="ftp://192.168.2.60/"lang?zh_CN.UTF-8keyboard?ustimezone?--utc?Asia/Shanghairootpw??--iscrypted?$6$VfvSB5Zx$ufvfpkzYy/nHoDukZXm1Z6LBlUg1n2OrO1.K7F8d2fRlYDdHwwR7MVUqT2h0Qab7rRPnRGPFa1/VYyBSDeGTt1firewall?--disabledselinux?--disabledauthconfig?--enableshadow?--passalgo=sha512firstboot?--disablenetwork?--onboot?yes?--hostname=localhost.localdomain?--device?eth0?--bootproto?dhcp?--noipv6user?--name=todd?--password=$6$vTfBqgQT$Xkjrx/kpRYEGfS1wRnsZw5MNRMUCZ3/Ld969pTG0wv4WBrMHUpWEwRSzPqJ95dIaZasWOU3pbS2at/dRZZZA11?--iscryptedbootloader?--location=mbr?--driveorder=sdazerombr?yesclearpart?--all?--initlabelpart?/boot?--fstype=ext4?--size=200part?swap?--size=2048part?/?--fstype=ext4?--grow?--size=200reboot%packages@^minimal@core@base@development@chinese-supportnet-toolsvimwget%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>&1cat?>>?/etc/yum.repos.d/base.repo?<<?EOF[base]name=CentOS6.5baseurl=ftp://192.168.2.60/enabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6EOF%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/shadowleven:$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?-hUsage:?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-512Password:?Retype?password:?$6$RD4Mt5EjtHgGopk2$GrGNdH5kMUNIo5rnCl6qAJhn6mOruc9QcFcTbN/7fPhInJvsiiTqrXORMeFn.m7k73WKKa9qs0lu2m3j79ABj1grub-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安裝過程
轉載于:https://blog.51cto.com/toddliu/2121532
總結
以上是生活随笔為你收集整理的使用Kickstart自动化安装CentOS6.5的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python-os模块
- 下一篇: 高性能网站原则