From 4da4c90adba63332f305725f6dcff9d0e0665b96 Mon Sep 17 00:00:00 2001 From: auric <104602845+ihateamongus@users.noreply.github.com> Date: Thu, 11 Sep 2025 09:38:49 -0500 Subject: Add Gentoo system snapshot script and viewer --- tools/gentoo_snapshot.sh | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 tools/gentoo_snapshot.sh (limited to 'tools/gentoo_snapshot.sh') 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" -- cgit v1.2.3