#!/bin/sh
# Sagt, welche der beiden Wurzeln gerade laeuft und welche die andere ist.
#
# Alles im Fassungswechsel haengt an dieser Auskunft: Ein Update schreibt immer in die
# INAKTIVE Wurzel. Wer sich hier irrt, ueberschreibt die laufende Fassung — und damit den
# Rueckweg, den das ganze Verfahren verspricht.
#
# Aufruf:
#   xinionos-wurzeln aktiv     -> a | b
#   xinionos-wurzeln andere    -> b | a
#   xinionos-wurzeln geraet a  -> /dev/disk/by-label/wurzel-a
set -eu

aktive_wurzel() {
    # Die Wahrheit steht im eingehaengten Wurzeldateisystem, nicht in einer Merkdatei:
    # eine Merkdatei kann nach einem Ruecksprung falsch sein, das Dateisystem nie.
    quelle=$(findmnt -n -o SOURCE / | sed 's/\[.*\]//')
    kennung=$(blkid -o value -s LABEL "$quelle" 2>/dev/null || echo "")
    case "$kennung" in
        wurzel-a) echo a ;;
        wurzel-b) echo b ;;
        *) echo "Wurzel nicht erkennbar: $quelle (Bezeichner '$kennung')" >&2; exit 1 ;;
    esac
}

case "${1:-}" in
    aktiv)  aktive_wurzel ;;
    andere) [ "$(aktive_wurzel)" = a ] && echo b || echo a ;;
    geraet) echo "/dev/disk/by-label/wurzel-${2:?Wurzel a oder b angeben}" ;;
    *) echo "Aufruf: $0 aktiv|andere|geraet <a|b>" >&2; exit 64 ;;
esac
