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

Материал из ALT Linux Wiki
Нет описания правки
Строка 5: Строка 5:
Ещё понадобится минимальный образ системы, годный для виртуальных сред контейнерного типа — 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>alt-1</strong>. Тогда распаковать этот образ надо в каталог <code>/var/lib/machines/alt-1/</code>, предварительно оный создав.
Допустим, первый контейнер будет называться <strong>spawn-1</strong>. Тогда распаковать этот образ надо в каталог <code>/var/lib/machines/spawn-1/</code>, предварительно оный создав.


Дабы впоследствии не мучиться со входом в контейнер с отлупом по паролю, следует задать таковой пользователю <strong>root</strong>, для чего первый вход произвести в незапущенный контейнер.
Дабы впоследствии не мучиться со входом в контейнер с отлупом по паролю, следует задать таковой пользователю <strong>root</strong>, для чего первый вход произвести в незапущенный контейнер.
Строка 12: Строка 12:
  # systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-veth -U --settings=override --machine=%i
  # systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-veth -U --settings=override --machine=%i
В нашем случае, поупрощённей, без загрузки и не нужной на этом этапе опции <code>--keep-unit</code>:
В нашем случае, поупрощённей, без загрузки и не нужной на этом этапе опции <code>--keep-unit</code>:
  # systemd-nspawn -q -j -n -U --settings=override -M alt-1
  # systemd-nspawn -q -j -n -U --settings=override -M spawn-1
Получив приглашение <code>[root@alt-1 ~]# </code>, задаём пароль и выходим:
Получив приглашение <code>[root@spawn-1 ~]# </code>, задаём пароль и выходим:
  [root@alt-1 ~]# passwd
  [root@spawn-1 ~]# passwd
  passwd: updating all authentication tokens for user root.
  passwd: updating all authentication tokens for user root.
  ...
  ...
  Enter new password:  
  Enter new password:
  Re-type new password:  
  Re-type new password:
  passwd: all authentication tokens updated successfully.
  passwd: all authentication tokens updated successfully.
  [root@alt-1 ~]# exit
  [root@spawn-1 ~]# exit
  logout
  logout
Запустим новый контейнер, одновременно включив его запуск при каждой загрузке компьютера:
Запустим новый контейнер, одновременно включив его запуск при каждой загрузке компьютера:
  # systemctl enable --now systemd-nspawn@alt-1
  # systemctl enable --now systemd-nspawn@spawn-1
  Created symlink /etc/systemd/system/machines.target.wants/systemd-nspawn@alt-1.service → /lib/systemd/system/systemd-nspawn@.service.
  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@alt-1
  [root@comp ~]# systemctl status systemd-nspawn@spawn-1
  ● systemd-nspawn@alt-1.service - Container alt-1
  ● systemd-nspawn@spawn-1.service - Container spawn-1
   Loaded: loaded (/lib/systemd/system/systemd-nspawn@.service; enabled; vendor preset: disabled)
   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
   Active: active (running) since Thu 2020-10-01 21:38:31 +08; 8s ago
Строка 33: Строка 33:
  ...
  ...
Работает. Заходим уже штатным образом:
Работает. Заходим уже штатным образом:
  # machinectl login alt-1
  # machinectl login spawn-1
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Виртуализация|category=Виртуализация|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Виртуализация|category=Виртуализация|sortkey={{SUBPAGENAME}}}}
[[category:systemd]]
[[category:systemd]]

Версия от 02:05, 2 октября 2020

Внимание: Статья не окончена: пока не удалось добиться входа в контейнеры штатным способом — только ручным запуском длинной команды с кучей опций.

Подготовка

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

# apt-get update && apt-get install systemd-container -y

Ещё понадобится минимальный образ системы, годный для виртуальных сред контейнерного типа — LXC или Docker. Взять можно в репозитории; на момент написания статьи привлекательнее прочих выглядел этот.

Настройка

Допустим, первый контейнер будет называться spawn-1. Тогда распаковать этот образ надо в каталог /var/lib/machines/spawn-1/, предварительно оный создав.

Дабы впоследствии не мучиться со входом в контейнер с отлупом по паролю, следует задать таковой пользователю root, для чего первый вход произвести в незапущенный контейнер.

Как контейнеры запускаются, можно подглядеть в пункте ExecStart сервисного шаблона /lib/systemd/system/systemd-nspawn@.service, а именно:

# systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-veth -U --settings=override --machine=%i

В нашем случае, поупрощённей, без загрузки и не нужной на этом этапе опции --keep-unit:

# systemd-nspawn -q -j -n -U --settings=override -M spawn-1

Получив приглашение [root@spawn-1 ~]# , задаём пароль и выходим:

[root@spawn-1 ~]# passwd
passwd: updating all authentication tokens for user root.
...
Enter new password:
Re-type new password:
passwd: all authentication tokens updated successfully.
[root@spawn-1 ~]# exit
logout

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

# 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 login spawn-1