219 lines
5.2 KiB
Bash
Executable file
219 lines
5.2 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# mdadm bug submission control script
|
|
#
|
|
# allows Debian's bug tools to include relevant information in bug reports.
|
|
#
|
|
# Copyright © martin f. krafft <madduck@debian.org>
|
|
# distributed under the terms of the Artistic Licence 2.0
|
|
#
|
|
# we need /bin/bash for readline and -n capabalities in the prompt(s)
|
|
#
|
|
|
|
# maximise information output even in the case of errors
|
|
set +eu
|
|
|
|
if ! command -v yesno >/dev/null; then
|
|
if [ -r /usr/share/reportbug/handle_bugscript ]; then
|
|
exec /usr/share/reportbug/handle_bugscript ". $0" /dev/stdout
|
|
fi
|
|
yesno() {
|
|
read -n1 -p"$1" REPLY
|
|
case "$REPLY" in
|
|
[yY]) REPLY=yep;;
|
|
[nN]) REPLY=nop;;
|
|
('') REPLY="$2";;
|
|
esac
|
|
}
|
|
exec 3>&1
|
|
fi
|
|
|
|
# do not let people ctrl-c out of the bugscript
|
|
trap : INT
|
|
|
|
if [ $(id -u) != 0 ]; then
|
|
if [ -x "$(command -v sudo)" ]; then
|
|
yesno "Gather system information as root using sudo? (Y/n) " yep
|
|
if [ "$REPLY" = yep ]; then
|
|
echo running sudo "$0" "$@"...
|
|
sudo "$0" "$@" >&3 && exit 0
|
|
echo "sudo invocation failed, trying /bin/su..."
|
|
fi
|
|
fi
|
|
|
|
yesno "Gather system information as root using su? (Y/n) " yep
|
|
if [ "$REPLY" = yep ]; then
|
|
ARGS=
|
|
for i in "$@"; do ARGS="${ARGS:+$ARGS }'$1'"; shift; done
|
|
echo "running su root -s '/bin/sh -c $0${ARGS:+ $ARGS}'..."
|
|
su root -s /bin/sh -c "$0 $ARGS" >&3 && exit 0
|
|
unset ARGS
|
|
echo "su invocation failed."
|
|
fi
|
|
|
|
# arrive here only if neither sudo nor su worked:
|
|
yesno "Will you provide system information in the bug report yourself? (N/y) " nop
|
|
if [ "$REPLY" = yep ]; then
|
|
cat <<_eof >&3
|
|
|
|
IMPORTANT:
|
|
please do not forget to include all relevant system information with this
|
|
bug report. You could run
|
|
/usr/share/bug/mdadm/script 3>&1
|
|
as root and attach or include the output.
|
|
|
|
_eof
|
|
exit 0
|
|
fi
|
|
|
|
# try our best
|
|
cat <<_eof >&3
|
|
|
|
WARNING:
|
|
the following output was not generated by the root user. If you can, please
|
|
replace the following up until "-- System Information:" with the output of
|
|
/usr/share/bug/mdadm/script 3>&1
|
|
run as root. Thanks!
|
|
|
|
_eof
|
|
fi
|
|
|
|
if [ ! -r /proc/mdstat ]; then
|
|
echo "The local system does not have MD (RAID) support: no drivers loaded."
|
|
echo "Without MD support, I cannot collect as much information as I'd like."
|
|
|
|
#yesno "Are you sure you want to report a bug at this time? " yep
|
|
yesno "Hit any key to continue..." yep
|
|
#[ "$REPLY" = yep ] || exit 1
|
|
fi
|
|
|
|
echo "--- mdadm.conf" >&3
|
|
if [ -r /etc/mdadm/mdadm.conf ]; then
|
|
grep '^[^#]' /etc/mdadm/mdadm.conf >&3
|
|
elif [ -r /etc/mdadm.conf ]; then
|
|
grep '^[^#]' /etc/mdadm.conf >&3
|
|
else
|
|
echo no mdadm.conf file. >&3
|
|
fi
|
|
echo >&3
|
|
|
|
echo "--- /etc/default/mdadm" >&3
|
|
if [ -r /etc/default/mdadm ]; then
|
|
grep '^[^#]' /etc/default/mdadm >&3
|
|
else
|
|
echo no /etc/default/mdadm file. >&3
|
|
fi
|
|
echo >&3
|
|
|
|
echo "--- /proc/mdstat:" >&3
|
|
cat /proc/mdstat >&3 2>&3 || :
|
|
echo >&3
|
|
|
|
echo "--- /proc/partitions:" >&3
|
|
cat /proc/partitions >&3 2>&3 || :
|
|
echo >&3
|
|
|
|
echo "--- LVM physical volumes:" >&3
|
|
if [ -x "$(command -v pvs)" ]; then
|
|
pvs >&3
|
|
else
|
|
echo "LVM does not seem to be used." >&3
|
|
fi
|
|
|
|
echo "--- mount output" >&3
|
|
mount >&3
|
|
echo >&3
|
|
|
|
echo "--- initrd.img-$(uname -r):" >&3
|
|
if [ -r /boot/initrd.img-$(uname -r) ]; then
|
|
TEMPDIR=$(mktemp -d)
|
|
OLDPWD="$PWD"
|
|
cd "$TEMPDIR"
|
|
zcat /boot/initrd.img-$(uname -r) 2>&3 | cpio -i 2>&3
|
|
find -regex '.*/md[a/].+' -type f -exec md5sum {} \; >&3
|
|
|
|
echo >&3
|
|
echo "--- initrd's /conf/conf.d/md:" >&3
|
|
if [ -r conf/conf.d/md ]; then
|
|
cat conf/conf.d/md >&3
|
|
else
|
|
echo "no conf/md file." >&3
|
|
fi
|
|
|
|
cd "$OLDPWD"
|
|
rm -rf "$TEMPDIR"
|
|
unset TEMPDIR
|
|
else
|
|
echo "no initrd.img-$(uname -r) found." >&3
|
|
fi
|
|
echo >&3
|
|
|
|
if [ -r /proc/modules ]; then
|
|
echo "--- /proc/modules:" >&3
|
|
egrep '(dm_|raid|linear|multipath|faulty)' < /proc/modules >&3 || :
|
|
echo >&3
|
|
fi
|
|
|
|
if [ -f /var/log/syslog ]; then
|
|
if [ -r /var/log/syslog ]; then
|
|
echo "--- /var/log/syslog:" >&3
|
|
egrep "^\w{3} [ :[:digit:]]{11} ($(hostname)|localhost) (kernel: md|mdadm): " /var/log/syslog >&3 || :
|
|
echo >&3
|
|
else
|
|
echo "syslog not readable by user." >&3
|
|
fi
|
|
fi
|
|
|
|
echo "--- volume detail:" >&3
|
|
for dev in /dev/[hsv]d[a-z]*; do
|
|
[ ! -r $dev ] && echo "$dev not readable by user." && continue
|
|
mdadm -E $dev 2>/dev/null && echo -- || echo "$dev is not recognised by mdadm."
|
|
done >&3
|
|
echo >&3
|
|
|
|
if [ -r /proc/cmdline ]; then
|
|
echo "--- /proc/cmdline" >&3
|
|
cat /proc/cmdline >&3
|
|
echo >&3
|
|
fi
|
|
|
|
if [ -f /boot/grub/grub.cfg ]; then
|
|
echo "--- grub2:" >&3
|
|
if [ -r /boot/grub/grub.cfg ]; then
|
|
egrep '^[^#].*\<(root=|raid)' /boot/grub/grub.cfg >&3 || :
|
|
else
|
|
echo grub.cfg file not readable. >&3
|
|
fi
|
|
echo >&3
|
|
fi
|
|
|
|
if [ -f /boot/grub/menu.lst ]; then
|
|
echo "--- grub legacy:" >&3
|
|
if [ -r /boot/grub/menu.lst ]; then
|
|
grep '^[^#].*\<root=' /boot/grub/menu.lst >&3 || :
|
|
else
|
|
echo menu.lst file not readable. >&3
|
|
fi
|
|
echo >&3
|
|
fi
|
|
|
|
if [ -f /etc/lilo.conf ]; then
|
|
echo "--- lilo:" >&3
|
|
if [ -r /etc/lilo.conf ]; then
|
|
egrep '^([^#].*)?root=' /etc/lilo.conf >&3 || :
|
|
else
|
|
echo lilo.conf file not readable. >&3
|
|
fi
|
|
echo >&3
|
|
fi
|
|
|
|
echo "--- udev:" >&3
|
|
COLUMNS=70 dpkg -l udev | grep '\<udev\>' >&3
|
|
md5sum /etc/udev/rules.d/*md* /lib/udev/rules.d/*md* >&3 2>/dev/null
|
|
echo >&3
|
|
|
|
echo "--- /dev:" >&3
|
|
ls -l /dev/md* /dev/disk/by-* >&3
|
|
echo >&3
|
|
|
|
echo "Auto-generated on $(date -R) by mdadm bugscript" >&3
|