Контейнеры systemd-nspawn: различия между версиями
Дым (обсуждение | вклад) |
Дым (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
=Установка= | =Установка= | ||
Первым делом не обойтись без установки пакета означенной в заголовке системы виртуализации: | Первым делом не обойтись без установки пакета означенной в заголовке системы виртуализации: | ||
<source lang="bash"># apt-get update && apt-get install systemd-container -y</source> | |||
Вторым — понадобится минимальный образ системы, годный для виртуальных сред контейнерного типа ([[LXC]], [[Docker]] и т.п.), взять который можно в репозитории. На момент написания статьи привлекательнее прочих выглядел [http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/alt-p9-rootfs-systemd-x86_64.tar.xz этот]. | Вторым — понадобится минимальный образ системы, годный для виртуальных сред контейнерного типа ([[LXC]], [[Docker]] и т.п.), взять который можно в репозитории. На момент написания статьи привлекательнее прочих выглядел [http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/alt-p9-rootfs-systemd-x86_64.tar.xz этот]. | ||
Развернуть предварительно скачанный тарбол в контейнер (допустим, первый из них будет называться <strong>spawn-1</strong>): | Развернуть предварительно скачанный тарбол в контейнер (допустим, первый из них будет называться <strong>spawn-1</strong>): | ||
<source lang="bash"> | |||
# machinectl import-tar alt-p9-rootfs-systemd-x86_64.tar.xz spawn-1 | |||
Enqueued transfer job 1. Press C-c to continue download in background. | |||
Importing '/var/lib/machines/alt-p9-rootfs-systemd-x86_64.tar.xz', saving as 'spawn-1'. | |||
Imported 0%. | |||
... | |||
Imported 99%. | |||
Operation completed successfully. | |||
Exiting. | |||
</source> | |||
А можно не скачивая развернуть сразу из интернета: | А можно не скачивая развернуть сразу из интернета: | ||
<source lang="bash"> | |||
# machinectl pull-tar http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/alt-p9-rootfs-systemd-x86_64.tar.xz spawn-1 --verify=no | # machinectl pull-tar http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/alt-p9-rootfs-systemd-x86_64.tar.xz spawn-1 --verify=no | ||
Строка 30: | Строка 33: | ||
Operation completed successfully. | Operation completed successfully. | ||
Exiting. | Exiting. | ||
</source> | |||
=Запуск= | =Запуск= | ||
{{Совет|Если требуется задать контейнеру какие-то дополнительные параметры, имеет смысл создать файлик <code>/etc/systemd/nspawn/<name>.nspawn</code> и добавлять их туда (подробнее см. в <strong>man systemd.nspawn</strong>).}} | {{Совет|Если требуется задать контейнеру какие-то дополнительные параметры, имеет смысл создать файлик <code>/etc/systemd/nspawn/<name>.nspawn</code> и добавлять их туда (подробнее см. в <strong>man systemd.nspawn</strong>).}} |
Версия от 02:42, 17 января 2021
Установка
Первым делом не обойтись без установки пакета означенной в заголовке системы виртуализации:
# apt-get update && apt-get install systemd-container -y
Вторым — понадобится минимальный образ системы, годный для виртуальных сред контейнерного типа (LXC, Docker и т.п.), взять который можно в репозитории. На момент написания статьи привлекательнее прочих выглядел этот.
Развернуть предварительно скачанный тарбол в контейнер (допустим, первый из них будет называться spawn-1):
# machinectl import-tar alt-p9-rootfs-systemd-x86_64.tar.xz spawn-1
Enqueued transfer job 1. Press C-c to continue download in background.
Importing '/var/lib/machines/alt-p9-rootfs-systemd-x86_64.tar.xz', saving as 'spawn-1'.
Imported 0%.
...
Imported 99%.
Operation completed successfully.
Exiting.
А можно не скачивая развернуть сразу из интернета:
# machinectl pull-tar http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/alt-p9-rootfs-systemd-x86_64.tar.xz spawn-1 --verify=no
Enqueued transfer job 1. Press C-c to continue download in background.
Pulling 'http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/alt-p9-rootfs-systemd-x86_64.tar.xz', saving as 'spawn-1'.
Downloading 169B for http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/alt-p9-rootfs-systemd-x86_64.nspawn.
HTTP request to http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/alt-p9-rootfs-systemd-x86_64.nspawn failed with code 404.
Settings file could not be retrieved, proceeding without.
Downloading 43.9M for http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/alt-p9-rootfs-systemd-x86_64.tar.xz.
Got 1% of http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/alt-p9-rootfs-systemd-x86_64.tar.xz.
...
Got 88% of http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/alt-p9-rootfs-systemd-x86_64.tar.xz. 604ms left at 8.4M/s.
Download of http://ftp.altlinux.ru/pub/distributions/ALTLinux/p9/images/cloud/alt-p9-rootfs-systemd-x86_64.tar.xz complete.
Created new local image 'spawn-1'.
Operation completed successfully.
Exiting.
Запуск
Например, для контейнера под сборочницу Hasher — содержимое /etc/systemd/nspawn/spawn-1.nspawn:
[Exec]
Capability = CAP_SYS_ADMIN
[Network]
VirtualEthernet = on
Стартанём новый контейнер, одновременно включив его запуск при каждой загрузке компьютера:
# systemctl enable --now systemd-nspawn@spawn-1 Created symlink /etc/systemd/system/machines.target.wants/systemd-nspawn@spawn-1.service → /lib/systemd/system/systemd-nspawn@.service.
Проверим, всё ли удалось:
[root@comp ~]# systemctl status systemd-nspawn@spawn-1 ● systemd-nspawn@spawn-1.service - Container spawn-1 Loaded: loaded (/lib/systemd/system/systemd-nspawn@.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2020-10-01 21:38:31 +08; 8s ago Docs: man:systemd-nspawn(1) ...
Работает. Заходим локально:
# machinectl shell spawn-1 Connected to machine spawn-1. Press ^] three times within 1s to exit session. [root@spawn-1 ~]#
Сеть
Построим с хоста мостик ve-<имя контейнера> в файле /etc/systemd/network/ve-spawn-1.network
(адрес и сеть выбирать на своё усмотрение, лишь бы не пересекалась с уже имеющимися в системе):
[Match]
Name = ve-spawn-1
[Network]
DHCPServer = yes
Address = 192.168.222.254/24
IPMasquerade = yes
А со стороны контейнера примем его на интерфейс host0 файликом /etc/systemd/network/host0.network
:
[Match]
Name = host0
[Network]
DHCP = ipv4
Перезапустив systemd-networkd прежде на хосте, а после в контейнере, увидим на хосте:
# networkctl IDX LINK TYPE OPERATIONAL SETUP 1 lo loopback carrier unmanaged 2 lan ether routable configured 3 ve-spawn-1 ether routable configured 3 links listed. # ip -o a s ve-spawn-1 | awk '!/inet6/{print $2,$4}' ve-spawn-1 192.168.222.254/24
А в контейнере:
[root@spawn-1 ~]# networkctl IDX LINK TYPE OPERATIONAL SETUP 1 lo loopback carrier unmanaged 2 host0 ether routable configured 2 links listed. [root@spawn-1 ~]# ip -o a s host0 | awk '!/inet6/{print $2,$4}' host0 192.168.222.146/24
Стрельба по неприятностям (траблшутинг)
- Из решений: настроить политики Polkit — machinectl without root permissions