|
|
|
|
|
PXELinux
Red Hat Linux 下建立 PXE Server
Step 1 : 前言
Step 2 : 環境需求
Step 3 : tftp server 的設定
Step 4 : 安裝媒體(FTP,NFS,HTTP)
Step 5 : PXE 設定檔
Step 6 : DHCP Server
Step 7 : The PXE clients
Step 8 : 其他 Linux Distribution
Step 1 : 前言

而 PXE 是指在作業系統前的一個作業環境,所以他最主要的工作就是將任何的作業系統載入的動作.目前多是數的網卡都支援 PXE 功能,有些甚至還支援到 iSCSI Boot 的功能.目前 PXE 已經是一個成熟的標準協定,詳細的技術可以參考 Intel 網站的 PXE 規格書. http://download.intel.com/design/archives/wfm/downloads/pxespec.pdf
先來說明一下 PXE Boot 步驟
- BIOS 開機由 PXE boot ROM 開啟.
- PXE boot ROM 的 第一部就是透過 DHCP 取得 IP.
- 該 PXE 獲得 DHCP 的請求 IP 以及其他選項參數, 其中的 "filename" 參數將是未來掌握 PXE 開機的關鍵點.
- PXE client 會透過 TFTP 協定(PXE ROM 只能使用該協定)去下載該檔案 pxelinux.0.
- 當 PXE client 成功下載到檔案(pxelinux.0), 他就會顯示 PXE 安裝提示顯示畫面.接下來依據系統提示就可以開始安裝作業系統.
- 如果 PXE ROM 無法完成上序的步驟,有些 BIOS 就會依序啟動其他可以開啟的裝置.
參考網站 :http://pxe.dev.aboveaverageurl.com/index.php/PXE_Booting
Step 2 : 環境需求
1.一台具有 DHCP 與 tftp server (eg: IP 192.10.0.1)
2.一台具有 PXE(Preboot eXecution Environment) 網路開機功能的機台.
作業系統我選擇的是 Red Hat Enterprise Linux 3 版本,基本上具有 DHCP 和 tftp 服務的 Linux 皆可以擔任此項工作.

Step 3 : tftp server 的設定
1. 編輯 “/etc/xinetd.d/tftp” 並將 server 開啟
| [root@benjr ~]# vi /etc/xinetd.d/tftp service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot disable = no per_source = 11 CPUS = 100 2 flags = IPv4 } |
將 disable 設定成為 no 即可.或者你可以用下面的指令將 tftp 功能開啟
| [root@benjr ~]# chkconfig tftp on |
2.啟動 tftp servicee
| [root@benjr ~]# service xinetd restart |
Step 4 : 安裝媒體(FTP,NFS,HTTP)
RedHat Linux 透過 PXE 來安裝作業系統時可以透過 3 種網路媒體 FTP, NFS , HTTP 來做安裝的來源.這邊簡單較紹一下怎麼針對這 3 種安裝媒體來做設定.

