作為中小公司的運(yùn)維,經(jīng)常會(huì)遇到一些機(jī)械式的重復(fù)工作,例如:有時(shí)公司同時(shí)上線幾十甚至上百臺(tái)服務(wù)器,而且需要我們?cè)诙虝r(shí)間內(nèi)完成系統(tǒng)安裝。
公司主營(yíng)業(yè)務(wù):網(wǎng)站建設(shè)、網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)公司推出宜賓免費(fèi)做網(wǎng)站回饋大家。
常規(guī)的辦法有什么?
光盤安裝系統(tǒng)===>一個(gè)服務(wù)器DVD內(nèi)置光驅(qū)百千塊,百臺(tái)服務(wù)器都配光驅(qū)就浪費(fèi)了,因?yàn)橐慌_(tái)服務(wù)器也就開(kāi)始裝系統(tǒng)能用的上,以后用的機(jī)會(huì)屈指可數(shù)。用USB外置光驅(qū),插來(lái)插去也醉了。
U盤安裝系統(tǒng)===>還是同樣的問(wèn)題,要一臺(tái)一臺(tái)服務(wù)器插U盤。
網(wǎng)絡(luò)安裝系統(tǒng)(ftp,http,nfs) ===>這個(gè)方法不錯(cuò),只要服務(wù)器能聯(lián)網(wǎng)就可以裝系統(tǒng)了,但還是需要一臺(tái)臺(tái)服務(wù)器去敲鍵盤點(diǎn)鼠標(biāo)。時(shí)刻想偷懶的我們,有沒(méi)有更好的方法!
高逼格的方法:
1. Kickstart
2. Cobbler
PXE,全名Pre-boot Execution Environmrnt,預(yù)啟動(dòng)執(zhí)行環(huán)境;
通過(guò)網(wǎng)絡(luò)接口啟動(dòng)計(jì)算機(jī),不依賴本地存儲(chǔ)設(shè)備(如硬盤)或本地已安裝的操作系統(tǒng);
由intel和Systemsoft公司于1999年9月20日公布的技術(shù);
Client/Server的工作模式;
PXE客戶端會(huì)調(diào)用網(wǎng)際協(xié)議(IP)、用戶數(shù)據(jù)報(bào)協(xié)議(UDP)、動(dòng)態(tài)主機(jī)設(shè)定協(xié)議(DHCP)、小型文件傳輸協(xié)議(TFTP)等網(wǎng)絡(luò)協(xié)議;
PXE客戶端(client)這個(gè)術(shù)語(yǔ)是指機(jī)器在PXE啟動(dòng)過(guò)程中的角色。一個(gè)PXE客戶端可以是一臺(tái)服務(wù)器、筆記本電腦或者其他裝有PXE啟動(dòng)代碼的機(jī)器(我們電腦的網(wǎng)卡)
PXE Client向DHCP發(fā)送請(qǐng)求
PXE Client從自己的PXE網(wǎng)卡啟動(dòng),通過(guò)PXE BootROM(自啟動(dòng)芯片)會(huì)以UDP(簡(jiǎn)單用戶數(shù)據(jù)報(bào)文協(xié)議)發(fā)送一個(gè)廣播請(qǐng)求,向本網(wǎng)絡(luò)中的DHCP服務(wù)器索取IP
DHCP服務(wù)器提供信息
DHCP服務(wù)器收到客戶端的請(qǐng)求,驗(yàn)證是否來(lái)自合法的PXEClient的請(qǐng)求,驗(yàn)證通過(guò)它將給客戶端一個(gè)“提供”響應(yīng),這個(gè)“提供”響應(yīng)中包含了為客戶端分配的IP地址、pxelinux啟動(dòng)程序(TFTP)位置,以及配置文件所在位置。
PXE客戶端請(qǐng)求下載啟動(dòng)文件
客戶端收到服務(wù)器的“回應(yīng)”后,會(huì)回應(yīng)一個(gè)幀,以請(qǐng)求傳送啟動(dòng)所需文件。這些啟動(dòng)文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
Boot Server響應(yīng)客戶端請(qǐng)求并傳送文件
當(dāng)服務(wù)器收到客戶端的請(qǐng)求后,他們之間之后將有更多的信息在客戶端與服務(wù)器之間作應(yīng)答,用以決定啟動(dòng)參數(shù)。BootROM由TFTP通訊協(xié)議從Boot Server下載啟動(dòng)安裝程序鎖必須的文件(pxelinux.0、pxelinux.cfg/default)。default文件下載完成后,會(huì)根據(jù)該文件中定義的引導(dǎo)順序,啟動(dòng)Linux安裝程序的引導(dǎo)內(nèi)核。
請(qǐng)求下載自動(dòng)應(yīng)答文件
客戶端通過(guò)pxelinux.cfg/default文件成功的引導(dǎo)Linux安裝內(nèi)核后,安裝程序首先必須確定你通過(guò)什么安裝介質(zhì)來(lái)安裝Linux,如果是通過(guò)網(wǎng)絡(luò)安裝(NFS、FTP、HTTP),則會(huì)在這個(gè)時(shí)候初始化網(wǎng)絡(luò),并定位安裝源位置。接著會(huì)讀取default文件中指定的自動(dòng)應(yīng)答文件ks.cfg所在位置,根據(jù)該位置請(qǐng)求下載該文件。
注意:
這里有個(gè)問(wèn)題,在第2步和第5步初始化2次網(wǎng)絡(luò)了,這是由于PXE獲取的是安裝用的內(nèi)核以及安裝程序等,而安裝程序要獲取的是安裝系統(tǒng)所需的二進(jìn)制包以及配置文件。因此PXE模塊和安裝程序是相對(duì)獨(dú)立的,PXE的網(wǎng)絡(luò)配置并不能傳遞給安裝程序,從而進(jìn)行兩次獲取IP地址過(guò)程,但I(xiàn)P地址在DHCP的租期內(nèi)是一樣的。
客戶端安裝操作系統(tǒng)
將ks.cfg文件下載回來(lái)后,通過(guò)該文件找到OSServer,并按照該文件的配置請(qǐng)求下載安裝過(guò)程需要的軟件包。OS Server和客戶端建立連接后,將開(kāi)始傳輸軟件包,客戶端將開(kāi)始安裝操作系統(tǒng)。安裝完成后,將提示重新引導(dǎo)計(jì)算機(jī)。
Redhat系主要有兩種Kickstart和Cobbler。
Kickstart是一種無(wú)人值守的安裝方式。它的工作原理是在安裝過(guò)程中記錄人工干預(yù)填寫的各種參數(shù),并生成一個(gè)名為ks.cfg的文件。如果在自動(dòng)安裝過(guò)程中出現(xiàn)要填寫參數(shù)的情況,安裝程序首先會(huì)去查找ks.cfg文件,如果找到合適的參數(shù),就采用所找到的參數(shù);如果沒(méi)有找到合適的參數(shù),便會(huì)彈出對(duì)話框讓安裝者手工填寫。所以,如果ks.cfg文件涵蓋了安裝過(guò)程中所有需要填寫的參數(shù),那么安裝者完全可以只告訴安裝程序從何處下載ks.cfg文件,然后就去忙自己的事情。等安裝完畢,安裝程序會(huì)根據(jù)ks.cfg中的設(shè)置重啟/關(guān)閉系統(tǒng),并結(jié)束安裝。
Cobbler集中和簡(jiǎn)化了通過(guò)網(wǎng)絡(luò)安裝操作系統(tǒng)需要使用到的DHCP、TFTP和DNS服務(wù)的配置。Cobbler不僅有一個(gè)命令行界面,還提供了一個(gè)Web界面,大大降低了使用者的入門水平。Cobbler內(nèi)置了一個(gè)輕量級(jí)配置管理系統(tǒng),但它也支持和其它配置管理系統(tǒng)集成,如Puppet,暫時(shí)不支持SaltStack。
** 簡(jiǎn)單的說(shuō),Cobbler是對(duì)kickstart的封裝,簡(jiǎn)化安裝步驟、使用流程,降低使用者的門檻。**
網(wǎng)卡必須有PXE功能
DHCP 動(dòng)態(tài)分配IP地址
TFTP 負(fù)責(zé)系統(tǒng)啟動(dòng)文件傳輸
HTTP 提供CentOS系統(tǒng)文件下載服務(wù)
[root@m01 ~]# cat /etc/redhat-release
CentOS release 6.8 (Final) #CentOS 6.8
[root@m01 ~]# uname -r
2.6.32-642.el6.x86_64
[root@m01 ~]# /etc/init.d/iptables status #防火墻需要關(guān)閉
iptables: Firewall is not running.
[root@m01 ~]# getenforce #selinux需要關(guān)閉
Disabled
[root@m01 ~]# ll -d /tmp/ #/tmp目錄權(quán)限為1777
drwxrwxrwt. 3 root root 4096 Jun 12 08:42 /tmp/
注意:
虛擬機(jī)網(wǎng)卡采用NAT模式,不要使用橋接模式,因?yàn)樯院笪覀儠?huì)搭建DHCP服務(wù)器,在同一局域網(wǎng)多個(gè)DHCP服務(wù)器會(huì)有沖突
VMware的NAT模式的dhcp服務(wù)也關(guān)閉,避免干擾
DHCP(Dynamic Host Configuration Protocol,動(dòng)態(tài)主機(jī)配置協(xié)議)通常被應(yīng)用在大型的局域網(wǎng)絡(luò)環(huán)境中,主要作用是集中的管理,分配IP地址,使網(wǎng)絡(luò)環(huán)境中的主機(jī)動(dòng)態(tài)的活的IP地址、網(wǎng)關(guān)地址、DNS服務(wù)器地址等信息,并能夠提升地址的使用率。端口為67
通過(guò)yum安裝dhcp軟件
yum -y install dhcp
查看配置文件位置
[root@m01 ~]# rpm -ql dhcp |grep dhcpd.conf
/etc/dhcp/dhcpd.conf
配置文件內(nèi)容修改為
[root@m01 ~]# cat /etc/dhcp/dhcpd.conf
subnet172.16.1.0 netmask 255.255.255.0 {
range 172.16.1.100 172.16.1.200;
option subnet-mask 255.255.255.0;
default-lease-time 21600;
max-lease-time 43200;
next-server 172.16.1.61;
filename "/pxelinux.0";
}
配置文件內(nèi)容說(shuō)明:
subnet 172.16.1.0 netmask 255.255.255.0 #指定DHCP服務(wù)器所在的網(wǎng)段和子網(wǎng)掩碼
range 172.16.1.100172.16.1.200; #指定DHCP服務(wù)端可分配的起始IP-結(jié)束IP(IP池范圍)
option subnet-mask255.255.255.0; #指定netmask子網(wǎng)掩碼
default-lease-time 21600; #設(shè)置默認(rèn)的IP租用期限
max-lease-time 43200; #設(shè)置最大的IP租用期限
next-server 172.16.1.61; #告訴客戶端TFTP服務(wù)器的IP(我們部署在一臺(tái)寫本機(jī)IP即可)
filename"/pxelinux.0"; #告訴客戶端從TFTP根目錄下載pxelinux.0文件
啟動(dòng)dhcpd服務(wù)
/etc/init.d/dhcpd start
查看dhcpd服務(wù)端口
[root@m01 ~]# netstat -luntp |grep dhcp
udp 0 0 0.0.0.0:67 0.0.0.0:* 3410/dhcpd
注意:
本來(lái)軟件裝完后都要加入開(kāi)機(jī)自啟動(dòng),但這個(gè)Kickstart系統(tǒng)就不能開(kāi)機(jī)自啟動(dòng),而且用完后服務(wù)都要關(guān)閉,防止未來(lái)重啟服務(wù)器自動(dòng)重裝系統(tǒng)了。
如果機(jī)器數(shù)量過(guò)多的話,注意dhcp服務(wù)器的地址池,不要因?yàn)楹谋MIP而導(dǎo)致dhcpd服務(wù)器沒(méi)有IP地址release的情況。
一臺(tái)服務(wù)器每次會(huì)自動(dòng)分配兩個(gè)IP地址,所以一般設(shè)定地址池時(shí)IP數(shù)量要大于機(jī)器數(shù)量?jī)杀兜臉幼?,避免地址池耗盡而無(wú)法正常安裝系統(tǒng)
TFTP(Trivial File Transfer Protocol,簡(jiǎn)單文件傳輸協(xié)議)是TCP/IP協(xié)議簇中的一個(gè)用來(lái)在客戶機(jī)與服務(wù)器之間進(jìn)行簡(jiǎn)單文件傳輸?shù)膮f(xié)議,提供不復(fù)雜、開(kāi)銷不大的文件傳輸服務(wù)。端口號(hào)為69。
通過(guò)yum安裝tftp服務(wù)
yum -y install tftp-server
啟用tftp服務(wù)(修改)
[root@m01 ~]# vim /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files usingthe trivial file transfer \
# protocol. The tftp protocol is often used to bootdiskless \
# workstations,download configuration files to network-aware printers, \
# and to startthe installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s/var/lib/tftpboot #指定tftp根目錄,保持默認(rèn)不用修改
disable = no #將原本的yes改為no表示xinetd啟動(dòng)tftp守護(hù)進(jìn)程
per_source = 11
cps = 100 2
flags = IPv4
}
啟動(dòng)xinetd并查看端口
[root@m01 ~]# /etc/init.d/xinetd start
Starting xinetd: [ OK ]
[root@m01 ~]# netstat -luntp |grep xinet
udp 0 0 0.0.0.0:69 0.0.0.0:* 3493/xinetd
通過(guò)yum安裝apache軟件
yum -y install httpd
啟動(dòng)apache
[root@m01 ~]# /etc/init.d/httpd start
Starting httpd: httpd: Could not reliablydetermine the server's fully qualified domain name, using 172.16.1.61 forServerName
[ OK ]
取消警告方法
sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf
掛載iso鏡像文件到虛擬機(jī)(生產(chǎn)環(huán)境可以用上傳鏡像文件的方式)
mount: you must specify the filesystem type
#解決方法為將虛擬機(jī)下列狀態(tài)點(diǎn)上連接
創(chuàng)建掛載目錄
mkdir -p /var/www/html/CentOS6.8
掛載iso鏡像到目錄
mount /dev/cdrom /var/www/html/CentOS6.8
#掛載完后會(huì)提示這個(gè)設(shè)備是只讀的
#mount: block device /dev/sr0 is write-protected,mounting read-only
查看掛載信息
[root@m01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 6.9G 1.5G 5.1G 23% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 34M 147M 19% /boot
/dev/sr0 3.7G 3.7G 0 100% /var/www/html/CentOS6.8
測(cè)試是否能夠正常瀏覽器訪問(wèn)
或者采用curl命令測(cè)試
[root@m01 ~]# curl -I 172.16.1.61/CentOS6.8/
HTTP/1.1 200 OK
Date: Mon, 12 Jun 2017 02:24:14 GMT
Server: Apache/2.2.15 (CentOS)
Connection: close
Content-Type: text/html;charset=UTF-8
syslinux是一個(gè)功能強(qiáng)大的引導(dǎo)加載程序,而且兼容各種介質(zhì)。SYSLINUX是一個(gè)小型的Linux操作系統(tǒng),它的目的是簡(jiǎn)化首次安裝Linux的時(shí)間,并建立修護(hù)或其它特殊用途的啟動(dòng)盤。如果沒(méi)有找到pxelinux.0這個(gè)文件,可以安裝一下。
配置syslinux
通過(guò)yum安裝syslinux
yum -y install syslinux
復(fù)制啟動(dòng)文件到tftp根目錄下
cp /usr/share/syslinux/pxelinux.0/var/lib/tftpboot/
#查看目錄下是否有該文件
[root@m01 ~]# ls /var/lib/tftpboot/
pxelinux.0
復(fù)制相關(guān)啟動(dòng)文件到tftp根目錄下
cp -a /var/www/html/CentOS6.8/isolinux/*/var/lib/tftpboot/
#查看Linux相關(guān)啟動(dòng)文件是否正常復(fù)制過(guò)去
[root@m01 ~]# ls /var/lib/tftpboot/
boot.cat grub.conf isolinux.bin memtest splash.jpg vesamenu.c32
boot.msg initrd.img isolinux.cfg pxelinux.0 TRANS.TBL vmlinuz
創(chuàng)建一個(gè)pxelinux.cfg目錄存放配置文件
mkdir -p /var/lib/tftpboot/pxelinux.cfg
#注意這個(gè)是存放配置文件的目錄,并不是一個(gè)文件,里面可以存放很多配置文件
cd /var/lib/tftpboot/pxelinux.cfg
cp /var/www/html/CentOS6.8/isolinux/isolinux.cfg/var/lib/tftpboot/pxelinux.cfg/default
#復(fù)制鏡像中的isolinux.cfg配置文件到該目錄下并改名為default
[root@m01 pxelinux.cfg]# ll
total 4
-r--r--r-- 1 root root 923 Jun 12 10:31 default
下圖是我們安裝CentOS系統(tǒng)的啟動(dòng)菜單目錄
[root@m01 ~]# cat/var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32 #默認(rèn)加載一個(gè)菜單
#prompt 1 #開(kāi)啟會(huì)顯示命令行'boot:'提示符。prompt值為0時(shí)則不顯示,將會(huì)直接啟動(dòng)default參數(shù)中指定的內(nèi)容。
timeout 600 #timeout時(shí)間是引導(dǎo)時(shí)等待用戶手動(dòng)選擇的時(shí)間,設(shè)為1可直接引導(dǎo),單位為1/10秒
display boot.msg
#啟動(dòng)菜單背景圖片、標(biāo)題、顏色
menu background splash.jpg
menu title Welcome to CentOS 6.8!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
# label指定在boot:提示符下輸入的關(guān)鍵字,比如boot:linux[ENTER],這個(gè)會(huì)啟動(dòng)label linux下標(biāo)記的kernel和initrd.img文件。
label linux #一個(gè)標(biāo)簽就是前面圖片的一行選項(xiàng)
menu label^Install or upgrade an existing system
menudefault
kernelvmlinuz #指定要啟動(dòng)的內(nèi)核。同樣要注意路徑,默認(rèn)是/tftpboot目錄。
appendinitrd=initrd.img #指定追加給內(nèi)核的參數(shù),initrd.img是一個(gè)最小的Linux系統(tǒng)
label vesa
menu labelInstall system with ^basic video driver
kernelvmlinuz
appendinitrd=initrd.img nomodeset
label rescue
menu label^Rescue installed system
kernelvmlinuz
appendinitrd=initrd.img rescue
label local
menu labelBoot from ^local drive
localboot0xffff
label memtest86
menu label^Memory test
kernelmemtest
append -
創(chuàng)建一臺(tái)新的虛擬機(jī)==>CentOS64位==>指定100G磁盤==>LAN區(qū)段與kickstart服務(wù)器一樣==>拍攝快照方便反復(fù)使用==>打開(kāi)電源
擴(kuò)展:DELL R710服務(wù)器開(kāi)機(jī)后,根據(jù)提示按F12,進(jìn)行PXE啟動(dòng)。物理服務(wù)器有4個(gè)網(wǎng)卡,所以還會(huì)讓選擇從哪個(gè)網(wǎng)卡啟動(dòng)。
打開(kāi)電源后,分配IP地址和下載啟動(dòng)文件
進(jìn)入到啟動(dòng)菜單,選擇第一個(gè)全新安裝系統(tǒng)
語(yǔ)言選擇英語(yǔ)==>鍵盤選擇us
這里我們選擇網(wǎng)絡(luò)安裝==>URL安裝==>eth2安裝
注:使用NFS的寫法nfs:10.0.0.1:/data/sys/kickstart/ks.cfg
選擇完eth2后禁用IPv6
輸入前文瀏覽器訪問(wèn)到頁(yè)面的URL,只是將外網(wǎng)IP改為內(nèi)網(wǎng)IP
之后的安裝步驟與光盤安裝系統(tǒng)一模一樣(詳情可以查看企業(yè)級(jí)標(biāo)準(zhǔn)安裝CentOS6.8系統(tǒng))
我們以之前安裝配置好kickstart并且進(jìn)行手動(dòng)網(wǎng)絡(luò)安裝的基礎(chǔ)之上,進(jìn)行下列操作
通常,我們?cè)诎惭b操作系統(tǒng)的過(guò)程中,需要大量的服務(wù)器交互操作,為了減少這個(gè)交互過(guò)程,kickstart就誕生了。使用這種kickstart,只需實(shí)現(xiàn)定義好一個(gè)kickstart自動(dòng)應(yīng)答配置文件ks.cfg(通常存放在安裝服務(wù)器上),并讓安裝程序知道該配置文件的位置,在安裝過(guò)程中安裝程序就可以自己從該文件中讀取安裝配置,這樣就避免了在安裝過(guò)程中多次的人機(jī)交互,從而實(shí)現(xiàn)無(wú)人值守的自動(dòng)化安裝。
生成kickstart自動(dòng)應(yīng)答文件的三種方法:
方法1:每安裝好一臺(tái)Centos機(jī)器,Centos安裝程序都會(huì)創(chuàng)建一個(gè)kickstart配置文件,記錄你的真實(shí)安裝配置。如果你希望實(shí)現(xiàn)和某系統(tǒng)類似的安裝,可以基于該系統(tǒng)的kickstart配置文件來(lái)生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于/root/anaconda-ks.cfg)
方法2:Centos提供了一個(gè)圖形化的kickstart配置工具。在任何一個(gè)安裝好的Linux系統(tǒng)上運(yùn)行該工具,就可以很容易地創(chuàng)建你自己的kickstart配置文件。kickstart配置工具命令為redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4,RHEL5).網(wǎng)上有很多用CentOS桌面版生成ks文件的文章,如果有現(xiàn)成的系統(tǒng)就沒(méi)什么可說(shuō)。但沒(méi)有現(xiàn)成的,也沒(méi)有必要去用桌面版,命令行也很簡(jiǎn)單。
方法3:閱讀kickstart配置文件的手冊(cè)。用任何一個(gè)文本編輯器都可以創(chuàng)建你自己的kickstart配置文件。
這個(gè)文件是創(chuàng)建完系統(tǒng)之后,自動(dòng)生成的一個(gè)記錄文件,默認(rèn)在/root目錄下
[root@m01 ~]# cat anaconda-ks.cfg
# Kickstart file automatically generated byanaconda.
#version=DEVEL
install
cdrom
lang en_US.UTF-8
keyboard us
network --onboot no --device eth0 --bootproto dhcp--noipv6
rootpw --iscrypted $6$Nj4ZBqCyoqEjruZ3$WDEW1bpKzDvffzYUv70FSZi60W6AAyzHXCQErNgw2tQE9OCVAB547mqm160aVb5pYG6v5mrUnbsbqNepJMDpX/
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 yourequested
# Note that any partitions you deleted are notexpressed
# here so unless you clear all partitions first,this is
# not guaranteed to work
#clearpart --none
#part /boot --fstype=ext4 --asprimary --size=200
#part swap --asprimary --size=768
#part / --fstype=ext4 --grow --asprimary--size=200
repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
%packages
@base
@compat-libraries
@core
@debugging
@development
@server-policy
@workstation-policy
python-dmidecode
sgpio
device-mapper-persistent-data
systemtap-client
%end
官網(wǎng)文檔
CentOS5 : http://www.centos.org/docs/5/html/Installation_Guide-en-US/s1-kickstart2-options.html
CentOS6 : https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-kickstart2-options.html
官網(wǎng)自帶中文版,選一下語(yǔ)言即可
ks.cfg文件組成大致分為3段
命令段
鍵盤類型,語(yǔ)言,安裝方式等系統(tǒng)的配置,有必選項(xiàng)和可選項(xiàng),如果缺少某項(xiàng)必選項(xiàng),安裝時(shí)會(huì)中斷并提示用戶選擇此項(xiàng)的選項(xiàng)
軟件包段
%packages
@groupname:指定安裝的包組
package_name:指定安裝的包
-package_name:指定不安裝的包
在安裝過(guò)程中默認(rèn)安裝的軟件包,安裝軟件時(shí)會(huì)自動(dòng)分析依賴關(guān)系。
腳本段(可選)
%pre:安裝系統(tǒng)前執(zhí)行的命令或腳本(由于只依賴于啟動(dòng)鏡像,支持的命令很少)
%post:安裝系統(tǒng)后執(zhí)行的命令或腳本(基本支持所有命令)
具體含義解釋:
關(guān)鍵字 | 含義 |
install | 告知安裝程序,這是一次全新安裝,而不是升級(jí)upgrade |
url --url=" " | 通過(guò)FTP或HTTP從遠(yuǎn)程服務(wù)器上的安裝樹(shù)中安裝 url --url ftp:// url --url="http://10.0.0.7/CentOS-6.8/" |
nfs | 從指定的NFS服務(wù)器安裝 nfs --server=nfsserver.example.com --dir=/tmp/install-tree |
text | 使用文本模式安裝 |
lang | 設(shè)置在安裝過(guò)程使用的語(yǔ)言以及系統(tǒng)的缺省語(yǔ)言:lang en_US.UTF-8 |
keyboard | 設(shè)置系統(tǒng)鍵盤類型:keyboard us |
zerombr | 清除mbr引導(dǎo)信息 |
bootloader | 系統(tǒng)引導(dǎo)相關(guān)配置。 |
network | 為通過(guò)網(wǎng)絡(luò)的kickstart安裝以及所安裝的系統(tǒng)配置聯(lián)網(wǎng)信息。 |
timezone | 設(shè)置系統(tǒng)時(shí)區(qū):timezone --utc Asia/Shanghai |
authconfig | 系統(tǒng)認(rèn)證信息。authconfig --enableshadow --passalgo=sha512 設(shè)置密碼加密方式為sha512啟用shadow文件 |
rootpw | root密碼,后面接上使用grub-crypt生成的密碼即可 |
clearpart | 清空分區(qū)clearpart --all --initlabel --all 從系統(tǒng)中清除所有分區(qū),--initlable 初始化磁盤標(biāo)簽 |
part | 磁盤分區(qū) part /boot --fstype=ext4 --asprimary --size=200 part swap --asprimary --size=768 part / --fstype=ext4 --grow --asprimary --size=200 --fstype=:為分區(qū)設(shè)置文件系統(tǒng)類型.有效的類型為ext2,ext3,swap和vfat。 |
firstboot | 負(fù)責(zé)協(xié)助配置redhat一些重要的信息 firstboot --disable |
selinux | 關(guān)閉selinux:selinux --disabled |
firewall | 關(guān)閉防火墻:firewall --disabled |
logging | 設(shè)置日志級(jí)別:logging --level=info |
reboot | 設(shè)定安裝完成后重啟,此選項(xiàng)必須存在,不然kickstart顯示一條消息,并等待用戶按任意鍵后才重新引導(dǎo),也可以選擇halt關(guān)機(jī) |
首先使用grub-crypt生成一個(gè)密碼備用
[root@m01 ~]# grub-crypt
Password: 123456
Retype password: 123456
$6$VTNRZpXZjvvzA3WO$t1upYjcs7mDa31O5OnnoMxIuJ0W6icoaFEG9y8xsQUtDUuzLi1.E67Uht7tf8BLBY4PnHT2/zMo5S2.tymqeS/
創(chuàng)建存放ks文件的目錄(在站點(diǎn)目錄下)
[root@m01 ~]# mkdir -p /var/www/html/ks_config
[root@m01 ~]# vim/var/www/html/ks_config/CentOS-6.8-ks.cfg
# Kickstart Configurator for CentOS 6.8 by hujing
install
url--url="http://172.16.1.61/CentOS6.8/"
text
lang en_US.UTF-8
keyboard us
zerombr
bootloader --location=mbr --driveorder=sda--append="crashkernel=auto rhgb quiet"
network --bootproto=dhcp --device=eth2--onboot=yes --noipv6 --hostname=CentOS6
timezone --utc Asia/Shanghai
authconfig --enableshadow --passalgo=sha512
clearpart --all --initlabel
part /boot --fstype=ext4 --asprimary --size=200
part swap --size=1024
part / --fstype=ext4 --grow --asprimary --size=200
firstboot --disable
selinux --disabled
firewall --disabled
logging --level=info
reboot
%packages
@base
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet
%post
wget -O /tmp/optimization.shhttp://172.16.1.61/ks_config/optimization.sh &>/dev/null
/bin/sh /tmp/optimization.sh
%end
也就是上方ks.cfg里面的%post中的optimization.sh
[root@m01 ~]# cat/var/www/html/ks_config/optimization.sh
#!/bin/bash
. /etc/init.d/functions
Ip=172.16.1.61
Port=80
ConfigDir=ks_config
# Judge Http server is ok?
PortNum=`nmap $Ip -p $Port 2>/dev/null|grep open|wc -l`
[ $PortNum -lt 1 ] && {
echo "Http server is bad!"
exit 1
}
# Defined result function
function Msg(){
if [$? -eq 0 ];then
action "$1" /bin/true
else
action "$1" /bin/false
fi
}
# Defined IP function
function ConfigIP(){
Suffix=`ifconfigeth2|awk -F "[ .]+" 'NR==2 {print $6}'`
cat>/etc/sysconfig/network-scripts/ifcfg-eth0 <<-END
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=10.0.0.$Suffix
PREFIX=24
GATEWAY=10.0.0.254
DNS1=10.0.0.254
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="Systemeth0"
END
Msg"config eth0"
cat>/etc/sysconfig/network-scripts/ifcfg-eth2 <<-END
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=172.16.1.$Suffix
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="Systemeth2"
END
Msg"config eth2"
}
# Defined Yum source Functions
function yum(){
YumDir=/etc/yum.repos.d
[ -f"$YumDir/CentOS-Base.repo" ] && cp $YumDir/CentOS-Base.repo{,.ori}
wget -O$YumDir/CentOS-Base.repo http://$Ip:$Port/$ConfigDir/CentOS-Base.repo&>/dev/null &&\
wget -O$YumDir/epel.repo http://$Ip:$Port/$ConfigDir/epel.repo &>/dev/null&&\
Msg"YUM source"
}
# Defined add Ordinary users Functions
function AddUser(){
useradd hujing&>/dev/null &&\
echo"123456"|passwd --stdin hujing &>/dev/null &&\
sed -i '98a hujing ALL=(ALL) NOPASSWD:ALL' /etc/sudoers &&\
visudo -c&>/dev/null
Msg"AddUser hujing"
}
# Defined Hide the system version number Functions
function HideVersion(){
[ -f"/etc/issue" ] && >/etc/issue
Msg"Hide issue"
[ -f"/etc/issue.net" ] && > /etc/issue.net
Msg"Hide issue.net"
}
# Defined SSHD config Functions
function sshd(){
SshdDir=/etc/ssh
[ -f"$SshdDir/sshd_config" ] && /bin/mv$SshdDir/sshd_config{,.ori}
wget -O$SshdDir/sshd_config http://$Ip:$Port/$ConfigDir/sshd_config &>/dev/null&&\
chmod 600$SshdDir/sshd_config
Msg"sshd config"
}
# Defined OPEN FILES Functions
function openfiles(){
[ -f"/etc/security/limits.conf" ] && {
echo'* - nofile 65535' >>/etc/security/limits.conf
Msg"open files"
}
}
# Defined Kernel parameters Functions
function kernel(){
KernelDir=/etc
[ -f"$KernelDir/sysctl.conf" ] && /bin/mv$KernelDir/sysctl.conf{,.ori}
wget -O$KernelDir/sysctl.conf http://$Ip:$Port/$ConfigDir/sysctl.conf&>/dev/null
Msg"Kernel config"
}
# Defined hosts file Functions
function hosts(){
HostsDir=/etc
[ -f"$HostsDir/hosts" ] && /bin/mv $HostsDir/hosts{,.ori}
wget-O $HostsDir/hosts http://$Ip:$Port/$ConfigDir/hosts &>/dev/null
Msg"Hosts config"
}
# Defined System Startup Services Functions
function boot(){
for hujingin `chkconfig --list|grep "3:on"|awk '{print $1}'|grep -vE"crond|network|rsyslog|sshd|sysstat"`
do
chkconfig $hujing off
done
Msg"BOOT config"
}
# Defined Time Synchronization Functions
function Time(){
echo"#time sync by zhangyao at $(date +%F)" >>/var/spool/cron/root
echo '*/5* * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null'>>/var/spool/cron/root
Msg"Time Synchronization"
}
# Defined main Functions
function main(){
ConfigIP
yum
AddUser
HideVersion
sshd
openfiles
kernel
hosts
boot
Time
}
main
快速執(zhí)行命令
cat>/var/lib/tftpboot/pxelinux.cfg/default<
prompt 0
label ks
kernel vmlinuz
append initrd=initrd.img ks=http://172.16.1.61/ks_config/CentOS-6.8-ks.cfg ksdevice=eth2
EOF
最小化原則用最精簡(jiǎn)的配置即可
[root@m01 ~]# cat/var/lib/tftpboot/pxelinux.cfg/default
default ks
prompt 0
label ks
kernelvmlinuz
appendinitrd=initrd.img ks=http://172.16.1.61/ks_config/CentOS-6.8-ks.cfgksdevice=eth2
我們可以采用直接打包上傳的方式
tar xfP ks_cofig2017-06-13.tar.gz
[root@m01 ~]# ll /var/www/html/ks_config/
total 28
-rw-r--r-- 1 root root 966 Jun 13 09:30 CentOS-6.8-ks.cfg
-rw-r--r-- 1 root root 2572 May 27 2016 CentOS-Base.repo
-rw-r--r-- 1 root root 1083 May 27 2016 epel.repo
-rw-r--r-- 1 root root 349 Jun 13 09:26 hosts
-rw-r--r-- 1 root root 3492 Jun 13 16:37optimization.sh
-rw-r--r-- 1 root root 3966 May 27 2016 sshd_config
-rw-r--r-- 1 root root 1602 May 27 2016 sysctl.conf
打開(kāi)系統(tǒng)電源,出去喝杯咖啡。過(guò)會(huì)回來(lái),系統(tǒng)就以經(jīng)裝好了??!
下面是安裝過(guò)程中截的幾個(gè)圖
如果安裝過(guò)程出錯(cuò),可以通過(guò)Alt+F2-F5切到其他控制臺(tái)查看報(bào)錯(cuò)信息
[root@CentOS6 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 98G 1.5G 91G 2% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 33M 147M 19% /boot
[root@CentOS6 ~]# hostname -I
10.0.0.103 172.16.1.103
[root@CentOS6 ~]# chkconfig --list |grep 3:on
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off
[root@CentOS6 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@CentOS6 ~]# getenforce
Disabled
由于多個(gè)客戶端可以從一個(gè)PXE服務(wù)器引導(dǎo),PXE引導(dǎo)映像使用了一個(gè)復(fù)雜的配置文件搜索方式來(lái)查找針對(duì)客戶機(jī)的配置文件。如果客戶機(jī)的網(wǎng)卡的MAC地址為8F:3H:AA:6B:CC:5D,對(duì)應(yīng)的IP地址為10.0.0.195,那么客戶機(jī)首先嘗試以MAC地址為文件名匹配的配置文件,如果不存在就以IP地址來(lái)查找。根據(jù)上述環(huán)境針對(duì)這臺(tái)主機(jī)要查找的以一個(gè)配置文件就是 /tftpboot/pxelinux.cfg/01-8F:3H:AA:6B:CC:5D。如果該文件不存在,就會(huì)根據(jù)IP地址來(lái)查找配置文件了,這個(gè)算法更復(fù)雜些,PXE映像查找會(huì)根據(jù)IP地址16進(jìn)制命名的客戶機(jī)配置文件。例如:10.0.0.195對(duì)應(yīng)的16進(jìn)制的形式為C0A801C3。(可以通過(guò)syslinux軟件包提供的gethostip命令將10進(jìn)制的IP轉(zhuǎn)換為16進(jìn)制)
如果C0A801C3文件不存在,就嘗試查找C0A801C文件,如果C0A801C也不存在,那么就嘗試C0A801文件,依次類推,直到查找C文件,如果C也不存在的話,那么最后嘗試default文件。
總體來(lái)說(shuō),pxelinux搜索的文件的順序是:
1. /tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
2. /tftpboot/pxelinux.cfg/C0A801C3
3. /tftpboot/pxelinux.cfg/C0A801C
4. /tftpboot/pxelinux.cfg/C0A801
5. /tftpboot/pxelinux.cfg/C0A80
6. /tftpboot/pxelinux.cfg/C0A8
7. /tftpboot/pxelinux.cfg/C0A
8. /tftpboot/pxelinux.cfg/C0
9. /tftpboot/pxelinux.cfg/C
10. /tftpboot/pxelinux.cfg/default
應(yīng)用:如果已經(jīng)從廠商獲取了服務(wù)器MAC地址,就可以差異化定制安裝服務(wù)器了。
這個(gè)情況是selinux沒(méi)有關(guān)閉