无磁碟 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 将 这份文件翻译成为英文。 _________________________________________________________________ 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 . ______________________________________________________________ 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/ . ______________________________________________________________ 然後执行下面: ______________________________________________________________ mkdir -p /tftpboot/export/linux/machine2 cd ../machine2 ln -s ../machine2/ ______________________________________________________________ 5.7 最後工作 最後,你必须插入 ______________________________________________________________ /sbin/mount nfs_server:/export/linux/usr /usr ______________________________________________________________ 到 ______________________________________________________________ /export/linux//etc/rc.d/rc.S ______________________________________________________________ 的第一行。在这□ 指的是 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