Поиск по сайту:

Как создать образы виртуальных машин с помощью 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

Список доступных виртуальных машин с помощью Virt-builder

Как видите, доступно несколько шаблонов ОС.

Прежде чем создавать образ виртуальной машины, вы можете просмотреть примечания по установке гостевой ОС, чтобы узнать, что там находится.

Например, чтобы просмотреть примечания по установке 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%)

Создайте образы виртуальных машин с помощью virt-builder в Linux.

Как видите, эта команда создала минимальный образ 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.

Статьи по данной тематике