X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=scripts%2Fcasper;h=545942e81edb1643376d062ecbfed41d144587d0;hb=refs%2Ftags%2Fdebian%2F1.81%2Bdebian-2;hp=f070aa28ff0f05bb956d811bf3ba5313eb846d90;hpb=d6720db9b86cd1f0668123d069b5547dca4c713c;p=live-boot-grml.git diff --git a/scripts/casper b/scripts/casper index f070aa2..545942e 100644 --- a/scripts/casper +++ b/scripts/casper @@ -14,7 +14,7 @@ home_snapshot_label="home-sn" USERNAME="casper" USERFULLNAME="Live session user" HOSTNAME="live" -BUILD_SYSTEM="Debian" +BUILD_SYSTEM="Custom" mkdir -p $mountpoint @@ -71,6 +71,8 @@ parse_cmdline () export CASPERGETTY=1 ;; bootfrom=*|live-media=*) export LIVEMEDIA=${x#*=} ;; + live-media-encryption=*|encryption=*) + export LIVEMEDIA_ENCRYPTION=${x#*=} ;; live-media-timeout=*) export LIVEMEDIA_TIMEOUT=${x#live-media-timeout=} ;; live-media-offset=*) @@ -87,6 +89,8 @@ parse_cmdline () export KVARIANT=${x#*=} ;; kmodel=*|console-setup/modelcode=*) export KMODEL=${x#*=} ;; + module=*) + export MODULE=${x#module=} ;; preseed/file=*|file=*) export LOCATION="${x#*=}" ;; */*=*) @@ -95,7 +99,7 @@ parse_cmdline () PRESEEDS="${PRESEEDS}\"${question}=${value}\" " ;; console=*) - export DEFCONSOLE=$(sed -e 's%.*console=%console=%' /proc/cmdline) ;; + export DEFCONSOLE="${x#*=}" ;; esac done @@ -109,6 +113,10 @@ parse_cmdline () export NETBOOT fi fi + + if [ -z "${MODULE}" ]; then + MODULE=order + fi } is_casper_path() { @@ -126,7 +134,7 @@ is_casper_path() { get_backing_device() { case "$1" in *.squashfs|*.ext2) - echo $(setup_loop "$1" "loop" "/sys/block/loop*") + echo $(setup_loop "$1" "loop" "/sys/block/loop*" '0' "${LIVEMEDIA_ENCRYPTION}") ;; *.dir) echo "directory" @@ -167,8 +175,7 @@ is_nice_device() { return 1 } -is_supported_fs () -{ +is_supported_fs () { # FIXME: do something better like the scan of supported filesystems fstype="${1}" case ${fstype} in @@ -398,31 +405,48 @@ setup_unionfs() { # Let's just mount the read-only file systems first rofsstring="" rofslist="" - if [ "${NETBOOT}" == "nfs" ] ; then + if [ "${NETBOOT}" = "nfs" ] ; then roopt="nfsro" # go aroung a bug in nfs-unionfs locking else roopt="ro" fi + # Read image names from ${MODULE}.lst if it exists + if [ -e "${image_directory}/${MODULE}.lst" ]; then + for image in $(cat "${image_directory}/${MODULE}.lst"); do + image_string="${image_string} ${image_directory}/${image}"; + done + else + # If ${MODULE}.lst does not exist, create a list of images + for image_type in "ext2" "squashfs" "dir"; do + for image in "${image_directory}"/*."${image_type}"; do + if [ -e "${image}" ]; then + image_string="${image_string} ${image}"; + fi + done + done + # Now sort the list + image_string=$(echo ${image_string} | sed -e 's/ /\n/g' | sort ) + fi + mkdir -p "${croot}" - for image_type in "ext2" "squashfs" "dir" ; do - for image in "${image_directory}"/*."${image_type}"; do - imagename=$(basename "${image}") - if [ -d "${image}" ]; then - # it is a plain directory: do nothing - rofsstring="${image}=${roopt}:${rofsstring}" - rofslist="${image} ${rofslist}" - elif [ -f "${image}" ]; then - backdev=$(get_backing_device "$image") - fstype=$(get_fstype "${backdev}") - if [ "${fstype}" = "unknown" ]; then - panic "Unknown file system type on ${backdev} (${image})" - fi - mkdir -p "${croot}/${imagename}" - mount -t "${fstype}" -o ro "${backdev}" "${croot}/${imagename}" || panic "Can not mount $backdev ($image) on ${croot}/${imagename}" && rofsstring="${croot}/${imagename}=${roopt}:${rofsstring}" && rofslist="${croot}/${imagename} ${rofslist}" + for image in ${image_string}; do + imagename=$(basename "${image}") + if [ -d "${image}" ]; then + # it is a plain directory: do nothing + rofsstring="${image}=${roopt}:${rofsstring}" + rofslist="${image} ${rofslist}" + elif [ -f "${image}" ]; then + backdev=$(get_backing_device "$image") + fstype=$(get_fstype "${backdev}") + if [ "${fstype}" = "unknown" ]; then + panic "Unknown file system type on ${backdev} (${image})" fi - done + mkdir -p "${croot}/${imagename}" + mount -t "${fstype}" -o ro "${backdev}" "${croot}/${imagename}" || panic "Can not mount $backdev ($image) on ${croot}/${imagename}" && rofsstring="${croot}/${imagename}=${roopt}:${rofsstring}" && rofslist="${croot}/${imagename} ${rofslist}" + fi done + rofsstring=${rofsstring%:} mkdir -p /cow @@ -487,7 +511,7 @@ check_dev () fi if [ -n "${LIVEMEDIA_OFFSET}" ]; then - loopdevname=$(setup_loop "${devname}" "loop" "/sys/block/loop*" "${LIVEMEDIA_OFFSET}") + loopdevname=$(setup_loop "${devname}" "loop" "/sys/block/loop*" "${LIVEMEDIA_OFFSET}" '') devname="${loopdevname}" fi @@ -589,7 +613,7 @@ mountroot() { fi else # Scan local devices for the image - for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13; do + for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19; do livefs_root=$(find_livefs $i) if [ -n "${livefs_root}" ]; then break @@ -602,15 +626,15 @@ mountroot() { panic "Unable to find a medium containing a live file system" fi - if [ -n "${TORAM}" ]; then + if [ "${TORAM}" ]; then live_dest="ram" - elif [ -n "${TODISK}" ]; then + elif [ "${TODISK}" ]; then live_dest="${TODISK}" fi - if [ -n "${live_dest}" ]; then - [ "$quiet" != "y" ] && log_begin_msg "Copying live_media to ${live_dest}" + if [ "${live_dest}" ]; then + log_begin_msg "Copying live_media to ${live_dest}" copy_live_to "${livefs_root}" "${live_dest}" - [ "$quiet" != "y" ] && log_end_msg + log_end_msg fi mount_images_in_directory "${livefs_root}" "${rootmnt}"