4.3. 準備以 TFTP 網路開機用的檔案

如果您的機器連接到了一個區域網路,您可以從網路上的另外一台機器上面透過 TFTP 來開機。如果您傾向從另外一台機器上面啟動安裝系統,則開機檔案需要放在那台機器上面的某個特殊地方,並且設定您的機器從該機器進行開機。

您需要設置一台 TFTP 伺服器,對於很多機器來說,還需要一台 BOOTP 伺服器 ,或 RARP 伺服器 ,又或 DHCP 伺服器

反向位址解析協議 (The Reverse Address Resolution Protocol, RARP) 是一種告訴您的客戶它自己 IP 位址的方法。另外一種方法是 BOOTP 通訊協定。 BOOTP 是一種 IP 通訊協定,用來告訴電腦它自己的 IP 位址以及從網路何處取得啟動映像。 DHCP (動態主機設定協定 Dynamic Host Configuration Protocol) 是一個更靈活,向後相容的 BOOTP 延伸。有一些系統只能透過 DHCP 來配置。

普通檔案傳輸協定 (Trivial File Transfer Protocol, TFTP) 能為客戶端提供開機映像。理論上,任何伺服器,在任何平台上只要實做這些協定就都能夠被應用。在這一節的一些例子裡面,我們將提供在 SunOS 4.x、SunOS 5.x (即 Solaris) 和 GNU/Linux 上面的一些操作例子。

4.3.1. 設置 RARP 伺服器

為了設置 RARP ,您需要知道欲安裝系統的客戶端的以太網卡位址 (網卡 MAC 位址)。 如果您還不知道這個資訊,可以開機進入 "Rescue" 模式 (例如使用回復軟碟) 並且使用 /sbin/ifconfig eth0 指令。

在使用 Linux 2.2.x 核心的 RARP 伺服器系統上,您需要以下的指令來載入核心 RARP 表:

# /sbin/rarp -s 
client-hostname
client-enet-addr

# /usr/sbin/arp -s 
client-ip
client-enet-addr

如果您得到如下資訊

SIOCSRARP: Invalid argument

您可能需要掛載 RARP 核心模組或重新編譯核心並使之支援 RARP。試試在執行 modprobe rarp 指令後再嘗試一遍 rarp 指令。

使用 Linux 2.4.x 核心的 RARP 伺服器系統上並沒有 RARP 模組,您應該使用 rarpd 程式替代。操作過程很類似下面將提到的在 SunOS 上的用法。

在 SunOS 裡, 您需要確定客戶端的以太網硬體位址已經列在 "ethers" 資料庫(在 /etc/ethers 檔案中或者透過 NIS/NIS+)和 ``hosts'' 資料庫中,然後您需要啟動 RARP 伺服程式,在 SunOS 4 裡,使用(以 root 身份): /usr/etc/rarpd -a 指令﹔在 SunOS 5 裡,則使用 /usr/sbin/rarpd -a 指令。

4.3.2. 設置 BOOTP 伺服器

在 GNU/Linux 下面有兩種 BOOTP 伺服器。他們是 CMU bootpd 和另外一種實際上是 DHCP 伺服器的程式 ISC dhcpd,他們被包含在 Debian GNU/Linux 的 bootpdhcp 軟體套件中。

要使用 CMU bootpd,您必須先將 /etc/inetd.conf 中相關的註釋標記去掉 (或者加入一些新行)。在 Debian GNU/Linux 裡,您可以執行 update-inetd --enable bootps,然後執行 /etc/init.d/inetd reload 來完成此工作。在其它系統中,這行設定應該看起來像這樣:

bootps  dgram  udp  wait  root  /usr/sbin/bootpd  bootpd -i -t 120

現在,您必須建立一個 /etc/bootptab 檔案。它具有和一些老 BSD 檔案相似並使用相同的加密格式。這些檔案包括 printcaptermcap,和 disktab。請參閱 bootptab 的手冊以獲得更多的資訊。對於 CMU bootpd,您將需要知道客戶端硬的體 (MAC) 位址。這裡有一個範例 /etc/bootptab

client:\\
  hd=/tftpboot:\\
  bf=tftpboot.img:\\
  ip=192.168.1.90:\\
  sm=255.255.255.0:\\
  sa=192.168.1.1:\\
  ha=0123456789AB:

您至少需要修改 "ha" 選項,它指定了客戶端的硬體地址。"bf" 選項則指定了一個客戶端應該透過 TFTP 取得的檔案名稱。請從 節 4.3.5, "將 TFTP 映像放到適當的位置" 處取得更多的資訊。

透過 ISC dhcpd 設定 BOOTP 反而非常容易。因為它把 BOOTP 客戶端程式看成一個特殊的 DHCP 客戶端。部分架構結構需要經過複雜的設定才能從 BOOTP 啟動客戶端。如果您的機器屬於這種情況,請閱讀 節 4.3.3, "設置 DHCP 伺服器"。否則,您大概只需要將 allow bootp 指令添加到包含客戶機的子網域的配定部分,並重新啟動 dhcpd 就可以了,重啟的指令是:/etc/init.d/dhcpd restart

4.3.3. 設置 DHCP 伺服器

ISC dhcpd 是一種自由軟體 DHCP 伺服器。在 Debian GNU/Linux 裡,它被包含在 dhcp 軟體套件中。這裡有它的一個設定檔的範例(通常是 /etc/dhcpd.conf):

option domain-name "example.com";
option domain-name-servers ns1.example.com;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
server-name "servername";

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option routers 192.168.1.1;
}

host clientname {
  filename "/tftpboot/tftpboot.img";
  server-name "servername";
  next-server servername;
  hardware ethernet 01:23:45:67:89:AB; 
  fixed-address 192.168.1.90;
}

註:新的(並且是建議的) dhcp3 軟體套件使用 /etc/dhcp3/dhcpd.conf作為其設定檔。

在這個例子中,一台伺服器 servername 負責執行包括 DHCP 伺服器、TFTP 伺服器和閘道器在內的所有工作。您需要修改網域名稱選項,以及伺服器名稱和客戶端硬體位址。filename 選項應是要從 TFTP 取得的檔案名稱。

在編輯了 dhcpd 設定檔後,您需要使用下面的指令重新啟動它:/etc/init.d/dhcpd restart

4.3.4. 啟用 TFTP 伺服器

要準備好 TFTP 伺服器,您首先需要確定 tftpd 已經啟動。這通常可以在 /etc/inetd.conf 加入下列設定來完成:

tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /tftpboot

Debian 套件通常在安裝後會自動把這條設定好。

檢查那個檔案並且記住被用作 in.tftpd 參數的目錄,您接下來將會需要它。-l 參數能夠讓某些版本的 in.tftpd 將所有請求記錄到系統日誌中。這在檢查錯誤的時候會很有用。如果您必須修改 /etc/inetd.conf,您將必須提醒正在運作的 inetd 程序該檔案已經被改變。在 Debian 系統中,您應該執行 /etc/init.d/inetd reload﹔而在其它系統中,找到 inetd 所對應的程序 ID,並且執行 kill -HUP inetd-pid

4.3.5. 將 TFTP 映像放到適當的位置

接下來,將在 節 4.2.1, "哪裡能找到安裝映像檔" 中找到的 TFTP 開機映像放到tftpd 開機映像目錄中。一般來說,這個目錄將是 /tftpboot。您必須將該檔案鏈結到 tftpd 用來啟動客戶端的檔案名稱。不幸的是,這個檔案名稱完全決定於 TFTP 客戶端程式,並且沒有一個強制的標準。