Контейнеры systemd-nspawn: различия между версиями
Дым (обсуждение | вклад) |
м (→Проблемы с ID mapped mounts: Оговорка по Фрейду) |
||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 2: | Строка 2: | ||
Первым делом не обойтись без поддержки означенной в заголовке системы контейнеризации: | Первым делом не обойтись без поддержки означенной в заголовке системы контейнеризации: | ||
<source lang="bash"># apt-get update && apt-get install systemd-container -y</source> | <source lang="bash"># apt-get update && apt-get install systemd-container -y</source> | ||
Вторым — понадобится минимальный образ системы, годный для виртуальных сред контейнерного типа ([[LXC]], [[Docker]] и т.п.), взять который можно в репозитории. На момент | Вторым — понадобится минимальный образ системы, годный для виртуальных сред контейнерного типа ([[LXC]], [[Docker]] и т.п.), взять который можно в репозитории. На момент последней редакции статьи привлекательнее прочих выглядел [http://ftp.altlinux.ru/pub/distributions/ALTLinux/p10/images/cloud/alt-p10-rootfs-systemd-x86_64.tar.xz этот]. | ||
Контейнер (допустим, первый из них будет называться <strong>spawn-1</strong>) можно развернуть: | Контейнер (допустим, первый из них будет называться <strong>spawn-1</strong>) можно развернуть: | ||
Строка 9: | Строка 9: | ||
|- | |- | ||
|<source lang="bash"> | |<source lang="bash"> | ||
# machinectl pull-tar http://ftp.altlinux.ru/pub/distributions/ALTLinux/ | # machinectl pull-tar http://ftp.altlinux.ru/pub/distributions/ALTLinux/p10/images/cloud/alt-p10-rootfs-systemd-x86_64.tar.xz spawn-1 --verify=no | ||
Enqueued transfer job 1. Press C-c to continue download in background. | Enqueued transfer job 1. Press C-c to continue download in background. | ||
Pulling 'http://ftp.altlinux.ru/pub/distributions/ALTLinux/ | Pulling 'http://ftp.altlinux.ru/pub/distributions/ALTLinux/p10/images/cloud/alt-p10-rootfs-systemd-x86_64.tar.xz', saving as 'spawn-1'. | ||
Downloading 169B for http://ftp.altlinux.ru/pub/distributions/ALTLinux/ | Downloading 169B for http://ftp.altlinux.ru/pub/distributions/ALTLinux/p10/images/cloud/alt-p10-rootfs-systemd-x86_64.nspawn. | ||
HTTP request to http://ftp.altlinux.ru/pub/distributions/ALTLinux/ | HTTP request to http://ftp.altlinux.ru/pub/distributions/ALTLinux/p10/images/cloud/alt-p10-rootfs-systemd-x86_64.nspawn failed with code 404. | ||
Settings file could not be retrieved, proceeding without. | Settings file could not be retrieved, proceeding without. | ||
Downloading | Downloading 60.9M for http://ftp.altlinux.ru/pub/distributions/ALTLinux/p10/images/cloud/alt-p9-rootfs-systemd-x86_64.tar.xz. | ||
Got 1% of http://ftp.altlinux.ru/pub/distributions/ALTLinux/ | Got 1% of http://ftp.altlinux.ru/pub/distributions/ALTLinux/p10/images/cloud/alt-p10-rootfs-systemd-x86_64.tar.xz. | ||
... | ... | ||
Got 88% of http://ftp.altlinux.ru/pub/distributions/ALTLinux/ | Got 88% of http://ftp.altlinux.ru/pub/distributions/ALTLinux/p10/images/cloud/alt-p10-rootfs-systemd-x86_64.tar.xz. 604ms left at 8.4M/s. | ||
Download of http://ftp.altlinux.ru/pub/distributions/ALTLinux/ | Download of http://ftp.altlinux.ru/pub/distributions/ALTLinux/p10/images/cloud/alt-p10-rootfs-systemd-x86_64.tar.xz complete. | ||
Created new local image 'spawn-1'. | Created new local image 'spawn-1'. | ||
Operation completed successfully. | Operation completed successfully. | ||
Строка 31: | Строка 31: | ||
|- | |- | ||
|<source lang="bash"> | |<source lang="bash"> | ||
# machinectl import-tar alt- | # machinectl import-tar alt-p10-rootfs-systemd-x86_64.tar.xz spawn-1 | ||
Enqueued transfer job 1. Press C-c to continue download in background. | Enqueued transfer job 1. Press C-c to continue download in background. | ||
Строка 81: | Строка 81: | ||
=Сеть= | =Сеть= | ||
{{Примечание|Не пробовал делать дальнейшее посредством <code>etcnet</code>, поскольку давно использую <code>systemd-networkd</code>, одинаково настраиваемый во всех современных дистрибутивах и интегрирующий массу инструментария, каковой в других случаях требуется установить.}} | {{Примечание|Не пробовал делать дальнейшее посредством <code>etcnet</code>, поскольку давно использую <code>systemd-networkd</code>, одинаково настраиваемый во всех современных дистрибутивах и интегрирующий массу инструментария, каковой в других случаях требуется установить.}} | ||
Построим с хоста мостик <strong>ve-<имя контейнера></strong> (адрес и сеть выбирать на своё усмотрение, лишь бы не | Построим с хоста мостик <strong>ve-<имя контейнера></strong> (адрес и сеть выбирать на своё усмотрение, лишь бы не пересекалось с уже имеющимися в системе): | ||
{|class="mw-collapsible mw-collapsed wikitable" | {|class="mw-collapsible mw-collapsed wikitable" | ||
!/etc/systemd/network/ve-spawn-1.network | !/etc/systemd/network/ve-spawn-1.network | ||
Строка 144: | Строка 144: | ||
=Стрельба по неприятностям (траблшутинг)= | =Стрельба по неприятностям (траблшутинг)= | ||
* Из решений: настроить политики Polkit — [https://wiki.archlinux.org/index.php/Systemd-nspawn#Using_machinectl_without_root_permissions|Using machinectl without root permissions] | * Из решений: настроить политики Polkit — [https://wiki.archlinux.org/index.php/Systemd-nspawn#Using_machinectl_without_root_permissions|Using machinectl without root permissions] | ||
== Проблемы с ID mapped mounts == | |||
На альтовских ядрах можно наткнуться на ошибку при старте контейнеров. При этом в логах контейнера будет что-то типа: | |||
systemd-nspawn[3651]: Failed to set up ID mapped mounts: Operation not permitted | |||
А в dmesg: | |||
VFS: idmapped mount is not enabled. | |||
Это симптомы заботы мейнтейнеров ядра о вашей безопасности, за подробностями [[idmap_mounts|вам сюда]]. | |||
=Обратная связь= | =Обратная связь= | ||
*[https://t.me/gbIMoBou @gbIMoBou] | *[https://t.me/gbIMoBou @gbIMoBou] |
Текущая версия от 23:10, 6 февраля 2024
Установка
Первым делом не обойтись без поддержки означенной в заголовке системы контейнеризации:
# apt-get update && apt-get install systemd-container -y
Вторым — понадобится минимальный образ системы, годный для виртуальных сред контейнерного типа (LXC, Docker и т.п.), взять который можно в репозитории. На момент последней редакции статьи привлекательнее прочих выглядел этот.
Контейнер (допустим, первый из них будет называться spawn-1) можно развернуть:
развернутьпрямо из интернета |
---|
либо
развернутьиз скачанного тарбола. |
---|
Запуск
Например, для контейнера под сборочницу Hasher:
развернуть/etc/systemd/nspawn/spawn-1.nspawn |
---|
Стартанём новый контейнер, одновременно включив его запуск при каждой загрузке компьютера:
# 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.
Проверим, всё ли удалось:
# 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 |
---|
А со стороны контейнера примем его на интерфейс host0:
развернуть/etc/systemd/network/host0.network |
---|
Перезапустив systemd-networkd прежде на хосте, а после в контейнере, увидим:
развернутьНа хосте |
---|
развернутьВ контейнере |
---|
Стрельба по неприятностям (траблшутинг)
- Из решений: настроить политики Polkit — machinectl without root permissions
Проблемы с ID mapped mounts
На альтовских ядрах можно наткнуться на ошибку при старте контейнеров. При этом в логах контейнера будет что-то типа:
systemd-nspawn[3651]: Failed to set up ID mapped mounts: Operation not permitted
А в dmesg:
VFS: idmapped mount is not enabled.
Это симптомы заботы мейнтейнеров ядра о вашей безопасности, за подробностями вам сюда.