PXE啓動服務器及客戶端鏡像製作

說明: 本文基於CENTOS6_x86_64操作系統, 所需的軟件安裝推薦使用yum以簡化安裝流程.關於YUM源的設定請參照本文最後一章的說明. 如使用7.0以上版本的RHEL/CentOS製作,服務的開啓等通過systemctl命令管理,請自行查找使用方法.

切記不要將DHCP Server網口連到非本地測試網絡外的其他網絡,會導致其他網絡IP分配異常.

所需軟件和服務:

服務器端

DHCP:爲客戶端分配IP

TFTP:Tiny FTP, 傳送PXE Menu, Kernel, Initrd等文件

NFS-utils:網絡文件系統,可供Client掛載,存儲文件等

Rpcbind:NFS的守護進程

Syslinux:提供PXE啓動引導文件pxelinux.0

客戶端

需要先在本機硬盤內完整安裝一遍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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章