Подготовка образа виртуальной машины qcow2 на примере Debian
Приветствую!

В этой заметке мы научимся модифицировать образы дисков в формате qcow2 с помощью консольных утилит из библиотеки libguestfs-tools.

Формат заметки HowTo, поэтому меньше слов, больше команд🙃.

Подключаемся к серверу по SSH:

BASH
ssh root@proxmox.lan
Нажмите, чтобы развернуть и увидеть больше

Обновляем кэш пакетов и устанавливаем необходимые утилиты:

BASH
apt update

apt install -y wget qemu-utils libguestfs-tools
Нажмите, чтобы развернуть и увидеть больше

Скачиваем актуальный базовый образ Debian 13 в формате qcow2:

BASH
wget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-generic-amd64.qcow2

ls -l ./debian-13-generic-amd64.qcow2
Нажмите, чтобы развернуть и увидеть больше

Выполняем ресайз диска (укажите подходящее вам значение):

BASH
qemu-img resize ./debian-13-generic-amd64.qcow2 20G
Нажмите, чтобы развернуть и увидеть больше

Теперь кастомизируем наш образ под свои предпочтения.

Ниже я выполню обновление пакетов и установку некоторых утилит + настройка локали:

BASH
virt-customize -a debian-13-generic-amd64.qcow2 --update \
    --install qemu-guest-agent,locales,zsh,git,curl,neovim,bat,eza,fzf \
    --run-command "echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen" \
    --run-command "echo 'ru_RU.UTF-8 UTF-8' >> /etc/locale.gen" \
    --run-command "locale-gen"
Нажмите, чтобы развернуть и увидеть больше

Готово.

Если вам нужно скопировать внешний файл внутрь образа, то делается это с помощью команды virt-copy-in.

Например, закинем в образ мой файл .zshrc:

BASH
curl -fsSL https://raw.githubusercontent.com/r4ven-me/dots/main/.zshrc \
    --output /tmp/.zshrc

chmod 640 /tmp/.zshrc && chown root: /tmp/.zshrc

virt-copy-in -a ./debian-13-generic-amd64.qcow2 /tmp/.zshrc /root

virt-copy-in -a ./debian-13-generic-amd64.qcow2 /tmp/.zshrc /etc/skel/
Нажмите, чтобы развернуть и увидеть больше

Если необходимо отредактировать какой-либо файл внутри образа, то пользуемся командой virt-edit.

Например, в качестве оболочки по умолчанию для новых пользователей укажем ZSH.

Для команды useradd:

BASH
virt-edit -a ./debian-13-generic-amd64.qcow2 /etc/default/useradd
Нажмите, чтобы развернуть и увидеть больше

Указываем SHELL=/usr/bin/zsh.

Теперь для команды adduser:

BASH
virt-edit -a ./debian-13-generic-amd64.qcow2 /etc/adduser.conf
Нажмите, чтобы развернуть и увидеть больше

Указываем DSHELL=/usr/bin/zsh.

Если вам нужно изменить множество файлов, то более удобным вариантом будет монтирование образа в хостовую систему, например, в /mnt/qcow2:

BASH
mkdir -p /mnt/qcow2

guestmount -i -a ./debian-13-generic-amd64.qcow2 /mnt/qcow2

ls -l /mnt/qcow2
Нажмите, чтобы развернуть и увидеть больше

Для отмонтирования используйте команду:

BASH
guestunmount /mnt/qcow2
Нажмите, чтобы развернуть и увидеть больше

Если базовых операций вам недостаточно, можно запустить интерактивную оболочку прямо внутри образа:

BASH
guestfish -i -a ./debian-13-generic-amd64.qcow2
Нажмите, чтобы развернуть и увидеть больше

Например, изменим оболочку пользователя root:

BASH
sh 'chsh -s /usr/bin/zsh'

sh 'grep root /etc/passwd'
Нажмите, чтобы развернуть и увидеть больше

Вот так всё просто и очень удобно😉. Используйте подготовленный образ для ваших новых виртуальных машин👨‍💻.

Ниже приведён расширенный список основных команды модификации образа:

BASH
# Просмотр содержимого каталогов в образе
virt-ls -a <image.img> /path

# Просмотр содержимого файла
virt-cat -a <image.img> /path/to/file

# Редактирование файла внутри образа
virt-edit -a <image.img> /path/to/file

# Копирование файла с хоста в образ
virt-copy-in -a <image.img> <host_file> /guest/path

# Копирование файла из образа на хост
virt-copy-out -a <image.img> /guest/path <host_path>

# Архивация содержимого образа
virt-tar-out -a <image.img> /path /host/archive.tar

# Распаковка tar в образ
virt-tar-in -a <image.img> archive.tar /guest/path

# Показать файловые системы, разделы, LVM
virt-filesystems -a <image.img>

# Извлечение ядра и initrd из гостевой ОС
virt-get-kernel -a <image.img>

# Чтение логов системы внутри образа
virt-log -a <image.img>

# Анализ образа: ОС, пакеты, сервисы, настройки
virt-inspector -a <image.img>

# Использование файловых систем (аналог df)
virt-df -a <image.img>

# Создание готовых образов ОС (builder)
virt-builder <os-name>

# Управление репозиторием образов для builder
virt-builder-repository

# Модификация образов: пакеты, ключи, команды, файлы
virt-customize -a <image.img> --install vim --ssh-inject root:file:id_rsa.pub

# Очистка образа перед дистрибуцией (sysprep)
virt-sysprep -a <image.img>

# Уменьшение qcow2, удаление нулевых блоков
virt-sparsify <in.qcow2> <out.qcow2>

# Изменение размера разделов/ФС
virt-resize --expand /dev/sda1 in.qcow2 out.qcow2
Нажмите, чтобы развернуть и увидеть больше

В следующей заметке мы рассмотрим процедуру импорта подготовленного диска в гипервизор Proxmox. Не пропустите👨‍💻.

Авторские права

Автор: Иван Чёрный

Ссылка: https://r4ven.me/virtualization/podgotovka-obraza-virtualnoy-mashiny-qcow2-na-primere-debian/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша