作者: 耗子007
1. kiwi简介
1.1 kiwi是什么
kiwi用Perl编写的,用于制作linux镜像的命令行工具。支持制作多种格式的镜像:
- ISO
- Live CD/DVD
- PXEBoot
- Hard Disk
- USB
- Amazon EC2 (.ami)
- Docker
- Google Cloud Format (..gce)
- KVM/Qemu (.qcow2)
- Open Virtualization Format (.ovf, .ova)
- Vagrant (.vagrant
- VirtualBox (.vdi)
- Virtual Hard Disk (.vhd)
- VMware (.vmdk)
- XEN
1.2 kiwi工作流
kiwi的工作流分为两个流程:
- 准备。创建root目录,用于保存新文件系统的内容;然后从软件源(可以是安装镜像或者在线的仓库)安装请求的软件包;然后创建镜像描述文件(config.xml);
最后可选的自定义配置。该流程会输出一个“unpacked root tree”。 - 制作。kiwi会自动使用上个流程的输出制作镜像,此流程没有交互,但是可以通过修改image.sh脚本,实现在制作镜像过程中执行用户定义动作。
1.3 kiwi使用方法
准备流程:kiwi –prepare
制作流程:kiwi –create
2 kiwi的基本流程
kiwi制作镜像的流程是自动的,制作需要的必要信息主要来自config.xml的配置文件。此外,kiwi可以通过config.sh和images.sh实现可选的自定义功能。
2.1 制作镜像
kiwi制作镜像分为两步。第一步,prepare操作,使用config.xml配置文件生成“unpacked image tree”。第二步,create操作,基于第一步生成的
“unpacked image”和config.xml配置文件提供的信息创建一个“packed image”(就是镜像)。
注:
(1) Unpacked Image
Encapsulated system reachable via chroot
(2) Packed Image
Encapsulated system reachable via kernel file system/extension drivers such as loopback mounts, etc.
2.1.1 Prepare操作
只有prepare操作成功,才能进行下一步的create操作。
prepare操作,kiwi会创建一个unpacked image(也就是root tree)。这个root tree是通过–root参数或者config.xml的defaultroot元素指定的。
该目录会在create操作中用于安装软件。软件管理工具是通过config.xml的packagemanager元素指定的,
kiwi目前支持的软件管理工具有:smart、zypper(默认选项)、yum和apt。
Prepare操作主要包括以下步骤:
- 创建目标root目录。如果目标root目录存在,kiwi会退出并报错。可以使用–force-new-root参数,强制创建,如果指定目录存在,kiwi会先删除,
然后重新创建。 - 安装软件包。把配置文件的bootstrap部分指定的软件安装到root目录。filesystem和glibc-locale(euler没指定此包)包是构建引导环境
必需的软件。这两个包的依赖链足以在引导环境中填充所有必需的软件,以支持将软件包安装到新root目录中。软件包管理可能安装了一些不需要的软件包,
可以通过”package_to_be_deleted “来删除多余的软件包。 - 应用overlay目录。软件包安装完成后,KIWI将名为root的overlay目录中存在的所有文件和目录拷贝到目标root tree。
已经存在于目标root tree中的文件将被覆盖,其他将被添加。 这允许您覆盖在安装阶段期间软件包安装的任何文件。 - 安装archives。在上一步完成之后,把config.xml的archive元素指定的任何archive(可以使任何文件,以tar包形式保存),解开到目标root tree。
可能覆盖掉已有的文件。 - 运行用户定义的脚本config.sh。prepare操作的最后,执行config.sh脚本,运行在root tree的顶层。该脚本的主要功能是完成系统配置,例如启动一些服务。
更详细使用可参考 config.sh - 管理新的root tree。你可以通过chroot操作新的root tree,此文件系统与常用的区别在于多一个image目录,用于保存kiwi在create步骤需要用到的信息,
例如,config.xml配置文件的副本。
2.1.2 Create操作
Prepare操作的成功时Create操作的前提。保证unpacked root tree是完整的和一致的。create操作会创建一个packed image。利用unpacked root tree能够
创建多种类型image,例如,OEM image或者虚拟机的images。
Create操作主要执行以下步骤:
- 运行用户自定义脚本images.sh。如果images.sh存在,首先在root tree的顶层执行此脚本。该脚本主要作用是删除最终镜像不需要的文件。
更详细使用方法可参考 images.sh - 创建请求类型镜像。创建config.xml的type元素指定的image类型,配置文件必须包含至少一个type元素。下图显示当前支持的镜像类型。