summaryrefslogtreecommitdiff
path: root/tools/gentoo_snapshot.sh
diff options
context:
space:
mode:
authorauric <104602845+ihateamongus@users.noreply.github.com>2025-09-11 09:38:49 -0500
committerauric <104602845+ihateamongus@users.noreply.github.com>2025-09-11 09:38:49 -0500
commit4da4c90adba63332f305725f6dcff9d0e0665b96 (patch)
tree928938f4d2d0c8e7447c6c69cdb0463c60d21dd2 /tools/gentoo_snapshot.sh
parent8f03aa9417b06d91182e7adc2e0b8c53e7cf6069 (diff)
Add Gentoo system snapshot script and viewer
Diffstat (limited to 'tools/gentoo_snapshot.sh')
-rwxr-xr-xtools/gentoo_snapshot.sh81
1 files changed, 81 insertions, 0 deletions
diff --git a/tools/gentoo_snapshot.sh b/tools/gentoo_snapshot.sh
new file mode 100755
index 0000000..40c4748
--- /dev/null
+++ b/tools/gentoo_snapshot.sh
@@ -0,0 +1,81 @@
+#!/bin/sh
+# gentoo_snapshot.sh - collect a system snapshot on Gentoo/OpenRC systems
+# Usage: gentoo_snapshot.sh [output_file]
+# Default output file is gentoo_snapshot.txt in the current directory.
+
+set -e
+
+OUTPUT=${1:-gentoo_snapshot.txt}
+TMPDIR=$(mktemp -d)
+
+cleanup() {
+ rm -rf "$TMPDIR"
+}
+trap cleanup EXIT
+
+printf "===== Gentoo System Snapshot: %s =====\n" "$(date)" > "$OUTPUT"
+
+printf "\n## Kernel\n" >> "$OUTPUT"
+uname -a >> "$OUTPUT" 2>/dev/null || printf "uname not available\n" >> "$OUTPUT"
+
+printf "\n## CPU\n" >> "$OUTPUT"
+(lscpu 2>/dev/null || printf "lscpu not available\n") >> "$OUTPUT"
+
+printf "\n## Memory\n" >> "$OUTPUT"
+(free -h 2>/dev/null || printf "free not available\n") >> "$OUTPUT"
+
+printf "\n## Block Devices\n" >> "$OUTPUT"
+(lsblk 2>/dev/null || printf "lsblk not available\n") >> "$OUTPUT"
+
+printf "\n## Storage Usage\n" >> "$OUTPUT"
+(df -h 2>/dev/null || printf "df not available\n") >> "$OUTPUT"
+
+# Installed packages
+printf "\n## Installed Packages\n" >> "$OUTPUT"
+if command -v qlist >/dev/null 2>&1; then
+ qlist -I >> "$OUTPUT"
+elif command -v equery >/dev/null 2>&1; then
+ equery list '*' >> "$OUTPUT"
+else
+ printf "Package manager tools (qlist/equery) not found\n" >> "$OUTPUT"
+fi
+
+# OpenRC services
+printf "\n## OpenRC Services\n" >> "$OUTPUT"
+if command -v rc-update >/dev/null 2>&1; then
+ printf "\n### Enabled\n" >> "$OUTPUT"
+ rc-update show | awk '{print $1}' | sort -u >> "$OUTPUT"
+
+ printf "\n### Disabled\n" >> "$OUTPUT"
+ ENAB="$TMPDIR/enabled"
+ ALL="$TMPDIR/all"
+ rc-update show | awk '{print $1}' | sort -u > "$ENAB"
+ ls /etc/init.d 2>/dev/null | sort > "$ALL" || true
+ if [ -s "$ALL" ]; then
+ comm -23 "$ALL" "$ENAB" >> "$OUTPUT" || true
+ else
+ printf "/etc/init.d not accessible\n" >> "$OUTPUT"
+ fi
+else
+ printf "rc-update not found\n" >> "$OUTPUT"
+fi
+
+# Largest files
+printf "\n## Largest Files\n" >> "$OUTPUT"
+(find / -xdev -type f -printf '%s\t%p\n' 2>/dev/null | sort -nr | head -n 20 2>/dev/null || printf "find not available\n") >> "$OUTPUT"
+
+# Cleanup suggestions
+printf "\n## Cleanup Suggestions\n" >> "$OUTPUT"
+if [ -d /var/cache/distfiles ]; then
+ du -sh /var/cache/distfiles 2>/dev/null | awk '{print "Distfiles cache: "$1}' >> "$OUTPUT"
+fi
+if [ -d /var/tmp/portage ]; then
+ du -sh /var/tmp/portage 2>/dev/null | awk '{print "Portage build dir: "$1}' >> "$OUTPUT"
+fi
+printf "Consider running 'eclean packages' and 'eclean distfiles'\n" >> "$OUTPUT"
+
+# Additional information
+printf "\n## Environment\n" >> "$OUTPUT"
+(printenv 2>/dev/null || printf "printenv not available\n") >> "$OUTPUT"
+
+printf "\nSnapshot saved to %s\n" "$OUTPUT" >> "$OUTPUT"