npcomet 发表于 2007-11-24 17:18:32

构建 Fedora Live CD(转贴)

级别: 中级
Mayank Sharma , 自由技术撰稿人

2007 年3 月30 日
尽管 Fedora Linux® 是一个很流行且很成熟的 Linux 发行版,并且很多人已经创建了基于 Fedora的 Live CD发行版,但 Fedora 项目本身直到 2006 年 12 月才正式发布它的第一个 Live CD版本。通过本文,了解如何使用Pilgrim(Fedora Live CD 创建工具)的重写(rewrite)构建易于使用的定制 Live CD。   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。第一个正式的 FedoraLive CD 基于 FedoraCore 6 和附加存储库中的包。livecd 工具已被提交以便将其包括到 Fedora 的附加存储库中,到Fedora 7发布之时该库将被合并进核心存储库。
      livecd 工具有些什么特殊之处?
      用livecd 工具创建 Live CD 的最大优势是工具和 Live CD 是分开的。要打造LiveCD,您的全部所需就是一组配置文件。这些配置文件包含 Live CD 上所需的包的列表,并且描述了系统配置类型,LiveCD一旦引导就会做出这些配置。
      为了方便定制 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 工具包之间的关系
      http://www.ibm.com/developerworks/cn/linux/l-fedora-livecd/figure1.gif      
            Zeuthen 还指出将来该模式也可能会有助于其他正式的 Fedora Special Interest Groups (SIGs) 从这些 RPM 发展其自己的发行版。
            
图 2. 派生包的可能组织
      http://www.ibm.com/developerworks/cn/linux/l-fedora-livecd/figure2.gif      
      这听起来可能有点难于理解,但是一旦您实际动手操作,就会对此方法赞赏有加。
      
http://www.ibm.com/i/v14/rules/blue_rule.gif
http://www.ibm.com/i/c.gifhttp://www.ibm.com/i/c.gif
http://www.ibm.com/i/v14/icons/u_bold.gif
回页首

建立基础
            第一步是获取 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/ ... ools-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 连接,则可在创建 LiveCD 之前使用 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-6-1.i386.rpm
# wget -c http://people.redhat.com/davidz/ ... -gnome-6-1.i386.rpm
# wget -c http://people.redhat.com/davidz/ ... esktop-6-1.i386.rpm
# createrepo /root/base_packages
      跟以前一样,最后一条命令将生成 repodata 目录,帮助 livecd-creator 定位配置包。
      
http://www.ibm.com/i/v14/rules/blue_rule.gif
http://www.ibm.com/i/c.gifhttp://www.ibm.com/i/c.gif
http://www.ibm.com/i/v14/icons/u_bold.gif
回页首

制作 CD
      设置好存储库后,就可轻松地创建定制 Live CD 了。livecd-creator 命令生成 ISO 映像,这些映像可被烧制成CD-R。但是我建议使用虚拟化软件测试 ISO,而不要实际将它们烧制到物理介质上。有几种这类软件可免费获得,如 VMwarePlayer、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 的包创建 LiveCD。另外,它将包含OpenOffice.org 办公套件,该套件可从核心存储库中获得。它也将添加来自 livna 存储库的 VLCMediaPlayer。我们将其称作 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。
            
http://www.ibm.com/i/v14/rules/blue_rule.gif
http://www.ibm.com/i/c.gifhttp://www.ibm.com/i/c.gif





创建定制配置包
      我希望上述示例能让您了解创建 Live CD 实际上是一项很简单的工作。使用 Zeuthen 提供的包,您可继续创建 Live CD,向其中添加来自任何存储库的应用程序。
            但是假设您需要创建可用于编写文档和代码的 Live CD。您希望为编写代码文档将OpenOffice.org、Evolution e-mailclient、Beagle desktop search、GAIMinstant messenger、Xchat IRCclient、GIMP image manipulator、GCCcompiler、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.zip2KBHTTP

jiangtao9999 发表于 2007-11-24 17:57:55

LiveCD 主要的地方还是他的初始化脚本。如果能找到一个完美支持任何系统、能自动识别硬件来载入驱动并且配置系统设置(比如识别出 NV 显卡,自动设置/载入 NV 官方显卡驱动),那就真正的造福大众了。

mandrakechina 发表于 2007-11-24 23:43:19

Mandriva One是现成的,就可以实现你说的功能。

jiangtao9999 发表于 2007-11-25 16:04:08

原帖由 mandrakechina 于 2007-11-24 11:43 PM 发表 http://www.linuxfans.org/bbs/images/common/back.gif
Mandriva One是现成的,就可以实现你说的功能。
那个 draklive 弄明白没?我实在是没看懂他要干啥才能用……

哪里有 mdk 的 live usb 的景象?我这里有 4G 的 U 盘,但硬盘实在是没有空间去弄一个 tree 了。
页: [1]
查看完整版本: 构建 Fedora Live CD(转贴)