| [root@benjr ~]# mkdir /var/ftp/as3u2 [root@benjr ~]# cp -rf /mnt/cdrom/* /var/ftp/as3u2/ ( 1CD ) [root@benjr ~]# cp -rf /mnt/cdrom/* /var/ftp/as3u2/ ( 2CD ) [root@benjr ~]# cp -rf /mnt/cdrom/* /var/ftp/as3u2/ ( 3CD ) [root@benjr ~]# cp -rf /mnt/cdrom/* /var/ftp/as3u2/ ( 4CD ) |
PS: When the system asks for "replace file? " please answers "No"
- 由 FTP 來安裝
- 由 NFS 來安裝
- 由 HTTP 來安裝
請確定 ftp 的服務已經開啟,ftp 預設路徑為 /var/ftp ,所以沒有其他設定.
| [root@benjr ~]# chkconfig vsftpd on [root@benjr ~]# service vsftpd restart |
編輯 "/etc/exports" 並將 "/var/ftp/as3u2" 目錄分享(因為我們將把光碟內的檔案放在此目錄下,此為FTP預設的分享目錄)
| [root@benjr ~]# vi /etc/exports /var/ftp/ 192.10.0.*(ro,all_squash) |
並確定 NFS 的服務已經開啟
| [root@benjr ~]# chkconfig nfs on [root@benjr ~]# service nfs start |
編輯 "/etc/httpd/conf/httpd.conf" 並將 Document 設為 /var/ftp(因為我們將把光碟內的檔案放在此目錄下,此為FTP預設的分享目錄)
| [root@benjr ~]# vi /etc/httpd/conf/httpd.conf Document Root "/var/ftp" |
並確定 HTTP 的服務已經開啟
| [root@benjr ~]# chkconfig httpd on [root@benjr ~]# service httpd restart |
Step 5 : PXE 設定檔
1.將開機所需的 kernel 和 initrd 檔案複製到 "/tftpboot/linux-install/as3u2 目錄下
| [root@benjr ~]# mkdir /tftpboot/linux-install/as3u2 [root@benjr ~]# cp /var/ftp/as3u2/image/pxeboot/vmlinuz /tftpboot/linux-install/as3u2 [root@benjr ~]# cp /var/ftp/as3u2/image/pxeboot/initrd.img /tftpboot/linux-install/as3u2 |
2.編輯 /tftpboot/linux-install/pxelinux.cfg/default (這個檔案定義了與PXE的Clients可以經由按鍵來選擇安裝的系統)
| [root@benjr ~]# vi /tftpboot/linux-install/pxelinux.cfg/default default 0 timeout 2000 F1 msgs/boot.msg F2 msgs/expert.msg prompt 1 display msgs/boot.msg label 0 localboot 1 label 1 kernel as3u2/vmlinuz append initrd=as3u2/initrd.img ramdisk_size=65536 |
設定檔說明:
default 0
如果使用者不選擇安裝哪一種OS這邊就可以設定預設安裝哪一個OS,default 0的意是就是使用label 0的設定.
timeout 2000
預設安裝生效時間為2000ms(200秒).
F1 msgs/boot.msg
F2 msgs/expert.msg
這邊是用來定義F1至F12功能鍵所要顯示的內容.
prompt 1
效果不明????
display msgs/boot.msg
一開機進入PXE所顯示的第一個提示訊息.
label 0
localboot 1
這裡定義了使用機器系統上的硬碟來直接開機.
label 1
kernel as3u2/vmlinuz
append initrd=as3u2/initrd.img ramdisk_size=65536
這就是要安裝OS的定義.
3.編輯 /tftpboot/linux-install/msgs/boot.msg (這個檔案就是Clients經由PXE開機時所看到的提示訊息)
| [root@benjr ~]# vi /tftpboot/linux-install/msgs/boot.msg 1. Install RHAS3-QU2 |
4.編輯 /etc/rc.d/rc.local 必須加入下面這一行
| [root@benjr ~]# vi /etc/rc.d/rc.local route add -host 255.255.255.255 eth0 |
Step 6 : DHCP Server
編輯 /etc/dhcpd.conf
| [root@benjr ~]# vi /etc/dhcpd.conf # ddns-update-style interim; ddns-update-style none; ignore client-updates; allow booting; allow bootp; class "pxeclients" { match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 192.10.0.1; filename "linux-install/pxelinux.0"; } subnet 192.10.0.0 netmask 255.255.255.0 { range 192.10.0.150 192.10.0.180; option broadcast-address 192.10.0.255; option routers 192.10.0.1; option subnet-mask 255.255.255.0; option domain-name-servers 192.10.0.1; } |
這個項目 option domain-name-servers 192.10.0.1 為非必要選項,如果你有設定就不用再指定 DNS 位址.但是相對應的 DNS(Bind Server)也要設定.
match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; 這一個選項會檢查是否為實體的網路卡,如果你是準備給 virtual machine 時可以移除這一個選項, DHCP 設定檔案範例如下.
| [root@benjr ~]# vi /etc/dhcpd.conf # ddns-update-style interim; ddns-update-style none; ignore client-updates; allow booting; allow bootp; subnet 192.10.0.0 netmask 255.255.255.0 { |
並確定 DHCP 的服務已經開啟
| [root@benjr ~]# chkconfig dhcpd on [root@benjr ~]# service dhcpd start |
其中的 next-server 就是你的tftp server所在的位置.我這邊的例子使用192.10.0.1至於其他有關於DHCP的設定說明起自行參考DHCP的官方網站http://www.isc.org.
在整個 DHCP 設定檔中,最重要的就是 filename "linux-install/pxelinux.0" 整個網路開機顯示畫面,流程控制都由 pxelinux.0 來管理,關於更多有關於 pxelinux.0 ,請參考 PXELinux 的官方網頁 http://syslinux.zytor.com/wiki/index.php/PXELINUX
Step 7 : The PXE clients
1. 將具有 PXE 功能網路卡的 client 開機.
2.請先確定 PXE 功能已經在 BIOS 下開啟,並設為第一開機順位,並從 PXE 開機

