构建 Fedora Live CD

基于 Fedora Linux 创建定制 Live CD 的分步指南

尽管 Fedora Linux® 是一个很流行且很成熟的 Linux 发行版,并且很多人已经创建了基于 Fedora 的 Live CD 发行版,但 Fedora 项目本身直到 2006 年 12 月才正式发布它的第一个 Live CD 版本。通过本文,了解如何使用 Pilgrim(Fedora Live CD 创建工具)的重写(rewrite)构建易于使用的定制 Live CD。

Mayank Sharma (geeky_bodhi@yahoo.co.in), 自由技术撰稿人

Mayank Sharma 是 VA Linux 公司 Open Source Technology Group (OSTG) 部门的一位颇有贡献的编辑,主要在 OSTG 的 NewsForge 和 Linux.com 上发表文章。他还负责 Packt Publishing 的一个月刊专栏。另外,他还在德里的印度理工学院任客座讲师,讲授有关开放源码主题的课程。



2007 年 3 月 30 日

2006 年 12 月,Fedora Linux 发行版发布了它的第一个正式的 Live CD 版本,由于选用了一些优秀的应用程序,该版本很好地宣传了 Fedora 的最佳特性。除了提供很多应用程序之外,Live CD 还带几个游戏,使用了 Compiz 3D 桌面,并可供不会说英语的用户使用。但对我来说,最抢风头的是 David Zeuthen 的 livecd 工具,这些工具使创建和维护基于 Fedora 的定制 Live CD 异常轻松。

Zeuthen 是 Pilgrim 的开发者,Pilgrim 为 One Laptop Per Child(OLPC)项目创建可在 USB 闪存驱动上运行的系统映像(要了解更多信息,请参阅 参考资料 中的链接)。用于创建 Fedora Live CD 的 livecd 工具是 Python 中 Pilgrim 的重写。它可用于从 Red Hat Enterprise Linux、CentOS 和其他下游 Fedora 发行版创建 live CD。

在开始动手打造自己的 Live CD 之前,需要理解 Fedora 版本是如何装配、发行和维护的。Fedora 项目在两个可公开访问的存储库中保存包。由官方的 Fedora 开发者维护的存储库被称作“核心”存储库,由贡献者和社区维护的存储库被称作“附加”存储库。存储库不过是包的集合。除核心存储库和附加存储库外,还有几个第三方存储库,如 Livna 和 FreshRPM。

Fedora Core 发行版包含核心存储库中的所有包,其最新版本为 Fedora Core 6。第一个正式的 Fedora Live CD 基于 Fedora Core 6 和附加存储库中的包。livecd 工具已被提交以便将其包括到 Fedora 的附加存储库中,到 Fedora 7 发布之时该库将被合并进核心存储库。

livecd 工具有些什么特殊之处?

用 livecd 工具创建 Live CD 的最大优势是工具和 Live CD 是分开的。要打造 Live CD,您的全部所需就是一组配置文件。这些配置文件包含 Live CD 上所需的包的列表,并且描述了系统配置类型,Live CD 一旦引导就会做出这些配置。

为了方便定制 Live CD 维护人员,这些配置文件被作为 RPM 打包,并保存在它们自己的存储库中。因为 Fedora 发行版和其存储库在版本之间迁移,您可以保持更新这些配置文件以获得相关的包。

Zeuthen 中有三个这样的 RPM,定制 Live CD 可以它们为基础。这些 RPM 遵循有助于创建派生版本的继承模式。fedora-livecd 包 是一个不带用户界面的最小的 Live CD 包。fedora-livecd-gnome 包基于 fedora-base 包并包含 GNOME 桌面。fedora-livecd-desktop 包构建于 fedora-gnome 包之上并且为 GNOME 桌面提供了大量的应用程序和其他工具。

图 1,Zeuthen 对此做出了更好的解释。

图 1. livecd 工具包之间的关系
图 1. livecd 工具包之间的关系

Zeuthen 还指出将来该模式也可能会有助于其他正式的 Fedora Special Interest Groups (SIGs) 从这些 RPM 发展其自己的发行版。

图 2. 派生包的可能组织
图 2. 派生包的可能组织

这听起来可能有点难于理解,但是一旦您实际动手操作,就会对此方法赞赏有加。


建立基础

第一步是获取 livecd-tools RPM,可从 Zeuthen 的 Fedora 主页 获得。直接获取并安装 livecd-tools-001-1.i386.rpm,如下所示:

清单 1. 安装 Live CD 工具
$ su -
<Enter root password>
# wget -c http://people.redhat.com/davidz/livecd/i386/livecd-tools-001-1.i386.rpm
# rpm -ivh livecd-tools-001-1.i386.rpm

