https://github.com/inview-club/devops-cases/tree/main/09-create-base-image
+-------------------------+
| Windows 11/10 |
| (хостовая система) |
+-----------+------------+
|
| Orаcle VirtualBox
v
+-------------------------+
| Debian |
| (гостевая VM) |
+-----------+-------------+
|
| QEMU/KVM + libvirt + virtiofs
v
+-------------------------+
| Astra Linux SE |
| (гостевая VM внутри |
| Debian) |
+-------------------------+
|
| debootstrap → rootfs.tar → docker import
v
+-------------------------+
| Docker-образ Astra |
+-------------------------+
После того как debian гостевая работает, настроены общие папки преступим к основной части работы.
- Установим все необходимые пакеты:
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system virt-manager virtinst- Для создания виртуальной машины я написал скрипт:
#!/usr/bin/env bash
set -euo pipefail
VM_NAME="astra-no-kvm"
RAM_MB=2048
CPU=2
DISK_PATH="/var/lib/libvirt/images/${VM_NAME}.qcow2"
DISK_SIZE="20"
ISO_PATH="/mnt/share/astra.iso"
SHARE_PATH="/srv/vmshare"
SHARE_TAG="hostshare"
OS_VARIANT="generic"
sudo mkdir -p /var/lib/libvirt/images
sudo mkdir -p "$SHARE_PATH"
sudo chmod 777 "$SHARE_PATH"
sudo qemu-img create -f qcow2 "$DISK_PATH" "${DISK_SIZE}G"
sudo virt-install \
--connect qemu:///system \
--name "$VM_NAME" \
--memory "$RAM_MB" \
--vcpus "$CPU" \
--disk path="$DISK_PATH",format=qcow2,bus=virtio \
--cdrom "$ISO_PATH" \
--network network=default,model=virtio \
--graphics vnc \
--os-variant "$OS_VARIANT" \
--virt-type qemu \
--boot cdrom,hd \
--filesystem "${SHARE_PATH},${SHARE_TAG},driver.type=virtiofs" \
--memorybacking source.type=memfd,access.mode=shared
Таким образом мы поднимаем виртуальную машину Astra linux 1.7.8

- Настройка общих папок:
sudo mkdir -p /mnt/hostshare
sudo mount -t virtiofs hostshare /mnt/hostshare- Установим необходимые утилиты: внутри Astra
sudo apt update
sudo apt install -y debootstrap- Создадим папку для работы и используем debootstap с репозиториями Astra linux
sudo mkdir /srv/rootfs
sudo debootstrap \
--arch=amd64 \
--variant=minbase \
--components=main,contrib,non-free \
1.7_x86-64 \
/srv/rootfs \
https://dl.astralinux.ru/astra/stable/1.7_x86-64/repository-base/
На данный момент создана в /srv/rootfs корневая файловая система Astra и также скачены минимальные пакеты из репозитория.
==Примечание==: я использовал stable версию репозиториев поэтому образ получился с версией Astra linux 1.7.9.
- Смонтируем виртуальную файловую систему:
sudo mount --bind /dev /srv/rootfs/dev
sudo mount --bind /dev/pts /srv/rootfs/dev/pts
sudo mount -t proc proc /srv/rootfs/proc
sudo mount -t sysfs sys /srv/rootfs/sys- Войдем в chroot и скачаем необходимые пакеты
sudo chroot /srv/rootfs /bin/bash
apt update apt install -y nano locales ncurses-term
apt clean
- Теперь создадим tar файл, но перед этим размонтируем виртуальные файловые системы
sudo umount -l /srv/rootfs/dev/pts
sudo umount -l /srv/rootfs/dev
sudo umount -l /srv/rootfs/proc
sudo umount -l /srv/rootfs/sys
sudo tar -C /srv/rootfs -c . -f /mnt/hostshare/rootfs.tar- Создадим образ из tar файла и запустим контейнер
docker import ./rootfs.tar astra:latest
docker run --rm -it astra:latest /bin/bash
Сложности начались с самого начала)
- К сожалению windows очень жадный и не захотел никакими моими мольбами(командами) передавать управление гипервизором VirtualBoxб по этой причине пришлось запускать без kvm.
- Чтобы установить соединение с Astra по ssh нужно было настроить ssh вход по паролю. Также возникла необходимость изменить
/etc/pam.d/sshd, закомментировать:
pam_parsec_cap.so
pam_parsec_aud.so