Skip to content

Commit 08f35a4

Browse files
committed
asahi-diagnose: New command to gather data for bug reports
Signed-off-by: Hector Martin <[email protected]>
1 parent 859b315 commit 08f35a4

2 files changed

Lines changed: 171 additions & 1 deletion

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ PREFIX=/usr/local
22
SYS_PREFIX=$(PREFIX)
33
CONFIG_DIR=/etc/default
44
BIN_DIR=$(PREFIX)/bin
5-
SCRIPTS=asahi-fwextract update-m1n1
5+
SCRIPTS=asahi-diagnose asahi-fwextract update-m1n1
66
ARCH_SCRIPTS=update-grub first-boot
77
UNITS=first-boot.service
88
MULTI_USER_WANTS=first-boot.service

asahi-diagnose

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
#!/bin/sh
2+
3+
log() {
4+
echo "$@"
5+
}
6+
7+
dt() {
8+
p=/proc/device-tree/"$1"
9+
if [ ! -e "$p" ]; then
10+
echo "(missing)"
11+
else
12+
cat "$p" | tr "\0" " " | sed -e 's/ $//g'; echo
13+
fi
14+
}
15+
16+
banner() {
17+
cat <<EOF
18+
# Asahi Linux System Diagnostic Dump
19+
20+
Collected at: $(date) ($(date -Iseconds))
21+
Username: $(whoami)
22+
Hostname: $(hostname)
23+
24+
EOF
25+
}
26+
27+
device_info() {
28+
cat <<EOF
29+
## Device information
30+
Model: $(dt model)
31+
Compatible: $(dt compatible)
32+
33+
EOF
34+
}
35+
36+
firmware_versions() {
37+
cat <<EOF
38+
## Firmware versions
39+
iBoot1: $(dt chosen/asahi,iboot1-version)
40+
iBoot2: $(dt chosen/asahi,iboot2-version)
41+
SFR: $(dt chosen/asahi,system-fw-version)
42+
OS firmware: $(dt chosen/asahi,os-fw-version)
43+
m1n1 stage 2: $(dt chosen/asahi,m1n1-stage2-version)
44+
U-Boot: $(dt chosen/u-boot,version)
45+
46+
EOF
47+
}
48+
49+
boot_config() {
50+
cat <<EOF
51+
## Boot information
52+
ESP UUID: $(dt chosen/asahi,efi-system-partition)
53+
EFI: $([ -e /sys/firmware/efi ] &&
54+
echo available || echo unavailable)
55+
56+
EOF
57+
}
58+
59+
system_info() {
60+
cat <<EOF
61+
## System information
62+
Kernel: $(uname -r)
63+
Kernel build: $(uname -v)
64+
Uptime: $(uptime)
65+
Kernel cmdline: $(cat /proc/cmdline)
66+
67+
EOF
68+
}
69+
70+
getfile() {
71+
cat <<EOF
72+
## $2
73+
\`\`\`
74+
$(cat $1)
75+
\`\`\`
76+
77+
EOF
78+
}
79+
80+
cmd() {
81+
cat <<EOF
82+
## $2
83+
\`\`\`
84+
$($1)
85+
\`\`\`
86+
87+
EOF
88+
}
89+
90+
91+
package_versions() {
92+
cat <<EOF
93+
## Package versions
94+
\`\`\`
95+
$(pacman -Q \
96+
m1n1 uboot-asahi asahi-scripts asahi-meta asahi-desktop-meta \
97+
asahi-fwextract asahi-configs alsa-ucm-conf-asahi \
98+
asahilinux-keyring linux linux-asahi linux-asahi-edge \
99+
mesa xorg-server pipewire kwin mutter \
100+
2>/dev/null | uniq)
101+
\`\`\`
102+
103+
EOF
104+
}
105+
106+
module_parameters() {
107+
echo "## Module parameters"
108+
for mod in asahi hid_apple hid_magicmouse; do
109+
[ ! -e /sys/module/$mod/parameters/ ] && continue
110+
echo " $mod"
111+
for param in /sys/module/$mod/parameters/*; do
112+
echo " $(basename "$param")=$(cat "$param" | tr -d '\0')"
113+
done
114+
echo
115+
done
116+
echo
117+
}
118+
119+
logfile() {
120+
f="$1"
121+
lines="$2"
122+
[ -e "$1" ] || return
123+
echo "## Log file: \`$f\`"
124+
echo '```'
125+
if [ -z "$lines" ]; then
126+
cat "$f"
127+
else
128+
tail -n "$lines" "$f"
129+
fi
130+
echo '```'
131+
echo
132+
}
133+
134+
diagnose() {
135+
f="$1"
136+
137+
>$f
138+
139+
log "Collecting system diagnostic information..."
140+
log
141+
142+
(
143+
exec >"$f" 2>&1
144+
banner
145+
device_info
146+
firmware_versions
147+
boot_config
148+
system_info
149+
getfile /proc/mounts "Mounts"
150+
[ -e /etc/arch-release ] && package_versions
151+
cmd lsblk "Block devices"
152+
cmd lspci "PCI devices"
153+
getfile /proc/bus/input/devices "Input devices"
154+
cmd lsmod "Loaded modules"
155+
module_parameters
156+
cmd 'journalctl -b 0 -tkernel' "Kernel log"
157+
logfile /var/log/Xorg.0.log
158+
logfile /var/log/pacman.log 500
159+
)
160+
161+
log "Saved diagnostic information to $f"
162+
}
163+
164+
if [ -z "$1" ]; then
165+
diagnose "$HOME/asahi-diagnose-$(date +%Y%m%d-%H%M%S).txt"
166+
elif [ "$1" = "-" ]; then
167+
diagnose /dev/stdout
168+
else
169+
diagnose "$1"
170+
fi

0 commit comments

Comments
 (0)