已經或將來將從事Linux系統運維工做的讀者,常常會遇到一些機器式的重複的共走,例如:有時間同時上線幾十甚至上百臺服務器,並且須要咱們在短期內完成系統安裝。html
q 光盤安裝系統===>一個的服務器DVD內置光驅百千塊,百臺服務器都配光驅就浪費了,由於一臺服務器也就開始裝系統能用的上,之後用的機會屈指可數。用USB外置光驅,插來插去也是醉了。linux
q U盤安裝系統===>仍是一樣的問題,要一臺一臺服務器插U盤。web
q 網絡安裝系統(ftp,http,nfs) ===>這個方法不錯,只要服務器能聯網就能夠安裝系統了,可是還須要一臺臺服務器去敲鍵盤點鼠標。時刻想着偷懶的咱們,有沒有更好的方法!apache
嚴格來講,PXE並非一種安裝方式,而是一種引導方式。進行PXE安裝的必要條件是在要安裝的計算機中必須包含一個PXE支持的網卡(NIC)即網卡中必需要有PXE Client。PXE(Pre-boot Execution Environment)協議可使計算機經過網絡啓動。此協議分爲Client端和Server端,而PXE Client則在網卡的ROM中。當計算機引導時,BIOS把PXE Client調入內存中執行,而後由PXE Client將放置在遠端的文件經過網絡下載到本地運行。運行PXE協議須要設置DHCP服務器和TFTP服務器。DHCP服務器會給PXE Client(將要安裝系統的主機)分配一個IP地址,因爲是給PXE Client分配IP地址,因此在配置DHCP服務器時須要增長2的PXE設置。此外,在PXE Client的ROM中,已經存在了TFTP Client,那麼它就能夠經過TFTP協議到TFTP Server上下載所需的文件了。centos
KickStart是一種無人值守的安裝方法。它的工做原理時在安裝過程當中記錄典型的須要人工干預填寫的各類參數,並生成一個名爲ks.cfg的文件。若是在安裝過程當中(不僅侷限於生成KickStart安裝文件的機器)出現要填寫參數的狀況,安裝程序首選會去查找KickStart生成的文件,若是找到合適的參數,就採用所找到的參數;若是沒有找到合適的參數,便須要安裝着手工干預了。因此若是KickStart文件涵蓋了安裝過程當中可能出現的全部須要填寫的參數,那麼安裝着徹底能夠只告訴安裝程序從何處去ks.cfg文件,而後就去忙本身的事情。等安裝完畢,安裝程序會根據ks.cfg中設置重啓系統,並結束安裝。服務器
對於學習 DHCP來講,很重要的一部分就是對於DHCP工做過程的理解。那麼首先DHCP分爲兩個部分:一個是服務器端,另外一個是客戶端。全部客戶機的IP地址設 定資料都由DHCP服務器集中管理,並負責處理客戶端的DHCP要求;而客戶端則會使用從服務器分配下來的IP地址。網絡
DHCP服務器提供三 種IP分配方式:自動分配(Automatic Allocation)、動態分配(Dynamic Allocation)和手動分配。自動分配是當DHCP客戶端第一次成功地從DHCP服務器端分配到一個IP地址以後,就永遠使用這個地址。動態分配是 當DHCP客戶端第一次從DHCP服務器分配到IP地址後,並不是永久地使用該地址,每次使用完後,DHCP客戶端就得釋放這個IP地址,以給其餘客戶端使 用,而手動分配是由DHCP服務器管理員專門指定IP地址。app
DHCP客戶機在啓動時,會搜尋網絡中是否存在DHCP服務器。若是找到,則給 DHCP服務器發送一個請求。DHCP服務器接到請求後,爲DHCP客戶機選擇TCP/IP配置的參數,並把這些參數發送給客戶端。若是已配置衝突檢測設置,則 DHCP 服務器在將租約中的地址提供給客戶機以前會試用Ping測試做用域中每一個可用地址的連通性。這可確保提供給客戶的每一個IP地址都沒有被使用手動 TCP/IP配置的另外一臺非 DHCP 計算機使用。運維
根據客戶端是否第一次登陸網絡,DHCP的工做形式會有所不一樣。客戶端從DHCP服務器上得到IP地址的整個過程分爲如下六個步驟:dom
當DHCP客戶端第一次登陸網絡的時候,計算機發現本機上沒有任何IP地址設定,將以廣播方式發送DHCP discover發現信息來尋找DHCP服務器,即向255.255.255.255發送特定的廣播信息。網絡上每一臺安裝了TCP/IP協議的主機都會 介紹這個廣播信息,但只有DHCP服務器纔會作出響應。
在網絡中接收到DHCP discover發現信息的DHCP服務器都會作出相應,它從還沒有分配的IP地址中挑選一個分配給DHCP客戶機,向DHCP客戶機發送一個包含分配的IP地址和其餘設置的DHCP offer提供信息。
DHCP客戶端接受到DHCP offer提供信息以後,選擇第一個接收到的提供信息,而後以廣播的方式回答一個DHCP request請求信息,該信息包含向它所選定的DHCP服務器請求IP地址的內容。
當DHCP服務器收到DHCP客戶端回答的DHCP request請求信息以後,便向DHCP客戶端發送一個包含它所提供的IP地址和其餘設置的DHCP ack確認信息,告訴DHCP客戶端可使用它提供的IP地址。而後,DHCP客戶機便將其TCP/IP協議與網卡綁定,另外,除了DHCP客戶機選中的 服務器外,其餘的DHCP服務器將收回曾經提供的IP地址。
之後DHCP客戶端每次從新登陸網絡時,就不須要再發送DHCP discover發現信息了,而是直接發送包含前一次所分配的IP地址的DHCP request請求信息。當DHCP服務器收到這一信息後,它會嘗試讓DHCP客戶機繼續使用原來的IP地址,並回答一個DHCP ack確認信息。若是此IP地址已沒法再分配給原來的DHCP客戶機使用時,則DHCP服務器給DHCP客戶機回答一個DHCP nack否定信息。當原來的DHCP客戶機收到此DHCP nack否定信息後,它就必須從新發送DHCPdiscover發現信息來請求新的IP地址。
客戶端從新登陸.如圖1-1
圖1-1
若是客戶端DHCP request 內的IP地址在服務器端沒有被使用,DHCP服務器回覆DHCP ACK繼續使用IP。如圖1-2
圖1-2
若是客戶端DHCP request 內的IP地址在服務器端已被使用,DHCP服務器回覆DHCP NACK告訴客戶端IP已被使用。圖1-3
圖1-3
客戶端從新開始DHCP流程。如圖1-4
圖1-4
DHCP 服務器向DHCP客戶機出租的IP地址通常都有一個租借期限,期滿後DHCP服務器便會收回出租的IP地址。若是DHCP客戶機要延長其IP租約,則必須更新其IP租約。DHCP客戶機啓動時和IP租約期限過一半時,DHCP客戶機都會自動向DHCP服務器發送更新其IP租約的信息。
執行PXE+KickStart安裝須要的設備:
q DHCP服務器
q TFTP服務器
q KickStart所生成的ks.cfg配置文件
q 一臺存放系統安裝文件的服務器,如NFS、HTTP、或FTP服務器
q 一個帶有PXE支持網卡的主機。
經過Kickstart+Dhcp+tftp+httpd實現
[root@kickstart ~]# cat /etc/redhat-release
CentOS release 6.7 (Final)
必須關閉selinux防火牆,臨時關閉會不生效,建議修改配置文件後,重啓操做系統。
[root@kickstart ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
測試環境IP地址:外網eth0爲NAT模式,能夠上網
[root@kickstart ~]# ifconfig eth0
eth0Link encap:Ethernet HWaddr 00:1C:42:C4:75:DD
inet addr:10.0.0.3 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::21c:42ff:fec4:75dd/64 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500 Metric:1
RX packets:501 errors:0 dropped:0 overruns:0 frame:0
TX packets:216 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:61453 (60.0 KiB) TX bytes:27706 (27.0 KiB)
[root@kickstart ~]# yum -y install dhcp
[root@kickstart ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf #拷貝dhcp配置文件
#修改配置文件/etc/dhcpd/dhcpd.conf;添加以下
ddns-update-style none;
ignore client-updates;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.200;
option subnet-mask 255.255.255.0;
option domain-name "internal.example.org";
default-lease-time 600;
max-lease-time 7200;
next-server 10.0.0.3;
filename "/pxelinux.0";
}
[root@kickstart ~]# cat /etc/sysconfig/dhcpd #修改/etc/sysconfig/dhcpd配置文件, 表示dhcp將只在eth0網絡接口上提供DHCP服務。
# Command line options here
DHCPDARGS=eth0
[root@kickstart ~]# /etc/init.d/dhcpd start #啓動dhcpd服務
DHCP註釋:
ddns-update-style none; #設置與DHCP服務相關聯的DNS數據動態更新模式,實際的DHCP應用中不多用改參數,設置爲none便可。
ignore client-updates; #不容許客戶機更新DNS記錄
subnet 172.16.10.0 netmask 255.255.255.0 {
range 172.16.10.100 172.16.10.200; #可分配的起始IP-結束IP
option subnet-mask 255.255.255.0; #設置netmask
default-lease-time 21600; #設置默認的IP租用期限
max-lease-time 43200; #設置最大的IP租用期限
next-server 172.16.10.20; #告知客戶端TFTP服務器ip
filename "/pxelinux.0"; #告知客戶端從TFTP根目錄下載pexlinux.0
}
TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。端口號爲69。
[root@kickstart ~]# yum -y install tftp-server #安裝tftp-server服務
#修改配置文件/etc/xinetd.d/tftp disabled修改成no
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server =/usr/sbin/in.tftpd
server_args = -s/var/lib/tftpboot #指定目錄,保持默認,不用修改
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
[root@kickstart ~]# /etc/init.d/xinetd start #啓動服務xinetd代理服務
能夠用Apache或Nginx提供HTTP服務。Python的命令web服務不行,會有報錯。
[root@kickstart ~]# yum -y install httpd #安裝httpd服務
[root@kickstart ~]#sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf #修改apache配置文件
[root@kickstart ~]# /etc/init.d/httpd start #啓動apache服務
[root@kickstart ~]# mkdir /var/www/html/centos6/ #建立centos66目錄
[root@kickstart ~]# mount /dev/cdrom /var/www/html/centos6/ #掛載鏡像文件
# 無論怎麼弄,只要把安裝光盤內容能經過web發佈便可。由於是演示,若是複製鏡像就有點浪費時間。但生產環境就必定要複製了,光盤讀取速度有限。
syslinux是一個功能強大的引導加載程序,並且兼容各類介質。SYSLINUX是一個小型的Linux操做系統,它的目的是簡化首次安裝Linux的時間,並創建修護或其它特殊用途的啓動盤。若是沒有找到pxelinux.0這個文件,能夠安裝一下。
[root@kickstart ~]# yum -y install syslinux #安裝syslinux
複製配置文件
[root@kickstart ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@kickstart ~]# cp -a /var/www/html/centos6/isolinux/* /var/lib/tftpboot/
[root@kickstart ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg
[root@kickstart ~]# cp /var/www/html/centos6/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
添加以下,配置文件
[root@kickstart ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
default ks
prompt 0
label ks
kernel vmlinuz
append initrd=initrd.img ks=http://10.0.0.3/config/Centos6-ks.cfg ksdevice=eth0
# ksdevice=eth0表明當客戶端有多塊網卡的時候,要實現自動化須要設置從eth0安裝,不指定的話,安裝的時候系統會讓你選擇,那就不叫全自動化了。
[root@kickstart ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32 #默認加載一個菜單
#prompt 1 #開啓會顯示命令行’boot:’ 提示符。prompt值爲0時則不提示,將會直接啓動’default’參數中指定的內容
timeout 600#timeout時間是引導等待用戶手動選擇的時間,設爲1可直接引導,單位爲1/10秒。
display boot.msg
#菜單背景圖片、標題、顏色。
menu background splash.jpg
menu title Welcome to CentOS 6.7!
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
#lable指定在boot:提示符下輸入的關鍵字,好比boot:linux[ENTER],這個會啓動lable linux下標記的kernel和initrd.img文件
label linux#一個標籤就是前面圖片的一行選項。
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz #指定要啓動的內核。一樣要注意路徑,默認是/tftpboot目錄
append initrd=initrd.img #指定追加給內核的參數,initrd.img是一個最小的linux系統
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img nomodeset
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append -
[root@kickstart ~]# grub-crypt #配置root使用密碼,加入修改Centos6-ks.cfg文件
Password:
Retype password:
$6$006TOzR9rk18CPQw$t/xTyZEw60OWqAho.J1oj3PRo2ib93blCIlVuFCPc6/fuCADB02LKHfNV4x7jtpNAX98TK3K8Zpem8Qkv92111
[root@kickstart ]#mkdir /var/www/html/config 建立配置文件及優化腳本站點目錄
[root@kickstart html]# cat /var/www/html/config/Centos6-ks.cfg
install 安裝
url --url="http://10.0.0.3/centos6" 系統文件地址,這裏使用http
text 文本界面安裝
lang en_US.UTF-8語言
keyboard us鍵盤
zerombr 清空mbr
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" 引導加載程序參數
network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS6eth1網絡配置
timezone --utc Asia/Shanghai 時區
authconfig --enableshadow --passalgo=sha512 驗證配置
rootpw--iscrypted $6$006TOzR9rk18CPQw$t/xTyZEw60OWqAho.J1oj3PRo2ib93blCIlVuFCPc6/fuCADB02LKHfNV4x7jtpNAX98TK3K8Zpem8Qkv92111root密碼,使用grub-crypt生成
clearpart --all --initlabel 清空分區
part /boot --fstype=ext4 --asprimary --size=100 分區/boot 100M
part swap --size=1500 分區swap 1500M
part / --fstype=ext4 --grow --asprimary --size=200 分區/ 全部
firstboot --disable 關閉一系列服務
selinux --disabled
firewall --disabled
logging --level=info 日誌記錄等級info級別
reboot 重啓
%packages 包組-軟件名
@base
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet
%post 安裝完執行腳本
wget -O /tmp/optimization.sh http://10.0.0.3/config/optimization.sh &>/dev/null 下載腳本,而後執行
/bin/sh /tmp/optimization.sh 執行腳本
%end
須要和pxe服務器內網同網段,開機經過dhcp自動獲取,而後自動開始裝機
解決辦法:
1)咱們先證實安裝源服務器是正常的,咱們用其餘機器下載install.img文件,使用下面的命令:
wget spacer.gifhttp://192.168.0.3/centos6/p_w_picpaths/install.img
若能夠正常的下載這個文件,說明安裝源服務器(即kickstart服務器)正常。
2)查找install.img文件的前一階段是配置網卡、網關階段,檢查你的ks文件的配置的網卡部分,是否與安裝源的ip不是一個網段,若不是一個網段就會形成網絡不通,產生這個錯誤。這個問題也是困擾了我好幾個小時的問題,迷惑性很大。
報錯緣由:selinux沒關 解決辦法:關閉Selinux防火牆,而後重啓,否則不生效