跳过导览列.
首页
做最好的Linux技术文档网站

迁移 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 -->

1 star2  stars3  stars4  stars5  stars 平均分 (共 3 个评分 )

<!-- 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 的强大功能

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 还用到了以下四个特性:

  • 可定制性,自由选择安装在 LiveCD 上的软件包。
  • 软件包的安装有包管理器软件管理,自动安装软件的依赖包。
  • 支持 Aufs overlay file system
  • 支持 SquashFS compress file system

需求 1:文件系统可压缩

可压缩文件系统 squashFS
squashFS 是一套供 Linux 核心使用的 GPL 开源只读压缩文件系统。squashFS 能够为文件系统内的文件、inode 节点及目录结构进行压缩,并支持最大 1024KB 的区段,以提供更大的压缩比。同 Cloop、CramFS 一样,squashFS 是一个即时解压缩的文件系统。只是 squashFS 的压缩比更高、速度更快,又不像 CramFS 有单一文件大小或整体文件系统大小的限制,在 LiveCD 的应用上非常有用。

虽然 DVD 的出现使 LiveCD 的几乎没有空间限制。但是流行的做法是控制在一张 CD 上。压缩的文件系统可以使 LiveCD 的镜像体积减小,这样在同等的空间下存储更多的数据。目前的 LiveCD 的压缩文件系统主要有 Knoppix 的 Cloop 格式,还有 Ubuntu 的 squashfs 格式,这两种文件系统都是经过压缩且只读的。suqashFS 比 Cloop 更加快, 压缩比更高。

需求 2:文件系统可读写

LiveCD 指基于 CD/DVD 的操作系统.用户可以运行 LiveCD 就像运行在硬盘上一样,除了不能写数据到 CD/DVD 上。当系统从 LiveCD 启动后,用户就可以像硬盘系统一样登陆和操作.所有的写操作被写到内存中。但是当系统关机或重起,写入的数据会丢失。

重叠式(overlay)文件系统
Unionfs 是 SLAX 系统的一个重要组成部分 , 具有写时复制(copy-on-write)功能。Unionfs 能把只读和可读写文件系统合并在一起,虚拟上允许只读文件系统的修改,能保存到可写文件系统当中。Aufs 的全称是 Another Unionfs,它是为了取代 Unionfs 而产生的文件系统。鉴于 Unionfs 的极度不稳定,而且许久不见改进,作者 Junjiro Okajima 建立了新的文件系统取代 Unionfs。现在 aufs 已被 Slackware 的 LiveCD 所采用。

一般来说, 系统镜像被启动到硬盘或者内存是通过一个启动文件来配置的。在 KIWI 镜像系统中,这个配置由 isoboot 文件完成。它提供了两种方法来启动你的 LiveCD 系统。

  • 老的方法是区分系统镜像的内容为只读和可读写两部分。可读写的部分被安装到内存中,而只读的部分被保留在 CD 上(只读部分可以被压缩后再存储)。isoboot 文件用超链接制作根目录树。KIWI 将 /bin,/boot,/lib,/opt,/sbin,/usr 目录装在光盘上,而保留其他目录在系统内存中。
  • 新的方法利用了 overlay 文件系统,如 aufs 或 unionfs。在这种方法中,系统镜像没有被划分开。isoboot 启动文件创建一个可写的内存区域,然后把这个区域覆盖到一个根文件系统。这样就是实现了一个可读写的根文件系统。你也可以压缩系统镜像,以便能够在光盘上 容纳更多的内容。

 

KIWI 镜像的制作

KIWI 的构架被设计成两级系统。第一阶段,基于一个实际的软件包安装源,按照提前定制的镜像描述,创建一个‘未封装的镜像’;第二阶段,打包散开的镜像文件为一 个系统镜像。第二阶段的输出就是封装镜像或者是压缩镜像。

图 1. KIWI 镜像制作过程
图 1. KIWI 镜像制作过程

标准的制作过程,在镜像描述树保存了所有的镜像设计需求, 然后从安装源开始安装系统需要的软件。用户只需要修改镜像描述树中的两个 config.xml 配置文件,就可以定制自己的 KIWI 镜像。而且在第一阶段输出的‘未封装的镜像’中,用户可以修改这个镜像中的文件或添加文件到镜像中。下面,我将介绍如何利用 KIWI Imaging System 定制特殊用途的 LiveCD 镜像。


