« GeeXboX Open Media Center | 首頁 | 2006/08, Vol. 127 PChome Magazine »
2006年08月01日
PXE 網路開機實作
目的: 在 Fedora Core 3 建立 PXE Boot Server, 讓 Client 開機即透過網路自動載入 GeeXboX、Knoppix 或自製的迷你 Linux 系統
SettingUp PXE Boot Server
- GeeXboX
- Knoppix
- DIY Floppy-Linux
SettingUp Client PC
- 啟用 3Com 網卡 Boot ROM 進行網路開機
- 以磁片搭載 ROM-o-matic Etherboot ROM image 進行網路開機
Server 端環境
- Fedora Core 3
- NFS Server (nfs-utils、portmap)
- DHCP Server (dhcp)
- TFTP Server (tftp-server)
啟用 TFTP Server:
vi /etc/xinetd.d/tftp
disable = no
/etc/init.d/xinetd start
Client 端環境
- 含 Boot ROM 的網卡 或 ROM-o-matic 支援的網卡
建置 GeeXboX 網路開機環境 (Server 端操作)
mount -o loop geexbox.iso /mnt
cp -r /mnt/* /tftpboot
vi /tftpboot/GEEXBOX/boot/pxelinux.cfg/default
將 nfsroot=192.168.0.2:/tftpboot/GEEXBOX.i386 改為
nfsroot=your.nfs.server.ip:/tftpboot/GEEXBOX
vi /etc/dhcpd.conf
allow booting;
allow boot;subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.199;
option subnet-mask 255.255.255.0;
next-server your.tftp.server.ip;
filename "/GEEXBOX/boot/pxelinux.0";
}註: 若 /etc/xinetd.d/tftp 的 server_args 為 "-s /tftpboot", 則上述 filename 的 root ( / ) 為 /tftpboot. 詳細說明請見: man tftpd
vi /etc/exports
/tftpboot/GEEXBOX *(ro)
/etc/init.d/dhcpd restart
exportfs -a
若 NFS Server 已啟動, 執行 exportfs -a 即可重新讀取 /etc/exports
參考資料:
建置 Knoppix 網路開機環境 (Server 端操作)
Step 1: 準備一台電腦, 以 Knoppix 開機, 建立 Net Booting 所需的檔案 (以 Knoppix 4.0 為例)
若網路中已有 DHCP Server, 請先拔除目前這台電腦的網路線, 以免影響網路環境
↓執行 "Start KNOPPIX Terminal Server"
↓點選 "setup (Re)configure server and (re)start"
↓隨便配置一個 IP Range (不得為單一 IP)
↓點選 Client 所需的網卡 Driver
↓只選用 masq 項目
完成以上設定後, 會產生 /tftpboot 路徑與相關檔案
進行下一步驟前, 先停用 DHCP Server, 再接上網路線:
/etc/init.d/dhcp3-server stop
Step 2: 將 /tftpboot 裡的所有內容複製到 TFTP Server 的 /tftpboot/KNOPPIX 路徑中
先在 TFTP Server 建立 /tftpboot/KNOPPIX 路徑:
mkdir /tftpboot/KNOPPIX
再到 Knoppix 電腦, 將檔案複製到 TFTP Server
scp -r /tftpboot/* root@your.tftp.server.ip:/tftpboot/KNOPPIX
** Knoppix 電腦操作告一段落, 以下皆為 TFTP / NFS Server 操作步驟 **
Step 3: 修改相關設定
vi /tftpboot/KNOPPIX/pxelinux.cfg/default
nfsdir=your.nfs.server.ip:/mnt/knoppix
vi /etc/dhcpd.conf
allow booting;
allow boot;subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.199;
option subnet-mask 255.255.255.0;
next-server your.tftp.server.ip;
filename "/KNOPPIX/pxelinux.0";
}vi /etc/exports
/mnt/knoppix *(ro)
mount -o loop KNOPPIX.iso /mnt/knoppix
/etc/init.d/dhcpd restart
exportfs -a
參考資料:
網路載入自製的 Floppy Linux (Server 端操作)
Step 1: 打造自己的 Floppy Linux
Step 2: 建立 /tftpboot/floppylinux 路徑
Step 3: 把 Floppy Linux 的 initrd.gz、linux、syslinux.cfg 複製到 /tftpboot/floppylinux
Step 4: 安裝(升級) SYSLINUX
wget http://www.kernel.org/pub/linux/utils/boot/syslinux/RPMS/syslinux-3.11-2.src.rpm
rpmbuild --rebuild syslinux-3.11-2.src.rpm
cd /usr/src/redhat/RPMS/i386
rpm -Uvh syslinux-3.11-2.i386.rpm
Step 5: PXELINUX 設定
cd /tftpboot/floppylinux
cp /usr/lib/syslinux/pxelinux.0 ./
mkdir pxelinux.cfg
mv syslinux.cfg ./pxelinux.cfg/default
vi ./pxelinux.cfg/default
找到 APPEND root=/dev/ram0 rw initrd=initrd.gz 這行,
最後加入 boot=nfs nfsroot=your.nfs.server.ip:/tftpboot/floppylinux
Step 6: 修改 /etc/dhcpd.conf、/etc/exports, 重置 dhcpd、nfs
vi /etc/dhcpd.conf
filename "/floppylinux/pxelinux.0";
vi /etc/exports
/tftpboot/floppylinux *(ro)
/etc/init.d/dhcpd restart
exportfs -a
啟用 3Com 網卡 Boot ROM 進行網路開機 (Client 端操作)
下載 3Com NIC Utilities, 網址: ftp://ftp.3com.com/pub/nic/
以型號 3C980C-TXM 為例, 下載檔案為: ftp://ftp.3com.com/pub/nic/3c980/xpdiags.exe
執行 xpdiags.exe 解壓縮
執行 update.exe /diag
點選 "Update Network Software"
完成後會出現訊息視窗, 此時可在“程式集”發現新增了「3Com NIC Utilities」
點選「程式集」 → 「3Com NIC Utilities」 → 「3Com NIC Doctor」→「Configuration」
點選「Boot PROM」, 並將 "Set Value" 設定為 "Enabled", 最後按 "確定" 即 可啟用網卡 Boot ROM (如下圖)
重開機後, 進入 BIOS 設定畫面, 將 "MBA UNDI" 列入開機順序
開機程序中, 出現 Ctrl + Alt + B 提示訊息時, 按下該組合鍵可設定網卡 boot ROM 開機方式, 將其設定為 PXE 即可 (3Com 網卡預設即為 PXE)
參考資料:
- 3Com 網路卡優化設定
- 3Com 3C980C-TXM UserGuide (PDF File)
以磁片搭載 ROM-o-matic Etherboot ROM image 進行網路開機 (Client 端操作)
Step 1: 查出網卡名稱、裝置 ID
Linux 平台:
lspci 查出網卡名稱
00:0c.0 Ethernet controller: Realtek...
lspci -n | grep 0c.0 查出裝置 ID
00:0c.0 Class 0200: 10ec:8139 (rev 10)
其中, 10ec:8139 即為網卡的裝置 ID
Windows 平台:
安裝 EVEREST Home Edition, 查出網卡的裝置 ID

Step 2: 到 ROM-o-matic.net 下載 ROM Image
開啟瀏覽器, 連入 http://rom-o-matic.net/, 點選最新版本
在 "Choose NIC/ROM type" 下拉選單選擇對應的網卡. 以前述 10ec:8139 網卡為例, 應選擇 "rtl8139:rtl8139 -- [0x10ec,0x8139]" 這個項目. (Link: ROM-o-matic 5.4.2 支援的網卡清單)
"Choose ROM output format" 保持 "Floppy bootable ROM Image (.zdsk)" 即可
點選 "Get ROM" 即可下載 ROM Image
Step 3: 將 ROM Image 寫入磁片
Linux 平台:
dd if=eb-5.4.2-rtl8139.zdsk of=/dev/fd0
或
cat eb-5.4.2-rtl8139.zdsk > /dev/fd0
Windows 平台:
安裝 RawWrite for Windows, 將 eb-5.4.2-rtl8139.zdsk 寫入磁片即可
完成以上步驟後, 以磁片開機即可.
若開機過程中出現問題, 可參閱: Troubleshooting the Linux PXE Boot Installation
參考資料:
References:
PXE Knowledge Base:
- Wikipedia - Preboot Execution Environment (PXE)
- PXE.ca - How Does PXE Work?
- Microsoft TechNet - PXE Operation: Client - Server Interaction
- Linux Magazine - Network Booting (need register)
Linux Netbooting How-To:
Posted by Jamyy at 2006年08月01日 11:39
Trackback Pings
TrackBack URL for this entry:
http://cha.homeip.net/cgi-bin/mt/mt-tb.cgi/218
Comments
很棒的文章喔~~~感謝您的文章~~
改天我也可以來著手試試看您的方法~~
Posted by: Ronan at 2006年09月08日 00:20
謝謝~~ 祝你成功~~
Posted by: Jamyy at 2006年09月08日 06:18
看了你的文章後~我在家試試~
結果還是沒辦法~
他會出現
PXE-E32 :TFTP open timeout
PXE-E32 :TFTP open timeout
PXE-E32 :TFTP open timeout
PXE-M0F: Exiting intel PXE ROM
Operating System not found
這個~
它的IP有抓到~可是就是tftp好像開啟失敗~
我照著你的設~tftp應該有成功才對~
我也有開67 68 69 port~連線應該沒問題~
可是還是無法連接~
底下是我的設定:
-------------------------------------
/etc/xinetd.d/tftp
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
per_source = 11
cps = 100 2
flags = IPv4
}
----------------------------------------------
/etc/dhcpd.conf
ddns-update-style interim;
default-lease-time 259200;
max-lease-time 777600;
option domain-name "colo0627.no-ip.org";
option broadcast-address 192.168.2.255;
option routers 192.168.2.254;
option domain-name-servers 139.175.55.244, 139.175.252.16, 168.95.192.1;
allow booting;
allow bootp;
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.20 192.168.2.30;
# option subnet-mask 255.255.255.0;
next-server 192.168.2.200;
filename "/tftpboot/GEEXBOX/boot/pxelinux.0";
......
-------------------------------------------
/etc/exports
#/share 192.168.2.0/24(ro)
/tftpboot/GEEXBOX *(ro)
有哪個地方出問題了嗎?
我有設防火牆~我用iptarf觀察連線時,另外一台電腦會一直對69 port做連線。是防火牆擋住了嗎??可是我的69port有開啟囉~
Posted by: Chester at 2007年04月03日 16:30
您的問題應該是出在 client 無法自 tftp server 下載開機資料
請檢查 /tftpboot 裡的相關路徑與檔案是否正確, 以及 exportfs 是否正確, NFS Server 是否啟動, 是否遭防火牆阻斷 NFS Server 相關埠口等等
Posted by: Jamyy at 2007年04月03日 17:01
問題已解決,果然是防火牆擋住了,
因為我的output 預設值DROP~
在OUTPUT的部份,
我建一個從SERVER到我的內網的UDP 1024~65535全開放。
這樣就可以了~感謝~
Posted by: Chester at 2007年04月04日 16:17
請問一下如果platform的server是Windows XP,client是dos,該如何實現相同作法,謝謝!
Posted by: ancle at 2007年05月16日 15:01
在 Windows 架設 TFTP Server 的方法請參考這篇:
http://www.pcdvd.com.tw/printthread.php?t=425052&pp=40
至於 DOS-based 的 PXE Client 請用 Google 找找看吧~
Posted by: Jamyy at 2007年05月16日 18:09
try command (maybe is the problem of selinux)
# setenforce
Posted by: lue673 at 2007年06月11日 01:57
您好…幾經波折後,終於設定完成,也可以開機了,但是開機跑到90%的時候,server 就自動關機了,想請教這大概會是什麼原因呢?我用的server 是 dell power edge 860 dual core cpu 4gb 667mhz memory.
Posted by: Alvin at 2007年07月10日 19:03
您是說 PXE Boot Server 自動關機?
還是 PXE Client 呢?
如果是 Server 的話, 可以在它的 console 監看 log 記錄:
tail -f /var/log/messages
如果是 Client 的話, 請查看螢幕上出現的訊息
以這些訊息為線索, 才能查出實際原因
Posted by: Jamyy at 2007年07月10日 21:20