现在应该使用 livecd-creator 命令,不使用任何选项调用该命令可获取一个简单的命令列表。

清单 2. livecd-creator 命令提供的选项
$ livecd-creator
No packages specified.

usage: livecd-creator [--help] 
                      [--repo=<name1>,<url1> ...] [--repo=<name2>,<url2>]
                      --package=<p1> [--package=<p2> ...]
                      [--exclude-package=<e1>] --exclude-package=<e2> ...]
                      [--base-on=<path-to-iso-file>]
                      [--fslabel=<label>]

 --help             : Print usage and exit
 --repo             : Path to yum repository
 --package          : Include this package
 --exclude-package  : Exclude this package
 --base-on          : Add packages to an existing live CD iso9660 image
 --fslabel          : File system label (default: livecd-YYYYMMDD-HHMI)

创建核心包的本地存储库

另外,您还需要能够访问定制 Live CD 上所需工具的 RPM。如果您拥有快速的 Internet 连接,则可在创建 Live CD 之前使用 livecd-creator 命令下载这些 RPM 及其依赖的包。另一个选择是从 Fedora Core 6 安装 CD 或 DVD 中复制所有包并创建本地的“核心”存储库。要创建本地存储库,需要 createrepo 工具

清单 3. 安装 createrepo 工具
# wget -c http://tqmcube.com/files/createrepo-0.4.3-5.1.noarch.rpm
# rpm -ivh createrepo-0.4.3-5.1.noarch.rpm

现在创建本地存储库,首先从 Core 6 的 5 张 CD 或 1 张 DVD 中复制所有的 RPM,然后使用 createrepo 工具。

清单 4. 创建本地存储库
# mkdir /var/www/html/repo/core/
# cp <PATH TO RPMs> /var/www/html/repo/core/
# createrepo /var/www/html/repo/core/

执行完最后一条命令要花费些时间,它将创建一个 repodata 目录。livecd-creator 命令使用此目录来访问包。

创建配置包的本地存储库

由于要使用 Zeuthen 的包作为 Live CD 的基础,因此也需要为它们创建本地存储库。

清单 5. 创建 LiveCD 包的存储库
# mkdir base_packages
# cd base_packages
# wget -c http://people.redhat.com/davidz/livecd/i386/fedora-livecd-6-1.i386.rpm
# wget -c http://people.redhat.com/davidz/livecd/i386/fedora-livecd-gnome-6-1.i386.rpm
# wget -c http://people.redhat.com/davidz/livecd/i386/fedora-livecd-desktop-6-1.i386.rpm
# createrepo /root/base_packages

跟以前一样,最后一条命令将生成 repodata 目录,帮助 livecd-creator 定位配置包。


制作 CD

设置好存储库后,就可轻松地创建定制 Live CD 了。livecd-creator 命令生成 ISO 映像,这些映像可被烧制成 CD-R。但是我建议使用虚拟化软件测试 ISO,而不要实际将它们烧制到物理介质上。有几种这类软件可免费获得,如 VMware Player、QEMU 和 VirtualBox。

最小的 Live CD

要熟悉 livecd-creator 命令的用法,可由创建最小的 Live CD 开始:

清单 6. 创建最小的 Live CD
# livecd-creator --repo=c6,file:///var/www/html/repo/core --package=bash \
      --package=kernel --package=grub --fslabel=Fedora-minimal-LiveCD

此命令要求 livecd-creator 从本地存储库中获取三个包 —— bash、grub 和 kernel,并将它们包含到名为 Fedora-minimal-LiveCD 的 Live CD 中。livecd-creator 命令使用 Fedora 的 YUM 安装这些包,也因此要安装指定包依赖的其他应用程序。

执行完该命令要花费些时间,因为它将创建工作区,然后安装指定的包和它们的依赖项,重新标记 SELinux(Fedora 的安全机制)的工作区,压缩整个工作区,配置 Live CD bootloader、GRUB,并最终创建 ISO 映像。

恭喜您!您成功创建了您的第一个 Live CD。当然,您尚不能使用它来实现多少功能,因为缺乏配置文件。

带 GNOME 的 Live CD

既然您已经了解了 livecd-creator 命令的用法,现在就可以使用它创建包含 GNOME 的 Live CD 了。

清单 7. 创建带 GNOME 的 Live CD
# livecd-creator --repo=c6,file:///var/www/html/repo/core \
      --repo=lcd6,file:///root/base_packages \
      --package=fedora-livecd-gnome \
      --repo=e6,http://download.fedora.redhat.com/pub/fedora/linux/extras/6/i386 \
      --fslabel=My-Fedora-LiveCD-1

