无需重新制作即可重新定制 Knoppix

作者:Kyle Rankin

如果您使用 Knoppix 有一段时间了,那么您很可能最终会考虑对其进行自定义。您可能只是想通过新的背景和不同的主题进行外观上的更改,或者您可能想添加程序、更改启动时发生的事情,或者进行许多更深入的更改。嗯,您并不孤单。现存的基于 Knoppix 的 Live CD 超过一百种。有些只更改了一些工具,而另一些则对程序、主题甚至文件结构进行了彻底的修改。

传统重新制作

如果您决定更改 Knoppix,您很快就会熟悉一些关于 Knoppix 重新制作的在线和印刷指南。那时,你们中的一些人会阅读复杂的步骤,并认为这根本不值得。Knoppix 将其所有软件都放在光盘上的压缩回环文件系统中。要重新制作 Knoppix,您必须制作该文件系统未压缩内容的副本,使用 chroot 访问该副本,就像它是根文件系统一样,进行任何您想要进行的更改,然后使用命令行上的一些巨型命令重新创建新的 cloop 文件系统和 ISO 镜像。

当然,我在这里过度简化并省略了一些步骤。除了更技术性的步骤外,我还遗漏了一个小错误,您无疑引入了这个错误,但在启动之前没有注意到。这意味着您必须再次经历重新制作过程(尤其是创建新的 cloop 文件系统的耗时步骤)。我还遗漏了一个步骤,您注意到即使您进行了细微的更改,您的 ISO 也会莫名其妙地比以前大得多,并且无法放入 CD 中,因此您需要回到重新制作过程以释放更多空间。

事实是,传统的 Knoppix 重新制作是一个耗时、容易出错、复杂的过程,充满了反复试验,但有一种更好的方法。您可以使用几种不同的方法来调整默认的 Knoppix 光盘,而无需使用重新制作过程。我喜欢将这些方法称为“无需重新制作即可重新定制 Knoppix”,因为默认的 Knoppix cloop 文件系统在整个过程中保持不变。

当我必须创建自定义 CD 以随我的书《Knoppix Hacks》一起附赠时,我第一次对低影响的 Knoppix 调整产生了兴趣。我不想做太多——只是更改默认背景并在桌面上添加一些链接。尽管我可以重新制作 CD,但我担心引入错误,即使是细微的更改。想象一下,如果我在 CD 印刷并随书运送到全国各地后才发现一个错误!我认为,如果我可以调整 Knoppix 但保持压缩镜像不变,我将大大降低风险。

自从我第一次尝试无需重新制作即可重新定制 Knoppix 以来,我使用这些方法如此之多,以至于我实际上更喜欢它们,并且发现对于大多数人的需求来说,它们优于重新制作。这个过程不仅更快、更简单,而且一旦发布下一个版本的 Knoppix,迁移您的更改也更简单。

保存配置

您可以用来更改 Knoppix 的第一种方法涉及一个经典的 Knoppix 工具,称为 saveconfig。此工具创建并允许您从用户的配置文件、桌面上的所有文件以及网络、图形和其他设置中选择许多不同的文件和设置。然后,saveconfig 从这些文件中创建一个名为 configs.tbz 的 tar 压缩包,并将其与自定义的 knoppix.sh 脚本一起存储在 USB 密钥、硬盘驱动器或其他可写介质上,供您选择。

要运行 saveconfig,请单击 K→Knoppix→配置→保存 Knoppix 配置,或键入saveconfig在终端中。然后,您可以选择要保存的设置以及要将其保存到哪个硬盘驱动器。下次启动计算机时,键入myconfig=/dev/sda1/以将 Knoppix 指向特定的已保存配置,或键入myconfig=scan,Knoppix 将扫描所有可用的驱动器。在启动过程结束时,Knoppix 将运行驱动器上的 knoppix.sh 脚本,该脚本将解压缩 tar 压缩包并恢复您的设置。

对于较小的、主要是外观上的更改,标准的 saveconfig 脚本可能满足您的所有需求。只需进行更改,然后告诉 saveconfig 备份您的个人配置即可。这很有用,但您可能只想备份几个文件,或者您可能想添加 saveconfig 默认不保存的文件。为此,您可以调整 configs.tbz 或 knoppix.sh 文件。首先,运行 saveconfig 以创建 configs.tbz 和 knoppix.sh 文件。然后,解压缩 configs.tbz 文件

$ bunzip2 configs.tbz

现在,使用 tar 向 tar 压缩包添加新文件

$ tar -rpPf configs.tar /path/to/file

您也可以使用 tar 删除文件

tar --delete -pPf configs.tar /path/to/file

完成更改后,您可以重新压缩 tar 压缩包

