X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=scripts%2Flive-helpers;h=2fcf44117ed76f6c983f77e5cdc8296759db5672;hb=94d9edb6495d0c8a50841f21e16744463e2f952e;hp=9a80b110a2cf3762bf9eca8cb1bfca499ea81016;hpb=f92f379a6e868bc486c050ff5ca81c1707da7374;p=live-boot-grml.git diff --git a/scripts/live-helpers b/scripts/live-helpers index 9a80b11..2fcf441 100644 --- a/scripts/live-helpers +++ b/scripts/live-helpers @@ -388,7 +388,7 @@ Arguments () then PERSISTENCE_ENCRYPTION="none" export PERSISTENCE_ENCRYPTION - elif echo ${PERSISTENCE_ENCRYPTION} | grep -qe "\" + elif is_in_comma_sep_list luks ${PERSISTENCE_ENCRYPTION} then if ! modprobe dm-crypt then @@ -418,6 +418,27 @@ Arguments () fi } +is_in_list_separator_helper () { + local sep=${1} + shift + local element=${1} + shift + local list=${*} + echo ${list} | grep -qe "^\(.*${sep}\)\?${element}\(${sep}.*\)\?$" +} + +is_in_space_sep_list () { + local element=${1} + shift + is_in_list_separator_helper "[[:space:]]" "${element}" "${*}" +} + +is_in_comma_sep_list () { + local element=${1} + shift + is_in_list_separator_helper "," "${element}" "${*}" +} + sys2dev () { sysdev=${1#/sys} @@ -449,9 +470,9 @@ storage_devices() do fulldevname=$(sys2dev "${sysblock}") - if echo "${black_listed_devices}" | grep -qe "\<${fulldevname}\>" || \ + if is_in_space_sep_list ${fulldevname} ${black_listed_devices} || \ [ -n "${white_listed_devices}" ] && \ - echo "${white_listed_devices}" | grep -qve "\<${fulldevname}\>" + ! is_in_space_sep_list ${fulldevname} ${white_listed_devices} then # skip this device entirely continue @@ -461,7 +482,7 @@ storage_devices() do devname=$(sys2dev "${dev}") - if echo "${black_listed_devices}" | grep -qe "\<${devname}\>" + if is_in_space_sep_list ${devname} ${black_listed_devices} then # skip this subdevice continue @@ -736,13 +757,15 @@ try_mount () fstype=$(get_fstype "${dev}") fi mount -t "${fstype}" -o "${opts}" "${dev}" "${mountp}" || \ - ( echo "SKIPPING: Cannot mount ${dev} on ${mountp}, fstype=${fstype}, options=${opts}" > live-boot.log && return 0 ) + ( echo "SKIPPING: Cannot mount ${dev} on ${mountp}, fstype=${fstype}, options=${opts}" > boot.log && return 0 ) fi } mount_persistence_media () { local device=${1} + local probe=${2} + local backing="/live/persistence/$(basename ${device})" mkdir -p "${backing}" @@ -760,7 +783,8 @@ mount_persistence_media () echo ${backing} return 0 else - log_warning_msg "Failed to mount persistence media ${device}" + [ -z "${probe}" ] && log_warning_msg "Failed to mount persistence media ${device}" + rmdir "${backing}" return 1 fi elif [ "${backing}" != "${old_backing}" ] @@ -770,7 +794,8 @@ mount_persistence_media () echo ${backing} return 0 else - log_warning_msg "Failed to move persistence media ${device}" + [ -z "${probe}" ] && log_warning_msg "Failed to move persistence media ${device}" + rmdir "${backing}" return 1 fi fi @@ -906,7 +931,7 @@ probe_for_file_name () local dev="${3}" local ret="" - local backing="$(mount_persistence_media ${dev})" + local backing="$(mount_persistence_media ${dev} probe)" if [ -z "${backing}" ] then return @@ -969,7 +994,9 @@ find_persistence_media () local white_listed_devices="${3}" local ret="" - for dev in $(storage_devices "" "${white_listed_devices}") + local black_listed_devices="$(what_is_mounted_on /live/image)" + + for dev in $(storage_devices "${black_listed_devices}" "${white_listed_devices}") do local result="" @@ -978,7 +1005,7 @@ find_persistence_media () # in order to probe any filesystem it contains, like we do # below. activate_custom_mounts() also depends on that any luks # device already has been opened. - if echo ${PERSISTENCE_ENCRYPTION} | grep -qe "\" && \ + if is_in_comma_sep_list luks ${PERSISTENCE_ENCRYPTION} && \ is_luks_partition ${dev} then if luks_device=$(open_luks_device "${dev}") @@ -988,14 +1015,14 @@ find_persistence_media () # skip $dev since we failed/chose not to open it continue fi - elif echo ${PERSISTENCE_ENCRYPTION} | grep -qve "\" + elif ! is_in_comma_sep_list none ${PERSISTENCE_ENCRYPTION} then # skip $dev since we don't allow unencrypted storage continue fi # Probe for matching GPT partition names or filesystem labels - if echo ${PERSISTENCE_STORAGE} | grep -qe "\" + if is_in_comma_sep_list filesystem ${PERSISTENCE_STORAGE} then result=$(probe_for_gpt_name "${overlays}" "${snapshots}" ${dev}) if [ -n "${result}" ] @@ -1013,7 +1040,7 @@ find_persistence_media () fi # Probe for files with matching name on mounted partition - if echo ${PERSISTENCE_STORAGE} | grep -qe "\" + if is_in_comma_sep_list file ${PERSISTENCE_STORAGE} then result=$(probe_for_file_name "${overlays}" "${snapshots}" ${dev}) if [ -n "${result}" ]