很 多 Linux® 发行版本已经被设计为所谓的“LiveCD”,即可以直接引导为可用 Linux 系统的 CD。这些 LiveCD 的设计是,当从 CD 引导起来后,提供一整套可以使用的工具,其中有一些是通用的,比如各个发行版的 LiveCD 用来安装和诊断系统;有一些是高度专用的工具,比如用来做路由器的系统或集成了专用工具的系统。本文使用的 LiveCD 是一个预先安装了恢复软件的小型 Linux 系统。我们将在 LiveCD 引导的系统上进行裸机恢复。
KIWI Imaging System 是一种开放源代码命令行工具,来源于 OpenSuse 发行版。KIWI 可从说明文件构建软件映像;它让用户能够快速构建基于 SUSE Linux Enterprise 的设备。KIWI 镜像软件为 Linux 支持的硬件平台和虚拟系统(如 Xen、qemu、VMware),提供了一套完整的操作系统镜像解决方案。KIWI 拥有很多特性:
- 独立于 Linux 发行版的设计。虽然 KIWI 起源于 OpenSUSE,但是适用于其它发行版(Debain、CentOS、Fedora、Mandriva、RHEL、SLES、Ubuntu)
- 支持为完全虚拟化的系统制作镜像,如 VMWare、Qemu
- 支持为半虚拟化的系统制作镜像, 如 xen
- 支持网络部署镜像
- 支持预安装的 OEM 系统镜像
- 支持 USB-Stick 系统镜像
- 支持 LiveCD/DVD 系统镜像
- 基于 XML 的镜像描述
- 为 SUSE 系统预编译启动镜像
- 为网络启动的镜像预编译 PXE 配置
- 在 128MB 的 flash 上创建 45M 的 SUSE Linux 系统镜像是可能的
- 支持 x86 和 x86_64 构架
本文要制作的 LiveCD 还用到了以下四个特性:
- 可定制性,自由选择安装在 LiveCD 上的软件包。
- 软件包的安装有包管理器软件管理,自动安装软件的依赖包。
- 支持 Aufs overlay file system
- 支持 SquashFS compress file system
需求 1:文件系统可压缩
虽 然 DVD 的出现使 LiveCD 的几乎没有空间限制。但是流行的做法是控制在一张 CD 上。压缩的文件系统可以使 LiveCD 的镜像体积减小,这样在同等的空间下存储更多的数据。目前的 LiveCD 的压缩文件系统主要有 Knoppix 的 Cloop 格式,还有 Ubuntu 的 squashfs 格式,这两种文件系统都是经过压缩且只读的。suqashFS 比 Cloop 更加快, 压缩比更高。
需求 2:文件系统可读写
LiveCD 指基于 CD/DVD 的操作系统.用户可以运行 LiveCD 就像运行在硬盘上一样,除了不能写数据到 CD/DVD 上。当系统从 LiveCD 启动后,用户就可以像硬盘系统一样登陆和操作.所有的写操作被写到内存中。但是当系统关机或重起,写入的数据会丢失。
一般来说, 系统镜像被启动到硬盘或者内存是通过一个启动文件来配置的。在 KIWI 镜像系统中,这个配置由 isoboot 文件完成。它提供了两种方法来启动你的 LiveCD 系统。
- 老的方法是区分系统镜像的内容为只读和可读写两部分。可读写的部分被安装到内存中,而只读的部分被保留在 CD 上(只读部分可以被压缩后再存储)。isoboot 文件用超链接制作根目录树。KIWI 将 /bin,/boot,/lib,/opt,/sbin,/usr 目录装在光盘上,而保留其他目录在系统内存中。
- 新的方法利用了 overlay 文件系统,如 aufs 或 unionfs。在这种方法中,系统镜像没有被划分开。isoboot 启动文件创建一个可写的内存区域,然后把这个区域覆盖到一个根文件系统。这样就是实现了一个可读写的根文件系统。你也可以压缩系统镜像,以便能够在光盘上 容纳更多的内容。
KIWI 的构架被设计成两级系统。第一阶段,基于一个实际的软件包安装源,按照提前定制的镜像描述,创建一个‘未封装的镜像’;第二阶段,打包散开的镜像文件为一个系统镜像。第二阶段的输出就是封装镜像或者是压缩镜像。
标 准的制作过程,在镜像描述树保存了所有的镜像设计需求, 然后从安装源开始安装系统需要的软件。用户只需要修改镜像描述树中的两个 config.xml 配置文件,就可以定制自己的 KIWI 镜像。而且在第一阶段输出的‘未封装的镜像’中,用户可以修改这个镜像中的文件或添加文件到镜像中。下面,我将介绍如何利用 KIWI Imaging System 定制特殊用途的 LiveCD 镜像。