如何使用systemd-firstboot.service?


11

我正在制作Debian Jessie的图片。引导时,系统没有/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

应该放置在什么地方才能运行?

在系统215中,ConditionFirstBoot不可用。怎么处理呢?

Answers:


1

令您感到惊讶的是,您没有通过简单地安装systemd而安装该脚本,但是(通常)我认为答案是您应该将其放入/etc/systemd/system

在这种情况下(由于您正在做所有这些尝试以获取计算机ID,以便进行日记处理),我想我可能会用对您关心的文件的检查替换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)。


只需注意一下,便可以两次验证提议的解决方案是否有效。几年前,当我开始对系统控制的操作系统(基于Debian 10,IIRC,当时他仍为Sid)进行成像时,我的第一个冲动就是在成像之前删除/ etc / machine-id以及其他个性擦除任务。效果非常显着:系统断然拒绝引导并进入恢复模式(如果要部署云虚拟机,则是砖块)。该修复程序已被截断,但保留了文件(: > /etc/machine-id)。也许这不再是真的,但从那以后我就学会了以极大的敬意和敬畏态度对待这个文件。
公里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.