79 lines
2.4 KiB
Bash
79 lines
2.4 KiB
Bash
|
|
#!/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
|