Comment utiliser systemd-firstboot.service?

11

Je fais une image de Debian Jessie. Au démarrage, le système n'a pas de /etc/machine-idfichier. Cela provoque des problèmes avec le journal qui ne démarre pas.

J'ai trouvé cela dans le dépôt 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

Où il doit être placé pour qu'il fonctionne?

Dans systemd 215, ConditionFirstBoot n'est pas disponible. Comment y faire face?

Velkan
la source

Réponses:

1

Je suis un peu surpris que vous n'ayez pas mis ce script en place simplement en installant systemd, mais (en général) je pense que la réponse est que vous devriez le mettre dedans /etc/systemd/system.

Dans cette situation (puisque vous faites tout cela pour essayer d'obtenir une machine-id, afin de rendre le travail journald), je suppose que je pourrais remplacer le ConditionFirstBoot avec un chèque pour le fichier que vous aimez, /etc/machine-id.

Je réécrirais donc probablement la section Unit comme suit:

[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

Cela étant dit, s'il était possible de livrer un systemd plus récent avec votre image (je ne suis pas bon sur Debian, donc je n'ai trouvé aucun endroit pour vérifier quelle était la dernière version prise en charge), cela pourrait valoir la peine d'être examiné - systemd 215 a quelques problèmes qui ont depuis été corrigés ( https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=systemd ).

iwaseatenbyagrue
la source
Juste une note pour vérifier deux fois que la solution proposée fonctionnerait. Lorsque j'ai commencé à imaginer un système d'exploitation contrôlé par le système (basé sur Debian 10, IIRC, alors qu'il était encore Sid) il y a quelques années, ma première impulsion a été de supprimer le / etc / machine-id juste avant l'imagerie, entre autres tâches d'effacement de la personnalité. L'effet a été assez dramatique: le système a catégoriquement refusé de démarrer et est passé en mode de récupération (une brique si vous déployez un cloud vm). Le correctif a été tronqué mais conservez le fichier ( : > /etc/machine-id). Peut-être que ce n'est même plus vrai, mais j'ai appris à traiter ce dossier avec beaucoup de respect et d'admiration depuis.
kkm le