diff options
author | Jamey Sharp <jamey@minilop.net> | 2018-09-29 11:35:00 -0700 |
---|---|---|
committer | Jamey Sharp <jamey@minilop.net> | 2018-09-30 10:45:35 -0700 |
commit | 8d40083690c2d20d20c32d7d90b9fd7b7f559042 (patch) | |
tree | ec7c212d074a9d26298110cabcfb9969e49bbf53 /nixos/modules/system/boot/stage-2-init.sh | |
parent | f449242e83bd441300f009321157dd308326cfcc (diff) | |
download | nixpkgs-8d40083690c2d20d20c32d7d90b9fd7b7f559042.tar nixpkgs-8d40083690c2d20d20c32d7d90b9fd7b7f559042.tar.gz nixpkgs-8d40083690c2d20d20c32d7d90b9fd7b7f559042.tar.bz2 nixpkgs-8d40083690c2d20d20c32d7d90b9fd7b7f559042.tar.lz nixpkgs-8d40083690c2d20d20c32d7d90b9fd7b7f559042.tar.xz nixpkgs-8d40083690c2d20d20c32d7d90b9fd7b7f559042.tar.zst nixpkgs-8d40083690c2d20d20c32d7d90b9fd7b7f559042.zip |
nixos/stage-2: create empty machine-id at boot
Previously, the activation script was responsible for ensuring that /etc/machine-id exists. However, the only time it could not already exist is during stage-2-init, not while switching configurations, because one of the first things systemd does when starting up as PID 1 is to create this file. So I've moved the initialization to stage-2-init. Furthermore, since systemd will do the equivalent of systemd-machine-id-setup if /etc/machine-id doesn't have valid contents, we don't need to do that ourselves. We _do_, however, want to ensure that the file at least exists, because systemd also uses the non-existence of this file to guess that this is a first-boot situation. In that case, systemd tries to create some symlinks in /etc/systemd/system according to its presets, which it can't do because we've already populated /etc according to the current NixOS configuration. This is not necessary for any other activation script snippets, so it's okay to do it after stage-2-init runs the activation script. None of them declare a dependency on the "systemd" snippet. Also, most of them only create files or directories in ways that obviously don't need the machine-id set.
Diffstat (limited to 'nixos/modules/system/boot/stage-2-init.sh')
-rw-r--r-- | nixos/modules/system/boot/stage-2-init.sh | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/nixos/modules/system/boot/stage-2-init.sh b/nixos/modules/system/boot/stage-2-init.sh index 49764b75a55..03daafa1ce4 100644 --- a/nixos/modules/system/boot/stage-2-init.sh +++ b/nixos/modules/system/boot/stage-2-init.sh @@ -152,6 +152,14 @@ ln -sfn /run/booted-system /nix/var/nix/gcroots/booted-system @shell@ @postBootCommands@ +# Ensure systemd doesn't try to populate /etc, by forcing its first-boot +# heuristic off. It doesn't matter what's in /etc/machine-id for this purpose, +# and systemd will immediately fill in the file when it starts, so just +# creating it is enough. This `: >>` pattern avoids forking and avoids changing +# the mtime if the file already exists. +: >> /etc/machine-id + + # Reset the logging file descriptors. exec 1>&$logOutFd 2>&$logErrFd exec {logOutFd}>&- {logErrFd}>&- |