3. 選擇你想要安裝的作業系統,如果你有參數可以在這邊加入.

此時就開始安裝作業係統
4. 你可以選擇 FTP , NFS 或 HTTP 等方式來安裝
5. 至於 server IP 就是 192.10.0.1,我將光碟內容都放在 192.10.0.1:/var/ftp/ 目錄下
至於目錄根據不同的方式有所不同
使用 FTP 方式的目錄:/as3u2
使用 NFS 方式的目錄:/var/ftp/as3u2 (只有透過NFS才會有圖形界面的安裝)
使用 HTTP 方式的目錄 : /as3u2
6. 接下來的安裝過程就和一般光碟安裝一樣.
Step 8 : 其他 Linux Distribution
- SuSE powered by UnitedLinux
- Turbo Linux
- ubuntu
步驟同 RedHat Linux 但 kernel 和 initrd.img 的位址在 SuSE 的第一片 CDROM /boot/loader/ 目錄中
/boot/loader/linux 是 kernel
/boot/loader/initrd 是 initrd.img
SuSE 有一點要注意的是要加 vga 的參數
| [root@benjr ~]# vi /tftpboot/linux-install/pxelinux.cfg/default default 0 timeout 2000 F1 msgs/boot.msg F2 msgs/expert.msg prompt 1 display msgs/boot.msg label 0 localboot 1 label 1 kernel as3u2/vmlinuz append initrd=as3u2/initrd.img ramdisk_size=65536 label 2 kernel sles9/linux append initrd=sles9/initrd ramdisk_size=65536 vga=0x317 splash=silent showpts |
這樣安裝時才有 GUI 的模式,下面是常用的 VGA 顯示模式
1024x768x8bpp -> vga=773 1024x768x16bpp -> vga=791
1280x1024x8bpp -> vga=775 1280x1024x16bpp -> vga=794
note:如果你使用的是 SuSE Linux Enterprise Server 9 CDs 時還要修改一個檔 "var/ftp/sles9/media.1/media" 才能使用網路安裝.
| [root@benjr ~]# vi /var/ftp/sles9/media.1/media SuSE Linux AG 20040702201519 1 MEDIA1 SUSE LINUX ENTERPRISE Server 9 CD1 |
步驟同 RedHat Linux 但 kernel 和 initrd.img 的位址在 /images/network.img 檔案中,因為 network.img 是 image 檔所以必須用 mount -o loop 才能看到 kernel 和 initrd.img 檔案
| [root@benjr ~]# mount -o loop /images/network.img /mnt |
在 /mnt 目錄下可以看到 vmlinuz(Linux kernel) 和 initrd.img(initrd image).Turbo 有一點要注意的是要加 ramdisk_size 的參數.因為你在安裝時如果採用 FTP, turbo linux 會因為 ramdisk size 大小問題而無法載入.
Turbo 7 Linux 的 ramdisk_size 要定設為 16384
Turbo 8 Linux 的 ramdisk_size 要定設為 21000
| [root@benjr ~]# vi /tftpboot/linux-install/pxelinux.cfg/default default 0 timeout 2000 F1 msgs/boot.msg F2 msgs/expert.msg prompt 1 display msgs/boot.msg label 0 localboot 1 label 1 kernel as3u2/vmlinuz append initrd=as3u2/initrd.img ramdisk_size=65536 label 2 kernel sles9/linux append initrd=sles9/initrd ramdisk_size=65536 vga=0x317 splash=silent showpts label 3 kernel turbo7/vmlinuz append initrd=turbo7/initrd.img ramdisk_size=16384 label 4 kernel turbo8/vmlinuz append initrd=turbo8/initrd.img ramdisk_size=21000 |
加入下面的訊息來讓使用者(PXE的Clients)知道有什麼作業系統可以安裝
| [root@benjr ~]# vi /tftpboot/linux-install/msgs/boot.msg 1. Install RHAS3-QU2 2. Install SLES 9 3. Install Turbo 7 4. Install Turbo 8 |
步驟同 RedHat Linux 但 kernel 和 initrd.img 的位址在 ubuntu CDROM 目錄 /install/netboot/ubuntu-installer/i386 中
linux 是 kernel
initrd.gz 是 initrd.img
- enter information manually:
- ubuntu archive mirror hostname:
- ubuntu archive mirror directory:
| [root@benjr ~]# vi /tftpboot/linux-install/pxelinux.cfg/default default 0 timeout 2000 F1 msgs/boot.msg F2 msgs/expert.msg prompt 1 display msgs/boot.msg label 0 localboot 1 label 1 kernel as3u2/vmlinuz append initrd=as3u2/initrd.img ramdisk_size=65536 label 2 kernel sles9/linux append initrd=sles9/initrd ramdisk_size=65536 vga=0x317 splash=silent showpts label 3 kernel turbo7/vmlinuz append initrd=turbo7/initrd.img ramdisk_size=16384 label 4 kernel turbo8/vmlinuz append initrd=turbo8/initrd.img ramdisk_size=21000 label 5 kernel ubuntu10/linux append vga=normal initrd=ubuntu10/initrd.gz ramdisk_size=16432 -- |
加入下面的訊息來讓使用者 (PXE的Clients) 知道有什麼作業系統可以安裝
| [root@benjr ~]# vi /tftpboot/linux-install/msgs/boot.msg 1. Install RHAS3-QU2 2. Install SLES 9 3. Install Turbo 7 4. Install Turbo 8 5. Install ubuntu 10 |
使用 PXE 安裝時 ubuntu 系統預設使用的是 http 的傳輸方式,如果你有連上 Internet 時直接使用他指定的 http 服務器即可,不過我們還是透過內部網路會快一些,此時選擇
即可指定你的 http 服務器.
這邊可以指定你的 http 服務器的 IP 或是 hostname
這邊可以指定你的 http 服務器的 Root directory + unbuntu 光碟內容



