SDB:KIWI Cookbook LiveSystem

跳转到:导航搜索
构建一个可以从 CD 启动和运行的镜像。首先修改一个基本的 KIWI 配置,以更改镜像的内容。
Icon-checked.png
此过程至少在 Kiwi 版本 3.25 ( kiwi --version ) 上进行了测试 - 较旧的版本不支持所有显示的功能 版本



Tux Live - 我们的第二个配方


这个配方的结果是一个可用的 openSUSE live 系统。但是,为了增加一些趣味性,我们将修改由 kiwi-doc 包提供的基本配方。我们将向创建的系统中添加一个额外的软件包,并更改启动菜单上显示的名称。为了使这些更改生效,我们需要对 kiwi 镜像描述进行操作。

一个 live 系统镜像是一个可以在便携式介质(例如 CD、DVD 或 USB)上启动和运行的可启动操作系统。live 系统将 CD/DVD/USB 视为系统的硬盘。这为我们提供了一个随身携带系统并在任何我们可以使用的计算机上使用的机会。使用 CD 或 DVD 介质的缺点是介质类型是只读的,这意味着系统在刻录到介质后不能永久更改。基于 CD/DVD 的系统所做的任何修改都发生在内存中,因此在系统停止时会丢失。对于本示例,我们仅考虑 CD/DVD 介质上的 live 系统。

LiveCD 配方

准备时间

  • 20 分钟

烹饪时间

  • 20-25 分钟,具体取决于带宽(参见上面的讨论)和主机的硬件

配料

  • 一个正在运行的 openSUSE 11.1 系统
  • 一个 openSUSE 11.1 仓库
  • 已安装最新版本的 KIWI 工具集(至少版本 3.25)
  • 已安装 kiwi-doc 包
  • 大约 5 GB 的可用磁盘空间


原始配方

使用 kiwi-doc 包提供的示例,如下所示(请记住您需要以 root 用户身份登录)。

如果您不再拥有我们之前在初始设置期间创建的目录,请立即重新创建它们

# mkdir /tmp/myiso
# mkdir /tmp/myiso-result

kiwi-doc 包中的示例文件位于 /usr/share/doc/packages/kiwi/examples 目录中。我们想使用 openSUSE 11.1 的 suse-live-iso 示例,因此我们的命令将是

# kiwi --prepare /usr/share/doc/packages/kiwi/examples/suse-11.1/suse-live-iso --root /tmp/myiso
# kiwi --create /tmp/myiso --type iso -d /tmp/myiso-result

与之前的配方一样,我们可以使用 vmware 或 qemu 等完整的虚拟系统来测试 iso 镜像。当然,您也可以选择“刻录并启动”。

再次提供 qemu 命令行的图像测试选项供您参考。

# qemu -cdrom /tmp/myiso-result/suse-11.1-live-iso.i686-2.5.1.iso -m 512

系统的登录详细信息是

  • 用户:root
  • 密码:linux

一些注意事项

  • 如果您在 64 位系统上构建,您需要使用 qemu-kvm(来自 kvm 包)而不是 qemu
  • 上述命令中的镜像名称 suse-11.1-live-iso.i686-2.5.1.iso 可能会因您的构建架构和您使用的模板版本而异。

自定义配方

现在我们已经品尝了基本配方,由一位大师厨师准备,让我们自定义配方以添加我们自己的风味。

镜像描述

KIWI 使用一种称为 image description 的东西作为要创建的镜像的基础。

镜像描述是一个目录,至少包含一个名为 config.xml 的文件.

除了 config.xml 文件之外,镜像描述目录还可以包含在镜像创建期间执行的 shell 脚本,或包含在镜像中的任何类型的文件和目录结构。

有关镜像描述目录的详细信息,请参阅安装了 kiwi-doc 包的 /usr/share/doc/packages/kiwi/kiwi.pdf 中的 KIWI Image System Cookbook,或在线版本,网址为 此处


以下步骤显示如何修改现有的镜像描述。镜像描述的丰富性提供了大量的自定义选项,在这里,我们将重点放在修改 config.xml 文件上。

我们修改的起点是上面创建的 LiveCD 镜像的描述。我们将把 kde4-amor 包添加到描述中,并更改系统名称。为了使这些更改生效,我们需要对 kiwi 镜像描述进行操作。作为良好的实践,建议您在副本上工作并保留原始示例的完整性,该示例随 kiwi-doc 包提供。

复制示例镜像描述

