用于自动化镜像创建的工具¶
有几种工具被设计用来自动化镜像创建。
OpenStack 工具¶
Diskimage-builder¶
Diskimage-builder 是一种自动化的磁盘镜像创建工具,支持多种发行版和架构。Diskimage-builder (DIB) 可以为 Fedora、Red Hat Enterprise Linux、Ubuntu、Debian、CentOS 和 openSUSE 构建镜像。DIB 组织成一系列元素,相互构建以创建特定的镜像。
要构建镜像,请调用以下脚本
# disk-image-create ubuntu vm
这个例子创建了一个通用的、可启动的最新版 Ubuntu 镜像。
可以通过设置环境变量或向命令行添加元素来进一步定制
# disk-image-create -a armhf ubuntu vm
这个例子像之前一样创建镜像,但针对 arm 架构。更多元素可在 git 源代码目录 中找到,并在 diskimage-builder 元素文档 中记录。
外部工具¶
image-bootstrap¶
image-bootstrap 是一个命令行工具,用于生成可启动的虚拟机镜像,支持 Arch、Debian、Gentoo 和 Ubuntu,并为 OpenStack 做好准备。
KIWI¶
The KIWI appliance builder 提供了一个操作系统镜像构建器,适用于各种支持的 Linux 硬件平台以及虚拟化和云系统。它允许基于 openSUSE、SUSE Linux Enterprise 和 Red Hat Enterprise Linux 构建镜像。 KIWI NG 文档 解释了如何使用它。
openstack-debian-images¶
openstack-debian-images 是 Debian 用于创建其官方 OpenStack 镜像的工具。它由一个非常简单的 shell 脚本组成,易于理解和修改。它支持 Grub 和 Syslinux、BIOS 或 EFI、amd64 和 arm64 架构。
openstack-debian-images 还可以用于直接在硬盘上创建可启动镜像,而不是使用 Debian 安装程序。
要构建镜像,请键入以下内容
# build-openstack-debian-image --release stretch
可以添加更多参数以进一步自定义镜像
# build-openstack-debian-image --release stretch \
--hook-script /root/my-hook-script.sh \
--debootstrap-url http://ftp.fr.debian.org/debian \
--sources.list-mirror http://ftp.fr.debian.org/debian \
--login myusername \
--extra-packages vim,emacs
文件 /root/my-hook-script.sh 将接收 2 个环境变量:BODI_CHROOT_PATH 镜像挂载的路径,以及 BODI_RELEASE 即正在引导的 Debian 发行版的名称。这是一个定制 motd 的例子
# #!/bin/sh
set -e
echo "My message" >${BODI_CHROOT_PATH}/etc/motd
这个钩子脚本将在构建过程的正确时刻方便地调用,即在安装完所有内容但未卸载分区之前。
Oz¶
Oz 是一个命令行工具,可自动执行创建虚拟机镜像文件的过程。Oz 是一个 Python 应用程序,它与 KVM 交互以逐步完成虚拟机的安装过程。
它使用预定义的 kickstart(基于 Red Hat 的系统)和 preseed 文件(基于 Debian 的系统)来支持的操作系统,并且还可以用于创建 Microsoft Windows 镜像。
对 Oz 的全面介绍超出了本文档的范围,但我们将提供一个示例。您可以在 GitHub 上找到 Oz 模板文件的更多示例,网址为 rcbops/oz-image-build/tree/2025.2/templates。以下是如何使用 Oz 创建 CentOS 6.4 镜像。
创建一个名为 centos64.tdl 的模板文件,内容如下。您需要更改的唯一条目是 <rootpw> 内容。
<template>
<name>centos64</name>
<os>
<name>CentOS-6</name>
<version>4</version>
<arch>x86_64</arch>
<install type='iso'>
<iso>http://mirror.rackspace.com/CentOS/6/isos/x86_64/CentOS-6.4-x86_64-bin-DVD1.iso</iso>
</install>
<rootpw>CHANGE THIS TO YOUR ROOT PASSWORD</rootpw>
</os>
<description>CentOS 6.4 x86_64</description>
<repositories>
<repository name='epel-6'>
<url>http://download.fedoraproject.org/pub/epel/6/$basearch</url>
<signed>no</signed>
</repository>
</repositories>
<packages>
<package name='epel-release'/>
<package name='cloud-utils'/>
<package name='cloud-init'/>
</packages>
<commands>
<command name='update'>
yum -y update
yum clean all
sed -i '/^HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-eth0
echo -n > /etc/udev/rules.d/70-persistent-net.rules
echo -n > /lib/udev/rules.d/75-persistent-net-generator.rules
</command>
</commands>
</template>
此 Oz 模板指定从哪里下载 Centos 6.4 安装 ISO。Oz 将使用版本信息来识别要使用的 kickstart 文件。在这种情况下,将是 RHEL6.auto。它添加 EPEL 作为存储库并安装 epel-release、cloud-utils 和 cloud-init 包,如文件中的 packages 部分所述。
在 Oz 使用 kickstart 文件完成初始 OS 安装后,它会使用更新自定义镜像。它还会删除 libvirt 在 Oz 执行自定义时创建的 eth0 设备引用,如 XML 文件中的 command 部分所述。
要运行此命令
# oz-install -d3 -u centos64.tdl -x centos64-libvirt.xml
-d3标志告诉 Oz 在运行时显示状态信息。-u告诉 Oz 在完成初始安装后执行自定义(安装额外的软件包、运行命令)。-x标志告诉 Oz 使用哪个文件名来写入 libvirt XML 文件(否则它将默认设置为类似centos64Apr_03_2013-12:39:42的内容)。
如果您省略 -u 标志,或者想要编辑文件以进行其他自定义,可以使用 oz-customize 命令,使用 oz-install 创建的 libvirt XML 文件。例如
# oz-customize -d3 centos64.tdl centos64-libvirt.xml
Oz 将调用 libvirt 在 KVM 内部启动镜像,然后 Oz 将 ssh 到实例并执行自定义操作。
Packer¶
Packer 是一种用于从单个源配置为多个平台创建机器镜像的工具。
virt-builder¶
Virt-builder 是一种用于快速构建新虚拟机的工具。您可以构建各种用于本地或云使用的虚拟机,通常只需几分钟或更短的时间。Virt-builder 还具有许多自定义这些虚拟机的方法。一切都从命令行运行,并且不需要 root 权限,因此自动化和脚本编写非常简单。
要构建镜像,请调用以下脚本
# virt-builder fedora-23 -o image.qcow2 --format qcow2 \
--update --selinux-relabel --size 20G
要列出可用的操作系统
$ virt-builder --list
要将其导入 libvirt 中,请使用 virsh
# virt-install --name fedora --ram 2048 \
--disk path=image.qcow2,format=qcow2 --import
windows-openstack-imaging-tools¶
windows-openstack-imaging-tools 是一个 PowerShell 模块,可自动执行 OpenStack 的 Windows 镜像创建,并支持构建 VHDX、QCOW2、RAW 和 VMDK 镜像类型。
为了更轻松地安装,该工具作为 PowerShellGallery 模块 WindowsImageBuilder 发布。
Windows 镜像构建示例
# Install and import WindowsImageBuilder module from PowerShellGallery
Install-Module WindowsImageBuilder -Force
Import-Module WindowsImageBuilder
New-WindowsImageConfig -ConfigFilePath ".\windows-image-config.ini"
# Update the configuration file to fit your specific use case
# Extensive information for all the configuration can be found here:
# https://github.com/cloudbase/windows-openstack-imaging-tools/blob/2025.2/Config.psm1#L21
# Generate the Windows image
New-WindowsOnlineImage -ConfigFilePath ".\windows-image-config.ini"
需求
一台启用 Hyper-V 虚拟化的 Windows 主机,PowerShell >=v4 支持和 Windows 评估和部署工具包 (ADK)。
Windows 安装 ISO 或 DVD。
如果目标环境需要,Windows 兼容驱动程序。例如,VirtIO、网卡或存储适配器驱动程序。
Git 环境。