定制裸机恢复的启动 LiveCD

首先,需要搭建 KIWI 的运行环境。本文使用了一台安装了 Suse Linux Enterprise Server 10 SP2 的 IBM System x3200 作为编译 LiveCD 镜像的主机。

在 SLES10 SP2 上安装 KIWI 软件包

首先要下载最新的 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。

表 1. KIWI 软件包列表

软件包名 解释 依赖包
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 镜像中的内核版本。

清单 1. aufs 和 suqashfs 驱动模块

				
/lib/modules/2.6.16.60-0.21-smp/updates/aufs.ko
/lib/modules/2.6.16.60-0.21-smp/updates/fs/squashfs/squashfs.ko

 

配置 LiveCD 镜像启动参数

安装完必要的软件包后,就开始配置 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 的支持。

清单 2. 修改 LiveCD 启动模板

				
vi /usr/share/kiwi/image/isoboot/suse-SLES10/config.xml

配置启动内核参数 smp
<preferences>
<type bootprofile="smp" bootkernel="std">cpio</type>
<version>2.1.1</version>
<size unit="M">60</size>
<packagemanager>smart</packagemanager>
<rpm-check-signatures>False</rpm-check-signatures>
</preferences>

添加 aufs 和 squashfs 到 <drivers type="drivers">
这一栏很重要,如果没有这些模块,系统不能启动 LiveCD。
<file name="../updates/aufs.ko"/>
<file name="../updates/fs/squashfs/*"/>

在 <packages type="bootstrap"> section,添加如下行 :
<package name="squashfs-kmp-default"/>
<package name="squashfs-kmp-smp"/>
<package name="aufs-kmp-default"/>
<package name="aufs-kmp-smp"/>

 

注意,一旦修改了 config.xml 文件,必须创建新的 hash 值。

清单 3. 为启动模板创建 hash 值

				
# kiwi --createhash /usr/share/kiwi/image/isoboot/suse-SLES10

 

定制 LiveCD 镜像内容

上节定制了 LiveCD 镜像的基本启动参数,本节则定制 LiveCD 镜像安装哪些应用程序,以满足裸机恢复的需求。Kiwi-doc 软件包中也提供了 suse Linux 的内容配置实例,位于 /usr/share/doc/packages/kiwi/examples/ 下。本文采用了 suse-11.0 的配置实例作为基础在上面添加应用,因为它是一个最简单的配置,更容易配置出一个最小的 LiveCD 镜像系统。

清单 4. 拷贝实例作为 LiveCD 配置文件并修改

				
#mkdir -p /usr/local/kiwi

#cp -pr /usr/share/doc/packages/kiwi/examples/suse-11.0/\
suse-live-iso /usr/local/kiwi/suse-sle10sp2-live-iso

#vim /usr/local/kiwi/suse-sle10sp2-live-iso/config.xml

 

首先要修改的是启动参数,把它指向我们定制好的 LiveCD 镜像启动模板。

清单 5. 修改启动镜像模板

				
Change
<type primary="true" boot="isoboot/suse-11.0" flags="unified">iso</type>
to
<type primary="true" boot="isoboot/suse-SLES10" flags="unified">iso</type>

 

接着设置 LiveCD 镜像中的用户名和密码。密码在文件中是加密后的编码,由 KIWI 提供的工具生成。这样增强了系统安全性。

清单 6. 设置用户名和密码

				
添加 user 到 system image
<users group="users">
<user name="linux" pwd="" home="/home/linux" realname="Live-CD User"/>
</users>
<users group="root">
<user name="root" pwd="$2a$05$YEKApsQBcWg7hNVSSbHnruWK0Zy\
VnL.ryEwC1F56Y13agTHLsm5By" home="/root"/>
</users>

注意 pwd 这里是加密后的密码,可以使用 kiwi – createpassword进行加密。例如为用户 root 创建密码”linux”
sles:~ # kiwi --createpassword
Nov-02 00:40:27 <1> : Enter Password: done
Nov-02 00:40:30 <1> : Reenter Password: done
Nov-02 00:40:32 <1> : Your password:
$2a$05$YEKApsQBcWg7hNVSSbHnruWK0ZyVnL.ryEwC1F56Y13agTHLsm5By
Nov-02 00:40:32 <1> : KIWI exited successfully

 