# cp -a /usr/share/doc/packages/kiwi/examples/suse-11.1/suse-live-iso/* /tmp/tux-suse-live-iso
# cd /tmp/tux-suse-live-iso
# ls -l
 total 52
 drwxr-xr-x  3 root root  4096 Mar 18 17:48 ./
 drwxrwxrwt 22 root root 36864 Mar 19 14:52 ../
 -rwxr-xr-x  1 root root  1204 Oct  2 16:19 config.sh*
 -rw-r--r--  1 root root  1101 Jan  7 10:49 config.xml
 drwxr-xr-x  3 root root  4096 Feb 10 17:34 root/

注意:大小和日期可能会因您安装的 kiwi-doc 包的版本而异。

提示:从 kiwi 版本 3.54 开始,您还可以使用 kiwi --clone 模式来复制/克隆示例。
语法:kiwi --clone image-path -d destination-path
示例:kiwi --clone /usr/share/doc/packages/kiwi/examples/suse-11.1/suse-live-iso -d /tmp/tux-suse-live-iso
结果:/tmp/tux-suse-live-iso 与上面的 "cp -a <path>/* 类似

更改 config.xml

镜像描述目录中的强制性 config.xml 文件包含通过 XML 描述的镜像定义数据。XML 数据的结构使用 XSD 定义,并由 kiwi 验证。数据部分描述了镜像的各个方面,例如镜像名称、镜像类型以及要安装在镜像中的软件包。除了软件包描述之外,kiwi 还支持使用模式,例如 GNOME 或 KDE,来识别软件包组。

修改通用镜像数据
  • 使用您最喜欢的文本编辑器打开目录中的 config.xml 文件(如果您遵循了复制命令,则为 /tmp/tux-suse-live-iso/config.xml)。文件的开头将类似于以下结果所示。
 <?xml version="1.0"?>
 <image schemaversion="3.5" name="suse-11.1-live-iso">
   <description type="system">
     <author>Marcus Schäfer</author>
     <contact>ms@novell.com</contact>
     <specification>openSUSE 11.1 Live system</specification>
   </description>
    ...
 </image>
  • image 标签用于描述顶级镜像属性
这包括 name 属性设置为 suse-11.1-live-iso;name 属性的值用作我们生成的镜像的文件名。将 "suse-11.1-live-iso" 更改为 "mytux-live-iso"。
我们希望添加可选的 displayname 属性;displayname 属性的值用作 grub(镜像引导加载程序)中的启动菜单标题。使用 name 和 displayname 属性支持将镜像名称(例如 "suse-11.1-live-iso")与在启动菜单中显示的名称(在我们的示例中为 "mytux")分开。
  • 强制性的 "description" 元素包含有关此镜像描述的创建者的信息。 "type" 属性指示这是否是系统镜像或引导镜像描述,由值 "system" 或 "boot" 确定。
  • author 标签标识此镜像描述的作者;将值更改为您的姓名
  • contact 标签标识联系作者的一种方式;将值更改为您的电子邮件地址
  • specification 标签提供了一个简短的标识此镜像目的的空间
  • 应用上述更改后,您的文件的开头应如下所示(如果您的名字是 Foo Bar)
 <?xml version="1.0"?>
 <image schemeversion="2.4" name="mytux-live-iso" displayname="mytux" >
   <description type="system">
     <author>Foo Bar</author>
     <contact>foobar@suse.com</contact>
     <specification>My tux Live system based on openSUSE 11.1</specification>
   </description>
    ...
 </image>
添加软件包
  • 要安装在镜像中的软件包在 packages 元素中描述。滚动到 config.xml 文件中的软件包列表,以查看当前为镜像选择的软件包列表
<packages type="image">
  <package name="kernel-default"/>
  <package name="bootsplash"/>
  <package name="bootsplash-branding-openSUSE"/>
  <package name="ifplugd"/>
  <package name="vim"/>
  <opensusePattern name="default"/>
  <opensusePattern name="kde4"/>
</packages>
从列表中的元素名称,我们可以得出结论,kiwi 在创建此镜像时将处理 5 个软件包和 2 个模式。


  • 如前所述,我们想将不太有用但有趣的 kde4-amor 包添加到我们的镜像中。通过将一个新的 package 元素添加到软件包列表中来实现。结果如下所示(强调更改)。
<packages type="image">
  <package name="kernel-default"/>
  <package name="bootsplash"/>
  <package name="bootsplash-branding-openSUSE"/>
  <package name="ifplugd"/>
  <package name="vim"/>
  <package name="kde4-amor"/>
  <opensusePattern name="default"/>
  <opensusePattern name="kde4"/>
</packages>
这是唯一需要的更改。

