« GeeXboX Open Media Center | 首頁 | 2006/08, Vol. 127 PChome Magazine »

2006年08月01日

PXE 網路開機實作

目的: 在 Fedora Core 3 建立 PXE Boot Server, 讓 Client 開機即透過網路自動載入 GeeXboXKnoppix自製的迷你 Linux 系統

SettingUp PXE Boot Server

SettingUp Client PC

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 端環境

建置 GeeXboX 網路開機環境 (Server 端操作)

GeeXboX 下載點

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 端操作)

Knoppix 下載點

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)

參考資料:

以磁片搭載 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:

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