Files
fds-os/tools/capture-hardware
T
2026-09-21 22:29:23 +08:00

43 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# Read-only diagnostic collection, intended to run on the FDS target.
set -euo pipefail
umask 077
if [[ $# != 1 || $1 != /* ]]; then
printf 'Usage: bash capture-hardware /absolute/new/capture-directory\n' >&2
exit 2
fi
output=$1
mkdir -- "$output"
output=$(realpath -- "$output")
trap 'printf "Capture interrupted; partial files retained in %s\n" "$output" >&2' INT TERM
printf 'format=1\ncreated_utc=%s\nuid=%s\n' "$(date -u +%FT%TZ)" "$(id -u)" >"$output/capture.txt"
printf 'command\texit_status\n' >"$output/status.tsv"
collect() {
local name=$1 status=0
shift
"$@" >"$output/$name.txt" 2>"$output/$name.stderr.txt" || status=$?
printf '%s\t%s\n' "$name" "$status" >>"$output/status.tsv"
}
collect identity fds --json info
collect bays fds --json bays
collect topology fds --json topology
collect profiles fds --json profiles
collect power fds --json power status
collect boot-profile fds --json boot-profile
collect kernel uname -a
collect cmdline cat /proc/cmdline
collect kernel-log dmesg --time-format=raw
collect usb-tree lsusb -t
collect usb-devices lsusb
collect block-devices lsblk --json -o NAME,MAJ:MIN,MODEL,SERIAL,SIZE,RO,TYPE,FSTYPE,PARTLABEL,MOUNTPOINTS
collect mounts cat /proc/self/mountinfo
collect interfaces ip -details link
collect memory cat /proc/meminfo
collect os-release cat /etc/os-release
collect package-list xbps-query -l
(
cd -- "$output"
sha256sum -- ./*.txt status.tsv >SHA256SUMS
)
printf 'Collected diagnostics in %s\nRead status.tsv for unavailable or failed commands; this capture is not a hardware pass.\n' "$output"