用于自动化镜像创建的工具

有几种工具被设计用来自动化镜像创建。

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-releasecloud-utilscloud-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 环境。