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