|
|
Строка 15: |
Строка 15: |
| Operation completed successfully. | | Operation completed successfully. |
| Exiting. | | Exiting. |
|
| |
| =Настройка=
| |
| Как контейнеры запускаются, можно подглядеть в пункте <code>ExecStart</code> сервисного шаблона <strong>/lib/systemd/system/systemd-nspawn@.service</strong>, а именно:
| |
| # systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-veth -U --settings=override --machine=%i
| |
| С сокращёнными опциями, не загораживая горизонты, та же команда выглядит так:
| |
| # systemd-nspawn -q --keep-unit -b -j -n -U --settings=override -M spawn-1
| |
| Дабы впоследствии не мучиться со входом в контейнер с отлупом по паролю, следует задать таковой пользователю <strong>root</strong>, для чего первый вход произвести в незапущенный контейнер без лишних на данном этапе опций:
| |
| # systemd-nspawn -M spawn-1
| |
| Получив приглашение <code>[root@spawn-1 ~]# </code>, задать пароль и выйти:
| |
| [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
| |
|
| |
| =Запуск= | | =Запуск= |
| Стартанём новый контейнер, одновременно включив его запуск при каждой загрузке компьютера: | | Стартанём новый контейнер, одновременно включив его запуск при каждой загрузке компьютера: |
Строка 44: |
Строка 26: |
| Docs: man:systemd-nspawn(1) | | Docs: man:systemd-nspawn(1) |
| ... | | ... |
| Работает. Заходим уже штатным образом: | | Работает. Заходим локально: |
| # machinectl login spawn-1 | | # machinectl shell spawn-1 |
| | | Connected to machine spawn-1. Press ^] three times within 1s to exit session. |
| =Первый облом=
| |
| Если входить в контейнер при остановленном юните из командной строки, получаем:
| |
| # systemd-nspawn -q -b -j -n -U --settings=override -M spawn-1 | |
| systemd v243.8-alt2 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid)
| |
| Detected virtualization systemd-nspawn.
| |
| Detected architecture x86-64.
| |
|
| |
| Welcome to ALT Starterkit (Hypericum)!
| |
| ...
| |
| spawn-1 login: root
| |
| Password:
| |
| Last login: Thu Aug 27 11:55:00 +08 2020 on pts/0
| |
| [root@spawn-1 ~]# | | [root@spawn-1 ~]# |
| Однако пробовать штатным образом залезть в запущенный юнит бесполезно:
| | =Настройка= |
| # machinectl login spawn-1
| |
| Connected to machine spawn-1. Press ^] three times within 1s to exit session.
| |
|
| |
| spawn-1 login: root
| |
| Password:
| |
| Login incorrect
| |
|
| |
| login:
| |
| При этом видно, что строка запуска та же самая, с добавкой опции <code>--keep-unit</code>:
| |
| # systemctl status systemd-nspawn@spawn-1 | grep /usr/bin/systemd-nspawn
| |
| └─238367 /usr/bin/systemd-nspawn -q --keep-unit -b -j -U --settings=override -M spawn-1
| |
| =Варианты= | |
| А всё потому, что, как явствует из мана systemd-nspawn, некоторые операции в образах контейнеров осмысленны, эффективны, да и вообще поддерживаются лишь на файловой системе btrfs.
| |
| | |
| С контейнером же в простом каталоге порядок действий изложен ниже.
| |
| # Вновь создаваемый контейнер:
| |
| #* разворачиваем,
| |
| #* входим без запуска,
| |
| #* меняем пароль рута,
| |
| #* перезаходим с запуском,
| |
| #* настраиваем сеть,
| |
| #* доустанавливаем требуемые пакеты,
| |
| #* обеспечиваем автозапуск нужных сервисов,
| |
| #* выходим.
| |
| # Для постоянной работы этого контейнера:
| |
| #* стартуем его юнит,
| |
| #* рулим им по ссх.
| |
| # В случае аварии или надобности обслуживания:
| |
| #* стопорим юнит,
| |
| #* входим с запуском,
| |
| #* решаем проблемы,
| |
| #* выходим,
| |
| #* далее см. п.2.
| |
| {{Category navigation|title=Виртуализация|category=Виртуализация|sortkey={{SUBPAGENAME}}}} | | {{Category navigation|title=Виртуализация|category=Виртуализация|sortkey={{SUBPAGENAME}}}} |
| [[category:systemd]] | | [[category:systemd]] |
Внимание: Статья не окончена! Пока не удалось добиться входа в контейнеры штатным способом — только ручным запуском длинной команды с кучей опций.
Установка
Первым делом не обойтись без установки пакета означенной в заголовке системы виртуализации:
# 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 ~]#
Настройка