$ BZIP2=-9 bzip2 configs.tar
$ mv configs.tar.bz2 configs.tbz

调整 saveconfig 的另一种方法(甚至完全绕过它)是意识到,当您告诉 Knoppix 使用特定的已保存配置时,它实际上所做的只是执行 knoppix.sh 文件,这是一个标准的 shell 脚本。该 shell 脚本包含提取文件的 tar 命令。这意味着您放入 knoppix.sh 文件中的任何内容都将在启动过程结束时执行。更重要的是,如果您创建新的 Knoppix 光盘并将 knoppix.sh 放在光盘上的 KNOPPIX/ 目录中,则每次 Knoppix 启动时,它都会自动执行。因此,如果您想让 Knoppix 拥有一个额外的程序,只需找到它的 .deb 文件及其任何依赖项,并将它们添加到光盘中。然后,在 knoppix.sh 脚本中,您可以放入

dpkg -i /cdrom/*.deb

Knoppix 将在启动过程结束时安装所有这些程序。如果您想运行任何其他命令或启动任何服务,也可以将它们放在此脚本中。

示例:网络摄像头

这是一个调整后的 knoppix.sh 文件的示例,我制作该文件是为了将 Knoppix 变成即时网络摄像头服务器。我首先在 CD-ROM 上创建了一个 webcam 目录,并将一个基本的 HTML 文件放在那里,该文件指向 /var/www/webcam.jpg 中的图像。然后,我创建了一个 knoppix.sh 脚本并将其放在 CD 上的 KNOPPIX/ 目录中。以下是该脚本

#!/bin/sh

echo Configuring Apache
cp /cdrom/webcam/index.html /var/www/index.html
/etc/init.d/apache start
echo Configuring Cron
echo '* * * * *  root gqcam -d /var/www/webcam.jpg > /dev/null' >>
/etc/crontab
/etc/init.d/cron start

如您所见,此脚本没有太多内容。我将 HTML 文件复制到默认的 Apache 文档根目录,启动 Apache,然后向全局 crontab 添加一个作业并启动 cron。cron 命令将每分钟运行 gqcam,这将捕获图像并将其存储在 /var/www/webcam.jpg 中。现在,我只需刻录 CD 并在任何装有网络摄像头的机器上启动它,Knoppix 将处理其余的事情。

持久磁盘镜像

除了 saveconfig 脚本外,Knoppix 还提供了一个更高级的脚本,用于创建持久磁盘。Live CD 的主要问题是,每次重新启动时,您的所有更改都会被擦除。传统上,持久性脚本在 USB 密钥或硬盘驱动器上创建一个指定大小的回环文件系统,然后将您的整个 home 目录复制到其中。在下次启动时,如果您使用启动代码选择了它,Knoppix 将挂载该文件系统并将您的整个 home 目录指向它。这意味着您对 home 目录所做的任何更改都会在您的所有重新启动中保留下来。

该脚本的主要限制(与旧版 Knoppix 光盘一样)是您只能写入某些目录。从 Knoppix 3.8 开始,Knoppix 添加了 UnionFS(现在已替换为 AuFS)。此工具本质上允许您将文件系统彼此叠加合并,即使一个是只读的,另一个是读写的。如果您写入文件系统,UnionFS/AuFS 会透明地处理将写入放在正确的文件系统上。对于 Knoppix,这现在意味着传统上用于 /home 和 /etc 的 ramdisk 现在可以合并在整个文件系统的顶部。现在,您基本上可以在任何您想要的位置写入,使用标准的 Debian 软件包管理安装程序,并且基本上将系统视为任何其他已安装的 Linux 发行版,仅受您的 ramdisk 大小的限制。

随着 AuFS 的添加,Knoppix 更改了其持久性脚本。现在,当您单击 K→Knoppix→配置→创建持久 Knoppix 磁盘镜像时,Knoppix 会创建整个 ramdisk 的完整副本。这是您自启动以来对系统所做的所有更改的副本。在脚本中,您可以选择文件系统的最大大小、镜像的存储位置,甚至是否使用加密。下次启动时,如果 USB 或本地硬盘驱动器存在,Knoppix 会自动检测到它并提示您一些选项

  • Home:仅使用您的持久 home 目录。

  • System:将整个 /ramdisk 挂载点替换为持久磁盘镜像。

  • Overwrite:默认关闭,但如果您同时启用“System”选项,它将替换持久镜像上的 /etc 目录。如果以前机器的系统级图形或网络设置干扰了您当前的机器,您可能需要执行此操作。

  • Init:启动任何持久 init 脚本。

如果您不选择这些选项中的任何一个,Knoppix 将正常启动。您也可能在不同的驱动器上(或同一驱动器上不同目录中的多个文件)有多个 knoppix.img 文件。这实际上是在 USB 密钥的不同目录中创建自定义 Knoppix 设置的好方法。假设我在 USB 密钥(Knoppix 检测为 /dev/sda1)的 security 目录中有一个以安全为中心的持久镜像,那么我可以使用 home=/dev/sda1/security/knoppix.img 启动代码启动 Knoppix。

调整启动设置

saveconfig 和 knoppix.sh 调整提供了许多功能,但它们的主要缺点是它们在启动过程结束时执行。有时您希望比那时更早地更改 Knoppix 设置——无论是启动时看到的默认屏幕还是 Knoppix 的默认启动代码。这些选项以及更多选项都存储在光盘上的 boot/isolinux/ 目录中,并且可以轻松更改。下面我将介绍一些更重要的文件以及您可以使用它们更改的内容。

启动消息: boot.msg、f2 和 f3 文件是文本文件,分别定义了在启动提示符下以及按下 F2 和 F3 时显示的内容。如果您想添加特殊帮助甚至完全更改文本,可以在这些文件中进行操作。

isolinux.cfg: 这是此目录中最有用的文件之一,因为它定义了可以加载的所有不同内核以及它们的默认启动选项。例如,以下是文件中定义默认 Knoppix 设置和启动代码的部分,如果您让启动提示符超时或只是按 Enter 键。

LABEL knoppix
KERNEL linux
APPEND ramdisk_size=100000 init=/etc/init lang=us apm=power-off vga=791
initrd=m
inirt.gz nomce loglevel=0 quiet BOOT_IMAGE=knoppix

例如,您可以在此处看到默认语言为英语,但如果您想将其更改为西班牙语,则需要更改lang=us改为lang=es。如果您在文件中进一步向下滚动,您不仅可以看到您可以启动的其他 Knoppix 类型,还可以看到 memtest 和 dos 的列表。

调整 initrd

与其他启动文件一起,在 boot/isolinux/ 下是默认的 Knoppix initrd 文件,名为 minirt.gz。此文件是 Knoppix 挂载的初始根镜像。镜像中包含启动过程的基本文件,包括 init 可执行文件,但 Knoppix hackers 最感兴趣的文件是 linuxrc 文件,它充当 Knoppix 的通用启动脚本。首先,制作 minirt.gz 文件的副本(在我的示例中,我假设它已挂载在 /cdrom 下),解压缩它,然后挂载文件系统

# cp /cdrom/boot/isolinux/minirt.gz .
# gunzip minirt.gz
# mkdir temp
# mount -t ext2 -o loop minirt ./temp

现在,如果您查看该挂载文件系统的顶层目录,您将看到 linuxrc 文件。脚本的很多部分定义了默认设置,例如哪些文件系统内置于 Knoppix 以及 Knoppix 用于挂载它们的过程,但您也可以看到 Knoppix 在哪里定义了系统范围的默认值,并且还允许您覆盖它们。例如,以下行定义了默认的 Knoppix 目录和 cloop 文件以及通过启动代码覆盖它们的能力

KNOPPIX_DIR="KNOPPIX"
KNOPPIX_NAME="KNOPPIX"
case "$CMDLINE" in *knoppix_dir=*) KNOPPIX_DIR="$knoppix_dir"; ;; esac
case "$CMDLINE" in *knoppix_name=*) KNOPPIX_NAME="$knoppix_name"; ;; esac

如果您想向启动过程添加一些额外的功能,请通读脚本以确定最佳位置。例如,在脚本的某些点,KNOPPIX cloop 文件系统尚未加载,许多常用模块也没有加载。如果您不确定在哪里添加更改,只需在注释之前将其添加到脚本末尾即可#将控制权交给 init 进程。那时,Knoppix 应该已经加载并挂载了主要模块和文件系统。

完成调整后,卸载 minirt 文件系统并重新压缩它。然后,您可以使用自定义版本覆盖默认版本

umount temp
gzip -9 minirt

这些只是如何无需重新制作即可重新定制 Knoppix 的一些示例。这些方法的优点之一是它们通常易于尝试,因此如果您犯了错误,您可以快速修复它。此外,对于从一个 Knoppix 光盘迁移到下一个 Knoppix 光盘(当发布下一个版本的 Knoppix 时)来说,这些方法中的大多数都非常适合。最后,由于您的大多数自定义调整都可以是独立的,如果您想与朋友分享它们,您可以简单地分享您的 knoppix.sh 和 configs.tbz 文件,例如,而不是整个 ISO 镜像。

Kyle Rankin 是旧金山湾区的高级系统管理员,也是多本书籍的作者,其中包括 O'Reilly Media 出版的《Knoppix Hacks》和《Ubuntu Hacks》。他目前是北湾 Linux 用户组的主席。

加载 Disqus 评论