Thank you for reading this post, don't forget to subscribe!
Прежде чем импортировать контейнер в Libvirt, его нужно создать средствами LXC.
Можно также использовать уже существующий контейнер LXC. В таком случае вы можете перейти к шагу "Импорт контейнера в Libvirt".
Контейнеры LXC расположены в папке /var/lib/lxc.
Скачать контейнер Ubuntu 18.04 можно командой:
1 |
lxc-create -t download -n test-ubuntu -- --dist ubuntu --release bionic --arch amd64 |
Centos 7 командой:
1 |
lxc-create -t download -n test-centos -- --dist centos --release 7 --arch amd64 |
Импорт контейнера в Libvirt
Конфигурация LXC Контейнера хранится в файле config в папке самого контейнера. Чтобы импортировать, нужно сначала сконвертировать конфиг в формат libvirt. Делается это следующей командой:
1 2 |
cd /var/lib/lxc/<название контейнера> lxc domxml-from-native lxc-tools config > config-libvirt.xml |
Если выдает ошибку, создайте файл вручную. Если ошибки нет, то отредактируйте его командой nano config-libvirt.xml
Содержимое файла xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<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.
Импортируйте конфигурацию:
1 |
lxc define config-libvirt.xml |
Выполните команду, показать список всех lxc контейнеров. Ваш контейнер должен быть в списке.
1 |
lxc list --all |
Запустите тестовый контейнер:
1 |
lxc start test-ubuntu |
Проверьте сеть:
1 |
ping 172.30.0.10 |
Включения автозапуска контейнера
Включить автозапуск:
1 |
lxc autostart test-ubuntu |
Выключить автозапуск:
1 |
lxc autostart --disable test-ubuntu |
Подключение к контейнеру через консоль
По умолчанию в контейнере не будет установлен root пароль. Поэтому, его нужно установить принудительно. Для этого отредактируйте файл shadow командой
1 |
nano /var/lib/lxc/test-ubuntu/rootfs/etc/shadow |
Для root можно прописать строчку:
1 |
root:$6$jOJaaad3$213aac5XXw7XMVrtI8dPuwyJazAeMOoaq5QOvo.uf/7V70lA3PIsV7WAiM3d1SWPyDkPiVTvizRHta1P7ZyKs/:17541:0:99999:7::: |
Это хэш пароля qwerty!2
Подключитесь к гостевой консоли, используя команду
1 |
lxc console test-ubuntu |
Введите логин root и пароль qwerty!2.
Чтобы отключиться от терминала нужно нажать клавиши Ctrl+5
Установка SSH
Установите ваш публичный сертификат в контейнер:
1 2 3 4 5 |
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 |
Подключитесь к контейнеру через консоль командой:
1 |
lxc console test-ubuntu |
Установите SSH сервер.
Для Ubuntu:
1 |
apt install openssh-server -y |
Для Centos:
1 2 |
yum install openssh-server -y systemctl enable sshd |
Завершите текущий сеанс в контейнере:
1 |
logout |
Отключитесь от терминала нажав клавиши Ctrl+5
Теперь вы можете подключиться к контейнеру через SSH:
1 |
ssh root@172.30.0.10 |
Сбросьте root пароль контейнера
Отредактируйте файл shadow командой
1 |
nano /var/lib/lxc/test-ubuntu/rootfs/etc/shadow |
Для root пропишите строчку:
1 |
root:!:17541:0:99999:7::: |
Остановка контейнера
Чтобы остановить контейнер, нужно выполнить комманду:
1 |
lxc destroy test-ubuntu |
Если возникает ошибка permission denied при остановке контейнера, то нужно настроить apparmor.