1 |
commit: 88e1dd1c2ab49f232fed596927c15c3781fc6b28 |
2 |
Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> |
3 |
AuthorDate: Fri Aug 28 15:22:56 2020 +0000 |
4 |
Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> |
5 |
CommitDate: Fri Aug 28 16:35:59 2020 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=88e1dd1c |
7 |
|
8 |
defaults/linuxrc: Add gksosreport |
9 |
|
10 |
To help debugging, 'gksosreport' was added (idea was borrowed from dracut): |
11 |
|
12 |
Whenever a user run into a problem and get to a rescue shell, running "gksosreport" |
13 |
will generate /run/initramfs/gksosreport.txt containing useful debug information |
14 |
suitable to attach to bug reports. |
15 |
|
16 |
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org> |
17 |
|
18 |
defaults/gksosreport.sh | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ |
19 |
defaults/initrd.scripts | 20 +++++++++---- |
20 |
defaults/linuxrc | 4 +-- |
21 |
gen_initramfs.sh | 8 +++++- |
22 |
4 files changed, 98 insertions(+), 8 deletions(-) |
23 |
|
24 |
diff --git a/defaults/gksosreport.sh b/defaults/gksosreport.sh |
25 |
new file mode 100644 |
26 |
index 0000000..03b44b6 |
27 |
--- /dev/null |
28 |
+++ b/defaults/gksosreport.sh |
29 |
@@ -0,0 +1,74 @@ |
30 |
+#!/bin/sh |
31 |
+ |
32 |
+echo 'Generating "/run/initramfs/gksosreport.txt" ...' |
33 |
+ |
34 |
+if [ ! -d /run/initramfs ] |
35 |
+then |
36 |
+ mkdir -p /run/initramfs |
37 |
+ chmod 0750 /run/initramfs |
38 |
+fi |
39 |
+ |
40 |
+exec >/run/initramfs/gksosreport.txt 2>&1 |
41 |
+ |
42 |
+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' |
43 |
+ |
44 |
+echo "Genkernel SOS report from $(date +'%Y-%m-%d %H:%M:%S'):" |
45 |
+ |
46 |
+set -x |
47 |
+ |
48 |
+cat /lib/dracut/dracut-gk-version.info |
49 |
+ |
50 |
+cat /lib/dracut/build-parameter.txt |
51 |
+ |
52 |
+cat /proc/cmdline | sed -e "${PWFILTER}" |
53 |
+ |
54 |
+[ -f /etc/cmdline ] && cat /etc/cmdline | sed -e "${PWFILTER}" |
55 |
+ |
56 |
+lspci -k |
57 |
+ |
58 |
+lsmod |
59 |
+ |
60 |
+find /lib/modules/$(uname -r) -type f |
61 |
+ |
62 |
+cat /proc/self/mountinfo |
63 |
+cat /proc/mounts |
64 |
+ |
65 |
+blkid |
66 |
+blkid -o udev |
67 |
+ |
68 |
+ls -l /dev/disk/by* |
69 |
+ |
70 |
+if hash lvm >/dev/null 2>/dev/null |
71 |
+then |
72 |
+ lvm pvdisplay |
73 |
+ lvm vgdisplay |
74 |
+ lvm lvdisplay |
75 |
+fi |
76 |
+ |
77 |
+if hash dmsetup >/dev/null 2>/dev/null |
78 |
+then |
79 |
+ dmsetup ls --tree |
80 |
+fi |
81 |
+ |
82 |
+if [ -e /proc/mdstat ] |
83 |
+then |
84 |
+ cat /proc/mdstat |
85 |
+fi |
86 |
+ |
87 |
+if hash cryptsetup >/dev/null 2>/dev/null |
88 |
+then |
89 |
+ if [ -e /dev/mapper/root ] |
90 |
+ then |
91 |
+ cryptsetup status /dev/mapper/root |
92 |
+ fi |
93 |
+fi |
94 |
+ |
95 |
+if hash ip >/dev/null 2>/dev/null |
96 |
+then |
97 |
+ ip link |
98 |
+ ip addr |
99 |
+fi |
100 |
+ |
101 |
+dmesg | sed -e "${PWFILTER}" |
102 |
+ |
103 |
+[ -f /run/initramfs/init.log ] && cat /run/initramfs/init.log | sed -e "${PWFILTER}" |
104 |
|
105 |
diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts |
106 |
index 36f4791..7a84755 100644 |
107 |
--- a/defaults/initrd.scripts |
108 |
+++ b/defaults/initrd.scripts |
109 |
@@ -983,7 +983,7 @@ check_loop() { |
110 |
bad_msg 'Please export LOOP with a valid location, or reboot and pass a proper loop=...' |
111 |
bad_msg 'kernel command line!' |
112 |
|
113 |
- run_shell |
114 |
+ run_emergency_shell |
115 |
fi |
116 |
} |
117 |
|
118 |
@@ -1001,6 +1001,14 @@ run() { |
119 |
return ${retval} |
120 |
} |
121 |
|
122 |
+run_emergency_shell() { |
123 |
+ echo |
124 |
+ gksosreport |
125 |
+ good_msg 'You might want to save "/run/initramfs/gksosreport.txt" to a USB stick or /boot' |
126 |
+ good_msg 'after mounting them and attach it to a bug report.' |
127 |
+ run_shell |
128 |
+} |
129 |
+ |
130 |
run_shell() { |
131 |
if [ -f "${GK_USERINTERACTION_DISABLED_STATEFILE}" ] |
132 |
then |
133 |
@@ -1092,7 +1100,7 @@ test_success() { |
134 |
error_string=${1} |
135 |
error_string="${error_string:-Failed to run command}" |
136 |
bad_msg "${error_string}; Failing back to the shell ..." |
137 |
- run_shell |
138 |
+ run_emergency_shell |
139 |
fi |
140 |
} |
141 |
|
142 |
@@ -1347,7 +1355,7 @@ prompt_user() { |
143 |
'shell') |
144 |
eval ${1}'='${oldvalue} |
145 |
warn_msg "To leave and try again just press <Ctrl>+D" |
146 |
- run_shell |
147 |
+ run_emergency_shell |
148 |
;; |
149 |
'') |
150 |
eval ${1}'='${oldvalue} |
151 |
@@ -1799,7 +1807,7 @@ openLUKS() { |
152 |
# if crypt_silent=1 and some error occurs, enter shell quietly |
153 |
elif [ \( ${CRYPT_SILENT} -eq 1 \) -a \( \( \( ${DEV_ERROR} -eq 1 \) -o \( ${KEY_ERROR} -eq 1 \) \) -o \( ${KEYDEV_ERROR} -eq 1 \) \) ] |
154 |
then |
155 |
- run_shell |
156 |
+ run_emergency_shell |
157 |
elif [ ${DEV_ERROR} -eq 1 ] |
158 |
then |
159 |
prompt_user "LUKS_DEVICE" "${LUKS_NAME}" |
160 |
@@ -2487,7 +2495,7 @@ cdupdate() { |
161 |
if [ "$?" != '0' ] |
162 |
then |
163 |
bad_msg "Executing cdupdate.sh failed!" |
164 |
- run_shell |
165 |
+ run_emergency_shell |
166 |
fi |
167 |
else |
168 |
good_msg 'No cdupdate.sh script found, skipping ...' |
169 |
@@ -2511,6 +2519,8 @@ rundebugshell() { |
170 |
if is_debug |
171 |
then |
172 |
good_msg 'Starting debug shell as requested by "debug" option.' |
173 |
+ good_msg "Run '${BOLD}gksosreport${NORMAL}' to generate debug report" |
174 |
+ good_msg "in case you want to file a bug report." |
175 |
else |
176 |
return 0 |
177 |
fi |
178 |
|
179 |
diff --git a/defaults/linuxrc b/defaults/linuxrc |
180 |
index 061d3e0..e96b637 100644 |
181 |
--- a/defaults/linuxrc |
182 |
+++ b/defaults/linuxrc |
183 |
@@ -1071,7 +1071,7 @@ then |
184 |
grep -Fq squashfs /proc/filesystems || \ |
185 |
bad_msg "HINT: Your kernel does not know filesystem \"squashfs\"." |
186 |
fi |
187 |
- run_shell |
188 |
+ run_emergency_shell |
189 |
} |
190 |
fi |
191 |
|
192 |
@@ -1188,7 +1188,7 @@ FSTAB |
193 |
) || |
194 |
{ |
195 |
bad_msg "Copying failed, dropping into a shell." |
196 |
- run_shell |
197 |
+ run_emergency_shell |
198 |
} |
199 |
|
200 |
# Now we do the links. |
201 |
|
202 |
diff --git a/gen_initramfs.sh b/gen_initramfs.sh |
203 |
index 27e98fc..315bb22 100755 |
204 |
--- a/gen_initramfs.sh |
205 |
+++ b/gen_initramfs.sh |
206 |
@@ -348,6 +348,12 @@ append_base_layout() { |
207 |
echo "Genkernel $GK_V" > "${TDIR}"/etc/build_id \ |
208 |
|| gen_die "Failed to create '${TDIR}/etc/build_id'!" |
209 |
|
210 |
+ cp -a "${GK_SHARE}"/defaults/gksosreport.sh "${TDIR}"/usr/sbin/gksosreport \ |
211 |
+ || gen_die "Failed to copy '${GK_SHARE}/defaults/gksosreport.sh' to '${TDIR}/usr/sbin/gksosreport'" |
212 |
+ |
213 |
+ chmod 0755 "${TDIR}"/usr/sbin/gksosreport \ |
214 |
+ || gen_die "Failed to chmod of '${TDIR}/usr/sbin/gksosreport'!" |
215 |
+ |
216 |
# Allow lsinitrd from dracut to process our initramfs |
217 |
echo "$(cat "${TDIR}/etc/build_id") ($(cat "${TDIR}/etc/build_date"))" > "${TDIR}"/lib/dracut/dracut-gk-version.info \ |
218 |
|| gen_die "Failed to create '${TDIR}/lib/dracut/dracut-gk-version.info'!" |
219 |
@@ -474,7 +480,7 @@ append_busybox() { |
220 |
done |
221 |
|
222 |
# Set up a few default symlinks |
223 |
- local required_applets='[ ash sh mkdir mknod mount uname echo cut cat touch' |
224 |
+ local required_applets='[ ash sh mkdir mknod mount uname echo chmod cut cat touch' |
225 |
local required_applet= |
226 |
for required_applet in ${required_applets} |
227 |
do |