SDB:KIWI Cookbook Live USB-Stick
所有 KIWI 编辑
美化你的USB存储设备 - 我们的第四个配方
本示例展示了如何使用 Kiwi 创建可以安装在 USB 存储设备上的系统镜像。生成的 Live USB 存储设备允许你启动操作系统,并像操作系统安装在系统硬盘上一样使用该系统。在 USB 设备上使用该系统不会影响系统其他存储设备上安装的任何其他操作系统。
为了使用基于 USB 的系统,需要一台能够从 USB 存储设备启动的计算机。计算机的启动能力由 BIOS 控制。几乎所有现代 BIOS 实现都支持一项功能,该功能允许你从 USB 存储设备启动。如果你的系统无法从存储设备启动,则可能是 BIOS 启动顺序设置为在查找 USB 设备之前查找硬盘上的 MBR (主引导记录)。
一旦操作系统安装在 USB 存储设备上,该存储设备就充当操作系统的系统磁盘,数据将写入并从该存储设备读取。
Livestick 配方
准备时间
- 30 分钟
烹饪时间
- 10 - 12 分钟,具体取决于带宽(参见之前的讨论)和主机的硬件
配料
- 一个正在运行的 openSUSE 11.1 系统
- 一个 openSUSE 11.1 仓库
- 已安装最新版本的 KIWI 工具集(至少版本 3.25)
- 已安装 kiwi-doc 包
- 大约 1 GB 的可用磁盘空间
在此示例中,我们还将查看 KIWI 的一些其他功能
- 使用 YaST2-Firstboot 功能
- 删除你不需要或不想要的包,以节省空间
- 添加用户和组
- 更多首选项元素
- packages 元素的附加值
- config.sh 文件
- 叠加概念
此配方的基本设置
- 创建使用的目录
作为一般最佳实践,建议为不同类型的镜像在不同的目录中工作。
我们也将要使用这些文件复制过来
使用 YaST2-Firstboot 功能
YaST firstboot 功能使你能够在初始启动时配置正在启动的系统。用户将通过一系列步骤引导,方式类似于常规安装。firstboot 功能对于镜像部署非常有用,其中系统安装已完成,仅剩一些最终配置步骤,例如 root 密码、用户登录或网络设置。
该默认工作流程如下
1. The Welcome screen 2. The License Agreement(s) 3. Date & Time 4. Network 5. Root Password 6. User Account 7. Hardware 8. Finish
使用 firstboot 功能要求安装 yast2-firstboot 包。yast2-firstboot 包不属于任何软件模式或任何依赖链。因此,必须使用 config.xml 文件中的 <package> 元素将该包添加到镜像中,如下所示
<package name="yast2-firstboot"/>
firstboot 工作流程由 firstboot.xml 文件控制。该文件是用于控制完整的 SUSE 安装的 YaST-control.xml 文件的一个子集。firstboot.xml 控制文件与 yast2-firstboot 包一起安装,并且可以在已安装系统的 /etc/YaST2 目录中找到。在控制文件中,工作流程和提案配置用于在系统的初始启动期间添加或删除配置步骤。通过修改该文件,你可以设置 firstboot 过程以匹配启动系统的安装要求。除了 SUSE 提供的 firstboot 组件之外,还可以添加自定义屏幕,从而在安装后配置期间提供灵活性。
有关 firstboot 的更多详细信息,请参阅 在线 YaST2 Firstboot 文档,或者如果你在本地机器上安装了该包,则可以使用 /usr/share/doc/packages/yast2-firstboot/index.html 路径访问该文档。
为 KIWI 镜像启用 firstboot 过程是一个简单的过程。如上所示,将 yast2-firstboot 包添加到 config.xml,并将名为 config-yast-firstboot.xml 的文件放置在配置目录的顶层,以便 config.xml 和 config-yast-firstboot.xml 位于配置目录的同一级别。你可以自定义 config-yast-firstboot.xml 文件以满足你的需求,KIWI 将处理细节。
firstboot 配置文件的良好起点是使用提供的 firstboot.xml 配置文件。在你的系统上安装 yast2-firstboot 包,然后将该文件复制到你的配置目录。
cp /etc/YaST2/firstboot.xml <MY_CONFIG_DIR>/config-yast-firstboot.xml
注意:在你的系统上安装 yast2-firstboot 包不会在下次重新启动系统时触发 firstboot 过程。
如果配置目录中存在 config-yast-firstboot.xml 文件,KIWI 将处理该文件并设置你的镜像,方法是
- 1. 启用 firstboot 功能
- 2. 在启动镜像时以 firstboot 模式启动 YaST
然后 firstboot 过程将遵循 config-yast-firstboot.xml 文件中配置的步骤。当 firstboot 过程成功完成时,环境会更改,以便在系统后续启动期间不会执行 firstboot 过程。
firstboot 过程提供了一个额外的自定义功能。可以在 firstboot 配置结束时执行脚本。将你的脚本放在 /usr/share/firstboot/scripts 目录中,它们将在 init 脚本之后执行。
例如,如果你有一个名为 myscript.sh 的 shell 脚本,该脚本应在 firstboot 过程结束时执行,请将该脚本复制到 <MY_CONFIG_DIR>/root/usr/share/firstboot/scripts 目录。
chmod 755 myscript.sh cp myscript.sh <MY_CONFIG_DIR>/root/usr/share/firstboot/scripts
该脚本必须是可执行的。该功能适用于任何可执行文件,因此你还可以将编译后的二进制文件放入 <MY_CONFIG_DIR>/root/usr/share/firstboot/scripts 目录,以便在系统初始启动时执行它们。
添加用户和组
可选的 <users> 元素指定要添加到镜像的用户列表。<users> 元素的强制 group 属性指定用户所属的组。如果指定的组不存在,则将创建该组。用户列表不能为空,并且必须包含至少一个类型的条目 <user>。<user> 元素具有属性 name、pwd 和 home,分别用于指定用户名、加密密码和用户主目录的路径。
可以使用 kiwi −−createpassword 工具创建加密密码,然后你可以将结果剪切并粘贴到 config.xml 文件中。
<users group="users">
<user pwd="$1$wYJUgpM5$RXMMeASDc035eX.NbYWFl0" home="/home/tux" name="tux"/>
</users>
<users group="root">
<user pwd="$1$wYJUgpM5$RXMMeASDc035eX.NbYWFl0" home="/root" name="root"/>
</users>
在本例中,我们在 users 组中创建了一个名为 tux 的用户,并在 root 组中创建了一个名为 root 的用户。两者都使用相同的密码。
在使用 <users> 或 <user> 元素的可选 id 属性时,也可以添加用户 ID 或组 ID,如下所示。
<users group="users" id="[the-id-as-number]"> <user pwd=... home=... name=... id="[the-id-as-number]"> ... </users>
packages 元素属性
packages 列表元素包含用于构建镜像的包和模式列表。模式是 SUSE 特有的,并且在 openSUSE 10.1 或更高版本中可用。模式由名称标识,例如 gnome 或 kde,并标识与命名模式关联的多个包。使用模式可以减少需要显式列出的包的数量。
默认情况下,仅自动将所需的模式和包拉入镜像。
<packages type="image" patternType="plusRecommended">
<packages type="image" patternPackageType="plusRecommended">
patternType 和 patternPackageType 的可能值是
- plusRecommended
- 包含给定模式所需的和推荐的模式和包。
- plusRecommended
- plusSuggested
- 包含给定模式所需的和建议的模式和包
- plusSuggested
- onlyRequired
- 仅包含给定模式所需的模式和包 - 这是默认设置
- onlyRequired
指定的包列表(通过名称列出的所有包以及通过模式名称包含的包)用于生成要安装的包列表。生成的列表是所有指定包的依赖关系解析的结果。这可能意味着包含建议的包会导致包含其他所需的和推荐的包。
更多详细信息可以在 KIWI Image System Cookbook 中找到
config.sh 文件
在准备步骤结束时 (kiwi -p),如果存在于配置目录的顶层,则将执行 config.sh 脚本。该脚本旨在用于操作系统镜像的配置任务。
配置任务包括以下步骤:
- 激活服务
- 创建配置文件
- 为 firstboot 工作流程准备环境
- 等等。
如果 config.sh 以退出代码 != 0 退出,kiwi 将以错误退出准备步骤。
强烈建议不要使用 config.sh 作为“手动”删除包或包一部分的手段。这可能会对镜像的完整性产生负面影响,并可能导致不稳定。
对于其他软件管理,建议使用 images.sh 脚本。如果 images.sh 脚本存在于配置目录的顶层,则在 create (kiwi -c) 步骤的开头会调用该脚本。
与 config.sh 脚本不同,images.sh 脚本的目的不太明确,它作为在镜像创建的范围内使用外部工具的钩子提供。images.sh 脚本通常用于删除通过依赖关系包含在镜像中的包,但对于操作系统的后续使用而言不需要这些包。
在 config.sh 和 images.sh 脚本中,有一组可用的函数来完成常见任务。有关这些函数的详细说明,请参阅 kiwi::config.sh 或 kiwi::images.sh 手册页
或
叠加概念
在之前的示例中,你可能注意到配置目录的顶层有一个名为 root 的目录,并且可能想知道它的用途,特别是考虑到这个特殊名称。镜像描述中的 root 目录表示镜像根树 (/) 的入口点。根树中存在的任何文件和目录都将在安装所有包之后复制到解包的镜像根树。
使用 root 目录叠加概念,你将拥有一个非常强大的自定义方法。通过简单地将配置文件放在镜像内部的正确位置,可以很容易地将特定的配置设置应用于镜像。
在本例中,叠加机制用于以下配置
./root
`-- etc
|-- X11
| `-- xorg.conf <== the X configuration
|-- init.d
| |-- earlyxdm <== necessary start script for X
| |-- sax <== X configuration program
| `-- xdm <== start script for a displaymanager
|-- inittab
`-- sysconfig
|-- displaymanager <= settings for the displaymanager started with help of xdm
|-- network
| `-- ifcfg-eth0 <= a default network configuration file
`-- windowmanager <= settings for the windowmanager
叠加概念
在之前的示例中,你可能注意到配置目录的顶层有一个名为 root 的目录,并且可能想知道它的用途,特别是考虑到这个特殊名称。镜像描述中的 root 目录表示镜像根树 (/) 的入口点。根树中存在的任何文件和目录都将在安装所有包之后复制到解包的镜像根树。
使用 root 目录叠加概念,你将拥有一个非常强大的自定义方法。通过简单地将配置文件放在镜像内部的正确位置,可以很容易地将特定的配置设置应用于镜像。
在本例中,叠加机制用于以下配置
./root
`-- etc
|-- X11
| `-- xorg.conf <== the X configuration
|-- init.d
| |-- earlyxdm <== necessary start script for X
| |-- sax <== X configuration program
| `-- xdm <== start script for a displaymanager
|-- inittab
`-- sysconfig
|-- displaymanager <= settings for the displaymanager started with help of xdm
|-- network
| `-- ifcfg-eth0 <= a default network configuration file
`-- windowmanager <= settings for the windowmanager
构建我们示例的命令
这样,我们就在 /tmp/myusb/image_root 中创建了解包的镜像。从我们之前对配置文件的检查中,我们知道我们可以从 image_root 中的树创建两种不同的镜像。
“oem”镜像类型允许你创建一个虚拟磁盘,该虚拟磁盘表示包括所有分区和启动信息的虚拟磁盘几何形状。你可以使用“dd”命令将此文件部署到 USB 存储设备上。在初始启动时,虚拟磁盘几何形状将适应 USB 存储设备的实际磁盘几何形状。
- 创建镜像
- 插入存储设备
- 确定设备路径
- 部署镜像
dd if=/tmp/myusb/image/suse-11.1-live-stick.i686-1.1.2.raw of=</dev/yourdev> bs=32
登录详细信息
* User root pwd: linux * User tux pwd: linux