packages 列表进行更改后,"kde4-amor" 包现在是镜像定义的一部分,kiwi 将在准备步骤中将该软件包安装到解包的镜像中。您可以根据自己的意愿添加其他软件包或 模式

更改/添加仓库

Repository Options 部分中,在 Start Cooking 配方中,介绍了 kiwi 命令行参数,用于指定仓库。现在我们将研究如何在 config.xml 文件中描述安装源,以便我们无需使用 "--set-repro" 命令行选项即可执行 kiwi。

kiwi 工具链支持两种软件包管理系统,zypper 是原生的 SUSE 软件包管理器,以及 smart 旨在支持通用的软件包格式。通过 "preferences" 元素中的 "packagemanager" 标签选择镜像的软件包管理器。根据选择的软件包管理器,可以使用 "type" 属性在 "repository" 元素上指定各种仓库格式。有关支持的仓库格式的详细信息,请参阅 FAQ 部分

  • openSUSE 11.1 的默认设置是使用 zypper 作为软件包管理器和 "yast2" 仓库。滚动到 config.xml 文件中打开的仓库元素,您将看到类似于以下内容的定义。
<repository type="yast2">
  <!--<source path="/image/CDs/full-11.1-i386"/>-->
  <source path="opensuse://11.1/repo/oss/"/>
</repository>
  • 第一项是注释,指示包含仓库内文件的目录路径。
  • 第二项提供了仓库位置的值,在本例中为 "opensuse://11.1/repo/oss/"。
此值包含 "opensuse" 作为关键字。kiwi 将 "opensuse" 关键字理解为 openSUSE 在线仓库。可以将 "opensuse" 关键字扩展为 http://download.opensuse.org/distribution,以便完整的仓库路径为 http://download.opensuse.org/distribution11.1/repo/oss/。
  • Repository Options 部分中突出显示的一个选项是使用 openSUSE 11.1 DVD 作为本地仓库。假设 DVD 已挂载,如前所述,我们可以使用以下规范在 config.xml 文件中将其用作仓库。
<repository type="yast2">
  <source path="/media/SU1110.001"/> 
</repository>

</nowiki>

  • 我们还可以将 iso 镜像指定为仓库,在将其挂载为循环设备之后
mount -o loop /path-to-the-iso-file/filename.iso /mnt
  • 使用此挂载点,可以指定仓库如下所示。
 <repository type="yast2">
    <source path="/mnt"/>
 </repository>
  • config.xml 文件支持的语法允许我们使用 iso 镜像,而无需将其挂载为循环设备。假设 iso 镜像位于 /tmp 中,并且我们正在使用 openSUSE 11.1 x86 镜像,则以下规范将起作用。
 <repository type="yast2">
    <source path="iso:/tmp/openSUSE-11.1-DVD-i586.iso"/>
 </repository>


在每个 "repository" 元素中只能指定一个 "source" 元素。要使用 多个仓库,您可以根据需要指定多个 "repository" 元素。如果相同的软件包存在于多个指定的仓库中,则软件包管理器确定重复的解决方案。

  • 下面的示例显示了使用循环挂载的 iso 镜像和包含 rpm 文件的本地目录。
 <repository type="yast2">
    <source path="/mnt"/>
 </repository>
 <repository type="rpm-dir">
    <source path="/home/my_rpms"/>
 </repository>


有关使用 "repository" 元素的更多详细信息,请参阅安装了 kiwi-doc 包的 /usr/share/doc/packages/kiwi/kiwi.pdf 中的 KIWI Image System Cookbook,或在线版本,网址为 此处


您还可以通过使用您最喜欢的浏览器导航到 /usr/share/doc/packages/kiwi/schema/kiwi.xsd.html 来查阅 config.xml 文件的模式。此文件随 kiwi-doc 包安装。但是,如果您不熟悉 XSD,这不是您的最佳信息来源。

构建 LiveCD

应用了上一节中的更改后,现在我们可以使用以下命令重新构建 LiveCD 镜像。

  • 删除目标目录(kiwi 不会覆盖解包的镜像并会出错)
# rm -rf /tmp/myiso
  • 创建一个新的目标目录
# mkdir /tmp/myiso
  • 准备镜像
# kiwi --prepare /tmp/tux-suse-live-iso --root /tmp/myiso
  • 创建镜像
# kiwi --create /tmp/myiso --type iso -d /tmp/myiso-result

完成创建步骤且没有投诉后,您可以使用 qemu 测试 iso 镜像。

# qemu -cdrom /tmp/myiso-result/mytux-live-iso.i686-2.5.1.iso -m 512
关于镜像名称和在 64 位模式下构建的注意事项与之前 Start Cooking 中提到的注意事项相同。