Как создать образы виртуальных машин с помощью Virt-builder
В этом руководстве объясняется, что такое Virt-builder, как установить Virt-builder в Linux и как создавать образы виртуальных машин с помощью Virt-builder в Linux.
Что такое Вирт-билдер?
Virt-builder — это инструмент командной строки, позволяющий легко и быстро создавать разнообразные образы виртуальных машин для локального или облачного использования. Он также имеет множество возможностей для настройки изображений. Вы можете установить новые приложения в образ виртуальной машины, задать имя хоста, установить пароль root, запустить команду или сценарий при первой загрузке гостевой виртуальной машины, добавить или отредактировать файлы в образе диска и многое другое. Все эти задачи можно выполнить из командной строки и не требуют прав root.
Virt-builder загружает чисто подготовленные шаблоны ОС с цифровой подписью, поэтому вам не придется устанавливать ОС вручную. Все, что вам нужно сделать, это просто использовать графический интерфейс Virt-manager или инструмент командной строки Virt-install, чтобы мгновенно запустить виртуальные машины с помощью предопределенных шаблонов. Virt-builder предоставляет минимальные шаблоны ОС для популярных вариантов Linux и Unix. Конечно, вы также можете создать свой собственный шаблон.
Установите вирт-билдер на Linux
Virt-builder является частью библиотеки Libguestfs, поэтому убедитесь, что вы установили его, как описано в следующем руководстве.
- Доступ к образам дисков виртуальных машин и их изменение с помощью Libguestfs
Создайте образы виртуальных машин с помощью Virt-builder
Создавать образы виртуальных машин с помощью Virt-builder довольно просто и понятно.
Список доступных шаблонов виртуальных машин
Сначала перечислите доступные шаблоны ОС. Для этого запустите:
virt-builder --list
На момент написания этого руководства были доступны следующие шаблоны:
centos-6 x86_64 CentOS 6.6
centos-7.0 x86_64 CentOS 7.0
centos-7.1 x86_64 CentOS 7.1
centos-7.2 aarch64 CentOS 7.2 (aarch64)
centos-7.2 x86_64 CentOS 7.2
centos-7.3 x86_64 CentOS 7.3
centos-7.4 x86_64 CentOS 7.4
centos-7.5 x86_64 CentOS 7.5
centos-7.6 x86_64 CentOS 7.6
centos-7.7 x86_64 CentOS 7.7
centos-7.8 x86_64 CentOS 7.8
centos-8.0 x86_64 CentOS 8.0
centos-8.2 x86_64 CentOS 8.2
cirros-0.3.1 x86_64 CirrOS 0.3.1
cirros-0.3.5 x86_64 CirrOS 0.3.5
debian-10 x86_64 Debian 10 (buster)
debian-6 x86_64 Debian 6 (Squeeze)
debian-7 sparc64 Debian 7 (Wheezy) (sparc64)
debian-7 x86_64 Debian 7 (wheezy)
debian-8 x86_64 Debian 8 (jessie)
debian-9 x86_64 Debian 9 (stretch)
fedora-26 aarch64 Fedora® 26 Server (aarch64)
fedora-26 armv7l Fedora® 26 Server (armv7l)
fedora-26 i686 Fedora® 26 Server (i686)
fedora-26 ppc64 Fedora® 26 Server (ppc64)
fedora-26 ppc64le Fedora® 26 Server (ppc64le)
fedora-26 x86_64 Fedora® 26 Server
fedora-27 aarch64 Fedora® 27 Server (aarch64)
fedora-27 armv7l Fedora® 27 Server (armv7l)
fedora-27 i686 Fedora® 27 Server (i686)
fedora-27 ppc64 Fedora® 27 Server (ppc64)
fedora-27 ppc64le Fedora® 27 Server (ppc64le)
fedora-27 x86_64 Fedora® 27 Server
fedora-28 i686 Fedora® 28 Server (i686)
fedora-28 x86_64 Fedora® 28 Server
fedora-29 aarch64 Fedora® 29 Server (aarch64)
fedora-29 i686 Fedora® 29 Server (i686)
fedora-29 ppc64le Fedora® 29 Server (ppc64le)
fedora-29 x86_64 Fedora® 29 Server
fedora-30 aarch64 Fedora® 30 Server (aarch64)
fedora-30 i686 Fedora® 30 Server (i686)
fedora-30 x86_64 Fedora® 30 Server
fedora-31 x86_64 Fedora® 31 Server
fedora-32 x86_64 Fedora® 32 Server
freebsd-11.1 x86_64 FreeBSD 11.1
scientificlinux-6 x86_64 Scientific Linux 6.5
ubuntu-10.04 x86_64 Ubuntu 10.04 (Lucid)
ubuntu-12.04 x86_64 Ubuntu 12.04 (Precise)
ubuntu-14.04 x86_64 Ubuntu 14.04 (Trusty)
ubuntu-16.04 x86_64 Ubuntu 16.04 (Xenial)
ubuntu-18.04 x86_64 Ubuntu 18.04 (bionic)
fedora-18 x86_64 Fedora® 18
fedora-19 x86_64 Fedora® 19
fedora-20 x86_64 Fedora® 20
fedora-21 aarch64 Fedora® 21 Server (aarch64)
fedora-21 armv7l Fedora® 21 Server (armv7l)
fedora-21 ppc64 Fedora® 21 Server (ppc64)
fedora-21 ppc64le Fedora® 21 Server (ppc64le)
fedora-21 x86_64 Fedora® 21 Server
fedora-22 aarch64 Fedora® 22 Server (aarch64)
fedora-22 armv7l Fedora® 22 Server (armv7l)
fedora-22 i686 Fedora® 22 Server (i686)
fedora-22 x86_64 Fedora® 22 Server
fedora-23 aarch64 Fedora® 23 Server (aarch64)
fedora-23 armv7l Fedora® 23 Server (armv7l)
fedora-23 i686 Fedora® 23 Server (i686)
fedora-23 ppc64 Fedora® 23 Server (ppc64)
fedora-23 ppc64le Fedora® 23 Server (ppc64le)
fedora-23 x86_64 Fedora® 23 Server
fedora-24 aarch64 Fedora® 24 Server (aarch64)
fedora-24 armv7l Fedora® 24 Server (armv7l)
fedora-24 i686 Fedora® 24 Server (i686)
fedora-24 x86_64 Fedora® 24 Server
fedora-25 aarch64 Fedora® 25 Server (aarch64)
fedora-25 armv7l Fedora® 25 Server (armv7l)
fedora-25 i686 Fedora® 25 Server (i686)
fedora-25 ppc64 Fedora® 25 Server (ppc64)
fedora-25 ppc64le Fedora® 25 Server (ppc64le)
fedora-25 x86_64 Fedora® 25 Server
opensuse-13.1 x86_64 openSUSE 13.1
opensuse-13.2 x86_64 openSUSE 13.2
opensuse-42.1 x86_64 openSUSE Leap 42.1
opensuse-tumbleweed x86_64 openSUSE Tumbleweed
Как видите, доступно несколько шаблонов ОС.
Прежде чем создавать образ виртуальной машины, вы можете просмотреть примечания по установке гостевой ОС, чтобы узнать, что там находится.
Например, чтобы просмотреть примечания по установке Debian 10, запустите:
virt-builder --notes debian-10
Пример вывода:
Debian 10 (buster)
This is a minimal Debian install.
This image is so very minimal that it only includes an ssh server
This image does not contain SSH host keys. To regenerate them use:
--firstboot-command "dpkg-reconfigure openssh-server"
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.
Создайте образ виртуальной машины
Я хотел загрузить шаблоны ОС в определенный каталог, поэтому создал этот каталог:
mkdir virtbuilder
cd virtbuilder/
Давайте создадим виртуальную машину Debian 10 с помощью команды:
virt-builder debian-10
Пример вывода:
[ 4.8] Downloading: http://builder.libguestfs.org/debian-10.xz
##################################################################################### 100.0%
[ 83.2] Planning how to build this image
[ 83.2] Uncompressing
[ 101.2] Opening the new disk
[ 119.8] Setting a random seed
virt-builder: warning: random seed could not be set for this type of guest
[ 119.9] Setting passwords
virt-builder: Setting random password of root to 66xW1CaIqfM8km2v
[ 121.5] Finishing off
Output file: debian-10.img
Output size: 6.0G
Output format: raw
Total usable space: 5.8G
Free space: 4.9G (84%)
Как видите, эта команда создала минимальный образ Debian 10. У него не будет учетных записей пользователей. Он будет иметь только случайный пароль root и минимально установленное программное обеспечение.
Выходное имя изображения должно совпадать с именем шаблона. Вы можете изменить его по своему усмотрению, используя опцию -o
:
virt-builder debian-10 -o ostechnix.img
По умолчанию результирующий формат изображения — .img
. Вы можете преобразовать его в другой формат, например Qcow2, как показано ниже:
virt-builder debian-10 --format qcow2
По умолчанию Virt-Builder построит образ, соответствующий архитектуре операционной системы хоста. Например, если ваша хостовая ОС является 64-битной, она создаст 64-битную виртуальную машину. Вы можете изменить это значение на 32-битное (если доступно), используя опцию --arch
.
virt-builder debian-10 --arch i686
Хотите создать изображение нестандартного размера? Это также возможно. Следующая команда создаст виртуальную машину размером 50 ГБ:
virt-builder debian-10 --size 50G
Размер гостевой ОС автоматически изменяется с помощью команды virt-resize по мере ее копирования в выходные данные.
Установить пароль root
Как я уже упоминал, при создании образа учетной записи пользователя root будет назначен случайный пароль. Если вы хотите установить определенный пароль для пользователя root, используйте опцию --root-password
, как показано ниже:
virt-builder centos-8.2 --format qcow2 --root-password password:centos
Пример вывода:
[ 5.1] Downloading: http://builder.libguestfs.org/centos-8.2.xz
##################################################################################### 100.0%
[ 249.2] Planning how to build this image
[ 249.2] Uncompressing
[ 271.3] Converting raw to qcow2
[ 281.1] Opening the new disk
[ 319.9] Setting a random seed
[ 320.4] Setting passwords
[ 323.0] Finishing off
Output file: centos-8.2.qcow2
Output size: 6.0G
Output format: qcow2
Total usable space: 5.3G
Free space: 4.0G (74%)
Приведенная выше команда создаст образ CentOS 8.2 и назначит пароль для пользователя root как "centos".
Вы также можете установить пароль из текстового файла:
virt-builder centos-8.2 --root-password file:~/ostechnix.txt
Чтобы отключить пароль root, запустите:
virt-builder centos-8.2 --root-password disabled
Заблокируйте root-аккаунт:
virt-builder centos-8.2 --root-password locked
Заблокируйте учетную запись root и отключите пароль root:
virt-builder centos-8.2 --root-password locked:disabled
Чтобы назначить пароль root, но заблокировать учетную запись root, используйте следующие параметры:
--root-password locked:file:FILENAME
--root-password locked:password:PASSWORD
Мы можем использовать пароль root после разблокировки пользователя root с помощью команды "passwd -u
".
Создание пользователей
Чтобы создать учетные записи пользователей при создании образа виртуальной машины, выполните:
virt-builder centos-8.2 --firstboot-command 'useradd -m -p "" sk ; chage -d 0 sk'
Приведенная выше команда создаст пользователя с именем «sk
» без пароля и заставит его установить пароль при первом входе в систему.
Установить имя хоста
Чтобы установить имя хоста для виртуальной машины:
virt-builder centos-8.2 --hostname virt.ostechnix.local
Пример вывода:
[ 4.7] Downloading: http://builder.libguestfs.org/centos-8.2.xz
[ 7.2] Planning how to build this image
[ 7.2] Uncompressing
[ 31.0] Opening the new disk
[ 41.9] Setting a random seed
[ 42.0] Setting the hostname: virt.ostechnix.local
[ 42.1] Setting passwords
virt-builder: Setting random password of root to MRn7fj1GSaeCAHQx
[ 44.4] Finishing off
Output file: centos-8.2.img
Output size: 6.0G
Output format: raw
Total usable space: 5.3G
Free space: 4.0G (74%)
Установите программное обеспечение на образ виртуальной машины
Чтобы установить пакеты на виртуальную машину, запустите:
virt-builder debian-10 --install vim
Пример вывода:
[ 5.8] Downloading: http://builder.libguestfs.org/debian-10.xz
[ 7.4] Planning how to build this image
[ 7.4] Uncompressing
[ 25.3] Opening the new disk
[ 29.7] Setting a random seed
virt-builder: warning: random seed could not be set for this type of guest
[ 29.8] Installing packages: vim
[ 93.2] Setting passwords
virt-builder: Setting random password of root to 45Hj5yxh8vRqLDcu
[ 94.9] Finishing off
Output file: debian-10.img
Output size: 6.0G
Output format: raw
Total usable space: 5.8G
Free space: 4.8G (82%)
Чтобы установить несколько пакетов, укажите их в кавычках, разделив запятыми, как показано ниже:
virt-builder debian-10 --install "apache2,htop"
Обновите все пакеты в виртуальной машине:
virt-builder centos-8.2 --update
Если ваша виртуальная машина использует SELinux, вам необходимо выполнить перемаркировку SELinux после установки или обновления пакетов:
virt-builder centos-8.2 --update --selinux-relabel
Настройка образов виртуальных машин
Virt-builder имеет множество возможностей для настройки изображения. Например, вы можете запустить определенную команду/скрипт при первой загрузке виртуальной машины, используя команду:
virt-builder debian-10 --firstboot-command 'apt -y update'
Чтобы добавить строку в виртуальную машину, запустите:
virt-builder centos-8.2 --append-line '/etc/hosts:192.168.225.1 server.ostechnix.local'
Кэширование шаблонов
По умолчанию все шаблоны будут загружены из сети в первый раз. Поскольку размер шаблонов большой, загруженные шаблоны будут кэшироваться в домашнем каталоге пользователя.
Вы можете распечатать подробную информацию о каталоге кэша и о том, какие шаблоны кэшируются в данный момент, используя следующую команду:
virt-builder --print-cache
Пример вывода:
cache directory: /home/sk/.cache/virt-builder
[...]
centos-7.8 x86_64 no
centos-8.0 x86_64 no
centos-8.2 x86_64 cached
cirros-0.3.1 x86_64 no
cirros-0.3.5 x86_64 no
debian-10 x86_64 cached
debian-6 x86_64 no
debian-7 sparc64 no
[...]
Вы также можете проверить это, вручную заглянув в папку кеша:
$ ls $HOME/.cache/virt-builder
centos-8.2.x86_64.1 debian-10.x86_64.1
Чтобы загрузить все доступные шаблоны в папку локального кэша, запустите:
virt-builder --cache-all-templates
Если вы не хотите кэшировать шаблон при создании изображения, используйте опцию --no-cache
.
Чтобы удалить все кэшированные шаблоны, запустите:
$ virt-builder --delete-cache
[ 0.0] Deleting: /home/sk/.cache/virt-builder
Импорт образов дисков в гипервизор
Итак, вы загрузили желаемую ОС и настроили ее по своему вкусу. Что теперь? Просто импортируйте образ и запустите виртуальную машину, используя вновь созданный образ диска с гипервизором. Мы уже написали пошаговое руководство по созданию виртуальной машины KVM с использованием образа Qcow2. Это руководство написано специально для Qcow2, однако оно подходит и для импорта образов дисков в формате .img
.
- Создание виртуальной машины KVM с использованием образа Qcow2 в Linux
Virt-builder имеет сотни команд и опций. Здесь я рассмотрел только основные команды. Для получения более подробной информации обратитесь к руководству по возрасту.
man virt-builder
Рекомендованное фото Игоря Старкова из Pexels.