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