作者: Robert Nemkin buci@math.klte.hu
译者: 谢昆中 HSIEH Kun-Chung, ( linuxer.bbs@cis.nctu.edu.tw )
v0.0.3版, 1996年 9月12日
--------------------------------------------------------------------------------
本文件在叙述如何设立一个无磁碟 Linux 机器 。著作权为 Robert Nemkin 所有 。著作权条款依照 GPL 。我想要谢谢 Bela Kis将这份文件翻译成为英文 。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
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.3Linux 1.2.8wd 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 waitroot/usr/sbin/in.tftpd tftpd /export
# bootps dgram udp waitroot/usr/sbin/in.bootpdbootpd
--------------------------------------------------------------------------------
在 /etc/services 中插入或是移除备注符号:
--------------------------------------------------------------------------------
bootps67/tcp# BOOTP server
tftp69/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.140:
machine2:hd=/export/root/machine2:tc=global.prof:ha=0800110244e1:ip=192.168.1.141:
machine3:hd=/export/root/machine3:tc=global.prof:ha=0800110244de:ip=192.168.1.142:
--------------------------------------------------------------------------------
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)套件或版本 , 下面的数字可能会不同 。
磁碟空间: 28MB6.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
译者按: 若您发现本文件内容有翻译不顺畅或错误的地方 , 请您来信告诉我 , 以做更正 , 谢谢 。linuxer.bbs@cis.nctu.edu.tw 。
--------------------------------------------------------------------------------
- win10专业工作站版是哪个
- 微软为“无盘”电脑定制Vista授权
- 实战宝典:如何双引导Vista和Linux
- 实战宝典:如何实现Vista和Linux双引导
- Linux之父:Vista没那么好
- Purism发布Librem 14 Linux笔记本电脑 注重隐私保护
- 怎么查看linux的网卡
- Vista工作站系统安全防护措施
- 巧妙隐藏网上邻居中的Vista工作站
- 把Windows Vista当成Linux系统来使用
