From d508e57c3b58f3f12ae9cd6a939d4beb839943a5 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sun, 11 Apr 2021 18:59:17 +0000 Subject: [PATCH] Support adding module list to initrd --- scripts/armbian_rootenc_setup.sh | 51 ++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/scripts/armbian_rootenc_setup.sh b/scripts/armbian_rootenc_setup.sh index 2261455..f04b38b 100755 --- a/scripts/armbian_rootenc_setup.sh +++ b/scripts/armbian_rootenc_setup.sh @@ -12,6 +12,7 @@ CONFIG_VARS=' UNLOCKING_USERHOST IP_ADDRESS ADD_ALL_MODS + ADD_MODS USE_LOCAL_AUTHORIZED_KEYS ' STATES=' @@ -22,18 +23,21 @@ STATES=' target_configured ' USER_OPTS_INFO=" - NO_CLEANUP no cleanup of mounts after program run - FORCE_REBUILD force full rebuild - FORCE_RECONFIGURE force reconfiguration - FORCE_REFORMAT_ROOT force reformat of encrypted root partition - ADD_ALL_MODS add all currently loaded modules to initramfs - USE_LOCAL_AUTHORIZED_KEYS use local 'authorized_keys' file - PARTITION_ONLY partition and create filesystems only - ERASE zero boot sector, boot partition and beginning of root partition - ROOTENC_REUSE_FS reuse existing filesystems (for development only) - ROOTENC_TESTING developer tweaks - ROOTENC_PAUSE pause along the way - ROOTENC_IGNORE_APT_ERRORS continue even if apt update fails + NO_CLEANUP - no cleanup of mounts after program run + FORCE_REBUILD - force full rebuild + FORCE_RECONFIGURE - force reconfiguration + FORCE_REFORMAT_ROOT - force reformat of encrypted root partition + ADD_ALL_MODS - add all currently loaded modules to initramfs + ADD_MODS y add specified modules to initramfs + USE_LOCAL_AUTHORIZED_KEYS - use local 'authorized_keys' file + PARTITION_ONLY - partition and create filesystems only + ERASE - zero boot sector, boot partition and beginning of root partition + ROOTENC_REUSE_FS - reuse existing filesystems (for development only) + ROOTENC_TESTING - developer tweaks + ROOTENC_PAUSE - pause along the way + ROOTENC_IGNORE_APT_ERRORS - continue even if apt update fails + SERIAL_CONSOLE - enable disk unlocking via serial console + VERBOSE - produce verbose output " RSYNC_VERBOSITY='--info=progress2' @@ -47,6 +51,7 @@ print_help() { '-F' Force a complete rebuild of target system '-m' Add all currently loaded modules to the initramfs (may help fix blank screen on bootup issues) + '-o' Add specified modules to the initramfs (comma-separated list) '-p' Partition and create filesystems only. Do not copy data '-R' Force reformat of encrypted root partition '-s' Use 'authorized_keys' file from working directory, if available @@ -178,12 +183,16 @@ _do_header() { } _warn_user_opts() { - local out opt text + local out opt have_optarg text - while read opt text; do + while read opt have_optarg text; do [ "$opt" ] || continue if [ "${!opt}" ]; then - out+=" + $text\n" + if [ $have_optarg == 'y' ]; then + out+=" + $text (${!opt})\n" + else + out+=" + $text\n" + fi fi done <<<$USER_OPTS_INFO @@ -557,6 +566,7 @@ _update_state_from_config_vars() { } [ $cIP_ADDRESS != $IP_ADDRESS ] && cfgvar_changed+=' IP_ADDRESS' target_configured='n' [ "$cADD_ALL_MODS" != "$ADD_ALL_MODS" ] && cfgvar_changed+=' ADD_ALL_MODS' target_configured='n' + [ "$cADD_MODS" != "$ADD_MODS" ] && cfgvar_changed+=' ADD_MODS' target_configured='n' [ "$IP_ADDRESS" -a "$cUSE_LOCAL_AUTHORIZED_KEYS" != "$USE_LOCAL_AUTHORIZED_KEYS" ] && { cfgvar_changed+=' USE_LOCAL_AUTHORIZED_KEYS' target_configured='n' } @@ -936,13 +946,15 @@ edit_initramfs_conf() { edit_initramfs_modules() { local modlist file hdr - [ "$ADD_ALL_MODS" ] && { + [ "$ADD_ALL_MODS" -o "$ADD_MODS" ] && { if ! _kernels_match; then warn 'Host and target kernels do not match. Not adding modules to initramfs' elif ! _distros_match; then warn 'Host and target distros do not match. Not adding modules to initramfs' else - modlist=$(lsmod | cut -d ' ' -f1 | tail -n+2) + local g_mods='libcomposite u_ether usb_f_rndis g_ether usb_f_eem' + [ "$ADD_ALL_MODS" ] && modlist=$(lsmod | cut -d ' ' -f1 | tail -n+2) + [ "$ADD_MODS" ] && modlist+=$(echo; for m in ${ADD_MODS//,/ }; do echo $m; done) fi } file="$TARGET_ROOT/etc/initramfs-tools/modules" @@ -1117,7 +1129,7 @@ _set_env_vars() { set -e -while getopts hCdmfFpRsuvz OPT +while getopts hCdmofFpRsuvz OPT do case "$OPT" in h) print_help; exit ;; @@ -1125,6 +1137,7 @@ do F) FORCE_REBUILD='y' ;; f) FORCE_RECONFIGURE='y' ;; m) ADD_ALL_MODS='y' ;; + o) ADD_MODS=$OPTARG ;; p) PARTITION_ONLY='y' ;; R) FORCE_REFORMAT_ROOT='y' ;; s) USE_LOCAL_AUTHORIZED_KEYS='y' ;; @@ -1134,7 +1147,7 @@ do z) ERASE='y' ;; *) exit ;; esac - ORIG_OPTS+="-$OPT " + ORIG_OPTS+="-$OPT $OPTARG " done shift $((OPTIND-1))