說明: 本文基於CENTOS6_x86_64操做系統, 所需的軟件安裝推薦使用yum以簡化安裝流程.關於YUM源的設定請參照本文最後一章的說明. 如使用7.0以上版本的RHEL/CentOS製做,服務的開啓等經過systemctl命令管理,請自行查找使用方法.linux
切記不要將DHCP Server網口連到非本地測試網絡外的其餘網絡,會致使其餘網絡IP分配異常.服務器
所需軟件和服務:網絡
服務器端app
DHCP:爲客戶端分配IPasync
TFTP:Tiny FTP, 傳送PXE Menu, Kernel, Initrd等文件ide
NFS-utils:網絡文件系統,可供Client掛載,存儲文件等測試
Rpcbind:NFS的守護進程url
Syslinux:提供PXE啓動引導文件pxelinux.0操作系統
客戶端rest
須要先在本機硬盤內完整安裝一遍Linux操做系統,而後將該操做系統的鏡像稍做修改後拷貝到nfs服務的啓動目錄內,之後相同硬件平臺的客戶端機器均可以從該目錄啓動和掛載根文件系統,實現PXE無盤操做.
客戶端需安裝dracut和dracut-network,用於製做initrd啓動鏡像文件,dracut-network會爲鏡像內添加nfs等網絡支持,如不安裝會出現PXE啓動過程當中沒法識別nfs的問題.
如下爲正文,全部操做均使用root用戶權限完成.
第1章 服務器端軟件的安裝,配置及啓動
1.1 設定本機固定IP:
將要提供PXE啓動服務的網口設定爲固定IP 192.168.1.5,並從新啓動網絡, 查看IP是否生效. 此爲Linux基本操做,再也不詳述.
1.2 DHCP
1.2.1DHCP安裝
yum install -y dhcp
1.2.2修改DHCP配置文件
vi /etc/dhcp/dhcpd.conf
內容以下,注意分號必定不能少
ddns-update-style none;
ignore client-updates;
default-lease-time -1;
max-lease-time -1;
authritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
next-server 192.168.1.5;
filename "pxelinux.0";
}
1.2.3重啓DHCP,並加入開機自動啓動:
service dhcpd restart
chkconfig dhcpd on
1.2.4關閉防火牆,並確認防火牆是否關閉成功
service iptables stop
chkconfig iptables off
service iptables status
完全關閉防火牆的方法:
vi /etc/selinux/config
將 SELINUX=enforcing 改爲:
SELINUX=disabled
重啓系統後生效
1.2.5檢查DHCP server是否工做:可以使用我的工做電腦鏈接到該server,若能正確分到192.168.1.100~192.168.1.200之間的IP,則說明DHCP工做正常.
1.3 TFTP
1.3.1創建文件夾
mkdir -p /pxeserver/tftpboot
mkdir -p /pxeserver/models
1.3.2TFTP安裝
yum install -y tftp-server
1.3.3修改TFTP配置文件
vi /etc/xinetd.d/tftp
只需修改以下兩處
server_args = -s /pxeserver/tftpboot #改爲剛剛新建的地址
disable = no #disable改成no
1.3.4 重啓TFTP,並加入開機自動啓動
service xinetd restart
chkconfig xinetd on
1.4 NFS
1.4.1NFS安裝
yum install -y nfs-utils rpcbind
1.4.2修改NFS配置文件
vi /etc/exports
添加以下內容:
/pxeserver/models 192.168.1.0/24(rw,async,no_root_squash)
1.4.3重啓rpcbind,nfs,並加入開機自動啓動
service rpcbind restart
chkconfig rpcbind on
service rpcbind restart
chkconfig nfs on
1.4.4檢查nfs文件夾是否發佈成功
exportfs
應該能夠看到以下內容:
/pxeserver/models
192.168.1.0/24
1.5 syslinux
1.5.1syslinux安裝
yum install -y syslinux
1.5.2 拷貝PXE引導文件pxelinux.0到tftpboot
cp /usr/share/syslinux/pxelinux.0 /pxeserver/tftpboot
1.5.3拷貝內核vmlinuz和啓動鏡像initrd到/pxeserver/tftpboot
從客戶端的本地鏡像/boot下拷貝過來,initrd會在客戶端用dracut生成後再拷貝,後面2.6.2節有詳細介紹
1.5.4建立配置文件,即PXE啓動時看到的菜單相關的文件
mkdir -p /pxeserver/tftpboot/pxelinux.cfg
vi /pxeserver/tftpboot/pxelinux.cfg/default
添加以下內容:
default auto
label auto
prompt 0
kernel vmlinuz-xxx
append initrd=initrd-xxx.img root=nfs:192.168.1.5:/pxeserver/models/xxx selinux=0 ip=dhcp rw vga=0x314
#以上kernel file和initrd的文件名中xxx的最好與/pxeserver/models/xxx路徑中一致,
#取決於客戶端創建鏡像時使用的名稱,建議以機器型號命名,如本文第2部分使用DL360G9代替xxx
1.6 /pxeserver路徑下的結構以下
1.7 服務器端配置完成後重啓一遍,再用service指令查看一下dhcp xinetd nfs是否正常啓動,防火牆是否關閉.
第2章 客戶端製做文件系統鏡像及啓動文件鏡像
2.1 創建/pxeserver/models/xxx路徑
mkdir -p /pxeserver/models/DL360G9 #此處以DL360G9爲例創建路徑
mkdir -p /pxeserver/tftpboot
2.2 使用rsync保存整個系統的文件鏡像,注意此時不要掛載CD, U盤的大容量存儲設備,會被一併添加到鏡像,增長鏡像的容量.也可用自行添加--exclude='掛載目錄'的方式排除外部存儲設備
rsync -av --exclude='/proc' --exclude='/sys' --exclude='/tmp' --exclude='/var/tmp' --exclude='/etc/mtab' \
--exclude='/pxeserver' /* /pxeserver/models/DL360G9
#若是客戶端系統中有自建路徑或文件不想加入鏡像的可用 --exclude參數排除
2.3 在DL360G9路徑下自行創建上一步排除的路徑,應該注意到這幾個路徑是fstab內的非本地硬盤掛載點.
cd /pxeserver/models/DL360G9
mkdir -p proc sys tmp var/tmp
cd
2.4 刪除以太網絡配置文件,由於該配置內一般會含有MAC信息,後續其餘機器啓動時會自動創建該文件,如不刪除有可能會形成客戶端網卡啓動異常.
rm -f /pxeserver/models/DL360G9/etc/sysconfig/network-script/ifcfg-eth*
2.5 修改文件系統掛載點設定文件 etc/fstab
vi /pxeserver/models/DL360G9/etc/fstab
刪除其中本地文件系統相關的條目,換成nfs掛載點.
例如刪除以下3條(取決於安裝操做系統時的分區layout),CENTOS6的本地文件系統通常是ext4
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=b9db4c59-5da9-49d5-a99d-20629aac803c /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_home /home ext4 defaults 1 2
換成以下一條
192.168.1.5:/pxeserver/models/DL360G9 / nfs defaults 0 0
2.6 製做initrd-DL360G9.img
2.6.1安裝dracut和dracut-network
yum install -y dracut dracut-network
2.6.2製做initrd鏡像,拷貝kernel文件
dracut initrd-uname -r
.img uname -r
chmod 644 initrd-uname -r
.img
mv initrd-uname -r
.img /pxeserver/tftpboot/initrd-DL360G9.img
cp /boot/vmlinuz-uname -r
/pxeserver/tftpboot/vmlinuz-DL360G9
2.7 打包壓縮/pxeserver路徑
cd / #確認當前路徑不在/pxeserver內
tar -zcvf DL360G9.tar.gz /pxeserver
2.8 將生成的壓縮文件經過優盤,移動硬盤或者經過nfs上傳到服務器端
第3章 在服務器端解壓縮鏡像並配置
3.1 將DL360G9.tar.gz 拷貝到/根目錄並用cd / 切換到根目錄下
3.2 解壓縮,會在原有的/pxeserver下將新打包過來的文件和路徑都解壓出來而不覆蓋原來的文件或路徑
[root@localhost /]#tar -zxvf DL360G9.tar.gz
3.3 將vmlinuz-DL360G9和initrd-DL360G9.img 拷貝到/pxeserver/tftpboot路徑下
3.4 鏈接測試
客戶端與服務器鏈接,重啓客戶端並設定從網絡啓動,正常啓動到登陸界面後使用原來在客戶端設定的用戶名和密碼便可登陸.
第4章 其餘
4.1 PXE啓動過程當中常見錯誤及排除方法
網卡報Check cable:
檢查服務器端網絡是否啓動或網線
DHCP進度條一直轉分不到IP:
檢查DHCP Server是否正常啓動
TFTP超時:
檢查TFTP服務是否啓動,防火牆是否關閉,/etc/xinetd.d/tftp內設置是否修改正確
找不到kernel或啓動鏡像:
檢查pxelinux.cfg/default文件配置是否有錯誤 或者kernel initrd文件是否正確的放在了
/pxeserver/tftpboot下,initrd要有644屬性
啓動過程當中沒法掛載nfs:檢查nfs是否啓動正常, pxelinux.cfg/default文件中nfs地址是否有錯誤
4.2 服務器端高級pxelinux.cfg/default選單配置
使用安裝盤中的高級選單:
將安裝光盤中 isolinux路徑下的splash.jpg vesamenu.c32 memtest 拷貝到/pxeserver/tftpboot路徑下,
將相同路徑下的 isolinux.cfg拷貝到/pxeserver/tftpboot/pxelinux.cfg路徑下並更名爲default
修改default文件內容以下,主要改動在每個Label下的Kernel file, initrd file的名稱,地址, root掛載點等. Modelname1,2爲其餘型號機器的範例,依照本文第2,3兩部分完成客戶端操做系統鏡像製做後,Model1,2改成對應的型號名便可.splash.jpg爲PXE啓動菜單選擇界面的背景圖片,能夠根據尺寸要求(640*480像素)個性化定製.
default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Please select corresponding boot image-CentOS6.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 DL360G9
menu label ^DL360G9 PXE boot
menu default
kernel vmlinuz-DL360
append initrd=initrd-DL360G9.img root=nfs:192.168.1.5:/pxeserver/models/DL360G9 selinux=0 ip=dhcp rw nomodeset vga=0x0314
label Modelname1
menu label Modelname^1 PXE boot
menu default
kernel vmlinuz-Modelname1
append initrd=initrd-Modelname1.img root=nfs:192.168.1.5:/pxeserver/models/Modelname1 selinux=0 ip=dhcp rw nomodeset vga=0x0314
label Modelname2
menu label Modelname^2 PXE boot
menu default
kernel vmlinuz-Modelname2
append initrd=initrd-Modelname2.img root=nfs:192.168.1.5:/pxeserver/models/Modelname2 selinux=0 ip=dhcp rw nomodeset vga=0x0314
label local
menu label Boot from ^local drive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append -
4.3 服務器端的設定能夠在虛擬機中完成,易於備份和轉移.
4.4 關於YUM源的設定
4.4.1 經過網絡YUM源安裝
若是服務器可以直接鏈接到互聯網,那麼直接聯網使用yum是最簡便的方式,有時第一次使用yum時會遇到域名不能解析的問題,在/etc/resolv.conf中添加有效的DNS server地址便可,如加入如下一條
nameserver 114.114.114.114
4.4.2使用本地CDROM或安裝U盤作YUM源
沒法鏈接到互聯網時,用CDROM或U盤作YUM源也是很方便的. 以下以使用安裝U盤作YUM源爲例介紹如何修改media YUM源.
首先掛載U盤,建議直接掛載到/media :
mount /dev/sdxx /media #sdxx 爲安裝U盤所在的分區,建議使用FAT32格式,CENTOS6須要額外安裝軟件才能支持NTFS
而後修改/etc/yum.repos.d/下的主配置文件CentOS-Base.repo,將其更名以屏蔽使用主配置:
mv CentOS-Base.repo CentOS-Base.repo.bak
最後修改/etc/yum.repos.d/下的CentOS-Media.repo,以使用本地媒體作YUM源:
baseurl=file:///media/xxx
file:///media/xxx
file:///media/xxx
只需將上述三條中的任意一條映射到正確的掛載點便可,可修改第一條,並修改gpgcheck,enabled以開啓media YUM源.
baseurl=file:///media
file:///media/xxx
file:///media/xxx
gpgcheck=0
enabled=1