X-Git-Url: http://git.grml.org/?a=blobdiff_plain;ds=sidebyside;f=scripts%2Flive-helpers;h=02c3e55ac9fa855d8429a728828b7c3da4e98127;hb=3ffb848024ced8a2eea2f14d81a7ce51a216f47d;hp=e74108c6e6965aa3faefd51785bdced347f7a406;hpb=1e0a488b895cd6e2bf7141aa730f17da42a490f7;p=live-boot-grml.git diff --git a/scripts/live-helpers b/scripts/live-helpers index e74108c..02c3e55 100644 --- a/scripts/live-helpers +++ b/scripts/live-helpers @@ -1,16 +1,6 @@ #!/bin/sh # live-initramfs helper functions, used by live-initramfs on boot and by live-snapshot -if [ "${BUILD_SYSTEM}" = "Ubuntu" ] -then - MP_QUIET="-Q" -elif [ "${BUILD_SYSTEM}" = "Debian" ] -then - MP_QUIET="-q" -else - MP_QUIET="" -fi - if [ ! -x "/bin/fstype" ] then # klibc not in path -> not in initramfs @@ -39,11 +29,32 @@ subdevices () echo ${r} } +is_supported_fs () +{ + # FIXME: do something better like the scan of supported filesystems + fstype="${1}" + + case ${fstype} in + vfat|iso9660|udf|ext2|ext3|ntfs|jffs2) + return 0 + ;; + esac + + return 1 +} + get_fstype () { local FSTYPE local FSSIZE + # fstype misreports LUKS devices + if is_luks "${1}" + then + /lib/udev/vol_id -t ${1} 2>/dev/null + return + fi + eval $(fstype < ${1}) if [ "${FSTYPE}" != "unknown" ] @@ -156,8 +167,9 @@ setup_loop () local pattern=${3} local offset=${4} local encryption=${5} + local readonly=${6} - modprobe ${MP_QUIET} -b "${module}" + modprobe -q -b "${module}" udevsettle for loopdev in ${pattern} @@ -167,6 +179,11 @@ setup_loop () dev=$(sys2dev "${loopdev}") options='' + if [ -n ${readonly} ] + then + options="${options} -r" + fi + if [ 0 -lt "${offset}" ] then options="${options} -o ${offset}" @@ -181,9 +198,10 @@ setup_loop () do load_keymap - echo -n "Enter passphrase for ${fspath}: " >&6 + echo -n "Enter passphrase for root filesystem: " >&6 read -s passphrase echo "${passphrase}" > /tmp/passphrase + unset passphrase exec 9&6 + echo + echo -n "There was an error decrypting the root filesystem ... Retry? [Y/n] " >&6 read answer - if [ 'no' = "${answer}" ] + if [ "$(echo "${answer}" | cut -b1 | tr A-Z a-z)" = "n" ] then unset answer break @@ -235,7 +254,7 @@ find_cow_device () pers_label="${1}" cow_backing="/${pers_label}-backing" - for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop) + for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram | grep -v fd) do for dev in $(subdevices "${sysblock}") do @@ -245,20 +264,24 @@ find_cow_device () then echo "${devname}" return - elif [ "$(get_fstype ${devname})" = "vfat" ] - then - # FIXME: all supported block devices should be scanned - mkdir -p "${cow_backing}" - try_mount "${devname}" "${cow_backing}" "rw" - - if [ -e "${cow_backing}/${pers_label}" ] - then - echo $(setup_loop "${cow_backing}/${pers_label}" "loop" "/sys/block/loop*") - return 0 - else - umount ${cow_backing} - fi fi + + case "$(get_fstype ${devname})" in + vfat|ext2|ext3|jffs2) + mkdir -p "${cow_backing}" + try_mount "${devname}" "${cow_backing}" "rw" + + if [ -f "${cow_backing}/${pers_label}" ] + then + echo $(setup_loop "${cow_backing}/${pers_label}" "loop" "/sys/block/loop*") + return 0 + else + umount ${cow_backing} + fi + ;; + *) + ;; + esac done done } @@ -271,22 +294,21 @@ find_files () filenames="${1}" snap_backing="/snap-backing" - for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop) + for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram | grep -v fd) do for dev in $(subdevices "${sysblock}") do devname=$(sys2dev "${dev}") devfstype="$(get_fstype ${devname})" - if [ "${devfstype}" = "vfat" ] || [ "${devfstype}" = "ext2" ] || [ "${devfstype}" = "ext3" ] + if is_supported_fs ${devfstype} then - # FIXME: all supported block devices should be scanned mkdir -p "${snap_backing}" try_mount "${devname}" "${snap_backing}" "ro" for filename in ${filenames} - do - if [ -e "${snap_backing}/${filename}" ] + do + if [ -f "${snap_backing}/${filename}" ] then echo "${devname} ${snap_backing} ${filename}" return 0 @@ -298,3 +320,34 @@ find_files () done done } + +get_mac () +{ + mac="" + + for adaptor in /sys/class/net/* + do + status="$(cat ${adaptor}/iflink)" + + if [ "${status}" -eq 2 ] + then + mac="$(cat ${adaptor}/address)" + mac="$(echo ${mac} | sed 's/:/-/g' | tr '[a-z]' '[A-Z]')" + fi + done + + echo ${mac} +} + +is_luks() +{ + devname="${1}" + if [ -x /sbin/cryptsetup ] + then + /sbin/cryptsetup isLuks "${devname}" 2>/dev/null || ret=${?} + return ${ret} + else + return 1 + fi + +}