#!/bin/sh
# Eine machine-id herstellen, wenn keine da ist.
#
# Warum das noetig ist: ein Abbild darf keine mitbringen. /etc/machine-id war in
# jedem aos-Abbild dieselbe Datei vom Bau des Ur-Abbilds (2026-06-10), also auf
# jeder Maschine gleich -- eine Kennung, die dbus, Logkorrelation und manche
# Lizenzpruefungen fuer eindeutig halten. Unter systemd erzeugt der Init eine
# neue, wenn die Datei leer ist; unter s6 tut das niemand. Genau diese Luecke
# schliesst dieser Oneshot.
#
# Nur wenn die Datei fehlt oder leer ist -- eine vorhandene Kennung bleibt, auch
# ueber Neustarts.
set -u

ID_FILE=/etc/machine-id
DBUS_FILE=/var/lib/dbus/machine-id

if [ -s "$ID_FILE" ]; then
  exit 0
fi

id=''
# dbus-uuidgen, wenn es da ist: dasselbe Format, und dbus kennt seine eigenen
# Erwartungen am besten.
if command -v dbus-uuidgen >/dev/null 2>&1; then
  id="$(dbus-uuidgen 2>/dev/null || true)"
fi

# Sonst der Kernel: 32 Hexziffern ohne Bindestriche, genau das Format aus
# machine-id(5).
if [ -z "$id" ] && [ -r /proc/sys/kernel/random/uuid ]; then
  id="$(tr -d '-' < /proc/sys/kernel/random/uuid)"
fi

if [ -z "$id" ]; then
  echo 'machine-id: konnte keine Kennung erzeugen (weder dbus-uuidgen noch /proc/sys/kernel/random/uuid)' >&2
  exit 1
fi

umask 022
printf '%s\n' "$id" > "${ID_FILE}.tmp" || exit 1
mv -f "${ID_FILE}.tmp" "$ID_FILE" || exit 1
echo "machine-id: neue Kennung erzeugt (${id})"

# /var/lib/dbus/machine-id zieht mit. In den aos-Abbildern ist es ein Symlink
# auf /etc/machine-id -- dann ist nichts zu tun. Liegt dort eine echte Datei,
# wuerde sie die alte, geteilte Kennung weitertragen.
if [ -e "$DBUS_FILE" ] && [ ! -L "$DBUS_FILE" ]; then
  cp -f "$ID_FILE" "$DBUS_FILE" || true
  echo "machine-id: ${DBUS_FILE} nachgezogen"
fi