-
- 增加新的回應
- 瀏覽次數 9319
回應
錯誤訊息
最近新設定一台 PXE 但使用 PXE 開機卻出現下面的錯誤訊息!
PXE-E3B-TFTP Error file not found
PXE-M0F exiting Intel boot agent
使用 tcpdump 則是出現這樣的訊息
查了半天才看出原來 /etc/xinetd.d/tftp 和 /etc/dhcpd.conf 目錄設定錯誤
server_args = -s /tftpboot
filename "linux-install/pxelinux.0";
dhcpd.conf 所指定的檔案目錄是以 tftp 為基準點,所以寫成 "filename "linux-install/pxelinux.0";" 是指向 "/tftpboot/linux-install/pxelinux.0";"
ubuntu 11.04
目前試了 ubuntu 11.04 並按照之前的步驟加入 ubuntu11.04 到 /tftpboot/linux-install/pxelinux.cfg/default
append vga=normal initrd=ubuntu11.04/initrd.gz ramdisk_size=16432 --
但得到兩個錯誤訊息
似乎 ubuntu11.04 不支援這樣的 PXE 安裝方式,必須透過 LiveCD on PXE 才可以安裝 ,關於 LiveCD on PXE 請參考 http://benjr.tw/node/289
移除參數 vga=normal 就可以解決這個問題.
ubuntu 10.10 Server
增加了 ubuntu 10.10 Server 版的 PXE 安裝方式.