無磁碟 Linux Mini Howto 作者: Robert Nemkin buci@math.klte.hu 譯者: 謝崑中 HSIEH Kun-Chung, 台灣 中華民國 Taiwan, Republic of China (NOT People's Republic of China) ( [1]linuxer.bbs@cis.nctu.edu.tw ) v0.0.3版, 1996年 9月12日 _________________________________________________________________ 本文件在敘述如何設立一個無磁碟 Linux 機器。著作權為 Robert Nemkin 所有 。著作權條款依照 GPL。我想要謝謝 Bela Kis <bkis@cartan.math.klte.hu> 將 這份文件翻譯成為英文。 _________________________________________________________________ 1. 修改 2. 如何設立一個無磁碟的 Linux 機 3. 相關文章 4. 硬體 5. 基本概念 * 5.1 設定個人電腦 * 5.2 在伺服器上設定 bootpd * 5.3 在伺服器上建構 bootpd * 5.4 瞭解 tftp * 5.5 在遠端伺服器上設定一個小型的 Linux 建構 * 5.6 建構 tftp 伺服器 * 5.7 最後工作 6. 記憶體以及磁碟空間要求; 速度 7. 可能的錯誤 8. 本文件中的錯誤以及更詳細的解說 _________________________________________________________________ 1. 修改 * v0.0.3版 1996年9月12日: 一小部份的修改 2. 如何設立一個無磁碟的 Linux 機 本文件在敘述如何設立一個無磁碟 Linux 機器。有時候我們可能需要在一個既無 硬碟 亦無軟碟機的個人電腦上執行 Linux 。如果有個網路, 其他的 Unix 系統 有著 bootp, tftp, NFS 伺服器,而我們又有一個 eprom 燒錄機,那麼我們有辦 法在建立一個無任何磁碟機的 Linux系統了。 3. 相關文章 * NFS-root Mini Howto * Linux NET-2/3-HOWTO 由 Terry Dawson 所寫, 94004531@postoffice.csu.edu.au * /usr/src/linux/README 閞於建構以及編譯新核心 4. 硬體 在本文所提到的都是以下面的建構來做的 * Sun-OS 4.1.3 做為啟動伺服器 * Slackware 2.3 + Linux 1.2.8 + wd 8013 網路卡 * 已使用中的乙太網路 5. 基本概念 基本概念如下:個人電腦會經由 bootp 協定從啟動伺服器中來取得它的 IP 位址 。 用 0.0.0.0 為初始 IP 位址,而它的核心程式會經由 tftp 協定。 跳過區段的啟動 (經由路由器router) 並不是個簡單問題,所以,不是將伺服 器以及無磁碟機的機器放置在同一個網路 區段,就只有建構一個 UDP 輔助位 址在你的 router 到伺服器的位址上。細節請參考你的 router 產器手冊。 以下是我們的步驟 5.1 設定個人電腦 取得 nfsboot 套件 (可從你較喜歡的 linux mirror 鏡射站的 /pub/Linux/system/Linux-boot 目錄取得)。它包含了一個給 wd8013卡可直接燒 錄用的 booteprom 映像檔。 還有其他方法可以準備個人電腦部份: * 如果你的機器並不是沒有磁碟的,那麼你可以使用小小的 DOS 程式或 * 含有同樣套件的二進位軟體映像檔。 如果你選擇的是第二者,你必須使用 dd 命令來將這個映像檔寫入一張軟碟片裏 。 這個映像檔包含了 bootp 以及 tftp 客戶端程式。 你也需要準備一個 linux 核 心程式碼,它含有 nfs-root 選項。 * 如果你使用最新的穩定核心程式,如 linux-1.2.13,那麼你需要使用包含在 nfsbootk套件內的 patch 修補核心程式。 參考 patch(1) * 如果你想要用最新的,但卻不是很穩的 linux-1.3.x 系列核心,那麼你就需 要建構 nfs-root 這選項。 隨便你要不要建構區塊設備 (軟碟機或硬碟機) 的支援,但你必須建構 tcp/ip 支援、 wd 乙太網路卡支援、 nfs 檔案系統支援。然後重新編譯核心程式。 5.2 在伺服器上設定 bootpd 它可以在 bootpd-2.4.tar.gz套件中找到 (可從你較喜歡的 linux mirror 鏡射 站的 /pub/Linux/system/Network/boot.net 目錄內)。取得這個套件, 編譯並 安裝它。如果你其他的 Unix 機器也是用 Slackware Linux 的,那麼標準的供應 版本就 有 bootpd 了,所以你可以跳過這部份。 daemon 可以直接發出命令來執 行 ______________________________________________________________ bootpd -s ______________________________________________________________ 或是使用 inetd,但你需修改: * /etc/inetd.conf 在這些條列中移除 # 號 ______________________________________________________________ # tftp dgram udp wait root /usr/sbin/in.tftpd tftpd /export # bootps dgram udp wait root /usr/sbin/in.bootpd bootpd ______________________________________________________________ * 在 /etc/services 中插入或是移除備註符號: ______________________________________________________________ bootps 67/tcp # BOOTP server tftp 69/udp # TFTP server ______________________________________________________________ * 重新啟動 inetd ,使用 ______________________________________________________________ kill -HUP <process id of inetd>. ______________________________________________________________ 5.3 在伺服器上建構 bootpd 由先, bootpd 有個叫 bootptab 的建構檔,它通常被放在 /etc 內。你必須修 改 它,加上你的無磁碟機器的閘道 IP 位址、 dns 伺服器,以及乙太網路位 址(es)。 範例如下 /etc/bootptab: ______________________________________________________________ global.prof:\ :sm=255.255.255.0:\ :ds=192.168.1.5:\ :gw=192.168.1.19:\ :ht=ethernet:\ :bf=linux: machine1:hd=/export/root/machine1:tc=global.prof:ha=0000c0863d7a:ip=192.168.1.1 40: machine2:hd=/export/root/machine2:tc=global.prof:ha=0800110244e1:ip=192.168.1.1 41: machine3:hd=/export/root/machine3:tc=global.prof:ha=0800110244de:ip=192.168.1.1 42: ______________________________________________________________ global.prof 是 host 項目的一般樣本,其中 * sm 欄包含子網路遮罩 * ds 欄包含網域名稱伺服器的位址 * gw 欄包含內定閘道位址 gateway * ht 欄包含網路媒介硬體種類 * bf 欄包含啟動檔檔名 之後,每一台機器應該有下面這行 * 首欄包含主機名稱 * hd 欄包含啟動檔案的目錄 * 全區樣本應該被包含到 tc 欄, * ha 欄包含乙太網路卡的硬體位址 * ip 欄包含被分配的的 IP 位址 5.4 瞭解 tftp TFTP (Trivial File Transfer Protocol) 是一個檔案傳輸協定,就像 ftp 一樣 ,但 它比比較簡化,因此可以容易地在 EPROM 裏來編碼。 TFTP 的使用方法有 二種: * 簡單的 tftp: 表示客戶端可以存取你的整個檔案系統。雖然較簡單但卻開了 一個安全大洞 (任何人都可以經由 tftp 來拿到你的密碼)。 * 安全的 tftp: tftp 伺服器會使用chroot.2 系統呼叫來改變它自己的根目錄 。任何在新目錄以 外的事件都完全無法存取。因為 chroot 目錄變成新的根 目錄, 硬碟在 bootptab 整檔時必須反應 這個新的處境。例如:當我們使 用不安全的 tftp 時, hd 欄包含了啟動目錄的完整路徑, : /export/root/machine1。 當使用安全的 tftp 時, /export 被當成根目錄 ,而 /export 變成 / ,且 hd 欄就變成 /root/machine1了。 幾乎每一個 Unix 實作都包含 tfpt 伺服器,也許你並不需要自己安裝一個。 5.5 在遠端伺服器上設定一個小型的 Linux 建構 這包含 Slackware供應版內的 a, ap, n, 及 x 部份。要安裝更多的套件也可以 ;但 是上面的套件已足夠一個無磁碟 X 終端機的需求了。首先你需要一個已在 運轉的 Linux 系統。在遠端機器裏找一個磁碟空間並 export 它成為可讀寫並掛 上它到 Linux 機器的檔案系統上的某一處 (例如 /mnt)。開始 Linux 設定並改 變root 選項從 / 變為 /mnt。然後設立如上面所說的套件,如果你只是要執行一 個無磁碟的 Linux 那 麼就不需要做其他改變。另一方面,如果你計畫使用超過 一個以上的無磁碟機器, 那麼上面的設定就需要些許的修改,因為有些檔案以及 目錄必須只有機器本身使用。 我們可以以移開 /usr 目錄(它包含非私人的資 料)的方式跳過這個問題, 然後建立一個分開的子目錄給每一個無磁碟機器。例 如,如果 /export/linux/machine1 被掛在 /mnt 上,那麼在初始設定後目錄結 構會像這樣 ______________________________________________________________ /export/linux/machine1/bin /export/linux/machine1/sbin /export/linux/machine1/lib /export/linux/machine1/etc /export/linux/machine1/var /export/linux/machine1/usr ______________________________________________________________ 改變後你會有 ______________________________________________________________ /export/linux/machine1/bin /export/linux/machine1/sbin /export/linux/machine1/lib /export/linux/machine1/etc /export/linux/machine1/var /export/linux/usr ______________________________________________________________ 現在為其他的機器建立目錄。從現在開始我們假設你的無磁碟機器分別叫做 machine1、machine2、 machine3等等; 使用以下的 bash 命令手稿來設立其他 的目錄 ______________________________________________________________ cd /export/linux for x in machine2 machine3 ; do mkdir $x; cd $x (cd ../machine1; tar cf - *) | tar xvf - done ______________________________________________________________ 然後做下列的 export: * /export/linux/usr 唯讀(對每個使用者) * /export/liunx/machine1 只有對 machine1 有 rw,root 權利。 * /export/liunx/machine2 只有對 machine2 有 rw,root 權利。 * /export/liunx/machine3 只有對 machine3 有 rw,root 權利。 如下 下面範列是依照 SunOs 4.1.3 的 exports 檔案的語法來做 : ______________________________________________________________ # This file is /etc/export # for remote linux X terminals by Buci # this line is only once /export/root/usr -access=linuxnet # these lines once for every host /export/root/machine1 rw=machine1,root=machine1 /export/root/machine2 rw=machine2,root=machine2 /export/root/machine3 rw=machine3,root=machine3 ______________________________________________________________ 請不要忘了執行 exportfs -a 5.6 建構 tftp 伺服器 現在該是建構 tftp 伺服器的時候了。如果你不需要一個安全的 tftp 那很簡單 , 因為你的客戶端已經可以從 /export 目錄來啟動。 如果一個安全的 tftp 被採用,那麼你可以在 /tftpboot 目錄下做個完整的 /export/linux 目錄結構。 (用一個實體核心程式及連結給其他機器的符號連 結), 或是讓 /export 目錄成為安全的 tftpd 的根目錄。或者如果你有一另外 的 tftpboot 目錄,那麼,同樣地,你只需要原來的目錄結構,然後用一個實體 核心程式來 符號連結其他機器) 。 你可以執行下列命令來完成這個設定: ______________________________________________________________ mkdir -p /tftpboot/export/linux/machine1 cd /tftpboot/export/linux/machine1 cp /export/linux/machine1/<name of the kernel> . ______________________________________________________________ 然後執行下面: ______________________________________________________________ mkdir -p /tftpboot/export/linux/machine2 cd ../machine2 ln -s ../machine2/<name of the kernel> ______________________________________________________________ 5.7 最後工作 最後,你必須插入 ______________________________________________________________ /sbin/mount nfs_server:/export/linux/usr /usr ______________________________________________________________ 到 ______________________________________________________________ /export/linux/<machinex>/etc/rc.d/rc.S ______________________________________________________________ 的第一行。在這裏 <machinex> 指的是 machine1, machine2等等。 6. 記憶體以及磁碟空間要求; 速度 我只在 Slackware 2.3上測試過;對於其他的供應商(Linux)套件或版本,下面的 數字可能會不同。 * 磁碟空間: 28MB + 6.5MB/每台機器 * RAM: 我在 8MB 上跑 X ,只需要 4MB swap 。我猜想,這個可以被建立-為 每一部機器分別做- 在 /tmp裏面,請不要忘了執行 mkswap。 * 速度: 我在一台有 8 Megs 的 486 DX2/66 機器上跑並無問題。 7. 可能的錯誤 * 我發現一個奇怪的錯誤:在 /dev 子目錄裏, SunOS 搞錯了設備名稱,所以 我被迫 將這個子目錄掛上一個有磁碟的 Linux 機器上來重新執行 MAKEDEV 。 (原因是因為 linux nfs 和 SunOs nfs是不同的: 兩者都使用32 位元在 主要及次要設備名稱, 但是linux 使用 16 位元寬度欄在兩者上, SunOs 則使用 14 位元寬度欄給主要設備, 18 位元寬給次要設備號碼。) * 當無磁碟 linux 被啟動時,只有一個行徑 route 會被放在 tftp 伺服器的 行徑表裏 , 所以你需要設定正確的行徑表。你有兩種選擇: + 手動建構每一台機器的每一個 rc.S 。 + 或使用bootp 客戶端套件並寫一個通用的設定命令手稿 8. 本文件中的錯誤以及更詳細的解說 * 正確引用相關的文件。 * SunOs 是以 BSD 為基礎,所以需要包含 SVR4 (如 Solaris) 為基礎的伺服 器建構。 * 雖然 Linux 和 SunOs 都可以做為 bootp/tftp 伺服器,但是 Linux 會比較 有用些。 * 更新這份文件到最新的 etherboot 套件。 * 指出核心程式版本1.2.13 在nfs root 修補後與新的 1.3.x 版(此版已包含 了 nfs-root 的修補)的不同處。 * 需要試試 wd8013 以外的其他乙太網路卡 * 包含 bootpc的建構資訊,一個bootp 客戶端來設定正確的 rooting 表。 * 編排上或其他的錯誤:麻煩您告訴我一聲,謝謝。 buci@math.klte.hu 譯者按: 若您發現本文件內容有翻譯不順暢或錯誤的地方,請您來信告訴我,以 做更正,謝謝。 [2]linuxer.bbs@cis.nctu.edu.tw。 References 1. file://localhost/tmp/zh-sgmltools.1650/linuxer.bbs@cis.nctu.edu.tw 2. mailto:linuxer.bbs@cis.nctu.edu.tw