commit:     88e1dd1c2ab49f232fed596927c15c3781fc6b28
Author:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Fri Aug 28 15:22:56 2020 +0000
Commit:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Fri Aug 28 16:35:59 2020 +0000
URL:        https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=88e1dd1c

defaults/linuxrc: Add gksosreport

To help debugging, 'gksosreport' was added (idea was borrowed from dracut):

Whenever a user run into a problem and get to a rescue shell, running 
"gksosreport"
will generate /run/initramfs/gksosreport.txt containing useful debug information
suitable to attach to bug reports.

Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>

 defaults/gksosreport.sh | 74 +++++++++++++++++++++++++++++++++++++++++++++++++
 defaults/initrd.scripts | 20 +++++++++----
 defaults/linuxrc        |  4 +--
 gen_initramfs.sh        |  8 +++++-
 4 files changed, 98 insertions(+), 8 deletions(-)

diff --git a/defaults/gksosreport.sh b/defaults/gksosreport.sh
new file mode 100644
index 0000000..03b44b6
--- /dev/null
+++ b/defaults/gksosreport.sh
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+echo 'Generating "/run/initramfs/gksosreport.txt" ...'
+
+if [ ! -d /run/initramfs ]
+then
+       mkdir -p /run/initramfs
+       chmod 0750 /run/initramfs
+fi
+
+exec >/run/initramfs/gksosreport.txt 2>&1
+
+PWFILTER='s/\(ftp:\/\/.*\):.*@/\1:*******@/g;s/\(cifs:\/\/.*\):.*@/\1:*******@/g;s/cifspass=[^
 ]*/cifspass=*******/g;s/iscsi:.*@/iscsi:******@/g;s/rd.iscsi.password=[^ 
]*/rd.iscsi.password=******/g;s/rd.iscsi.in.password=[^ 
]*/rd.iscsi.in.password=******/g'
+
+echo "Genkernel SOS report from $(date +'%Y-%m-%d %H:%M:%S'):"
+
+set -x
+
+cat /lib/dracut/dracut-gk-version.info
+
+cat /lib/dracut/build-parameter.txt
+
+cat /proc/cmdline | sed -e "${PWFILTER}"
+
+[ -f /etc/cmdline ] && cat /etc/cmdline | sed -e "${PWFILTER}"
+
+lspci -k
+
+lsmod
+
+find /lib/modules/$(uname -r) -type f
+
+cat /proc/self/mountinfo
+cat /proc/mounts
+
+blkid
+blkid -o udev
+
+ls -l /dev/disk/by*
+
+if hash lvm >/dev/null 2>/dev/null
+then
+       lvm pvdisplay
+       lvm vgdisplay
+       lvm lvdisplay
+fi
+
+if hash dmsetup >/dev/null 2>/dev/null
+then
+       dmsetup ls --tree
+fi
+
+if [ -e /proc/mdstat ]
+then
+       cat /proc/mdstat
+fi
+
+if hash cryptsetup >/dev/null 2>/dev/null
+then
+       if [ -e /dev/mapper/root ]
+       then
+               cryptsetup status /dev/mapper/root
+       fi
+fi
+
+if hash ip >/dev/null 2>/dev/null
+then
+       ip link
+       ip addr
+fi
+
+dmesg | sed -e "${PWFILTER}"
+
+[ -f /run/initramfs/init.log ] && cat /run/initramfs/init.log | sed -e 
"${PWFILTER}"

diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 36f4791..7a84755 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -983,7 +983,7 @@ check_loop() {
                bad_msg 'Please export LOOP with a valid location, or reboot 
and pass a proper loop=...'
                bad_msg 'kernel command line!'
 
-               run_shell
+               run_emergency_shell
        fi
 }
 
@@ -1001,6 +1001,14 @@ run() {
        return ${retval}
 }
 
