下一页 上一页 目录
以上大部分内容也适用于从光盘启动。由于我无论如何都想记录如何从光盘启动,所以在这里记录下来,以避免两次输入大量相同的内容。
为什么有人想要从 CD-ROM 启动机器?从光盘启动在任何想要运行非常特定的应用程序的地方都很有趣,例如信息亭、图书馆数据库程序或网吧,并且没有网络或服务器来使用基于 NFS 的 root 设置。
基本原理再次很简单,使用光盘作为 root 启动。为了实现这一点,我们将使用 rockridge 扩展在光盘上放置类似 unix 的文件系统,并使用 Eltorito 扩展使光盘可启动。
事情不可能那么简单
当然,这种设置也有一些问题。大多数与上面相同
- 我们需要对以下位置的写入权限:/dev、/var 和 /tmp。
- 我们将像使用基于 NFS 的 root 权限一样使用相同的解决方案(见上文)
- 对于 /dev,我们将使用 Devfs
- 对于 /var 和 /tmp,我们将使用 1mb 的共享内存盘。它是共享的,以便尽可能高效地利用空间。/tmp 被替换为指向 /var/tmp 的符号链接,以使共享成为可能。
- 使用 tarball 或模板目录填充内存盘同样有效。但是使用模板目录更容易进行更改,因此我们将使用模板目录。
- 某些应用程序需要对 /home 的写入权限。
- 将将要运行应用程序的用户的 homedir 放在 /var 中,并在每次启动时使用 /var 的其余部分填充它。
- /etc/mtab 需要可写
- 创建一个指向 /proc/mounts 的链接,并在 /proc 中创建一个空文件 mounts,见上文。
既然我们知道我们想要做什么以及如何做,那么是时候创建一个测试设置了
- 对于初学者,只需取一台您想要使用的机器,放入一个大磁盘和一个 CD 刻录机。
- 在这台机器上安装您选择的 Linux,并留下 650mb 的分区用于测试设置。此安装将用于制作 iso 镜像和刻录 CD,因此请安装必要的工具。它也将用于恢复任何导致测试设置无法启动的错误。
- 在 650 mb 分区上安装您选择的 Linux,并使用您想要在 CD 上拥有的设置,这将是测试设置
- 启动测试设置。
- 按照第 3.1 节中的描述编译内核,遵循所有步骤,仍然需要 devfs 所需的更改!在第 3.1 节的步骤 3 中,放入以下内容
- isofs 编译进内核
- devfs 编译进内核
- cdrom 支持编译进内核
- 您需要的其他一切都编译进内核或作为模块。
- 配置测试设置
- 创建我们将要运行应用程序的用户。
- 将其 homedir 放在 /var 中。
- 如果需要,安装应用程序。
- 如果需要,配置应用程序。
- 配置用户,以便在登录后自动运行应用程序。
- 配置 Linux,以便自动登录用户。
- 配置任何其他需要配置的内容。
- 测试测试设置是否自动启动到应用程序中并且一切正常。
- 启动主安装,并将 650 mb 分区挂载到主安装的 /test 上。
- 将以下内容放入名为 /test/etc/rc.d/rc.iso 的文件中,此文件将在 rc.sysinit 的开头被 source 以创建 /var
#/var
echo Creating /var ...
mke2fs -q -i 1024 /dev/ram1 1024
mount /dev/ram1 /var -o defaults,rw
cp -a /lib/var /
#restore devfs settings, needs proc
mount -t proc /proc /proc
/etc/rc.d/rc.devfs restore /etc/sysconfig
umount /proc
- 编辑 /test/etc/rc.sysinit,注释掉我们重新挂载 root 为 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`
- 从 /test/etc/rc.local 中删除 /etc/issue* 的创建,它只会失败。
- 现在再次启动测试分区,它将是只读的,就像 CD-ROM 一样。如果某些东西不起作用,请重新启动到工作分区修复它,再次尝试等等。或者您可以重新挂载 / 为 rw,修复它,然后再次直接重新启动到测试分区。要重新挂载 / 为 rw,请输入
mount -o remount,rw /
创建启动镜像
首先,启动到工作分区。要创建可启动的 CD,我们需要可启动软盘的镜像。仅仅 dd-ing 一个 zimage 是行不通的,因为 zimage 开头的加载程序似乎不喜欢可启动 CD 创建的假软盘驱动器。因此,我们将改用 syslinux。
- 从 RedHat CD 获取 boot.img
- 通过输入以下命令,通过 loopback 将 boot.img 挂载到某处
mount boot.img 某处 -o loop -t vfat
- 删除 boot.img 中的所有内容,除了
- 将测试分区中的 kernel-image 复制到 boot.img。
- 编辑 syslinux.cfg,使其包含以下内容,当然用适当的镜像名称替换 zImage
default linux
label linux
kernel zImage
append root=/dev/<insert your cdrom device here>
- 卸载 boot.img
卸载 某处
- 如果您的 /etc/mtab 是指向 /proc/mounts 的链接,则 umount 不会自动释放 /dev/loop0,因此通过键入以下命令来释放它
losetup -d /dev/loop0
创建 iso 镜像
现在我们有了启动镜像和一个可以从只读挂载启动的安装,是时候创建 CD 的 iso 镜像了
- 将 boot.img 复制到 /test
- Cd 到您要存储镜像的目录,确保它在具有足够可用空间的分区上。
- 现在通过键入以下命令生成镜像
mkisofs -R -b boot.img -c boot.catalog -o boot.iso /test
验证 iso 镜像
- 通过输入以下命令,通过 loopback 设备挂载镜像
mount boot.iso 某处 -o loop -t iso9660
- 现在验证内容是否正常。
- 卸载 boot.iso
卸载 某处
- 如果您的 /etc/mtab 是指向 /proc/mounts 的链接,则 umount 不会自动释放 /dev/loop0,因此通过键入以下命令来释放它
losetup -d /dev/loop0
刻录实际的 CD
假设您已经安装并配置了 cdrecord 以用于您的 CD 刻录机,请输入
cdrecord -v speed=<期望的写入速度> dev=<您的刻录机通用 scsi 设备的路径> boot.iso
嗯,本段的标题说明了一切 ;)
下一页 上一页 目录