到目前为止,我们已经讨论了客户端和服务器在客户端发出 BOOTP 请求后的操作配置,但首要问题是大多数计算机默认情况下无法充当 BOOTP 客户端。在本节中,我们将了解如何解决这个问题。
这是最简单的情况:一些网卡为 BIOS 提供了补充,其中包含 BOOTP 或 DHCP 客户端,因此只需在 BIOS 中将它们设置为 BOOTP 或 DHCP 操作即可完成。
如果您有本地硬盘,您只需像往常一样使用 lilo 或您喜欢的引导加载程序即可。如果您使用软盘,您可以使用引导加载程序,也可以直接将内核写入软盘:内核是直接可引导的。这使您可以使用如下命令
# dd if=zImage of=/dev/fd0 bs=8192 |
然而,Alan Cox 在 linux-kernel 线程中说,linux 内核的此功能迟早会被删除,因此即使在软盘上,您也必须使用引导加载程序。我知道这在 2.4.11 内核中仍然有效,但似乎在 2.4.13 版本中已删除支持。有关此主题,请参阅 boot-disk-HOWTO 的第六章。
有关 EPROM 烧录器制造商的列表,请访问 Yahoo 网站并转到 economy->company->Hardware->Peripherals->Device programmers 或查看旧的 Diskless-HOWTO EPROM 烧录器制造商列表 部分。
如果您选择创建自己的 ROM,您将需要在 ROM 中加载支持 BOOTP 或 DHCP 的软件,然后,您将处于上述 BOOTP 或 DHCP 支持的网卡的情况。
您还需要为您的网卡找到合适的 EPROM 尺寸和速度。附录中提供了一些方法,因为网卡制造商通常不提供此信息。
一个修改后的引导扇区以及一个在内核编译后创建 BootWare 可引导镜像的 Makefile 可以在以下位置找到
Bwimage 软件包:ftp://ftp.ipp.mpg.de/pub/ipp/wls/linux/bwimage-0.1.tgz
LanWorks BootWare Boot ROMs: http://www.3com.com/lanworks
有关安装详细信息,请参阅 README 文件。目前,仅支持 “zImage” 类型的内核。不幸的是,内核参数被忽略。
本节最初由 Jochen Kmietsch 为 Diskless-HOWTO 编写,如有任何问题,请发送电子邮件至<jochen.kmietsch@tu-clausthal.de>进行咨询。
本节最初由 Hans de Goede 编写<j.w.r.degoede@et.tudelft.nl>为 Diskless-root-NFS-HOWTO 编写。我对其进行了略微修改,以反映本文档和 Diskless-root-NFS-HOWTO 之间的一些差异。
以上大部分内容也适用于从 CD-ROM 启动。为什么要从 CD-ROM 启动机器?从 CD-ROM 启动在任何需要运行非常特定的应用程序的地方都很有趣,例如信息亭、图书馆数据库程序或网吧,并且没有网络或服务器来使用基于 nfs 设置的根文件系统。
现在我们知道我们想要做什么以及如何做,是时候创建一个测试设置了
在这台机器上安装您选择的 linux,并留出一个 650MB 的分区用于测试设置。此安装将用于制作 iso 镜像并刻录 CD,因此请安装必要的工具。它还将用于恢复任何导致测试设置无法启动的错误。
将以下内容放入名为/test/etc/rc.d/rc.iso的文件中,此文件将在rc.sysinit的开头被调用以创建/var:
#/var echo Creating /var ... mke2fs -q -i 1024 /dev/ram1 16384 mount /dev/ram1 /var -o defaults,rw cp -a /lib/var / |
编辑/test/etc/rc.sysinit,注释掉将根文件系统重新挂载为 rw 的行,并在设置 PATH 后直接添加以下 2 行
#to boot from cdrom . /etc/rc.d/rc.iso |
将以下内容复制到脚本并执行它以制作/var的模板并创建/tmp和/etc/mtab链接。
#!/bin/sh echo tmp rm -fR /test/tmp ln -s var/tmp /test/tmp ### echo mtab touch /test/proc/mounts rm /test/etc/mtab ln -s /proc/mounts /test/etc/mtab ### echo var mv /test/var/lib /test/lib/var-lib mv /test/var /test/lib mkdir /test/var ln -s /lib/var-lib /test/lib/var/lib rm -fR /test/lib/var/catman rm -fR /test/lib/var/log/httpd rm -f /test/lib/var/log/samba/* for i in `find /test/lib/var/log -type f`; do cat /dev/null > $i; done rm `find /test/lib/var/lock -type f` rm `find /test/lib/var/run -type f` |
# mount -o remount,rw / |
如果您需要比以下内容更多的信息,请参阅 CD-Writing-HOWTO。
通过键入以下内容,通过 loopback 挂载 boot.img 到某个位置
# mount boot.img somewhere -o loop -t vfat |
编辑syslinux.cfg以便它包含以下内容,当然要替换zImage为适当的镜像名称
default linux label linux kernel zImage append root=/dev/<insert your cdrom device here> |
# umount somewhere |
如果您的/etc/mtab是/proc/mounts的链接,则 umount 不会自动释放/dev/loop0,因此通过键入以下内容来释放它
# losetup -d /dev/loop0 |
现在我们有了引导镜像和一个可以从只读挂载启动的安装,是时候创建 cd 的 iso 镜像了
# mkisofs -R -b boot.img -c boot.catalog -o boot.iso /test |
# mount boot.iso somewhere -o loop -t iso9660 |
# umount somewhere |
如果您的/etc/mtab是/proc/mountsumount 不会自动释放/dev/loop0,因此通过键入以下内容来释放它
# losetup -d /dev/loop0 |
假设您已安装并配置了 cdrecord 以用于您的 cd-writer 类型
# cdrecord -v speed=<desired writing speed> dev=<path to your writers generic scsi device> boot.iso |