production-deb/scripts/read-usb-logs.sh

79 lines
2.4 KiB
Bash
Raw Permalink Normal View History

#!/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