diff options
Diffstat (limited to 'debian/bug-submission')
-rwxr-xr-x | debian/bug-submission/script | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/debian/bug-submission/script b/debian/bug-submission/script new file mode 100755 index 0000000..dcb88eb --- /dev/null +++ b/debian/bug-submission/script @@ -0,0 +1,219 @@ +#!/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 |