Прежде чем импортировать контейнер в Libvirt, его нужно создать средствами LXC.

Можно также использовать уже существующий контейнер LXC. В таком случае вы можете перейти к шагу «Импорт контейнера в Libvirt».

Контейнеры LXC расположены в папке /var/lib/lxc .

Скачать контейнер Ubuntu 18.04 можно командой:

_x000D_lxc-create -t download -n test-ubuntu -- --dist ubuntu --release bionic --arch amd64

Centos 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 .

Далее

  1. Настройка сети и iptables