aboutsummaryrefslogtreecommitdiff
path: root/sysdump.sh
blob: e771512aaa12edb1fe72a6ce730ee0ed91656554 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/usr/bin/env bash

ensure() {
	command -v "$1" >/dev/null 2>&1 || { echo >&2 "$1 not found, abort..."; exit 1; }
}

safecat() {
	[ -f "$1" ] && [ -r "$1" ] && cat "$1"
}

safecatroot() {
	[ $(id -u) -eq 0 ] && safecat $@
}

safecmd() {
	command -v "$1" >/dev/null 2>&1 && $@
}

safecmdroot() {
	[ $(id -u) -eq 0 ] && safecmd $@
}

dump() {
	[ -z "$2" ] && return
	entry=$1
	shift
	value=$($@|base64 -w 0)
	[ "$USE_COMMA" -eq 1 ] && echo "\"${entry}\": \"${value}\","
	[ "$USE_COMMA" -eq 0 ] && echo "\"${entry}\": \"${value}\""
}

# Read mode
if [ $# -gt 0 ]
then
	ensure jq
	file=$1
	[ ! -f "$file" ] && { echo >&2 "Dump \"$file\" not found, abort..."; exit 1; }
	if [ $# -gt 1 ]
	then
		shift
		for entry in $@
		do
			echo "====================> $entry"
			cat "$file"|jq -r ".[\"${entry}\"]"|base64 -d
		done
		exit 0
	fi
	while IFS= read -r entry; do
		echo "====================> $entry"
		cat "$file"|jq -r ".[\"${entry}\"]"|base64 -d
	done <<< "$(cat "$file"|jq -r 'keys[]')"
	exit 0
fi

# Check commands exists
ensure base64
ensure date
ensure find

# Start dump
echo "{"
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 "/etc/group" safecat /etc/group
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 "/etc/resolv.conf" safecat /etc/resolv.conf
dump "/etc/shadow" safecatroot /etc/shadow
dump "/etc/hosts" safecat /etc/hosts
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 "dmidecode" safecmdroot dmidecode
dump "iptables" safecmdroot iptables -L
dump "fdisk" safecmdroot fdisk -l
dump "env" safecmd env
dump "top" safecmd top -b -n 1
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 "}"