迁移 Linux 系统 (2)
简介: 尽管大部分的 Linux 发行版都发行了 LiveCD,但是定做满足特殊需求的 LiveCD 仍然不是一件简单的事情。KIWI Imaging System 是一个来源于 OpenSUSE,遵循 GPL v2 版权的开源项目 。它 只需要 2 个配置文件就可以生成定制的系统镜像。 KIWI 不仅可以创建 LiveCD 镜像,而且支持 VMware 虚拟机镜像,Xen 虚拟机镜像 ,PXE 镜像,EC2 镜像和 OEM 镜像。本文是迁移 Linux 系统的第二部分,着重介绍了如何使用 KIWI 创建基于 SLES 的 LiveCD 系统镜像,并集成恢复软件用于裸机恢复原来的系统。
<!--
-->
发布日期: 2010 年 2 月 01 日
级别: 中级 <!--
建议: ![]()
--> <!-- Rating_Area_Begin --> <!-- Ensure that div id is based on input id and ends with -widget -->
<!-- Rating_Area_End -->
<!-- dW_Summary_Area_END --> <!-- CONTENT_BODY --> <!-- MAIN_COLUMN_BEGIN --> <!-- Related_Searches_Area_And_Overlays_Begin --> <!-- Related_Searches_Area_Begin -->
<!-- Related_Searches_Area_End --> <!-- MAIN_COLUMN_CONTAINER_BEGIN --> <!-- MAIN_COLUMN_CONTENT_BEGIN -->
很多 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 镜像。
首先,需要搭建 KIWI 的运行环境。本文使用了一台安装了 Suse Linux Enterprise Server 10 SP2 的 IBM System x3200 作为编译 LiveCD 镜像的主机。
首先要下载最新的 KIWI 软件包。因为 KIWI 还在不断的开发中,所以软件包也在不断的升级。可以从 opensuse 的官方软件仓库得到最新的 KIWI 软件包。本文的编译服务器是 IBM System x3200M,所以需要安装支持x86_64 构架的软件包。
http://ftp5.gwdg.de/pub/opensuse/repositories/Virtualization:/Appliances/SLE_10/
因为本文只需要制作 LiveCD 镜像,所以只安装 kiwi、kiwi-tools、kiwi-doc、kiwi-desc-isoboot四个软件包。如果要制作其他镜像,请安装相应的软件包。另外,由 于本文 LiveCD 的特殊需求,还需要下载和安装一些辅助的软件包,比如 aufs 和 squashfs。
| 软件包名 | 解释 | 依赖包 |
| kiwi | KIWI 软件包 | kiwi-tools perl-XML-LibXML perl-libwww-perl perl-XML-LibXML-Common perl-XML-SAX |
| kiwi-desc-isoboot | 制作 ISO 工具 | kiwi |
| kiwi-doc | KIWI 文档和配置实例 | |
| kiwi-tools | KIWI 工具 | |
| squashfs squashfs-kmp-default squashfs-kmp-smp |
Squashfs 文件系统 | Kernel-default kernel-smp |
| aufs aufs-kmp-default aufs-kmp-smp |
Aufs 文件系统 | Kernel-default kernel-smp |
| smart | KIWI 默认的软件包管理工具 | Rpm-python python-xml python-elementtree |
其中 KIWI 的默认包管理器是 smart,同时也支持 zypper。但是 SLES10SP2 上的 zypper 版本不够新,建议在 SLES10 SP3 或 SLES11 以上的发行版中使用 zypper。本文中选用的 smart软件包需要单独下载并安装。
安装和使用 KIWI 工具,需要连接 SLES10SP2 的软件源。解决方法之一是mount 或者拷贝一个 SLES10SP2 的仓库在本地,用来安装 KIWI 依赖的软件包和 LiveCD 中预装的软件。使用 rpm -ivh *.rpm 安装 KIWI 软安包和辅助包;使用 yast -i * 从 SLES10SP2 软件源中安装依赖的软件包。如果出现依赖关系的软件包没有找到,请从 suse Linux 官方软件仓库中查找、下载并安装。下面的链接能够下载 aufs 和 squashfs 安装包:
http://download.opensuse.org/repositories/home:/mopp:/squashfs/
http://download.opensuse.org/repositories/home:/mopp:/aufs
注意:aufs 和 squashfs 模块被安装到 /lib/modules/<kernel>/updates/。请确保这些内核模块匹配你将要安装到 KIWI 镜像中的内核版本。
|
安装完必要的软件包后,就开始配置 KIWI 镜像制作环境了。正如本文开头提到,KIWI 的配置非常简单,只需要改动两个 XML 文件,启动配置文件和内容配置文件即可,其他操作都由脚本自动完成。
建立软件安装源
定制启动镜像,就是需要安装一些必要的软件组成一个最小的 Linux 系统,所以 KIWI 的编译主机系统中必须能够连接到 SLES10 SP2 的软件源。本文我把 SLES10 SP2 的安装 DVD 光盘 mount 到了本地目录 /mnt/SLES10SP_001,作为制作 LiveCD 镜像的软件源。 你应该根据你的系统的实际情况更改路径。
修改 KIWI 启动配置文件
对于所有的 suse Linux 发行版,kiwi-doc 软件包中都提供了创建各种镜像的启动配置模板,当然也包括 LiveCD 镜像。其中针对 Suse Linux Enterprise Server 10 发行版的 LiveCD 镜像启动模板位于 /usr/share/kiwi/image/isoboot/suse-SLES10/。本文修改了 /usr/share/kiwi/image/isoboot/suse-SLES10/config.xml 文件。或许你应该在修改前备份路径,因为升级 KIWI 软件包后,config.xml 文件可能被覆盖掉。 本文的 config.xml 文件要修改两处地方 :
- 镜像内核支持的处理器的类型:单核还是多核。IBM System x3200M2 是多核处理器,所以选用支持多核的镜像 kernel-smp。
- 文件系统的支持。本文添加了 aufs 和 squashfs 的支持。
|
注意,一旦修改了 config.xml 文件,必须创建新的 hash 值。
|
上节定制了 LiveCD 镜像的基本启动参数,本节则定制 LiveCD 镜像安装哪些应用程序,以满足裸机恢复的需求。Kiwi-doc 软件包中也提供了 suse Linux 的内容配置实例,位于 /usr/share/doc/packages/kiwi/examples/ 下。本文采用了 suse-11.0 的配置实例作为基础在上面添加应用,因为它是一个最简单的配置,更容易配置出一个最小的 LiveCD 镜像系统。
|
首先要修改的是启动参数,把它指向我们定制好的 LiveCD 镜像启动模板。
|
接着设置 LiveCD 镜像中的用户名和密码。密码在文件中是加密后的编码,由 KIWI 提供的工具生成。这样增强了系统安全性。
|
然后,是设置 LiveCD 镜像的安装软件源及辅助软件包的路径。你需要按照 KIWI 编译服务器上的实际路径,更改软件源路径。以便 smart包管理器能够自动安装需要的软件。另外,你可能需要添加其他 RPM 软件包路径,以便 KIWI 能找到其他的软件包,例如 smart,aufs-*,squashfs-* 软件包。
|
最后也是最关键的是添加软件包到 liveCD 镜像中,也就是在 config.xml 的 <packages type="image">列表中添加需要安装的软件包。使用smart包管理器来安装这些软件,可以从软件源中自动查找依赖关系, 解决了包依赖问题。对于本文中config.xml文件的修改,首先删除 SLES10 不支持而 opensuse 支持的标记。
- opensusePattern 标记在 SLES10 上无效。
- 删除 "bootsplash-branding-openSUSE" 和"gfxboot-branding-openSUSE"软件包,因为它们不在 SLES 10 的安装源中。
然后修改和添加必要的软件包:
| 软件包 | 说明 |
| <package name="kernel-smp"/> | 支持 smp 的镜像内核 |
| <package name="pwdutils"/> | 用户管理 |
| <package name="mingetty"/> | 用于虚拟控制台的 getty 程序 |
| <package name="resmgr" /> | 系统资源管理器 |
| <package name="lvm2"/> | LVM 管理工具 |
| <package name=”grub”/> | grub 引导工具 |
| <package name="sysconfig"/> <package name="sysfsutils"/> <package name="syslinux"/> <package name="procps"/> |
系统配置及工具 |
| <package name="hal"/> <package name="hal-resmgr"/> <package name="dbus-1"/> <package name="hdparm"/> <package name="scsi"/> |
硬件配置及工具 |
| <package name="iproute2"/> <package name="portmap"/> <package name="netcfg"/> <package name="net-tools"/> <package name="iputils"/> <package name="dhcpcd"/> <package name="openssh"/> |
网络配置及工具 |
| <package name="vim"/> <package name="tar"/> <package name="gzip"/> |
工具软件 |
首先确定你有足够的可使用空间和权限。本文中,KIWI 的工作目录位于 /tmp 下。如本文开头所说,KIWI Imaging System 创建 LiveCD 分为两个部分:
第一阶段,基于一个实际的软件包安装源,按照提前定制的镜像描述,创建一个‘未封装的镜像’。
|
此阶段完成后,/tmp/myiso 目录相当于展开的 LiveCD 系统,可以在其中创建目录和文件。也可以用 chroot 命令初步体验这个系统。如果没有问题,就可以进入第二阶段,创建 iso 镜像。
|
如果一切顺利,你将会得到一个 ISO 文件,位于 /tmp/myiso-result/ 目录下。由于采取了压缩策略,本文的 ISO 大小仅仅为 160MB。
测试刚刚生成的 LiveCD,除了传统的刻录 CD 盘再找一台 IBM System x 的机器外,虚拟机更加方便。注意虚拟机也必须是 x86_64 的构架。本文的测试使用了基于 Linux 内核的虚拟机 KVM,参见 DeveloperWorks 上的文章“KVM 虚拟机在 IBM System x 上的应用”。
|
由图 2 可以看出,KIWI 制作的 LiveCD 延续了 SLES 的启动界面风格。
使用配置文件中设定的用户名和密码登陆 LiveCD 系统后,就可以用系统工具检查系统的设置。如 df、fdisk、ifconfig、rpm 等。
本节介绍如何用简单易用且功能强大的 KIWI 软件制作一个用于裸机恢复的 LiveCD 镜像。这是一个不包括图形界面,但是包含网络工具、LVM 工具的最小 Linux 系统。一张 LiveCD 不可能引导所有硬件类型的机器,本文定制的 LiveCD 针对了与做备份的机器硬件类似的机器。如果有特殊的硬件需要驱动,请在 KIWI 脚本中预先定制安装相应的驱动程序。
- jarson's blog
- Login or register to post comments



最新回应
3 days 2 hours 之前
16 weeks 1 day 之前
47 weeks 3 days 之前
1 year 7 weeks 之前
1 year 7 weeks 之前
1 year 14 weeks 之前
1 year 16 weeks 之前
1 year 19 weeks 之前
1 year 21 weeks 之前
1 year 22 weeks 之前