Virt builder
virt-builder 简介
virt-builder 是一种命令行工具,可轻松快速地构建供本地或云使用的各种虚拟机镜像
virt-builder 会下载经过精心准备的,经过数字签名的 OS 模板,因此不必手动安装 OS
官方文档:https://libguestfs.org/virt-builder.1.html
安装 virt-builder
virt-builder 是 libguestfs 库的一部分,因此请先在 Linux 上安装 libguestfs
使用 virt-builder 构建虚拟机镜像
列出可用的虚拟机模板:
可用的列表为:
ubuntu-20.04 x86_64 Ubuntu 20.04 (focal)
ubuntu-18.04 x86_64 Ubuntu 18.04 (bionic)
ubuntu-16.04 x86_64 Ubuntu 16.04 (Xenial)
ubuntu-14.04 x86_64 Ubuntu 14.04 (Trusty)
ubuntu-12.04 x86_64 Ubuntu 12.04 (Precise)
ubuntu-10.04 x86_64 Ubuntu 10.04 (Lucid)
scientificlinux-6 x86_64 Scientific Linux 6.5
opensuse-tumbleweed x86_64 openSUSE Tumbleweed
freebsd-11.1 x86_64 FreeBSD 11.1
fedora-37 x86_64 Fedora® 37 Server
fedora-36 x86_64 Fedora® 36 Server
fedora-35 x86_64 Fedora® 35 Server
fedora-35 aarch64 Fedora® 35 Server (aarch64)
...
fedora-21 ppc64le Fedora® 21 Server (ppc64le)
fedora-21 ppc64 Fedora® 21 Server (ppc64)
fedora-21 armv7l Fedora® 21 Server (armv7l)
fedora-21 aarch64 Fedora® 21 Server (aarch64)
fedora-20 x86_64 Fedora® 20
fedora-19 x86_64 Fedora® 19
fedora-18 x86_64 Fedora® 18
debian-9 x86_64 Debian 9 (stretch)
debian-8 x86_64 Debian 8 (jessie)
debian-7 x86_64 Debian 7 (wheezy)
debian-7 sparc64 Debian 7 (Wheezy) (sparc64)
debian-6 x86_64 Debian 6 (Squeeze)
debian-11 x86_64 Debian 11 (bullseye)
debian-10 x86_64 Debian 10 (buster)
cirros-0.3.5 x86_64 CirrOS 0.3.5
cirros-0.3.1 x86_64 CirrOS 0.3.1
centosstream-9 x86_64 CentOS Stream 9
centosstream-8 x86_64 CentOS Stream 8
centos-8.2 x86_64 CentOS 8.2
centos-8.0 x86_64 CentOS 8.0
centos-7.8 x86_64 CentOS 7.8
centos-7.7 x86_64 CentOS 7.7
centos-7.6 x86_64 CentOS 7.6
centos-7.5 x86_64 CentOS 7.5
centos-7.4 x86_64 CentOS 7.4
centos-7.3 x86_64 CentOS 7.3
centos-7.2 x86_64 CentOS 7.2
centos-7.2 aarch64 CentOS 7.2 (aarch64)
centos-7.1 x86_64 CentOS 7.1
centos-7.0 x86_64 CentOS 7.0
centos-6 x86_64 CentOS 6.6
alma-8.5 x86_64 AlmaLinux 8.5
下载的地址:https://builder.libguestfs.org/
在构建虚拟机镜像之前,可以查看客户机 OS 的安装说明以了解其中的内容
例如:
> virt-builder --notes centos-7.8
CentOS 7.8
This CentOS image contains only unmodified @Core group packages.
This template was generated by a script in the libguestfs source tree:
builder/templates/make-template.ml
Associated files used to prepare this template can be found in the
same directory.
建立一个临时目录存放虚拟机
使用以下命令构建 CentOS 7 虚拟机
# 可执行下述语句:try running qemu directly without libvirt
export LIBGUESTFS_BACKEND=direct
virt-builder centos-7.8
此命令已构建了最小的 CentOS 7 镜像,它不会有任何用户帐户,只有随机的 root 密码和最少安装的软件
输出如下:
[ 9.4] Downloading: http://builder.libguestfs.org/centos-7.8.xz
[ 9.8] Planning how to build this image
[ 9.8] Uncompressing
[ 11.1] Opening the new disk
[ 15.1] Setting a random seed
[ 15.1] Setting passwords
virt-builder: Setting random password of root to 9LimFDhMuXCP7fgr
[ 15.9] SELinux relabelling
[ 20.8] Finishing off
Output file: centos-7.8.img
Output size: 6.0G
Output format: raw
Total usable space: 5.4G
Free space: 4.1G (75%)
镜像的输出名称应与模板名称相同,可以使用 -o
进行指定
虚拟机格式
默认情况下,镜像格式为 img,可以将其转换为其他格式,例如 qcow2,如下所示:
虚拟机架构
默认情况下,virt-builder 将构建与主机 OS 体系结构相同的镜像,用 --arch
选项进行更改():
构建自定义尺寸的镜像,使用如下命令构建大小为 50 GB 的 VM,在将客户机操作系统复制到输出时,将使用virt-resize 命令自动调整其大小:
虚拟机 root 用户
设置 root 密码:
可以从文本文件设置密码:
要禁用 root 密码,请运行:
锁定根帐户:
锁定 root 帐户并禁用 root 密码:
要分配 root 密码但锁定 root 帐户,请使用以下选项:
virt-builder centos-8.2 --root-password locked:file:FILENAME
virt-builder centos-8.2 --root-password locked:password:PASSWORD
使用 passwd -u
命令解锁 root 用户后,可以使用 root 密码
建立普通用户
要在构建虚拟机镜像时创建用户帐户,请运行:
上面的命令将创建一个没有密码的名为 sk
的用户,并强制在首次登录时设置密码
设置主机名
软件包管理
要在虚拟机上安装软件包,运行:
要安装多个软件包,请用引号引起来,并用逗号分隔,如下所示:
更新虚拟机中的所有软件包:
SELinux
如果 VM 使用 SELinux,则需要在安装或更新软件包后重新标记 SELinux:
自定义 VM 镜像
Virt-builder 在构建镜像时有许多选项可以自定义镜像
例如,可以在 vm 首次启动时运行特定的命令/脚本:
添加一行:
缓存模板
默认情况下,所有模板都将从下载网络,由于模板很大,因此下载的模板将被缓存在用户的主目录中
可以使用以下命令打印缓存目录的详细信息以及当前缓存的模板:
> virt-builder --print-cache
cache directory: /root/.cache/virt-builder
opensuse-tumbleweed x86_64 no
alma-8.5 x86_64 no
centos-6 x86_64 no
centos-7.0 x86_64 no
centos-7.1 x86_64 no
centos-7.2 aarch64 cached
centos-7.2 x86_64 no
centos-7.3 x86_64 no
centos-7.4 x86_64 no
centos-7.5 x86_64 no
centos-7.6 x86_64 no
centos-7.7 x86_64 no
centos-7.8 x86_64 cached
centos-8.0 x86_64 no
centos-8.2 x86_64 no
...
fedora-31 x86_64 no
fedora-32 x86_64 no
可以通过手动查看缓存文件夹来验证它:
可以使用以下命令将所有可用模板下载到本地缓存文件夹中:
如果不想在构建镜像时缓存模板,使用 --no-cache
选项
要删除所有缓存的模板,请运行:
示例
启动一个空白的 centos7 镜像