Прежде чем импортировать контейнер в Libvirt, его нужно создать средствами LXC.
Можно также использовать уже существующий контейнер LXC. В таком случае вы можете перейти к шагу «Импорт контейнера в Libvirt».
Контейнеры LXC расположены в папке /var/lib/lxc .
Скачать контейнер Ubuntu 18.04 можно командой:
_x000D_lxc-create -t download -n test-ubuntu -- --dist ubuntu --release bionic --arch amd64Centos 7 командой:
_x000D_lxc-create -t download -n test-centos -- --dist centos --release 7 --arch amd64Создание файла libvirt-lxc
Создайте файл lxc, выполнив команду
_x000D_nano /usr/bin/libvirt-lxcВставьте следующий текст, в этот файл
_x000D_#!/bin/bash_x000D_virsh -c lxc:/// $@Установите права на выполнение данного файла командой
_x000D_chmod +x /usr/bin/libvirt-lxcИмпорт контейнера в Libvirt
Конфигурация LXC Контейнера хранится в файле config в папке самого контейнера. Чтобы импортировать, нужно сначала сконвертировать конфиг в формат libvirt. Делается это следующей командой:
_x000D_cd /var/lib/lxc/<название контейнера>_x000D_libvirt-lxc domxml-from-native lxc-tools config > config-libvirt.xmlЕсли выдает ошибку, создайте файл вручную. Если ошибки нет, то отредактируйте его командой nano config-libvirt.xml
Содержимое файла xml:
_x000D_<domain type='lxc'>_x000D_ <name>test-ubuntu</name>_x000D_ <memory unit='KiB'>65536</memory>_x000D_ <currentMemory unit='KiB'>65536</currentMemory>_x000D_ <vcpu placement='static'>1</vcpu>_x000D_ <os>_x000D_ <type arch='x86_64'>exe</type>_x000D_ <init>/sbin/init</init>_x000D_ </os>_x000D_ <idmap>_x000D_ <uid start='0' target='100000' count='65536'/>_x000D_ <gid start='0' target='100000' count='65536'/>_x000D_ </idmap>_x000D_ <features>_x000D_ <capabilities policy='allow'>_x000D_ </capabilities>_x000D_ </features>_x000D_ <clock offset='utc'/>_x000D_ <on_poweroff>destroy</on_poweroff>_x000D_ <on_reboot>restart</on_reboot>_x000D_ <on_crash>destroy</on_crash>_x000D_ <devices>_x000D_ <emulator>/usr/lib/libvirt/libvirt_lxc</emulator>_x000D_ <filesystem type='mount' accessmode='passthrough'>_x000D_ <source dir='/var/lib/lxc/test-ubuntu/rootfs'/>_x000D_ <target dir='/'/>_x000D_ </filesystem>_x000D_ <interface type='network'>_x000D_ <source network='default'/>_x000D_ <mac address='00:16:3e:5f:34:10'/>_x000D_ <ip address='172.30.0.10' family='ipv4' prefix='24'/>_x000D_ <route family='ipv4' address='0.0.0.0' gateway='172.30.0.1'/>_x000D_ <guest dev='eth0'/>_x000D_ <link state='up'/>_x000D_ </interface>_x000D_ <console type='pty' tty='/dev/pts/0'>_x000D_ <source path='/dev/pts/0'/>_x000D_ <target type='lxc' port='0'/>_x000D_ <alias name='console0'/>_x000D_ </console>_x000D_ </devices>_x000D_</domain>_x000D_Обратите внимание на секции memory, idmap, interface, console . Задайте в них корректные значения. Поменяйте mac адрес и пропишите статический IP адрес. Размер памяти можно узнать командой free.
Импортируйте конфигурацию:
_x000D_libvirt-lxc define config-libvirt.xmlВыполните команду, показать список всех lxc контейнеров. Ваш контейнер должен быть в списке.
_x000D_libvirt-lxc list --allЗапустите тестовый контейнер:
_x000D_libvirt-lxc start test-ubuntu Проверьте сеть:
_x000D_ping 172.30.0.10Включения автозапуска контейнера
Включить автозапуск:
_x000D_libvirt-lxc autostart test-ubuntuВыключить автозапуск:
_x000D_libvirt-lxc autostart --disable test-ubuntuПодключение к контейнеру через консоль
По умолчанию в контейнере не будет установлен root пароль. Поэтому, его нужно установить принудительно. Для этого отредактируйте файл shadow командой
_x000D_nano /var/lib/lxc/test-ubuntu/rootfs/etc/shadowДля root можно прописать строчку:
_x000D_root:$6$jOJaaad3$213aac5XXw7XMVrtI8dPuwyJazAeMOoaq5QOvo.uf/7V70lA3PIsV7WAiM3d1SWPyDkPiVTvizRHta1P7ZyKs/:17541:0:99999:7:::Это хэш пароля qwerty!2
Подключитесь к гостевой консоли, используя команду
_x000D_libvirt-lxc console test-ubuntuВведите логин root и пароль qwerty!2.
Чтобы отключиться от терминала нужно нажать клавиши Ctrl+5
Установка SSH
Установите ваш публичный сертификат в контейнер:
_x000D_mkdir -p /var/lib/lxc/test-ubuntu/rootfs/root/.ssh/_x000D_cat ~/.ssh/id_rsa.pub >> /var/lib/lxc/test-ubuntu/rootfs/root/.ssh/authorized_keys_x000D_chown -R lxc-root:lxc-root /var/lib/lxc/test-ubuntu/rootfs/root/.ssh_x000D_chmod 700 /var/lib/lxc/test-ubuntu/rootfs/root/.ssh_x000D_chmod 400 /var/lib/lxc/test-ubuntu/rootfs/root/.ssh/authorized_keysПодключитесь к контейнеру через консоль командой:
_x000D_libvirt-lxc console test-ubuntuУстановите SSH сервер.
Для Ubuntu:
_x000D_apt install openssh-server -yДля Centos:
_x000D_yum install openssh-server -y_x000D_systemctl enable sshdЗавершите текущий сеанс в контейнере:
_x000D_logoutОтключитесь от терминала нажав клавиши Ctrl+5
Теперь вы можете подключиться к контейнеру через SSH:
_x000D_ssh root@172.30.0.10Сбросьте root пароль контейнера
Отредактируйте файл shadow командой
_x000D_nano /var/lib/lxc/test-ubuntu/rootfs/etc/shadowДля root пропишите строчку:
_x000D_root:!:17541:0:99999:7:::Остановка контейнера
Чтобы остановить контейнер, нужно выполнить комманду:
_x000D_libvirt-lxc destroy test-ubuntuЕсли возникает ошибка permission denied при остановке контейнера, то нужно настроить apparmor .