这里,使用本地存储库获取基础包并指定 CD 应该基于哪个配置包。还要指定 fedora-livecd-gnome 所需的包都应从本地核心存储库中获取。fedora-livecd-gnome 中有一些包不在核心存储库中,这些包将通过给定的 URL 从附加存储库中获取。最后,它将创建名为 My-Fedora-LiveCD-1.iso 的 ISO。

如果 livecd-creator 无法找到包 —— 例如,如果它不在指定的存储库中 —— 则命令会跳过该包并仍将继续创建 Live CD。除非缺少的包是关键包(如 kernel),否则,您均将得到一个可用的 Live CD。

除配置 RPM 中提到的包外,还可使用 --package 开关添加定制包。livecd-creator 命令也可使用多个存储库构建 CD。

清单 8. 使用多个存储库创建 Live CD
 # livecd-creator --repo=c6,file:///var/www/html/repo/core \
      --package=openoffice
      --repo=lcd6,file:///root/base_packages \
      --package=fedora-livecd-gnome \
      --repo=e6,http://download.fedora.redhat.com/pub/fedora/linux/extras/6/i386 \
      --repo=livna,http://rpm.livna.org/fedora/6/i386 \
      --package=vlc \
      --fslabel=My-LiveCD-2

与前一个示例中一样,此命令使用所有来自 fedora-livecd-gnome 的包创建 Live CD。另外,它将包含 OpenOffice.org 办公套件,该套件可从核心存储库中获得。它也将添加来自 livna 存储库的 VLC Media Player。我们将其称作 My-LiveCD-2,因为它包含来自第三方存储库的包,不能被称作 Fedora Live CD。

如果创建 CD 后,想要将另一个应用程序(如 Evolution e-mail client)添加到定制 CD 中可以么?没问题。如果前一个 CD 的 ISO 可用,则只需让 livecd-creator 使用此 ISO 的包并追加新包即可。

清单 9. 向现有的 Live CD ISO 中添加新包
# livecd-creator --repo=c6,file:///var/www/html/repo/core \
      --base-on=My-LiveCD-2.iso
      --package=evolution
      --fslabel=My-LiveCD-New

这将根据前一个 ISO 中的包和附加的 Evolution 包创建一个新的 Live CD。


创建定制配置包

我希望上述示例能让您了解创建 Live CD 实际上是一项很简单的工作。使用 Zeuthen 提供的包,您可继续创建 Live CD,向其中添加来自任何存储库的应用程序。

但是假设您需要创建可用于编写文档和代码的 Live CD。您希望为编写代码文档将 OpenOffice.org、Evolution e-mail client、Beagle desktop search、GAIM instant messenger、Xchat IRC client、GIMP image manipulator、GCC compiler、GDB debugger 和 Doxygen 包含进来。

可以在每次想要装配 CD 时使用 --package 开关指定它们,也可以编写自己的配置文件。使用配置文件的附加优点是还可以指定定制配置。

配置文件剖析

创建自己的配置文件之前,请先查看一下用来创建 Live CD 的配置文件:fedora-gnome。可从 RPM 提取该配置文件,方法是在 fedora-livecd-gnome-6-1.i386.rpm 上右击并选择 Extract Here 选项。这应该会在 etc/livecd/ 目录下生成一个名为 20-fedora-livecd-gnome.conf 的文件。前缀数字用于帮助识别包树中的特定的包。因此,20-* 包在 10-* 包之后并可能会依赖于后者,而 30-* 包则在 20-* 之后并可能会依赖于 20-* 和前缀更小的包。

文件的第一部分包含要安装的应用程序的列表,第二部分则包含该特殊环境中所需做出的配置。

清单 10. 20-fedora-livecd-gnome.conf 文件的内容
case $1 in
    # inquire what packages to install; must print packages to install
    pkgadd)
    echo "
chkconfig
gdm
gnome-panel
nautilus
metacity
gnome-themes
redhat-artwork
gnome-power-manager
gnome-volume-manager
desktop-printing
gnome-terminal
gedit
.
.
.
.

# run configuration scripts when all packages are installed
    post)
# mount livecd
mkdir -p /mnt/livecd
mount -o ro -t iso9660 /dev/livecd /mnt/livecd
# add fedora user with no passwd
useradd -c "Fedora live CD" fedora
passwd -d fedora > /dev/null
.
.
.
.

如您所见,大多数工作(如设置用户、设置网络)都由 fedora-gnome 包完成。

创建配置文件

创建配置文件的最佳方法是使用 20-fedora-livecd-gnome.conf 并删除 GNOME 特有的位。让我们调用 40-fedora-livecd-office-code.conf 文件。这应该能够奏效:

