Portal:KIWI/FAQ
FAQ 编辑
Q: 如何在 64 位系统上构建 32 位镜像?
在 kiwi 命令前加上 "linux32",例如:
linux32 kiwi --prepare ... linux32 kiwi --create ...
FAQ 编辑
Q: 如何使用 chkconfig 影响服务状态?
您可以在镜像描述中的 config.sh 脚本中调用 chkconfig。
config.sh 脚本在解压后的镜像中的 chroot 环境中调用。特定于发行版的函数相应地加上前缀,例如 "suseInsertService"。
请参阅手册页以获取 config.sh 脚本中可用函数的列表(“man KIWI::config.sh”)
FAQ 编辑
Q: 如何更改键盘布局?
config.xml 文件中 "preferences" 元素内的 "keytable" 标签确定镜像的键盘布局。添加标签,或将值更改为您喜欢的键盘布局。
<preferences>
...
<keytable>us.map.gz</keytable>
...
</preferences>
FAQ 编辑
Q: 是否可以在解压后的镜像区域中使用 YaST?
不,解压后的镜像区域是不完整的根文件系统,缺少重要部分。在 Kiwi 准备步骤之外对解压后的镜像进行任何修改会导致在创建步骤之后生成的镜像与镜像描述之间产生不一致。
强烈建议避免对解压后的镜像进行任何手动更改。
FAQ 编辑
Q: KIWI 可以使用哪种软件包格式?
目前 KIWI 支持软件包管理器 smart 和 zypper。软件包格式取决于所选的软件包管理器。下表显示了这两个软件包管理器支持的仓库格式。
| 类型 | smart | zypper |
|---|---|---|
| apt-dep | yes | no |
| apt-rpm | yes | no |
| dep-dir | yes | no |
| mirrors | yes | no |
| red-carpet | yes | yes |
| rpm-dir | yes | yes |
| rpm-md | yes | yes |
| slack-site | yes | no |
| up2date-mirrors | yes | no |
| urpmi | yes | no |
| yast2 | yes | yes |
FAQ 编辑
Q: 如何添加 NVIDIA 和/或 ATI 二进制驱动程序?
添加这些二进制驱动程序需要更改 boot-image。您需要更改镜像类型(例如,USB 镜像的 /usr/share/kiwi/image/usbboot/suse-xx.x/config.xml)的 boot-image config.xml 文件,以添加驱动程序。
<drivers type="drivers"> <file name="drivers/nvidia/*"/> <file name="drivers/ati/*"/> </drivers>
然后,您需要修改镜像的 config.xml 文件,以指向您新创建的 boot-image 描述。
drivers 元素是可选的,仅在 boot image 描述的上下文中很有用(initrd)。包含驱动程序和完整内核的 boot image 并非必需。因此,通过仅在 boot image 中包含所需的驱动程序,可以节省大量空间。drivers 元素的使用支持这种空间优化范例。
当指定 "drivers" 元素时,Kiwi 将仅包含与指定的文件名或通配符模式匹配的驱动程序到 boot image 中。Kiwi 将根据 "type" 属性值在预定义的目录中搜索匹配的驱动程序,如下所示。
- drivers
- 每个文件相对于 /lib/modules/<Version>/kernel 目录指定。
- netdrivers
- 每个文件相对于 /lib/modules/<Version>/kernel/drivers 目录指定。
- scsidrivers
- 每个文件相对于 /lib/modules/<Version>/kernel/drivers 指定
- usbdrivers
- 每个文件相对于 /lib/modules/<Version>/kernel/drivers 目录指定。
提供的 "drivers" 元素中的信息仅在 boot-image 描述中存在 images.sh 脚本,并且从脚本中调用 suseStripKernel 函数时才有效。
FAQ 编辑
Q: 如何为在 config.xml 文件中使用的密码创建加密密码?
可以使用
kiwi --createpassword
在命令行上。此过程是交互式的,系统会提示您输入密码。
输出是明文密码的加密字符串。您可以将此字符串剪切并粘贴到 config.xml 文件中,作为 "user" 元素的 "pwd" 属性的值。
FAQ 编辑
Q: 通过 PXE 通过网络启动时显示以下消息
Found TFTP server in kernel cmdline Checking TFTP server name: 192.168.0.10 TFTP server: 192.168.0.10 not found Using TFTP server from dhcp-info
在这种情况下,kiwitftp 内核参数给出的地址无法解析,并且 DHCP 服务器的地址也用作 TFTP 服务器。
这种默认行为可能不正确。但是,这种行为没有风险。客户端已经从 DHCP 服务器接收到数据,因此从同一服务器接收更多数据应该是允许的。
如果 tftp 服务器未在 DHCP 服务器上运行,则镜像下载将失败。建议在 pxelinux 配置文件中提供 tftp 服务器地址,即使它与 DHCP 服务器地址相同。
FAQ 编辑
FAQ 编辑
Q: 如何构建带有图形化 firstboot 的 JeOS?
使用 JeOS 模板,为了启用 SUSE 功能 "firstboot",您需要在 config 目录中包含文件 config-yast-firstboot.xml。
它可以是 /etc/YaST2/firstboot.xml 的副本,该文件包含在 yast2-firstboot-2.17.4-1.64 包中。
请在 http://forgeftp.novell.com/yast/doc/SLES11/tdg/bk09ch01s02.html 中启用工作流中的所需步骤
您 不需要 创建文件 /var/lib/YaST2/reconfig_system!KIWI 会执行此操作
为了使用 firstboot,请在您的 config.xml 中添加以下软件包
yast2-ncurses yast2-firstboot
如果您想要一个 图形化 firstboot 系统,您还需要在您的 config.xml 中添加以下软件包
yast2-installation yast2-qt xorg-x11-server
您还需要一个简单的 xorg.conf 在模板提供的目录中
<your_kiwi_config_dir>/root/etc/x11
作为参考
/usr/share/kiwi/image/suse-SLE10-JeOS/root/etc/X11/xorg.conf
您可以将您自己的脚本复制到目录中
/usr/share/firstboot/scripts
如果您想使用 firstboot 重新配置键盘,您需要以下软件包
sax2-tools sax2-ident kbd
就是这样 - 现在您应该拥有带有 JeOS 的图形化 firstboot
FAQ 编辑
Q: 我可以使用 openSUSE 11.x 及更高版本或 SLE 11 及更高版本构建 SLE10 镜像吗?
是的,但您需要在构建系统上安装适当的工具以及 SLE10 的仓库(DVD/iso/...)
Zypper from SLE10 太旧,不提供我们所需的功能。因此,您必须在 config.xml 中使用 smart 作为软件包管理器
<packagemanager>smart</packagemanager>
为了使用它,您必须将 smart 安装到您的系统中。
因此,请将仓库添加到您的系统 http://download.opensuse.org/repositories/system:/packagemanager/ 并将 smart 安装到您的系统中。
如果您使用的是 kiwi 版本 < 3.60 并且使用 ext3 作为文件系统,则必须使用不同的 inode 大小,因为 openSUSE 11.1 使用的 inode 大小与 SLE10 不同。
--fs-inodesize 128
提示:使用 SLES10 JeOS 模板作为构建的基础
FAQ edit
FAQ edit
Q: 我可以在哪里请求增强功能、报告错误或提交补丁?
1) 搜索邮件列表存档是您最好的起点。如果您无法在存档中找到问题的答案,可以在订阅后将问题发布到邮件列表。
2) freenode 上有一个 IRC 频道
- IRC:#opensuse-kiwi 在 irc.freenode.net 上
3) 您可以使用 openSUSE bugzilla 提交错误(需要 Novell 帐户)
- 分类:全部
- 产品:openSUSE.org
- 组件:系统镜像
- 摘要: “kiwi:在此处总结您的报告”
- 方便的 URL 以提交 新的 KIWI 错误(使用上述设置)
FAQ edit
Q: 如何从已安装的系统中获取软件包列表以在 KIWI 中使用?
一个简单的方法是
rpm -qa --queryformat "\<package name=\"%{NAME}\"/\>\n" >rpms.txt
这将生成以下格式的所有 rpm 列表;
<package name="kernel-xen"/>
然后,您可以简单地打开您的 config.xml 文件,并将 rpms.txt 的内容粘贴在以下两个标签之间;
<packages type="image"> </packages>
FAQ edit
提示:混合 Live 系统
(来自 http://lizards.opensuse.org/2009/08/05/hybrid-live-systems/ by marcus)
当谈到 USB 存储器上的 Live 系统时,人们报告了许多使用像 grub 这样的引导程序来引导存储器的问题。即使这通常是存储器硬件或 PC BIOS 的问题,但这是一个应该有更好解决方案的令人恼火的情况。也有很多人希望将存储器用作与 Live 系统结合使用的数据容器来工作
借助 ISO 混合技术及其集成到 kiwi 中,可以非常轻松地创建这样的存储器。混合 ISO 是一个 ISO 文件系统,其中包含 MBR,因此 PC BIOS 会将其视为磁盘。由于它是一个 ISO,因此将使用 isolinux 引导程序而不是 grub,这在许多系统上效果更好。此外,混合 ISO 还可以用作 CD/DVD 以及 USB 存储器上的 Live 系统。
需要什么才能使用它
* kiwi v3.68 or later * syslinux-3.82-2.1 or later
如何在 kiwi 中设置混合 ISO
为了在 kiwi 中激活混合 iso 的创建,您只需要将 hybrid=”true” 属性添加到 config.xml 中的 iso 镜像类型中
<type boot="isoboot/suse-11.2" flags="clic" hybrid="true">iso
您可以使用 kiwi-templates 包中的 suse-11.2-JeOS 作为混合测试的示例镜像描述。生成的 .iso 文件可以通过简单的 dd 命令转储到 USB 存储器上。该文件也可以用于刻录到 CD/DVD 上
dd if=LimeJeOS-openSUSE-11.2.i686-1.11.2.iso of=/dev/... bs=32k
之后就可以测试存储器了。默认情况下,所有写入数据的尝试都将进入系统的 RAM。由于存储器允许持久存储数据,因此可以使用 fdisk 在存储器上创建写入分区
fdisk /dev/...
kiwi 将阻止使用 vfat 分区作为操作系统。因此,请确保创建 0×83(linux)类型的分区,而不是用于写入支持的 vfat 分区。如果您另外创建一个 vfat 分区,则可以使用它作为与 Live 系统无关的任何类型数据的容器。我们选择 vfat 是为了与 Windows 系统保持兼容。
已知错误
- 在使用 clicfs 文件系统(标志=”clic”)时,将持久写入功能写入单个分区将失败,因为 clicfs 当前无法处理原始块特殊设备作为 cow 设备。将尽快修复
玩得开心 :-)
FAQ edit
Q: 使用 Kiwi suse-ec2-guest 在 OpenSuSE 11.4 x86_64 上 AMI 启动时更新 AMI 工具时出错
我使用 Kiwi 创建了一个 openSuSE 11.4 AMI,如果我在 AWS 上显示控制台,它可以很好地启动,但看起来它无法正确创建 SSH 密钥,出现
ec2:failed to retrieve ec2-ami-tools from S3
ec2:unable to update ec2-ami-tools
ec2:failed
ec2:BEGIN SSH HOST KEY FINGERPRINTS
ec2:/etc/ssh/ssh_host_key.pub: no such file or directory
ec2:/etc/ssh/ssh_host_dsa_key.pub:no such file or directory
ec2:/etc/ssh/ssh_host_rsa_key.pub: no such file or directory
我还尝试在运行 kiwi 'prepare' 后在 chroot 中本地创建密钥,然后手动运行 ssh-keygen 来尝试以这种方式获取密钥。然后运行 kiwi create,这会生成密钥,但仍然无法更新 AMI 工具或允许远程 SSH。
SSH 已在 AWS 防火墙上授权,如果我安装 apache2 包,我可以连接到它,因此主机肯定“正在响应”。
- 有什么想法我遗漏了吗?
FAQ edit
Q: 我如何调试 Kiwi 启动期间的问题?
调试在 Kiwi 启动系统时出现的问题需要一些特殊技巧。第一种方法是将字符串“kiwidebug=1”添加到引导选项行,以命令 Kiwi 创建调试控制台。当 Kiwi 失败时,使用 CTRL-ALT-F2 切换到该控制台,这将提供一个有限的 shell。使用 CTRL-ALT-F1 返回到主控制台。
Kiwi 调试 shell 没有像 less 这样的分页器,因此单独使用它来检查位于 /var/log/boot.kiwi 的 Kiwi 引导日志很困难。因此,最好在 qemu(仅 32 位)或 qemu-kvm(32 位或 64 位系统)创建的虚拟机 (VM) 中启动 Kiwi 引导过程,可以使用 -serial 选项将日志文件的内容传回主机,主机上提供完整的工具集。
在大多数情况下,正在引导的镜像将是 CD,例如 KDE 或 Gnome Live CD。要启动 VM,请使用以下两个命令之一
qemu-kvm -serial stdio -cdrom <path to image to be booted> qemu-kvm -serial file:<path to saved file> -cdrom <path to image to be booted>
第一种形式的命令会将调试输出的任何数据记录到用于启动 qemu-kvm 的终端,而第二种形式会将数据写入主机上的文件。
在 qemu VM 中进行调试时,CTRL-ALT-FX 击键被主机捕获,需要执行一些额外的步骤。首先,使用 CTRL-ALT-2 切换到 qemu 命令控制台。从那里,您可以使用以下命令切换到 Kiwi 调试控制台
sendkey ctrl-alt-f2
按 CTRL-ALT-1 返回 VM。
为了使 VM 中的串行输出到达主机,必须挂载 debugfs - 这是其他教程中没有很好地记录的一步。为此,请使用命令
mount -t debugfs /dev /dev
此时,您可以使用以下命令捕获日志文件
cat /var/log/boot.kiwi > /dev/ttyS0