使用 distrobuilder 创建镜像

本指南将向您展示如何为 Incus 或 LXC 创建镜像。

在您开始之前,您必须安装 distrobuilder。请参阅 如何安装 distrobuilder 获取说明。

创建镜像

要创建镜像,首先创建一个目录来存放镜像,然后进入该目录。

mkdir -p $HOME/Images/ubuntu/
cd $HOME/Images/ubuntu/

然后,将镜像的示例 YAML 配置文件之一复制到此目录。

注意

YAML 配置文件包含一个镜像模板,该模板提供给 distrobuilder 指示。

Distrobuilder 在 示例目录 中为各种发行版提供了 YAML 文件示例。 scheme.yaml 是一个包含所有可用选项的标准模板。

各种发行版的官方 Incus 模板可在 lxc-ci 存储库 中找到。

在本示例中,我们正在创建一个 Ubuntu 镜像。

cp $HOME/go/src/github.com/lxc/distrobuilder/doc/examples/ubuntu.yaml ubuntu.yaml

编辑模板文件

您也可以对 YAML 配置文件进行一些编辑。您可以定义以下键

部分

描述

文档

image

定义发行版、架构、版本等。

镜像

source

定义主要包源、密钥等。

targets

定义特定目标(例如 Incus、实例等)的配置。

目标

files

定义用于修改文件的生成器。

生成器

packages

定义要安装或删除的包;添加存储库。

包管理

actions

定义在镜像构建过程中特定步骤之后要运行的脚本。

操作

mappings

为特定发行版的架构映射不同的术语(例如 x86_64: amd64)。

映射

提示

构建 VM 镜像时,您应该构建一个支持 cloud-init 的镜像(提供自动大小增长)或在模板中设置更大的大小,因为标准大小相对较小(约 4 GB)。或者,您也可以手动扩展它。

构建并启动镜像

构建和启动镜像的步骤取决于您是要使用 Incus 还是 LXC。

为 Incus 创建镜像

要为 Incus 构建镜像,请运行 distrobuilder。我们正在使用 build-incus 选项为 Incus 创建镜像。

  • 要创建容器镜像

    sudo $HOME/go/bin/distrobuilder build-incus ubuntu.yaml
    
  • 要创建 VM 镜像

    sudo $HOME/go/bin/distrobuilder build-incus ubuntu.yaml --vm
    

请参阅 Incus 镜像 了解有关 build-incus 命令的更多信息。

如果命令成功,您将获得类似于以下内容的输出(对于容器镜像)。incus.tar.xz 文件是容器镜像的描述。 rootfs.squasfs 文件是容器镜像的根文件系统 (rootfs)。这两个文件的集合即为容器镜像

$ ls -l
total 100960
-rw-r--r-- 1 root   root         676 Oct  3 16:15 incus.tar.xz
-rw-r--r-- 1 root   root   103370752 Oct  3 16:15 rootfs.squashfs
-rw-r--r-- 1 ubuntu ubuntu      7449 Oct  3 16:03 ubuntu.yaml
$

将镜像添加到 Incus

要将镜像添加到 Incus 安装中,请使用以下命令 incus image import

$ incus image import incus.tar.xz rootfs.squashfs --alias mycontainerimage
Image imported with fingerprint: 009349195858651a0f883de804e64eb82e0ac8c0bc51880

请参阅 如何复制和导入镜像 获取详细的信息。

让我们看看 Incus 中的镜像。ubuntu.yaml 中有一个设置,用于创建 Ubuntu 20.04 (focal) 镜像。大小为 98.58MB。

$ incus image list mycontainerimage
+------------------+--------------+--------+--------------+--------+---------+-----------------------------+
|      ALIAS       | FINGERPRINT  | PUBLIC | DESCRIPTION  |  ARCH  |  SIZE   |         UPLOAD DATE         |
+------------------+--------------+--------+--------------+--------+---------+-----------------------------+
| mycontainerimage | 009349195858 | no     | Ubuntu focal | x86_64 | 98.58MB | Oct 3, 2020 at 5:10pm (UTC) |
+------------------+--------------+--------+--------------+--------+---------+-----------------------------+

从容器镜像启动 Incus 容器

要从新创建的镜像启动容器,请使用以下命令 incus launch。请注意,您没有为镜像指定存储库(如 ubuntu:images:),因为镜像位于本地。

$ incus launch mycontainerimage c1
Creating c1
Starting c1

为 LXC 创建镜像

使用 LXC 容器而不是 Incus 可能需要安装 lxc-utils。在同一系统上同时安装 LXC 和 Incus 可能会导致混淆。由于缺乏自动 AppArmor 保护,一般不建议使用原始 LXC。

要为 LXC 创建镜像,请使用以下命令

$ sudo $HOME/go/bin/distrobuilder build-lxc ubuntu.yaml
$ ls -l
total 87340
-rw-r--r-- 1 root root      740 Jan 19 03:15 meta.tar.xz
-rw-r--r-- 1 root root 89421136 Jan 19 03:15 rootfs.tar.xz
-rw-r--r-- 1 root root     4798 Jan 19 02:42 ubuntu.yaml

请参阅 LXC 镜像 了解有关 build-lxc 命令的更多信息。

将容器镜像添加到 LXC

要将容器镜像添加到 LXC 安装中,请使用以下命令 lxc-create

lxc-create -n myContainerImage -t local -- --metadata meta.tar.xz --fstree rootfs.tar.xz

从容器镜像启动 LXC 容器

然后使用以下命令启动容器

lxc-start -n myContainerImage

重新打包 Windows ISO

使用 Incus 可以运行 Windows VM。您只需要一个 Windows ISO 和一堆驱动程序。为了使安装更轻松,distrobuilder 添加了 repack-windows 命令。它接受一个 Windows ISO,并将它与必要的驱动程序一起重新打包。

目前,distrobuilder 支持 Windows 10、Windows Server 2012、Windows Server 2016、Windows Server 2019 和 Windows Server 2022。Windows 版本将自动检测,但如果失败,您可以使用 --windows-version 标志手动设置它。它支持 w102k122k162k192k22 这些值,分别对应 Windows 10、Windows Server 2012、Windows Server 2016、Windows Server 2019 和 Windows Server 2022。

以下是重新打包 Windows ISO 的方法

distrobuilder repack-windows path/to/Windows.iso path/to/Windows-repacked.iso

有关 repack-windows 的更多信息,您可以运行以下命令

distrobuilder repack-windows -h

安装 Windows

运行以下命令来初始化 VM,配置(=增加)分配的磁盘空间,最后附加准备好的 ISO 文件的完整路径。请注意,Windows 10 的安装大约需要 10GB(更新之前),因此 30GB 的磁盘为您提供了大约 20GB 的可用空间。

incus init win10 --empty --vm -c security.secureboot=false
incus config device override win10 root size=30GiB
incus config device add win10 iso disk source=/path/to/Windows-repacked.iso boot.priority=10

现在,VM win10 已配置完毕,可以启动了。以下命令启动虚拟机并打开一个 VGA 控制台,以便我们完成 Windows 的图形安装。

incus start win10 --console=vga