PXE+KickStart+Nginx(http)+DHCP無人值守安裝Centos6.6系統
1.1 什麼是PXE
PXE(Pre-boot Execution Environment,預啓動執行環境)是由Intel公司開發的最新技術,工作於Client/Server的網絡模式,支持工作站通過網絡從遠端服務器下載映像,並由此支持通過網絡啓動操作系統,在啓動過程中,終端要求服務器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)協議下載一個啓動軟件包到本機內存中執行,由這個啓動軟件包完成終端基本軟件設置,從而引導預先安裝在服務器中的終端操作系統。
嚴格來說,PXE 並不是一種安裝方式,而是一種引導方式。進行 PXE 安裝的必要條件是在要安裝的計算機中必須包含一個 PXE 支持的網卡(NIC),即網卡中必須要有 PXE Client。PXE 協議可以使計算機通過網絡啓動。此協議分爲 Client端和 Server 端,而PXE Client則在網卡的 ROM 中。當計算機引導時,BIOS 把 PXE Client 調入內存中執行,然後由 PXE Client 將放置在遠端的文件通過網絡下載到本地運行。運行 PXE 協議需要設置 DHCP 服務器和 TFTP 服務器。DHCP 服務器會給 PXE Client(將要安裝系統的主機)分配一個 IP 地址,由於是給 PXE Client 分配 IP 地址,所以在配置 DHCP 服務器時需要增加相應的 PXE 設置。此外,在 PXE Client 的 ROM 中,已經存在了 TFTP Client,那麼它就可以通過 TFTP 協議到 TFTP Server 上下載所需的文件了.
1.2 什麼是Kickstart
Kickstart是一種無人值守的安裝方式。它的工作原理是在安裝過程中記錄典型的需要人工干預填寫的各種參數,並生成一個名爲ks.cfg的文件。如果在安裝過程中(不只侷限於生成Kickstart安裝文件的機器)出現要填寫參數的情況,安裝程序首先會去查找Kickstart生成的文件,如果找到合適的參數,就採用所找到的參數;如果沒有找到合適的參數,便需要安裝者手工干預了。所以,如果Kickstart文件涵蓋了安裝過程中可能出現的所有需要填寫的參數,那麼安裝者完全可以只告訴安裝程序從何處取ks.cfg文件,然後就去忙自己的事情。等安裝完畢,安裝程序會根據ks.cfg中的設置重啓系統,並結束安裝.
1.3 PXE+Kickstart 無人值守安裝操作系統完整過程如下
第一步:PXE Client向DHCP服務器發送請求
首先,將支持PXE的網絡接口卡(NIC)的客戶端BIOS設置爲網絡啓動,通過PXE BootROM(自啓動芯片)會一UDP協議發送一個廣播請求,向網絡中的DHCP服務器申請一個IP地址信息.
第二步:DHCP服務器提供信息
DHCP服務器收到客戶端請求,驗證是否來自PXE Client的請求,驗證通過後向客戶端迴響應信息,包括:客戶端IP地址,TFTP Server、pxelinux.0文件名.
第三步:PXE客戶端請求下載啓動文件
客戶端請求傳送啓動所需文件,包括pxelinux.0、pxelinux. cfg/default、vmlinuz、initrd.img等文件.
第四步:Boot Install Server響應客戶端請求並傳送文件
TFTP服務器收到客戶端請求後,彼此間進行通信應答,確定啓動參數,BootROM由TFTP通信協議從Boot Server下載啓動安裝程序所必需文件(pxelinux.0pxelinux.cfg/default).default文件下載完成後,會根據
該文件中定義的引導順序,啓動Linux安裝程序的引導內核.
第五步:請求下載Kickstart配置文件
客戶端通過pxelinux.cfg/default文件成功的引導Linux運行是因爲制訂了Kickstart配置文件信息所以當一vmlinuz、initrd.img組成的系統運行成功後系統確定你通過什麼安裝介質來安裝Linux如果是通過網絡安裝(NFS、FTP、HTTP)則會在這個時候初始化網絡,並請求下載Kickstart配置文件.剛纔PXE不是已經獲取過IP地址了嗎?爲什麼現在還需要一次因爲現在已經進入了有vmlinuz、initrd.img等文件組成的系統中了,由於PXE的網絡配置並不能傳遞給這個系統,所以纔會進行兩次獲取IP地址過程.
第六步:客戶端安裝操作系統
將ks.cfg文件下載後,通過該文件找到OS Sserver,並按照該文件的配置請求下載安裝過程需要的文件,OS Server和客戶端建立連接後,將開始傳輸文件,客戶端將開始安裝操作系統,安裝完成後,將會根據ks.cfg文件設置來重啓或關機注意:安裝完成後開機一定要將BIOS修改會從硬盤啓動,不然的話又會重複的自動安裝操作系統.
1.4 系統環境
試驗環境:Vmware Workstation11
網絡模式:NAT模式
DHCP、TFTP、HTTP、等服務在同一臺服務其IP:10.0.0.132
[root@PXE ~]# uname -a
Linux PXE 2.6.32-504.12.2.el6.x86_64 #1 SMP Wed Mar 11 22:03:14 UTC2015 x86_64 x86_64 x86_64 GNU/Linux
[root@PXE ~]# cat /etc/redhat-release
CentOS release 6.6 (Final)
[root@PXE ~]# uname -r
2.6.32-504.12.2.el6.x86_64
[root@PXE ~]# uname -m
x86_64
[root@PXE ~]# uname -n
PXE
[root@PXE ~]# /etc/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@PXE ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
1.5 準備工作
生成ks.cfg文件需要system-config-kickstart 工具,而此工具依賴於X Windows,所以我們需要安裝X Windows 和Desktop 並重啓系統.
[root@PXE ~]# yum -y groupinstall "X Window System"
安裝gnome(6.2中Desktop就是gnome)
[root@PXE ~]# yum groupinstall "Desktop"
安裝gnome(6.0以下的系統)
[root@PXE ~]# yum -y groupinstall 'GNOME Desktop Environment'
如果需要中文界面我們需要安裝中文語言
[root@PXE ~]# yum groupinstall "Chinese Support"
最關鍵的一步了啓動gnome
[root@PXE ~]# startx
1.6 無人值守安裝配置過程
1.6.1 配置PXE網絡安裝的說明及步驟順序
創建/data/sys目錄用於Nginx web目錄,用於存放linux系統的安裝文件.
配置TFTP服務器,用於提供客戶端PXE引導所必須的啓動文件
配置DHCP,用於給客戶端提供IP地址及其它信息
配置kickstart用於自動應答操作系統安裝
安裝Pcre
安裝Nginx及配置
使用網卡的PXE功能引導客戶機
1.6.2 創建/data/sys目錄並掛載系統鏡像
創建/data/sys目錄,並將光盤內容拷貝到共享目錄中
[root@PXE ~]# mkdir –p /data/sys
把光盤放入光驅,也可以把系統ISO文件傳到服務器下面解壓
掛載鏡像到mnt目錄下,再將系統鏡像裏邊的內容拷貝到共享目錄/data/sys/中去.
[root@PXE ~]# mount /dev/cdrom /mnt/
mount: block device /dev/sr0 iswrite-protected, mounting read-only
拷貝文件的過程時間略長請大家耐心等待.稍安勿躁!
[root@PXE ~]# cp -a /mnt/* /data/sys/
特別提示:如果使用虛擬機做實驗,只需要在vm裏使用ISO文件即可.
1.6.3 安裝TFTP及Xinetd服務
在安裝PXE過程中,客戶機通過TFTP協議從TFTP服務器下載引導文件並執行,因此,需要配置TFTP服務器和PXE的引導配置完成這個過程.
如果在yum安裝之前執行下面的操作,可以把yum安裝的rpm包保存下來
[root@PXE ~]# sed -i ‘s#keepcache=0#keepcache=1#g' /etc/yum.conf
[root@PXE ~]# yum -y install tftp-server* xinetd
[root@PXE ~]# tree /var/cache/yum/
/var/cache/yum/
`-- x86_64
`-- 6
|-- base
| |-- packages
| | |-- tftp-server-0.49-7.el6.x86_64.rpm
| | `--xinetd-2.3.14-39.el6_4.x86_64.rpm
配置tftp服務
TFTP服務使用xinetd服務管理,編輯/etc/xinetd.d/tftp文件,將文件中disable的參數由yes改爲no.
[root@PXE ~]# vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server =/usr/sbin/in.tftpd
server_args = -s/var/lib/tftpboot
disable = no 由原來的yes改爲no
per_source = 11
cps = 100 2
flags = IPv4
}
配置完後重啓xinetd服務使tftp服務器生效!
[root@PXE ~]# /etc/init.d/xinetd start
Starting xinetd: [ OK ]
[root@PXE ~]# chkconfig --level 3 xinetd on
[root@PXE ~]# chkconfig --list xinetd
xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
1.6.4 配置支持PXE引導啓動程序
PXE啓動映像文件由syslinux軟件提供,CentOS Linux光盤已提供,也可以到syslinux主頁http://www.syslinux.org/wiki/index.php/The_Syslinux_Project下載rmp包安裝.只要安裝了syslinux(默認沒有安裝),就會生成一個pxelinux.o文件,將這個文件複製到TFTP默認路徑即可!
syslinux是一個功能強大的引導加載程序,而且兼容各種介質,更加確切地說:SYSLINUX是一個小型的Linux操作系統,它的目的是簡化首次安裝Linux的時間,並建立修護或其它特殊用途的啓動盤.
[root@PXE ~]# yum -y install syslinux
複製pxelinux.0引導文件文件至/var/lib/tftpboot/ 文件夾中
[root@PXE ~]# cp /usr/share/syslinux/pxelinux.0/var/lib/tftpboot/
[root@PXE ~]# ll /var/lib/tftpboot/
total 28
-rw-r--r--. 1 root root 26759 Apr 2414:32 pxelinux.0
用於網絡啓動的內核文件
將CentOS安裝光盤目錄中的images/pxeboot/{vmlinuz,initrd.img}啓動文件複製到某個安裝目錄,比如/var/lib/tftpboot/
內核文件
[root@PXE ~]# cp/data/sys/images/pxeboot/vmlinuz /var/lib/tftpboot/
驅動文件
[root@PXE ~]# cp/data/sys/images/pxeboot/initrd.img /var/lib/tftpboot/
下面的這個.msg可以不做,在這裏我沒有複製
[root@PXE ~]# cp/data/sys/isolinux/*.msg /var/lib/tftpboot/
[root@PXE ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg
[root@PXE ~]# cp /data/sys/isolinux/isolinux.cfg/var/lib/tftpboot/pxelinux.cfg/default
[root@PXE ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
默認啓動的是"labeltext"中標記的內核
default text
顯示boot提示符,爲"0"時則不提示將會直接啓動default參數中指定的內容.
prompt 1
在用戶輸入之前的超時時間,單位爲 1/10 秒
timeout 6
顯示某個文件的內容,注意文件的路徑.默認是在/var/lib/tftpboot/ 目錄下。也可以指定位類似'/install/boot.msg'這樣的,路徑+文件名.
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS 6.6!
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 linux
menu label ^Install orupgrade an existing system
menu default
kernel vmlinuz
append initrd=initrd.img
label vesa
menu label Install systemwith ^basic video driver
kernel vmlinuz
append initrd=initrd.img xdriver=vesanomodeset
label rescue
menu label ^Rescue installedsystem
kernel vmlinuz
append initrd=initrd.imgrescue
label local
menu label Boot from ^localdrive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append –
label指定你在 'boot:' 提示符下輸入的關鍵字,比如boot: linux[ENTER],這個會啓動'label linux' 下標記的kernel和initrd.img 文件
label text
kernel vmlinuz
告訴系統,從哪裏獲取ks.cfg文件
append initrd=initrd.imgks=http://10.0.0.132/ks.cfg
1.7 安裝及配置DHCP服務
在PXE安裝過程中,PXE客戶機主要通過DHCP服務獲取IP地址、PXE引導文件名稱,然後在客戶機上通過TFTP協議從TFTP服務器下載引導文件並執行,從而啓動系統安裝程序執行後,接着下載並安裝程序啓動安裝.
1.7.1 用Yum方式安裝DHCP服務
[root@PXE ~]# yum -y install dhcp*
1.7.2 配置DHCP
在/etc/dhcpd.conf中增加tftp-server需要推送給客戶端的啓動文件(bootstrap):filename “pxelinux.0”;因爲tftp的默認目錄是/var/lib/tftpboot,所以文件的絕對路徑是:/var/lib/tftpboot/pxelinux.0;
另外需要指定next-server參數,告訴客戶端在獲取到pxelinux.0文件後去哪裏獲取其餘的啓動文件:next-server 10.0.0.132
[root@PXE ~]# cat/etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
# see 'man 5 dhcpd.conf'
ddns-update-style interim;
ignore client-updates;
PXE文件名
filename "pxelinux.0";
TFTP服務器地址
next-server 10.0.0.132;
DNS地址
option domain-name-servers202.106.0.20,8.8.8.8;
分配IP地址網段
subnet 10.0.0.0 netmask 255.255.255.0 {
網關
option routers 10.0.0.132;
掩碼
option subnet-mask 255.255.255.0;
DHCP地址池
range dynamic-bootp 10.0.0.136 10.0.0.146;
default-lease-time 21600;
max-lease-time 43200;
}
1.7.3 創建DHCP服務日誌文件啓動DHCP服務,並設置開機自啓動
[root@PXE ~]# touch /var/log/dhcpd.log
[root@PXE ~]# chmod 600 /var/log/dhcpd.log
[root@PXE ~]# /etc/init.d/dhcpd restart
Starting dhcpd: [ OK ]
[root@PXE ~]# chkconfig dhcpd on
[root@PXE ~]# chkconfig --list dhcpd
dhcpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
1.8 Kickstart安裝配置
通常安裝操作系統過程中,需要大量得和服務器進行交互操作,爲了減少這個交互過程可以使用kickstart。使用kickstart,只需事先定義好一個kickstart自動應答配置文件ks.cfg(通常存放在服務器上),並讓安裝程序知道該配置文件的位置,在安裝過程中安裝程序就可以自動從該文件中讀取kickstart配置文件,無論使用那種方法無非就是創建一個應答文件。當安裝好一臺服務器,安裝程序都會創建一個kickstart配置文件,記錄真實安裝配置。如果希望實現和某系統類似的安裝,可以基於該系統的kickstart配置文件來生成自己的kickstart配置文件。該文件默認位於/root/anaconda-ks.cfg。
生成kickstart配置文件的三種方法:
1、每安裝好一臺服務器,安裝程序都會創建一個kickstart配置文件,記錄真實安裝配置。如果希望實現和某系統類似的安裝,可以基於該系統的kickstart配置文件來生成自己的kickstart配置文件。該文件默認位於/root/anaconda-ks.cfg。
2、CentOS Linux提供一個圖形化的kickstart配置工具,在任何一個安裝好的Linux系統上運行該工具,就可以很容易創建自己的kickstart配置文件。kickstart配置工具命令爲redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4和RHEL5)。
3、閱讀kickstart配置文件手冊。用任何一個文本編輯器都可以創建自己的kickstart配置文件。
1.8.1 安裝kickstart
我們用kickstart的第二種方法來實現
[root@PXE ~]# yum install system-config-kickstart
[root@PXE ~]# system-config-kickstart
[root@PXE ~]# startx
打開kickstart工具
設置語言、鍵盤、時區、root密碼等內容.
設置安裝方式,我們用的是HTTP方式安裝,故選擇HTTP
下面按照下圖方式選擇,不然安裝時候會彈出對話框詢問是否清除硬盤數據,這樣自動化安裝就失敗.
不按照上圖選擇安裝系統時候的結果!
配置網絡
系統認證配置
Selinux和防火牆配置
圖形環境配置
軟件包安裝選擇
選擇file—preview查看瀏覽
選擇file—save保存到/data/sys目錄
[root@PXE ~]# vim /data/sys/ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
表示安裝系統而不是升級
install
# Use network installation
這個選項告訴安裝程序,到服務器10.0.0.132d的HTTP根目錄下尋找安裝介質
url --url="http://10.0.0.132/"
# Root password
root用戶密碼
rootpw --iscrypted $1$Qy3ftD8v$Ic8D3xTgNskYjiPRbSR2s/
# System authorization information
系統認證信息
auth --useshadow --passalgo=sha512
# Use text mode install
文本安裝方式
text
禁止安裝後的Agent設置
firstboot --disable
# System keyboard
鍵盤佈局
keyboard us
# System language
字符集設置
lang en_US
# SELinux configuration
關閉selinux
selinux –disabled
# Installation logging level
設置日誌級別
logging --level=info
# Reboot after installation
重啓系統
reboot
# System timezone
設置系統時間
timezone Asia/Shanghai
# Network information
網絡配置eth0爲第一塊網卡,結尾PXE爲主機名
network --bootproto=dhcp--device=eth0 --onboot=on
# System bootloader configuration
系統引導相關信息
bootloader --location=mbr
# Partition clearing information
清除系統所有分區
clearpart --all
# Disk partitioning information
系統的3個分區
part swap --asprimary --fstype="swap" --size=200
part /boot --asprimary --fstype="ext4" --size=200
part / --asprimary --fstype="ext4" --grow --size=1
系統安裝的軟件包
%packages
@base
@basic-desktop
@compat-libraries
@debugging
@development
%end
######安裝完後的簡單優化#####
%post
#service configuration
for n in `chkconfig|awk '{print $1}'|egrep -v"crond|rsyslog|network|sshd"`;do chkconfig $n off;done
#config ssh
sed -i s%#Port 22%Port 52113%g /etc/ssh/sshd_config
sed -i s%#PermitRootLogin yes%PermitRootLogin no%g/etc/ssh/sshd_config
sed -i s%#PermitEmptyPasswords no%PermitEmptyPasswords no%g/etc/ssh/sshd_config
sed -i s%#UseDNS yes%UseDNS no%g /etc/ssh/sshd_config
1.9 Pcre安裝
[root@PXE ~]# yum -y install openssl openssl-devel
[root@PXE ~]# cd /home/hao/tools/
[root@PXE tools]# wget http://sourceforge.net/projects/pcre/files/pcre/8.30/pcre-8.30.tar.gz
[root@PXE tools]# tar zxf pcre-8.30.tar.gz
[root@PXE tools]# cd pcre-8.30
[root@PXE pcre-8.30]# ./configure
[root@PXE pcre-8.30]# make
[root@PXE pcre-8.30]# make install
1.10 Nginx安裝及配置
[root@PXE tools]# useradd nginx -s /sbin/nologin -M
[root@PXE tools]# tar zxf nginx-1.6.2.tar.gz
[root@PXE tools]# cd nginx-1.6.2
[root@PXE nginx-1.6.2]# ./configure --user=nginx --group=nginx --prefix=/application/nginx-1.6.2--with-http_stub_status_module --with-http_ssl_module
[root@PXE nginx-1.6.2]# make
[root@PXE nginx-1.6.2]# make install
[root@PXE nginx-1.6.2]# ln -s /application/nginx-1.6.2//application/nginx
[root@PXE nginx-1.6.2]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib/
[root@PXE nginx-1.6.2]# ldconfig
[root@PXE nginx-1.6.2]# /application/nginx/sbin/nginx
[root@PXE ~]# cd /application/nginx/conf/
[root@PXE conf]# egrep -v "#|^$" nginx.conf.default>nginx.conf
[root@PXE ~]# cat /application/nginx/conf/nginx.conf
user nginx nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /data/sys; 注意這的目錄
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
檢查語法
[root@PXE ~]# /application/nginx/sbin/nginx –t
啓動Nginx服務
[root@PXE ~]# /application/nginx/sbin/nginx
1.11 新建虛擬機配置客戶端PXE引導安裝
自動化安裝系統配置完畢,下面啓動一臺新的機器進行測試,網絡連接模式選擇NAT模式.
到此PXE部署大功告成了!