diskimage-builder/diskimage_builder/elements/sysprep/finalise.d/99-clear-machine-id
Steve Baker 147641fc3e Set machine-id to uninitialized to trigger first boot
According to the systemd documentation[1], if /etc/machine-id is empty
it will be populated with a unique value, but not in a way which
triggers an actual first boot event (running units with
ConditionFirstBoot=yes set)

This change writes "uninitialized" to /etc/machine-id to ensure that
systemd-firstboot.service actually runs, and other units can use
first-boot-complete.target as a dependency to trigger on first boot.

Since /var/lib/dbus/machine-id is sometimes a symlink to
/etc/machine-id, it is truncated before writing to /etc/machine-id.

On older versions of systemd before first boot semantics were
formalised, any non-uuid value will trigger a new machine-id to be
generated, so "uninitialized" also works.

[1] https://www.freedesktop.org/software/systemd/man/machine-id.html#First%20Boot%20Semantics

Change-Id: I77c35e51a3da2e8a6b5a2c80d033a159b303c9af
2022-04-21 09:39:42 +12:00

22 lines
693 B
Bash
Executable file

#!/bin/bash
if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then
set -x
fi
set -eu
set -o pipefail
if [ -e /var/lib/dbus/machine-id ]; then
> /var/lib/dbus/machine-id
fi
# According to documented First Boot Semantics writing "uninitialized" will trigger the full
# first boot behaviour.
# https://www.freedesktop.org/software/systemd/man/machine-id.html#First%20Boot%20Semantics
# On older versions of systemd before first boot semantics were formalised, any non-uuid value
# will trigger a new machine-id to be generated, so "uninitialized" also works.
# Previously this was done here by truncating /etc/machine-id.
if [ -e /etc/machine-id ]; then
echo uninitialized > /etc/machine-id
fi