然后,是设置 LiveCD 镜像的安装软件源及辅助软件包的路径。你需要按照 KIWI 编译服务器上的实际路径,更改软件源路径。以便 smart包管理器能够自动安装需要的软件。另外,你可能需要添加其他 RPM 软件包路径,以便 KIWI 能找到其他的软件包,例如 smart,aufs-*,squashfs-* 软件包。

清单 7. 设置软件源路径

				
SLES 软件源
<repository type="yast2">
<!--<source path="/image/CDs/full-11.0-i386"/>-->
<source path="/media/SLES10SP_001/"/>
</repository>

辅助软件源
<repository type="rpm-dir">
<source path="/home/rpm/"/>
</repository>

 

最后也是最关键的是添加软件包到 liveCD 镜像中,也就是在 config.xml 的 <packages type="image">列表中添加需要安装的软件包。使用smart包管理器来安装这些软件,可以从软件源中自动查找依赖关系, 解决了包依赖问题。对于本文中config.xml文件的修改,首先删除 SLES10 不支持而 opensuse 支持的标记。

  • opensusePattern 标记在 SLES10 上无效。
  • 删除 "bootsplash-branding-openSUSE" 和"gfxboot-branding-openSUSE"软件包,因为它们不在 SLES 10 的安装源中。

然后修改和添加必要的软件包:

表 2. LiveCD 镜像软件包列表

软件包 说明
<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"/>
工具软件

 


创建和测试 LiveCD

创建 LiveCD

首先确定你有足够的可使用空间和权限。本文中,KIWI 的工作目录位于 /tmp 下。如本文开头所说,KIWI Imaging System 创建 LiveCD 分为两个部分:

第一阶段,基于一个实际的软件包安装源,按照提前定制的镜像描述,创建一个‘未封装的镜像’。

清单 8. 创建‘未封装的镜像’

				
kiwi --prepare /usr/local/kiwi/suse-sle10sp2-live-iso --root /tmp/myiso

 

此阶段完成后,/tmp/myiso 目录相当于展开的 LiveCD 系统,可以在其中创建目录和文件。也可以用 chroot 命令初步体验这个系统。如果没有问题,就可以进入第二阶段,创建 iso 镜像。

清单 9. 创建 ISO 镜像

				
kiwi --create /tmp/myiso -d /tmp/myiso-result

 

如果一切顺利,你将会得到一个 ISO 文件,位于 /tmp/myiso-result/ 目录下。由于采取了压缩策略,本文的 ISO 大小仅仅为 160MB。

测试 LiveCD

测试刚刚生成的 LiveCD,除了传统的刻录 CD 盘再找一台 IBM System x 的机器外,虚拟机更加方便。注意虚拟机也必须是 x86_64 的构架。本文的测试使用了基于 Linux 内核的虚拟机 KVM,参见 DeveloperWorks 上的文章“KVM 虚拟机在 IBM System x 上的应用”。

清单 10. 用 KVM 虚拟机测试 LiveCD 镜像

				
开启 KVM 虚拟机, 从定制的 LiveCD 镜像启动
# qemu-kvm -m 1024 -smp 2 -cdrom /home/guojb/suse-10.2-bmr-iso.x86_64-2.5.1.iso -boot d

如果你需要在 LiveCD 中使用网络,请设置 bridge 和 tap,然后用以下命令启动 LiveCD。
# qemu-kvm -m 1024 -net nic,model=e1000, macaddr=00:16:3e:51:fb:ce \
-net tap -cdrom /home/guojb/suse-10.2-bmr-iso.x86_64-2.5.1.iso -boot d

 

由图 2 可以看出,KIWI 制作的 LiveCD 延续了 SLES 的启动界面风格。

图 2. 启动 LiveCD
图 2. 启动 LiveCD

使用配置文件中设定的用户名和密码登陆 LiveCD 系统后,就可以用系统工具检查系统的设置。如 df、fdisk、ifconfig、rpm 等。


小结

本节介绍如何用简单易用且功能强大的 KIWI 软件制作一个用于裸机恢复的 LiveCD 镜像。这是一个不包括图形界面,但是包含网络工具、LVM 工具的最小 Linux 系统。一张 LiveCD 不可能引导所有硬件类型的机器,本文定制的 LiveCD 针对了与做备份的机器硬件类似的机器。如果有特殊的硬件需要驱动,请在 KIWI 脚本中预先定制安装相应的驱动程序。