+run_emergency_shell() {
+       echo
+       gksosreport
+       good_msg 'You might want to save "/run/initramfs/gksosreport.txt" to a 
USB stick or /boot'
+       good_msg 'after mounting them and attach it to a bug report.'
+       run_shell
+}
+
 run_shell() {
        if [ -f "${GK_USERINTERACTION_DISABLED_STATEFILE}" ]
        then
@@ -1092,7 +1100,7 @@ test_success() {
                error_string=${1}
                error_string="${error_string:-Failed to run command}"
                bad_msg "${error_string}; Failing back to the shell ..."
-               run_shell
+               run_emergency_shell
        fi
 }
 
@@ -1347,7 +1355,7 @@ prompt_user() {
                'shell')
                        eval ${1}'='${oldvalue}
                        warn_msg "To leave and try again just press <Ctrl>+D"
-                       run_shell
+                       run_emergency_shell
                        ;;
                '')
                        eval ${1}'='${oldvalue}
@@ -1799,7 +1807,7 @@ openLUKS() {
                # if crypt_silent=1 and some error occurs, enter shell quietly
                elif [ \( ${CRYPT_SILENT} -eq 1 \) -a \( \( \( ${DEV_ERROR} -eq 
1 \) -o \( ${KEY_ERROR} -eq 1 \) \) -o \( ${KEYDEV_ERROR} -eq 1 \) \) ]
                then
-                       run_shell
+                       run_emergency_shell
                elif [ ${DEV_ERROR} -eq 1 ]
                then
                        prompt_user "LUKS_DEVICE" "${LUKS_NAME}"
@@ -2487,7 +2495,7 @@ cdupdate() {
                        if [ "$?" != '0' ]
                        then
                                bad_msg "Executing cdupdate.sh failed!"
-                               run_shell
+                               run_emergency_shell
                        fi
                else
                        good_msg 'No cdupdate.sh script found, skipping ...'
@@ -2511,6 +2519,8 @@ rundebugshell() {
        if is_debug
        then
                good_msg 'Starting debug shell as requested by "debug" option.'
+               good_msg "Run '${BOLD}gksosreport${NORMAL}' to generate debug 
report"
+               good_msg "in case you want to file a bug report."
        else
                return 0
        fi

diff --git a/defaults/linuxrc b/defaults/linuxrc
index 061d3e0..e96b637 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -1071,7 +1071,7 @@ then
                                                grep -Fq squashfs 
/proc/filesystems || \
                                                        bad_msg "HINT: Your 
kernel does not know filesystem \"squashfs\"."
                                        fi
-                                       run_shell
+                                       run_emergency_shell
                                }
                        fi
 
@@ -1188,7 +1188,7 @@ FSTAB
                ) ||
                {
                        bad_msg "Copying failed, dropping into a shell."
-                       run_shell
+                       run_emergency_shell
                }
 
                # Now we do the links.

diff --git a/gen_initramfs.sh b/gen_initramfs.sh
index 27e98fc..315bb22 100755
--- a/gen_initramfs.sh
+++ b/gen_initramfs.sh
@@ -348,6 +348,12 @@ append_base_layout() {
        echo "Genkernel $GK_V" > "${TDIR}"/etc/build_id \
                || gen_die "Failed to create '${TDIR}/etc/build_id'!"
 
+       cp -a "${GK_SHARE}"/defaults/gksosreport.sh 
"${TDIR}"/usr/sbin/gksosreport \
+               || gen_die "Failed to copy 
'${GK_SHARE}/defaults/gksosreport.sh' to '${TDIR}/usr/sbin/gksosreport'"
+
+       chmod 0755 "${TDIR}"/usr/sbin/gksosreport \
+               || gen_die "Failed to chmod of '${TDIR}/usr/sbin/gksosreport'!"
+
        # Allow lsinitrd from dracut to process our initramfs
        echo "$(cat "${TDIR}/etc/build_id") ($(cat "${TDIR}/etc/build_date"))" 
> "${TDIR}"/lib/dracut/dracut-gk-version.info \
                || gen_die "Failed to create 
'${TDIR}/lib/dracut/dracut-gk-version.info'!"
@@ -474,7 +480,7 @@ append_busybox() {
        done
 
        # Set up a few default symlinks
-       local required_applets='[ ash sh mkdir mknod mount uname echo cut cat 
touch'
+       local required_applets='[ ash sh mkdir mknod mount uname echo chmod cut 
cat touch'
        local required_applet=
        for required_applet in ${required_applets}
        do

Reply via email to