SDB:KIWI Cookbook 开始烹饪

跳转到:导航搜索
您将在此处获得 KIWI 的简要介绍,所需的软件包、命令和其他有用的入门信息。
Icon-checked.png
此过程至少在 Kiwi 版本 3.25 ( kiwi --version ) 上进行了测试 - 较旧的版本不支持所有显示的功能 版本



通用准备


在开始烹饪之前,我们需要确保所有必需的配料都已准备好并正确设置。

为了使用 kiwi 工具,您必须以 root 用户身份登录

安装 KIWI 工具集

强烈建议您使用已发布的 KIWI 工具链版本。将 Virtualization:Appliances 仓库添加到您的系统中将允许您安装所有与 KIWI 相关的软件包。

以下命令说明了如何使用 zypper 从命令行添加仓库并安装 KIWI 工具。或者,您可以使用 YaST2 GUI 添加仓库并完成安装。

# zypper ar http://download.opensuse.org/repositories/Virtualization:/Appliances/openSUSE_11.3/ Virtualization:Appliances
  • 安装 kiwi 和其他所需软件包
# zypper in kiwi kiwi-doc kiwi-templates kiwi-desc-vmxboot kiwi-desc-usbboot kiwi-desc-isoboot kiwi-desc-xenboot kiwi-desc-oemboot squashfs

如果您之前配置了工具仓库但没有安装 KIWI,只需使用上面的命令即可。

以下命令将允许您更新工具仓库中的所有软件包,包括先前安装的 KIWI(如果已安装)。

  • 刷新仓库
# zypper refresh
  • 使用更新版本更新所有已安装的软件包
# zypper up --repo Virtualization:Appliances

注意:有关 zypper 命令行选项的详细信息,请参阅 zypper man 页面(man zypper)或用法文档 SDB:Zypper_usage

我们烹饪的目录

使用 KIWI 创建镜像需要在您的文件系统(硬盘或挂载的外部存储)中留出空间。所需空间量取决于所用软件包的大小以及要放置在镜像中的任何其他软件。

存储空间的通用指南是 8 GB + 任何其他软件的大小。在 8 GB 存储空间内,可以安装整个发行版,因此这为从发行版仓库所需的软件包提供了足够的空间。

对于这里提供的示例,我们将使用 /tmp 中的目录。但是,您可以选择将这些工作目录放在文件系统的任何位置。

在此步骤中创建的目录将在以后作为命令行参数使用。

临时构建空间目录

# mkdir -p /tmp/myiso

最终镜像目录

# mkdir -p /tmp/myiso-result

请注意,用于临时构建空间的目录只能使用一次,即在同一目录中准备另一个镜像之前,必须清空该目录。kiwi 工具链将产生一个错误,例如:无法创建根目录:文件已存在

下一节将提供基本命令的快速概述以及有关 Kiwi 工作原理的简要高级描述。


准备好开始烹饪!


使用 KIWI 创建镜像是一个两步过程。第一步是 准备步骤,然后是 创建步骤

在准备步骤中,所谓的 解包后的镜像 会在临时构建空间目录(在我们的示例中为 /tmp/myiso,如上所述)中创建。临时构建空间中的解包镜像包含基于一个或多个软件软件包从指定仓库(稍后会介绍仓库)构建的新文件系统。

创建步骤使用准备步骤中创建的文件系统作为镜像根树来创建输出镜像。此镜像放置在最终镜像目录中(例如,在我们的示例中为 /tmp/myiso-result,如上所述)。如果请求的镜像类型为 ISO,则输出镜像是一个后缀为 .iso 的文件,代表 CD 或 DVD 上的实时系统。也可以创建用作安装源的 ISO 镜像。

除了创建 LiveCD ISO 镜像外,kiwi 还可以创建用于完整的虚拟(VMWare/qemu)和半虚拟(Xen)环境以及 USB 存储器、PXE 网络客户端和 OEM 定制 Linux 系统的镜像。

基本命令

执行两步准备和创建过程是通过以下命令完成的。

