3,711 瀏覽數

PXE Server

這一篇文章使用的 PXE Service需要額外多一台機台,可以參考另一份文章,使用 DHCP 指定的方式 http://benjr.tw/83
PXE Boot 步驟PXE(Pre-eXecuteion Environment)  server
Step 0 : 前言
Step1 : DHCP Server 的設定
Step2:tftp,mtftp 服務
Step3: PXE Server 的設定
Step4: 安裝所需媒體
Step5: PXE Clients 安裝
Step6: 加入其它 Linux Distribution 至 PXE Server

Step 0 : 前言

安裝 Linux 的作業系統除了可以透過光碟機和磁碟機來開機,還可以透過網路卡的 PXE 功能來開機並且安裝作業系統.
而我們所需的環境除了 DHCP 和 PXE server 外,還要具有 PXE boot 功能的 clients .如下圖所示.

pxe00

Step1 : DHCP Server 的設定

DHCP Server 的設定檔至少要包含以下的設定值

[root@benjr ~]# vi /etc/dhcpd.conf 
ddns-update-style interim;
ignore client-updates;
subnet 192.10.0.0 netmask 255.255.255.0
{
 range dynamic-bootp 192.10.0.10 192.10.0.15;
}

[root@benjr ~]# chkconfig dhcpd on
[root@benjr ~]# service dhcpd start

關於 dhcp 的啟動,設定…..請參考 DHCP 設定
DHCP,PXE server 預設是不能架在同一台上,需修改 /etc/pxe.conf 檔才能使用在同一台機器上

Step2:tftp,mtftp 服務

在架設 PXE server  時還需同時啟動 tftp or mtftp 服務 ,mtftp 是具有 Multicast 功能的 tftp(為何只能用 tftp or mtftp ,因為 PXE ROM 只具備 UDP 的功能,所以只能使用以 UDP 為通信協定的  tftp or mtftp)
I.啟動 tftp

[root@benjr ~]# chkconfig tftp on

II.啟動 mtftp
因為系統並沒有為 mtftp 寫啟動設定檔 /etc/xinetd.d/mtftp ,所以我們將修改 /etc/xinetd.d/tftp 檔


[root@benjr ~]# cp /etc/xinetd.d/tftp  /etc/xinetd.d/mtftp
[root@benjr ~]# vi /etc/xinetd.d/mtftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol.  The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service mtftp
{
 disable = no
 socket_type  = dgram
 protocol  = udp
 wait   = yes
 user   = root
 server   = /usr/sbin/in.mtftpd
 server_args  = -s /tftpboot
 per_source  = 11
 cps   = 100 2
}

只有service mtftp, server = /usr/sbin/in.mtftpd 要修改

III.啟動 mtftp

[root@benjr ~]# chkconfig mtftp on
[root@benjr ~]# service xinetd restart

Step3: PXE Server 的設定

I.安裝 PXE Server 套件

[root@benjr ~]# rpm -ivh pxe-...........rpm

II.PXE server 的設定檔 /etc/pxe.conf
預設的設定檔就可以使用了,但是我還要安裝其他版本的 RedHat Linux RedHat 8.0 與 9.0 ,所以要修改一下設定檔

[root@benjr ~]# vi /etc/pxe.conf
# Prompt to display on the user screen
# format of this entry: timeout,<STRING>
[Prompt]
10,Press F8 to view menu ...
# Boot server types supported
[Service_Types]
0,BStrap
14,linux-install-rh80
15,linux-install-rh90

# Menu string that will be displayed on the client screen
# after F8 is pressed.
[X86PC/UNDI/MENU]
0,Local Boot
14,RedHat 8.0 Install Linux
15.RedHat 9.0 Install Linux

# Image file name for Linux install boot server type
# format : 
[X86PC/UNDI/linux-install-rh80/ImageFile_Name]
0
2
linux
[X86PC/UNDI/linux-install-rh90/ImageFile_Name]
0
2
linux
[X86PC/UNDI/BStrap/ImageFile_Name]
0
0
bstrap

說明:
I.首先要新增的是 PXE 開機時的選單
[X86PC/UNDI/MENU]
0,Local Boot
14,RedHat 8.0 Install Linux
15.RedHat 9.0 Install Linux
II.因為 RedHat Linux 的不同版本所需的開機 kernel,initrd imag 也不同,所以要為每一版 RedHat Linux 建立不同的資料夾
# Boot server types supported
[Service_Types]
0,BStrap
14,linux-install-rh80
15,linux-install-rh90
其中的數字必須要和 boot menu ([X86PC/UNDI/MENU] 所指定的)相同,至於目錄下還可以做不同設定,所以還要加上以下的設定.
[X86PC/UNDI/linux-install-rh80/ImageFile_Name]
0
2
linux
[X86PC/UNDI/linux-install-rh90/ImageFile_Name]
0
2
linux
路徑部分還要和 Service_Types 相配合(ex:14,linux-install-rh80 時路徑名稱需為 X86PC/UNDI/linux-install-rh80/ImageFile_Name)
而以上的 0,2,linux 所代表的是 PXE 安裝要用到 bootstrap + kernel + initrd 檔
還有其他的組合為
0,0,linux 所代表的是 PXE 安裝只需要 bootstrap 檔
0,1,linux 所代表的是 PXE 安裝只需要 bootstrap + kernel檔
III.重新啟動 PXE

[root@benjr ~]# chkconfig pxe on
[root@benjr ~]# service pxe restart

