commit f0d1752692401b77bcfc3b227e729d6e3aa66762
Author: Loïc Guégan <loic.guegan@mailbox.org>
Date:   Thu Jul 4 10:36:00 2024 +0200

    Init project

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..51f0c7a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+dump.json
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..2536516
--- /dev/null
+++ b/README.md
@@ -0,0 +1,11 @@
+# System dump script
+
+Dump various system informations into a base64 encoded value into a json file.
+
+# Usage
+Run a dump:
+> ./sysdump.sh
+Result is place into `dump.json`.
+
+Explore a dump (require `jq`)
+> ./sysdump.sh dump.json
diff --git a/sysdump.sh b/sysdump.sh
new file mode 100755
index 0000000..1599275
--- /dev/null
+++ b/sysdump.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env bash
+
+OUT="./dump.json"
+
+ensure() {
+	command -v "$1" >/dev/null 2>&1 || { echo >&2 "$1 not found, abort..."; exit 1; }
+}
+
+safecat() {
+	[ -f "$1" ] && [ -r "$1" ] && cat "$1"
+}
+
+safecmd() {
+	command -v "$1" >/dev/null 2>&1 && $@
+}
+
+dump() {
+	[ -z "$2" ] && return
+	key=$1
+	value=$(echo "$2"|base64 -w 0)
+	[ "$USE_COMMA" -eq 1 ] && echo "\"${key}\": \"${value}\"," >> "$OUT"
+	[ "$USE_COMMA" -eq 0 ] && echo "\"${key}\": \"${value}\"" >> "$OUT"
+}
+
+# Read mode
+if [ $# -gt 0 ]
+then
+	ensure jq
+	file=$1
+	[ ! -f "$file" ] && { echo >&2 "Dump \"$file\" not found, abort..."; exit 1; }
+	while IFS= read -r key; do
+		echo "====================> $key"
+		cat "$file"|jq -r ".[\"${key}\"]"|base64 -d
+	done <<< "$(cat "$file"|jq -r 'keys[]')"
+	exit 0
+fi
+
+# Check commands exists
+ensure base64
+ensure date
+ensure find
+
+# Start dump
+echo "{" > "$OUT"
+USE_COMMA=1
+dump "date" "$(date +%s)"
+dump "hostname" "$(safecmd hostname)"
+dump "id" "$(safecmd id)"
+dump "uid" "$(safecmd id -u)"
+dump "gid" "$(safecmd id -g)"
+dump "gids" "$(safecmd id -G)"
+dump "ipaddr" "$(safecmd ip addr)"
+dump "/etc/nftables.conf" "$(safecat /etc/nftables.conf)"
+dump "/proc/cpuinfo" "$(safecat /proc/cpuinfo)"
+dump "/etc/os-release" "$(safecat /etc/os-release)"
+dump "/proc/zoneinfo" "$(safecat /proc/zoneinfo)"
+dump "/proc/meminfo" "$(safecat /proc/meminfo)"
+dump "/proc/cmdline" "$(safecat /proc/cmdline)"
+dump "uname" "$(uname -a)"
+dump "lsb_release" "$(safecmd lsb_release)"
+dump "uptime" "$(safecmd uptime)"
+dump "mount" "$(safecmd mount)"
+dump "lscpu" "$(safecmd lscpu)"
+dump "lsblk" "$(safecmd lsblk)"
+dump "lsusb" "$(safecmd lsusb)"
+dump "lsmod" "$(safecmd lsmod)"
+dump "lspci" "$(safecmd lspci)"
+dump "lsirq" "$(safecmd lsirq)"
+dump "lsfd" "$(safecmd lsfd)"
+dump "locale" "$(safecmd locale)"
+dump "timezone" "$(safecat /etc/timezone)"
+dump "systemctl" "$(safecmd systemctl --no-pager)"
+dump "free" "$(safecmd free -h)"
+dump "df" "$(safecmd df -h)"
+dump "boot_folder" "$(safecmd ls -al /boot/)"
+USE_COMMA=0
+dump "root_folder" "$(safecmd ls -al /)"
+echo "}" >> "$OUT"