с пачкой сервисов так:
...
ENTRYPOINT ["/usr/lib/systemd/systemd"]
Дальше от юзера ожидается, что он обязательно должен поднимать контейнер с обязательным дефайном переменной:
podman run -e FOO=123
Как перед запуском systemd проверить, что переменная заефайнена и, если да — нормально запускать systemd, словно бы он pid1, а если переменная не указана — написать сообщение и убить вообще всё тут же не доходя до запуска юнитов?
Инит скрипт
Как мне потом из него запустить systemd? Или предлагается переписать сервисы на башпортянки?
Из инит скрипта и запустить
systemd не зпускается, если он не pid1. Если бы он запускался, этого вопроса вообще не блыо бы
Как-то так: #!/bin/sh if [ -z "${FOO}" ]; then exit 1 fi exec /usr/lib/systemd/systemd Но я бы возможно порекомендовал обойтись без systemd. Это не docker-way.
Внутри контейнеров можно взять более легкий supervisord а вообще у вас контейнер по сути демон под контролем рантайма. Вы себе какой-то гемор придумали на ровном месте и страдаете
Я, конечно же, попробовал это, но оно так не работает, systemd при запуске из враппера падает с чем-то вроде Failed to mount tmpfs at /run: Operation not permitted [!!!!!!] Failed to mount API filesystems. Exiting PID 1...
Но проблему запуска с pid 1 exec решает. )
@satirsky, @solard, по поводу того, чтобы выкинуть systemd вообще — я думал, тем более, под ним в конечном итоге вообще запускается графическое приложение. Но ему для нормальной работы нужно, чтобы работало несколько сервисов в фоне, юниты к которым достаточно сложные и написаны не мной — я не уверен, что вообще смогу правильно отвязать от systemd, и не хочу перепроверять их корректность после каждого обновления базового образа
Обсуждают сегодня