Server-only canonical production Debian build. Drops laptop/vanilla variants. Interactive LUKS + hostname at install. user/123 forced rotate. DVD-1 offline base. S8N_LOGS log-capture partition. Lineage: forked from s8n/debian-s8ns-prefs-iso commit d4be55f.
78 lines
2.4 KiB
Bash
Executable file
78 lines
2.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# read-usb-logs.sh — read install logs from S8N_LOGS partition on the USB.
|
|
# Use after a failed install: pull USB from target, plug into onyx (or wherever
|
|
# you have this repo cloned), run this script.
|
|
#
|
|
# Usage:
|
|
# sudo scripts/read-usb-logs.sh /dev/sdX
|
|
# sudo scripts/read-usb-logs.sh # auto-detect by label
|
|
#
|
|
# Outputs:
|
|
# - Lists all run-* directories
|
|
# - Cats the latest run's exit-status, last 50 lines of syslog, post-install log
|
|
# - On --copy: rsyncs the entire S8N_LOGS contents to ./out/usb-logs-<date>/
|
|
set -euo pipefail
|
|
|
|
DEV="${1:-}"
|
|
COPY=0
|
|
[[ "${1:-}" == "--copy" ]] && { COPY=1; DEV="${2:-}"; }
|
|
|
|
if [[ -z "$DEV" ]]; then
|
|
DEV="$(blkid -L S8N_LOGS 2>/dev/null || true)"
|
|
[[ -n "$DEV" ]] || { echo "ERR: no partition labeled S8N_LOGS found. Pass /dev/sdXN explicitly." >&2; exit 1; }
|
|
fi
|
|
[[ -b "$DEV" ]] || { echo "ERR: not a block device: $DEV" >&2; exit 1; }
|
|
|
|
MOUNT=$(mktemp -d)
|
|
trap 'sudo umount "$MOUNT" 2>/dev/null || true; rmdir "$MOUNT" 2>/dev/null || true' EXIT
|
|
|
|
echo "[*] Mounting $DEV at $MOUNT (read-only)..."
|
|
sudo mount -o ro "$DEV" "$MOUNT"
|
|
|
|
echo "[*] Contents:"
|
|
ls -la "$MOUNT"
|
|
|
|
LATEST=$(ls -1d "$MOUNT"/run-* 2>/dev/null | sort | tail -1 || true)
|
|
if [[ -z "$LATEST" ]]; then
|
|
echo "[!] No run-* directories found. Either install never reached late_command, or log capture failed."
|
|
exit 0
|
|
fi
|
|
|
|
echo
|
|
echo "[*] Latest run: $(basename "$LATEST")"
|
|
echo " contents:"
|
|
ls -la "$LATEST"
|
|
|
|
echo
|
|
echo "=== build-info.txt ==="
|
|
cat "$LATEST/build-info.txt" 2>/dev/null || echo "(missing)"
|
|
|
|
echo
|
|
echo "=== exit-status.txt ==="
|
|
cat "$LATEST/exit-status.txt" 2>/dev/null || echo "(missing — install may have crashed before late_command finished)"
|
|
|
|
echo
|
|
echo "=== syslog (last 80 lines) ==="
|
|
tail -80 "$LATEST/syslog" 2>/dev/null || echo "(missing)"
|
|
|
|
echo
|
|
echo "=== s8n-post-install.log (full) ==="
|
|
cat "$LATEST/s8n-post-install.log" 2>/dev/null || echo "(missing — postinstall didn't run)"
|
|
|
|
echo
|
|
echo "=== s8n-luks-rekey.log (full) ==="
|
|
cat "$LATEST/s8n-luks-rekey.log" 2>/dev/null || echo "(missing — luks-rekey didn't run)"
|
|
|
|
echo
|
|
echo "=== installer/ (debian-installer logs) ==="
|
|
ls "$LATEST/installer/" 2>/dev/null || echo "(missing)"
|
|
|
|
if [[ "$COPY" -eq 1 ]]; then
|
|
DEST="$(pwd)/out/usb-logs-$(date -u +%Y%m%dT%H%M%SZ)"
|
|
mkdir -p "$DEST"
|
|
echo
|
|
echo "[*] Copying full log set to $DEST ..."
|
|
sudo cp -r "$MOUNT"/run-*/. "$DEST/"
|
|
sudo chown -R "$USER:$USER" "$DEST"
|
|
echo "[OK] $DEST"
|
|
fi
|