commit: 5124ba044c454c112e756c5e8024650a64008609 Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> AuthorDate: Tue Aug 6 15:11:39 2019 +0000 Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> CommitDate: Tue Aug 6 20:40:31 2019 +0000 URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=5124ba04
linuxrc: Rework debug mode This commit will introduce $GK_DEBUGMODE_STATEFILE and a new function is_debug() to check if debug mode is enabled or not. Using a state file instead of a variable will allow us to enable/disable debug mode from outside: I.e. when you have booted in debug mode and are working remotely, you can now remove the state file, which will disable debug mode. This will allow you to resume booting without dropping in another local debug shell. It works the other way, too: When you did NOT boot in debug mode but experiencing a problem and want to drop in another debug shell after next step, you can now enable debug mode by creating the state file. Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org> defaults/initrd.defaults | 1 + defaults/initrd.scripts | 34 ++++++++++++++++++++++++---------- defaults/linuxrc | 2 +- defaults/unlock-luks.sh | 2 +- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/defaults/initrd.defaults b/defaults/initrd.defaults index 704a5a2..89d13ac 100644 --- a/defaults/initrd.defaults +++ b/defaults/initrd.defaults @@ -70,6 +70,7 @@ CDROOT_MARKER='/livecd' VERIFY=0 IP='dhcp' +GK_DEBUGMODE_STATEFILE="/tmp/debug.enabled" GK_NET_DHCP_PIDFILE='/var/run/udhcpc.pid' GK_NET_DHCP_RETRIES=3 GK_NET_GW= diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts index 1f7dc94..994f0f0 100644 --- a/defaults/initrd.scripts +++ b/defaults/initrd.scripts @@ -49,7 +49,7 @@ modules_scan() { break fi - if [ -n "${DEBUG}" ] + if is_debug then printf "%b" "${BOLD} ::${NORMAL} " printf "%b" "Scanning for ${x} ..." @@ -58,12 +58,12 @@ modules_scan() { modprobe ${x} >/dev/null 2>&1 loaded=${?} - [ -n "${DEBUG}" -a "${loaded}" = "0" ] && \ + is_debug && [ "${loaded}" = "0" ] && \ echo "loaded" - [ -n "${DEBUG}" -a "${loaded}" != "0" ] && \ + is_debug && [ "${loaded}" != "0" ] && \ echo "not loaded" - [ -z "${DEBUG}" -a "${loaded}" = "0" ] && \ + ! is_debug && [ "${loaded}" = "0" ] && \ [ -z "${QUIET}" ] && \ printf "%b" "${x} " else @@ -462,6 +462,17 @@ conf_rc_no_umounts() { fi } +is_debug() { + is_debug=1 + + if [ -f "${GK_DEBUGMODE_STATEFILE}" ] + then + is_debug=0 + fi + + return ${is_debug} +} + # is_int "${A}" ["${B}"..] # NOTE we consider a leading 0 false as it would be interpreted as octal is_int() { @@ -880,7 +891,7 @@ test_success() { # $2 hide flag good_msg() { - [ -n "${QUIET}" ] && [ -z "${DEBUG}" ] && return 0 + [ -n "${QUIET}" ] && ! is_debug && return 0 msg_string=${1} msg_string="${msg_string:-...}" @@ -888,7 +899,7 @@ good_msg() { } good_msg_n() { - [ -n "${QUIET}" ] && [ -z "${DEBUG}" ] && return 0 + [ -n "${QUIET}" ] && ! is_debug && return 0 msg_string=${1} msg_string="${msg_string:-...}" @@ -1943,7 +1954,7 @@ start_sshd() { # setup environment variables for the ssh login shell local varname= varvalue= touch "${CRYPT_ENV_FILE}" - for varname in CRYPT_ROOT CRYPT_ROOT_TRIM CRYPT_SILENT CRYPT_SWAP DEBUG + for varname in CRYPT_ROOT CRYPT_ROOT_TRIM CRYPT_SILENT CRYPT_SWAP do eval varvalue=\$${varname} echo "${varname}=${varvalue}" >> "${CRYPT_ENV_FILE}" @@ -2106,12 +2117,15 @@ setup_md_device() { } rundebugshell() { - if [ -n "${DEBUG}" ] + if is_debug then good_msg 'Starting debug shell as requested by "debug" option.' - good_msg "Stopping by: ${1}" - run_shell + else + return 0 fi + + good_msg "Stopping by: ${1}" + run_shell } do_resume() { diff --git a/defaults/linuxrc b/defaults/linuxrc index d729806..dcae3cc 100644 --- a/defaults/linuxrc +++ b/defaults/linuxrc @@ -153,7 +153,7 @@ do ;; # Debug Options debug) - DEBUG='yes' + touch "${GK_DEBUGMODE_STATEFILE}" ;; # Scan delay options scandelay=*) diff --git a/defaults/unlock-luks.sh b/defaults/unlock-luks.sh index cae5269..e8f28f6 100644 --- a/defaults/unlock-luks.sh +++ b/defaults/unlock-luks.sh @@ -106,7 +106,7 @@ main() { if [ -s "${LUKS_KEY}" ] then - if [ "${DEBUG}" != 'yes' ] + if ! is_debug then rm -f "${LUKS_KEY}" else