下一页 上一页 目录

5. 额外福利:从光盘启动

以上大部分内容也适用于从光盘启动。由于我无论如何都想记录如何从光盘启动,所以在这里记录下来,以避免两次输入大量相同的内容。

为什么有人想要从 CD-ROM 启动机器?从光盘启动在任何想要运行非常特定的应用程序的地方都很有趣,例如信息亭、图书馆数据库程序或网吧,并且没有网络或服务器来使用基于 NFS 的 root 设置。

5.1 基本原理

基本原理再次很简单,使用光盘作为 root 启动。为了实现这一点,我们将使用 rockridge 扩展在光盘上放置类似 unix 的文件系统,并使用 Eltorito 扩展使光盘可启动。

事情不可能那么简单

当然,这种设置也有一些问题。大多数与上面相同

  1. 我们需要对以下位置的写入权限:/dev、/var 和 /tmp。
  2. 某些应用程序需要对 /home 的写入权限。
  3. /etc/mtab 需要可写

5.2 创建测试设置。

既然我们知道我们想要做什么以及如何做,那么是时候创建一个测试设置了

  1. 对于初学者,只需取一台您想要使用的机器,放入一个大磁盘和一个 CD 刻录机。
  2. 在这台机器上安装您选择的 Linux,并留下 650mb 的分区用于测试设置。此安装将用于制作 iso 镜像和刻录 CD,因此请安装必要的工具。它也将用于恢复任何导致测试设置无法启动的错误。
  3. 在 650 mb 分区上安装您选择的 Linux,并使用您想要在 CD 上拥有的设置,这将是测试设置
  4. 启动测试设置。
  5. 按照第 3.1 节中的描述编译内核,遵循所有步骤,仍然需要 devfs 所需的更改!在第 3.1 节的步骤 3 中,放入以下内容
  6. 配置测试设置
  7. 测试测试设置是否自动启动到应用程序中并且一切正常。
  8. 启动主安装,并将 650 mb 分区挂载到主安装的 /test 上。
  9. 将以下内容放入名为 /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
      
    

  10. 编辑 /test/etc/rc.sysinit,注释掉我们重新挂载 root 为 rw 的行,并在设置 PATH 后直接添加以下 2 行
    #to boot from cdrom
    . /etc/rc.d/rc.iso
      
    

  11. 将以下内容复制到脚本并执行它,这将为 /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`
    
      
    

  12. 从 /test/etc/rc.local 中删除 /etc/issue* 的创建,它只会失败。
  13. 现在再次启动测试分区,它将是只读的,就像 CD-ROM 一样。如果某些东西不起作用,请重新启动到工作分区修复它,再次尝试等等。或者您可以重新挂载 / 为 rw,修复它,然后再次直接重新启动到测试分区。要重新挂载 / 为 rw,请输入
    mount -o remount,rw /

5.3 创建 CD

创建启动镜像

首先,启动到工作分区。要创建可启动的 CD,我们需要可启动软盘的镜像。仅仅 dd-ing 一个 zimage 是行不通的,因为 zimage 开头的加载程序似乎不喜欢可启动 CD 创建的假软盘驱动器。因此,我们将改用 syslinux。

  1. 从 RedHat CD 获取 boot.img
  2. 通过输入以下命令,通过 loopback 将 boot.img 挂载到某处
    mount boot.img 某处 -o loop -t vfat
  3. 删除 boot.img 中的所有内容,除了
  4. 将测试分区中的 kernel-image 复制到 boot.img。
  5. 编辑 syslinux.cfg,使其包含以下内容,当然用适当的镜像名称替换 zImage
    default linux 
    
    label linux
    kernel zImage
    append root=/dev/<insert your cdrom device here>
      
    

  6. 卸载 boot.img
    卸载 某处
  7. 如果您的 /etc/mtab 是指向 /proc/mounts 的链接,则 umount 不会自动释放 /dev/loop0,因此通过键入以下命令来释放它
    losetup -d /dev/loop0

创建 iso 镜像

现在我们有了启动镜像和一个可以从只读挂载启动的安装,是时候创建 CD 的 iso 镜像了

  1. 将 boot.img 复制到 /test
  2. Cd 到您要存储镜像的目录,确保它在具有足够可用空间的分区上。
  3. 现在通过键入以下命令生成镜像
    mkisofs -R -b boot.img -c boot.catalog -o boot.iso /test

验证 iso 镜像

  1. 通过输入以下命令,通过 loopback 设备挂载镜像
    mount boot.iso 某处 -o loop -t iso9660
  2. 现在验证内容是否正常。
  3. 卸载 boot.iso
    卸载 某处
  4. 如果您的 /etc/mtab 是指向 /proc/mounts 的链接,则 umount 不会自动释放 /dev/loop0,因此通过键入以下命令来释放它
    losetup -d /dev/loop0

刻录实际的 CD

假设您已经安装并配置了 cdrecord 以用于您的 CD 刻录机,请输入

cdrecord -v speed=<期望的写入速度> dev=<您的刻录机通用 scsi 设备的路径> boot.iso

5.4 启动 CD 并测试它

嗯,本段的标题说明了一切 ;)


下一页 上一页 目录