# cp 20-fedora-livecd-gnome.conf 40-fedora-livecd-office-code.conf

删除 GNOME 位后,可添加所需包的列表。新文件应显示如下内容(请注意:为节省空间起见,我删除了许可证位):

清单 11. 最新创建的 40-fedora-live-office.conf 文件
        #!/bin/bash

# livecd configuration for Base Fedora system

# PLEASE ADD LICENSE RELATED NOTE

case $1 in
    # inquire what packages to install; prints package list on stdout
    pkgadd)
    echo "
evolution
evolution-connector
evolution-webcal
gaim
xchat
beagle
gimp

openoffice.org-core
openoffice.org-draw
openoffice.org-calc
openoffice.org-graphicfilter
openoffice.org-math
openoffice.org-writer
openoffice.org-xsltfilter
openoffice.org-impress

gcc
gdb
doxygen
"
    ;;

    # run configuration scripts when all packages are installed
    post)
    ;;

    # run when an livecd install is complete to clean up
    install-post)
    ;;

    # run when an livecd install is complete; must prints packages to remove
    install-pkgrem)
echo "
fedora-livecd-office-code
"
    ;;
esac

别忘了创建 ISO 之前将配置包的名称包含到要删除包的列表中。

创建 RPM

在您可以实际使用此配置文件之前,需要先利用它来创建 RPM。创建 RPM 需要 SPEC 文件。可以使用 Zeuthen 的 fedora-livecd.spec 并对它进行编辑,以便包含关于新配置文件的信息。

大致说来,SPEC 文件包含将被包含到 RPM 中的文件列表,以及安装 RPM 时存放这些文件的位置。我无意深入探讨创建 SPEC 文件的细节,但是您可以使用我为本文创建的 SPEC 文件。请从本文后面的 下载 部分下载该文件,并阅读注释以了解对 Zeuthen 的原始文件做出的更改。

请注意:SPEC 文件指向其他包(如 fedora-live-gnome-fedora-livecd-desktop)的配置文件。要确保这些配置文件也都可用。

Fedora 使用 rpmbuild 命令来利用 SPEC 文件创建 RPM。rpmbuild 命令要求所有的 .conf 配置文件都位于 /usr/src/redhat/SOURCES 目录下,并且 SPEC 文件中所有称作 SOURCE 的文件也应位于该目录下。另外还要确保 fedora-livecd.spec 文件位于 /usr/src/redhat/SPECS 目录下。

清单 12. 创建新的 RPM
# cd /usr/src/redhat/SPECS
# rpmbuild -bb fedora-livecd.spec
# ls /usr/src/redhat/RPMS/i386
fedora-livecd-6-2.i386.rpm          
fedora-livecd-gnome-6-2.i386.rpm
fedora-livecd-desktop-6-2.i386.rpm  
fedora-livecd-office-6-2.i386.rpm

为了区别定制 RPM 和原始 RPM,我已将其版本定为 6-2 而不是原始的 6-1。

使用定制 RPM 构建 Live CD

一旦您可以自由处理 RPM,创建 Live CD 的过程也就大同小异了。使用新的 RPM 重新创建包的本地存储库即可。

清单 13. 使用新的 RPM 创建配置包的本地存储库
# rm /root/base_packages/*
# cp /usr/src/redhat/RPMS/* /root/base_packages/
# createrepo /root/base_packages

现在通过 livecd-creator 来使用最新创建的包。

清单 14. 使用新的 Fedora-Office-Code-LiveCD RPM 创建 Live CD
# livecd-creator --repo=c6,file:///var/www/html/repo/core \
      --repo=lcd6,file:///root/base_packages \
      --package=fedora-livecd-office-code \
      --repo=e6,http://download.fedora.redhat.com/pub/fedora/linux/extras/6/i386 \
      --fslabel=My-Fedora-Office-Code-LiveCD

转眼之间!您就从完全由自己定制的配置获得了完全由自己定制的 Live CD。

一旦熟悉了创建配置 RPM 的过程,您就能立刻创建 Live CD。您可通过调整设置和添加或删除包来定制 Live CD。另外,您还能将任意数据文件移到 Live CD 环境中,正如我在 SPEC 文件中所展示的那样。

Live CD 安装程序已经处于测试阶段,何时发布只是个时间问题。通过配置文件中的一个条目或 --package 选项就可将其绑定到 Live CD,使其完全可以在硬盘上安装。定制 Linux 发行版转瞬即得,够酷吧?


下载

描述名字大小
样例 SPEC 文件fedora-livecd-custom.zip2KB

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux, Open source
ArticleID=205311
ArticleTitle=构建 Fedora Live CD
publish-date=03302007