IV.確定 /etc/services 中 PXE,mtftp 所對應 ports 已經開啟

[root@benjr ~]# vi /etc/services
mtftp                  1759/udp
pxe                     67/udp
pxe                     4011/udp    

這些 ports number 都是 PXE Boot 所必須的,請參考 PXE Boot 步驟(圖)

[root@benjr ~]# route add -host 255.255.255.255 eth0

我們可以把這一行加到 /etc/rc.local 中,使每次開機時都能執行.

V.設定 PXE 安裝所需的光碟內容
我需要 RedHat 9.0,RedHat 8.0 等不同板本的 RedHat Linux
所以要先建立目錄來放置 RedHat 8.0 光碟的內容

[root@benjr ~]# mkdir /var/ftp/rh80

並將 RedHat 8.0 光碟的內容全部放置這個目錄下(記住不要將其他片光碟的內容覆蓋了第一片光碟的內容)
RedHat 9.0 也同樣的建立 /var/ftp/rh90 目錄,並將光碟內容全部放置在這個目錄下

VI.PXE 開機時所需的 kernel,initrd imag
PXE 開機時會依據 /etc/pxe.conf 設定去存取不同的目錄來得到所許的開機 kernel,initrd imag
I.RedHat 8.0 所需的 kernel,initrd imag
RedHat 8.0 使用PXE 開機時所需的 kernel,initrd imag 皆儲存在 RedHat 8.0 第一片光碟(我們之前已經將光碟內容複製 /var/ftp/rh80 目錄下,所以從 /var/ftp/rh80/images/pxeboot/ 目錄找即可)
先建立 " /tftpboot/X86PC/UNDI/linux-install-rh80" 目錄

[root@benjr ~]# mkdir /tftpboot/X86PC/UNDI/linux-install-rh80
[root@benjr ~]# cp /var/ftp/rh80/images/pxeboot/vmlinux  /tftpboot/X86PC/UNDI/linux-install-rh80/linux.1

note: linux.1 是 linux kernel

[root@benjr ~]# cp /var/ftp/rh80/images/pxeboot/initrd.img  /tftpboot/X86PC/UNDI/linux-install-rh80/linux.2

note: linux.2 是 linux installation initrd image
還要記得將 pxelinux.0 複製到 /tftpboot/X86PC/UNDI/linux-install-rh80 目錄下

[root@benjr ~]# cp /tftpboot/linux-install/pxelinux.0 /tftpboot/X86PC/UNDI/linux-install-rh80/linux.0

II.RedHat 9.0 所需的 kernel,initrd imag
方式同 RedHat 8.0 ,只是 kernel 和 initrd.img 不同罷了.

Step4: 安裝所需媒體

開機後就選定要安裝的作業系統後,就可以開始安裝了.接下來的動作就更一般的網路安裝一樣.我們可以透過 FTP,NFS 以及 http安裝.
I.FTP 安裝
光碟的內容皆存放在 /var/ftp 目錄下,所以用 FTP 安裝時只要指定 /var/ftp 下的子目錄即可(ex:用 FTP 安裝只要指定 /rh80 or /rh90 即可).
啟動 wu-ftp or vsftp 服務

[root@benjr ~]# service vsftpd restart

II.NFS 安裝
若採取 NFS 的安裝法時要分享安裝目錄

[root@benjr ~]# vi /etc/exports
/var/ftp/rh90      192.10.0.*(ro)
/var/ftp/rh80      192.10.0.*(ro)
/var/ftp/rh73      192.10.0.*(ro)

關於 NFS 的設定,分享請參考 NFS 設定
III.HTTP 安裝
若採取 HTTP 的安裝法時要修改 /etc/httpd/conf/httpd.conf

[root@benjr ~]# vi /etc/httpd/conf/http.conf
Document Root "/var/ftp"

將 Document Root  改為 "/var/ftp" 即可,在安裝時只要指定 /rh80 or /rh90  目錄即可
並將 http 啟動

[root@benjr ~]# service httpd restart

Step5: PXE Clients 安裝

啟動網路卡的 PXE 功能並將他的開機順序列為最高,選定要安裝的作業系統後,系統開始下載 kernel 和 initrd,接下來的安裝就如同網路安裝一般.

Step6: 加入其它 Linux Distribution 至 PXE Server

SuSE powered by UnitedLinux
步驟和 RedHat 的都一樣,這邊要注意的是 kernel 與 initrd.img 所在位址.
SuSE 9.1 第一片光碟的 /boot/loader/ 目錄下
/boot/loader/linux 是 kernel 檔
/boot/loader/initrd 是 initrd.img 檔
SuSE Linux 有一點要注意的是要加入 vga 的參數才能在安裝時使用 GUI 模式
ex:
label 3
  kernel sles9/vmlinuz
  append initrd=sles9/initrd.img vga=0x317
 
Debian Linux
方法同 RedHat 而 kernel , initrd 存在以下目錄
/debian/dists/stable/main/disks-hardware/current/images-1.44

[root@benjr ~]# mount -o loop /debian/dists/stable/main/disks-hardware/current/images-1.44  /mnt/floppy

因為 images-1.44 為 image file 所以要用 mount 加 -o loop 參數才能看到 image file 的內容
或可以做成磁片

[root@benjr ~]# dd if=/debian/dists/stable/main/disks-hardware/current/images-1.44  of=/dev/fd0

附圖:
I.PXE ROM 具有的 APIs
pxe01
II.PXE Boot 步驟
pxe02

發表迴響