Как использовать systemd-firstboot.service?

11

Я делаю образ Джесси Debian. При загрузке система не имеет /etc/machine-idфайла. Это вызывает некоторые проблемы с журналом, который не запускается.

Я нашел это в репозитории systemd:

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=First Boot Wizard
Documentation=man:systemd-firstboot(1)
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-remount-fs.service
Before=systemd-sysusers.service sysinit.target shutdown.target
ConditionPathIsReadWrite=/etc
ConditionFirstBoot=yes

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=@rootbindir@/systemd-firstboot --prompt-locale --prompt-timezone --prompt-root-password
StandardOutput=tty
StandardInput=tty
StandardError=tty

Где он должен быть размещен, чтобы он бежал?

В systemd 215 ConditionFirstBoot недоступен. Как с этим бороться?

Velkan
источник

Ответы:

1

Я немного удивлен, что у вас не было этого скрипта вместо простой установки systemd, но (в общем) я думаю, что ответ заключается в том, что вы должны его вставить /etc/systemd/system.

В этой ситуации (так как вы делаете все это , чтобы попытаться получить машинно-идентификатор для того, чтобы сделать journald работы), я предполагаю , что я мог бы заменить ConditionFirstBoot с чеком для файла , который вы заботитесь о, /etc/machine-id.

Так что я бы, вероятно, переписал раздел Unit следующим образом:

[Unit]
Description=First Boot Wizard
Documentation=man:systemd-firstboot(1)
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-remount-fs.service
Before=systemd-sysusers.service sysinit.target shutdown.target
ConditionPathIsReadWrite=/etc
ConditionPathExists=!/etc/machine-id

Тем не менее, если бы можно было поставить более позднюю версию systemd с вашим образом (я не очень хорош в Debian, поэтому я не мог найти нигде, чтобы проверить, какая была последняя поддерживаемая версия), это может стоить изучить - systemd 215 имеет несколько проблем, которые с тех пор были исправлены ( https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=systemd ).

iwaseatenbyagrue
источник
Просто обратите внимание, чтобы дважды убедиться, что предлагаемое решение будет работать. Когда я пару лет назад начал создавать образы ОС, управляемой системой (на основе Debian 10, IIRC, когда он все еще был Сидом), моим первым побуждением было удаление / etc / machine-id прямо перед созданием образа среди других задач удаления личности. Эффект был довольно драматичным: система категорически отказалась загружаться и перешла в режим восстановления (кирпич, если вы развертываете облачную виртуальную машину). Исправление было усечено, но сохранить файл ( : > /etc/machine-id). Может быть, это даже не правда, но я научился обращаться с этим файлом с большим уважением и трепетом с тех пор.
км