kiwi --prepare <ImageDescriptionPath> --root <RootPath>
kiwi --create <RootPath> --destdir <DestinationPath>
  • ImageDescriptionPath 是包含镜像配料的基本描述的目录。(如何使用此目录以及此目录的结构将在我们完成以下配方后变得更加明显)。
  • RootPath 是解包镜像的 destination 目录,例如 /tmp/myiso
  • DestinationPath 是最终镜像目录的路径,例如 /tmp/myiso-result

KIWI 工具链支持将前两个命令行调用组合成一个。这是通过传递 --build 命令行选项来实现的。使用 --build 选项,kiwi 仍然会执行 2 个不同的步骤。但是,从用户的角度来看,只需要执行一个命令,如下所示。

kiwi --build <ImageDescriptionPath> --destdir <DestinationPath>

在这种情况下,解包后的镜像 将在 DestinationPath 的一个子目录中创建,该子目录名为 image-root,根据我们的示例,kiwi 将为 /tmp/myiso-result/image-root 创建解包后的镜像。

源代码仓库

如前所述,KIWI 在创建最终镜像之前,通过从 安装源 或所谓的 仓库 中提取软件包来创建解包后的镜像。仓库是软件包的集合。

使用 --set-repo 命令行选项在命令行上指定安装源如下

kiwi --build <ImageDescriptionPath> --destdir <DestinationPath> --set-repo <RepositoryPath>

仓库选项

Kiwi 支持本地和基于 Internet 的仓库。

借助 --set-repo 选项,我们可以设置用作仓库的内容或覆盖 XML 文件中第一个列出的仓库的 URL。更改是临时的,不会写入 XML 文件。

以下示例显示了如何在命令行上指定这些不同的仓库。


  • 使用基于 Internet 的仓库,例如 openSUSE 11.3 仓库。
kiwi --build <ImageDescriptionPath> --destdir <DestinationPath> --set-repo http://download.opensuse.org/distribution/11.3/repo/oss/

KIWI 提供的 openSUSE 示例使用 openSUSE 在线仓库,因此无需使用 --set-repo 命令行选项。稍后的章节将解释如何配置此操作。请参阅我们的 LiveSystem 配方中的 Change/Add Repositories 部分。


  • 如果您有 openSUSE 11.3 安装 DVD,可以使用它作为仓库。

将 DVD 插入驱动器,如果您使用的是 openSUSE 11.3,它将被挂载为 /media/SU1110.001。如果媒体未自动挂载,可以使用常规 mount 命令挂载 DVD。

# mount -t iso9660 /dev/cdrom /media

假设 DVD 已自动挂载,以下命令演示了如何将挂载的 DVD 用作安装源仓库。

kiwi --build <ImageDescriptionPath> --destdir <DestinationPath> --set-repo /media/SU1110.001


  • 如果您有安装 DVD ISO 镜像可用,可以使用它代替将其刻录到 DVD。

为了使用该镜像,您首先必须循环挂载它,使其可用作块设备。然后使用挂载点作为仓库路径。

mount -o loop /path-to-the-iso-file/filename.iso /mnt
kiwi --build <ImageDescriptionPath> --destdir <DestinationPath> --set-repo /mnt

关于速度的一些说明

在继续我们的第一个示例之前,关于镜像创建速度的一些说明。

Kiwi 将访问指定的仓库以获取创建镜像所需的软件包。因此,如果您使用的是在线仓库,则创建速度将由您的 Internet 连接的带宽决定。使用挂载的 DVD,速度将取决于您的 DVD 驱动器的速度,而使用挂载的 ISO 镜像,您的硬盘访问性能将对镜像创建速度产生很大影响。

通常,如果访问本地仓库,则镜像创建速度最快,即安装 DVD、循环挂载的 ISO 镜像或您 LAN 上的在线仓库的本地镜像。


注意事项

  • 如果您正在构建 64 位镜像,则需要使用 qemu-kvm(来自 kvm 包)而不是 qemu
  • 镜像名称例如 suse-11.3-live-iso.i686-2.5.1.iso 包含系统架构,在本例中为 i686。在所有配方中,如果要在不同的架构上构建,则需要替换正确的名称。
  • 可以通过在 kiwi 命令前加上 linux32 来在 64 位 (x86_64) 系统上构建 32 位 (x86) 镜像,如下所示
# linux32 kiwi --build suse-11.3-JeOS --destdir /tmp/myjeos --type iso