Контейнеры systemd-nspawn: различия между версиями

Материал из ALT Linux Wiki
Строка 50: Строка 50:
DHCP = ipv4
DHCP = ipv4
</source>
</source>
Перезапустив 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


{{Category navigation|title=Виртуализация|category=Виртуализация|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Виртуализация|category=Виртуализация|sortkey={{SUBPAGENAME}}}}
[[category:systemd]]
[[category:systemd]]

Версия от 09:56, 2 октября 2020

Внимание: Статья не окончена.

Установка

Первым делом не обойтись без установки пакета означенной в заголовке системы виртуализации:

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

Запуск

Стартанём новый контейнер, одновременно включив его запуск при каждой загрузке компьютера:

# 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 ~]#

Настройка

Сеть

Примечание: Не пробовал делать дальнейшее посредством etcnet, поскольку давно использую systemd-networkd, одинаково настраиваемый во всех современных дистрибутивах и интегрирующий массу инструментария, каковой в других случаях требуется установить.

Построим с хоста мостик до контейнера, обозвав его ve-<имя контейнера>, в файле /etc/systemd/network/ve-spawn-1.network:

[Match]
Name = ve-spawn-1

[Network]
DHCPServer = yes
Address = 192.168.222.254/24

А со стороны контейнера примем его файликом /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