diff --git a/debian/changelog b/debian/changelog
index 3478dff..19a1f06 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+mdt-services (3-1) UNRELEASED; urgency=medium
+
+  * Create a simple bug reporting script to gather system information.
+
+ -- Coral <coral-support@google.com>  Thu, 16 May 2019 12:58:00 -0800
+
 mdt-services (2-1) mendel-chef; urgency=medium
 
   * Install mdt-keymaster service for pushing keys
diff --git a/usr/sbin/mendel-reportbug b/usr/sbin/mendel-reportbug
new file mode 100755
index 0000000..9a964f5
--- /dev/null
+++ b/usr/sbin/mendel-reportbug
@@ -0,0 +1,203 @@
+#!/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 "$@"
