使用 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 配置文件进行一些编辑。您可以定义以下键
部分 |
描述 |
文档 |
---|---|---|
|
定义发行版、架构、版本等。 |
|
|
定义主要包源、密钥等。 |
|
|
定义特定目标(例如 Incus、实例等)的配置。 |
|
|
定义用于修改文件的生成器。 |
|
|
定义要安装或删除的包;添加存储库。 |
|
|
定义在镜像构建过程中特定步骤之后要运行的脚本。 |
|
|
为特定发行版的架构映射不同的术语(例如 |
提示
构建 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
标志手动设置它。它支持 w10
、2k12
、2k16
、2k19
和 2k22
这些值,分别对应 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