blob: 9a964f5578699573942354d63f1d73d288b4427c [file] [log] [blame]
#!/bin/bash
PROGRAM_NAME=$(basename "$0")
TEMPDIR=$(mktemp -p /tmp -d bugreport.XXXXXXXX)
QUIET=""
DEBUG=""
SUMMARY=""
PACKAGE=""
function die
{
echo "${PROGRAM_NAME}: $@"
exit 1
}
function show-help
{
cat <<EOF
Usage: $PROGRAM_NAME [-d] [-h] [-p <packagename>] [-s <summary>]
Where the options are:
-d Turns on debug mode. Doesn't delete the temp directory this script
creates.
-h Shows this help text.
-p <packagename>
Sets the package name this bugreport pertains to.
-s <summary>
Sets the summary about what this bug is about.
EOF
exit 1
}
function cleanup
{
rm -rf "${TEMPDIR}"
}
function is-debug-on
{
if [[ -z "${DEBUG}" ]]; then
return 1
fi
return 0
}
function debug
{
if is-debug-on; then
echo "$@"
fi
}
function gather-system-info
{
cat <<EOF
--- system information
$(uname -a)
$(uptime)
$(lsb_release -idrc)
--- dmesg
$(dmesg)
--- systemctl status
$(systemctl -l --no-legend)
--- installed packages
$(dpkg --get-selections)
--- apt sources
EOF
if [[ -e /etc/apt/sources.list.d/* ]]; then
cat /etc/apt/sources.list.d/*
fi
if [[ -f /etc/apt/sources.list ]]; then
cat /etc/apt/sources.list
fi
}
function generate-message
{
cat <<EOF
--- summary
$SUMMARY
--- package affected
$PACKAGE
--- date
$(date)
EOF
}
function get-summary-line
{
local message="$1"
local done
local yn
while [[ -z "${done}" ]]; do
echo "${message}"
read -p '> ' SUMMARY
if [[ -z "${SUMMARY}" ]]; then
echo
echo "Sorry, please try again."
continue
fi
read -p "Does this look correct? (y/n) " yn
if [[ "${yn}" == "y" ]]; then
done=t
fi
done
}
function main
{
local args=$(getopt hdp:s:q $*)
local keep_tempdir=""
set -- $args
for i; do
case "$1" in
-d) # debug (don't delete tempdir)
QUIET=""
DEBUG=1
shift
;;
-p) # package
PACKAGE="$2"
shift 2
;;
-s) # summary
SUMMARY="$2"
shift 2
;;
-q) # quiet
QUIET=1
DEBUG=""
shift 1
;;
--)
shift
break
;;
-h|*) # help
show-help
exit 1
;;
esac
done
if ! is-debug-on; then
trap cleanup EXIT
fi
debug "Working in ${TEMPDIR}"
gather-system-info > "${TEMPDIR}/system-info.txt"
if [[ -z "$SUMMARY" ]]; then
get-summary-line "In a few words, describe the problem you've experienced."
fi
if [[ -z "$PACKAGE" ]]; then
echo "If you know the name of the package you think this relates to, please enter it here."
echo "If you don't, just press ENTER here."
read -p "> " PACKAGE
fi
generate-message > "${TEMPDIR}/message.txt"
local bugreport_filename="bugreport-$(date +%Y%m%dT%H%M%S).txt"
cat "${TEMPDIR}/message.txt" "${TEMPDIR}/system-info.txt" > "${TEMPDIR}/${bugreport_filename}"
gzip "${TEMPDIR}/${bugreport_filename}"
mv "${TEMPDIR}/${bugreport_filename}.gz" .
if [[ -z "${QUIET}" ]]; then
cat <<EOF
Bugreport saved as ${bugreport_filename}.gz in your current directory.
This is a plain text file containing system information. You can examine it by
running the command 'zless ${bugreport_filename}.gz'.
Please attach this in an email to coral-support@google.com.
EOF
else
echo "${bugreport_filename}.gz"
fi
}
main "$@"