X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=scripts%2Flive;h=a73da84a600018f445a14f5fdb8141ef2c98788e;hb=refs%2Ftags%2Fupstream%2F1.95.3;hp=26fde4dbe8cdef4e980e4fdaf9384b899fd43637;hpb=d0706d5b1f5dcf6d0a63685ebc6a1502f977bce0;p=live-boot-grml.git diff --git a/scripts/live b/scripts/live index 26fde4d..a73da84 100755 --- a/scripts/live +++ b/scripts/live @@ -2,24 +2,25 @@ # set -e -export PATH=/root/usr/bin:/root/usr/sbin:/root/bin:/root/sbin:/usr/bin:/usr/sbin:/bin:/sbin +export PATH="/root/usr/bin:/root/usr/sbin:/root/bin:/root/sbin:/usr/bin:/usr/sbin:/bin:/sbin" echo "/root/lib" >> /etc/ld.so.conf echo "/root/usr/lib" >> /etc/ld.so.conf -mountpoint=/live_media +mountpoint="/live/image" +LIVE_MEDIA_PATH="live" root_persistence="live-rw" home_persistence="home-rw" root_snapshot_label="live-sn" home_snapshot_label="home-sn" -USERNAME=user +USERNAME="user" USERFULLNAME="Live user" -HOSTNAME=host -BUILD_SYSTEM=Custom +HOSTNAME="host" +BUILD_SYSTEM="Custom" -mkdir -p $mountpoint +mkdir -p "${mountpoint}" [ -f /etc/live.conf ] && . /etc/live.conf export USERNAME USERFULLNAME HOSTNAME BUILD_SYSTEM @@ -30,45 +31,55 @@ if [ ! -f /live.vars ]; then touch /live.vars fi -parse_cmdline () +Arguments () { - PRESEEDS= + PRESEEDS="" - # looking for live-initramfs specifics options as kernel parameters - - for x in $(cat /proc/cmdline) + for ARGUMENT in `cat /proc/cmdline` do - case $x in + case "${ARGUMENT}" in access=*) - ACCESS=${x#access=} + ACCESS="${ARGUMENT#access=}" export ACCESS ;; console=*) - DEFCONSOLE="${x#*=}" + DEFCONSOLE="${ARGUMENT#*=}" export DEFCONFSOLE ;; + debug) + DEBUG="Yes" + export DEBUG + + set -x + ;; + + fetch=*) + FETCH="${ARGUMENT#fetch=}" + export FETCH + ;; + hostname=*) - HOSTNAME=${x#hostname=} + HOSTNAME="${ARGUMENT#hostname=}" LIVECONF="changed" export HOSTNAME LIVECONF ;; username=*) - USERNAME=${x#username=} + USERNAME="${ARGUMENT#username=}" LIVECONF="changed" export USERNAME LIVECONF ;; userfullname=*) - USERFULLNAME=${x#userfullname=} + USERFULLNAME="${ARGUMENT#userfullname=}" LIVECONF="changed" export USERFULLNAME LIVECONF ;; - ip*) - STATICIP=${x#ip=} + ip=*) + STATICIP="${ARGUMENT#ip=}" if [ -z "${STATICIP}" ] then @@ -79,70 +90,77 @@ parse_cmdline () ;; keyb=*|kbd-chooser/method=*) - KBD=${x#*=} + KBD="${ARGUMENT#*=}" export KBD ;; klayout=*|console-setup/layoutcode=*) - KLAYOUT=${x#*=} + KLAYOUT="${ARGUMENT#*=}" export KLAYOUT ;; kvariant=*|console-setup/variantcode=*) - KVARIANT=${x#*=} + KVARIANT="${ARGUMENT#*=}" export KVARIANT ;; kmodel=*|console-setup/modelcode=*) - KMODEL=${x#*=} + KMODEL="${ARGUMENT#*=}" + export KMODEL ;; koptions=*) - KOPTIONS=${x#koptions=} + KOPTIONS="${ARGUMENT#koptions=}" + export KOPTIONS ;; live-getty) - LIVE_GETTY=1 + LIVE_GETTY="1" export LIVE_GETTY ;; live-media=*|bootfrom=*) - LIVE_MEDIA=${x#*=} + LIVE_MEDIA="${ARGUMENT#*=}" export LIVE_MEDIA ;; live-media-encryption=*|encryption=*) - LIVE_MEDIA_ENCRYPTION=${x#*=} + LIVE_MEDIA_ENCRYPTION="${ARGUMENT#*=}" export LIVE_MEDIA_ENCRYPTION ;; live-media-offset=*) - LIVE_MEDIA_OFFSET=${x#live-media-offset=} + LIVE_MEDIA_OFFSET="${ARGUMENT#live-media-offset=}" export LIVE_MEDIA_OFFSET ;; + live-media-path=*) + LIVE_MEDIA_PATH="${ARGUMENT#live-media-path=}" + export LIVE_MEDIA_PATH + ;; + live-media-timeout=*) - LIVE_MEDIA_TIMEOUT=${x#live-media-timeout=} + LIVE_MEDIA_TIMEOUT="${ARGUMENT#live-media-timeout=}" export LIVE_MEDIA_TIMEOUT ;; locale=*|debian-installer/locale=*) - LOCALE=${x#*=} + LOCALE="${ARGUMENT#*=}" export LOCALE ;; module=*) - MODULE=${x#module=} + MODULE="${ARGUMENT#module=}" export MODULE ;; - netboot*) - NETBOOT=${x#netboot=} + netboot=*) + NETBOOT="${ARGUMENT#netboot=}" export NETBOOT ;; - nfsopts=) - NFSOPTS=${x#nfsopts=} + nfsopts=*) + NFSOPTS="${ARGUMENT#nfsopts=}" export NFSOPTS ;; @@ -156,6 +174,11 @@ parse_cmdline () export NOXAUTOLOGIN ;; + nofastboot) + NOFASTBOOT="Yes" + export NOFASTBOOT + ;; + nopersistent) PERSISTENT="" export PERSISTENT @@ -177,15 +200,33 @@ parse_cmdline () ;; preseed/file=*|file=*) - LOCATION="${x#*=}" + LOCATION="${ARGUMENT#*=}" export LOCATION ;; + url=*) + location="${ARGUMENT#url=}" + + mount -n -o bind /sys /root/sys + mount -n -o bind /proc /root/proc + mount -n -o bind /dev /root/dev + + mkdir -p /root/var/run/network + chroot /root ifup -a + chroot /root wget -P /tmp "$location" + chroot /root ifdown -a + + umount /root/sys + umount /root/proc + umount /root/dev + + LOCATION="/tmp/$(basename "$location")" + ;; + */*=*) - question="${x%%=*}" - value="${x#*=}" + question="${ARGUMENT%%=*}" + value="${ARGUMENT#*=}" PRESEEDS="${PRESEEDS}\"${question}=${value}\" " - export PRESEEDS ;; @@ -194,8 +235,13 @@ parse_cmdline () export SHOWMOUNTS ;; + timezone=*) + TIMEZONE="${ARGUMENT#timezone=}" + export TIMEZONE + ;; + todisk=*) - TODISK=${x#todisk=} + TODISK="${ARGUMENT#todisk=}" export TODISK ;; @@ -204,13 +250,23 @@ parse_cmdline () export TORAM ;; + union=*) + UNIONTYPE="${ARGUMENT#union=}" + export UNIONTYPE + ;; + + utc=*) + UTC="${ARGUMENT#utc=}" + export UTC + ;; + xdebconf) XDEBCONF="Yes" export XDEBCONF ;; xvideomode=*) - XVIDEOMODE="${x#xvideomode=}" + XVIDEOMODE="${ARGUMENT#xvideomode=}" export XVIDEOMODE ;; esac @@ -233,6 +289,13 @@ parse_cmdline () if [ -z "${MODULE}" ] then MODULE="filesystem" + export MODULE + fi + + if [ -z "${UNIONTYPE}" ] + then + UNIONTYPE="unionfs" + export UNIONTYPE fi } @@ -240,11 +303,11 @@ is_live_path() { DIRECTORY="${1}" - if [ -d "${DIRECTORY}"/live ] + if [ -d "${DIRECTORY}"/"${LIVE_MEDIA_PATH}" ] then for FILESYSTEM in squashfs ext2 ext3 xfs dir do - if [ "`echo ${DIRECTORY}/live/*.${FILESYSTEM}`" != "${DIRECTORY}/live/*.${FILESYSTEM}" ] + if [ "`echo ${DIRECTORY}/${LIVE_MEDIA_PATH}/*.${FILESYSTEM}`" != "${DIRECTORY}/${LIVE_MEDIA_PATH}/*.${FILESYSTEM}" ] then return 0 fi @@ -281,11 +344,12 @@ match_files_in_dir() { mount_images_in_directory() { directory="$1" rootmnt="$2" - if match_files_in_dir "$directory/live/*.squashfs" || - match_files_in_dir "$directory/live/*.ext2" || - match_files_in_dir "$directory/live/*.ext3" || - match_files_in_dir "$directory/live/*.dir"; then - setup_unionfs "$directory/live" "$rootmnt" + + if match_files_in_dir "$directory/${LIVE_MEDIA_PATH}/*.squashfs" || + match_files_in_dir "$directory/${LIVE_MEDIA_PATH}/*.ext2" || + match_files_in_dir "$directory/${LIVE_MEDIA_PATH}/*.ext3" || + match_files_in_dir "$directory/${LIVE_MEDIA_PATH}/*.dir"; then + setup_unionfs "$directory/${LIVE_MEDIA_PATH}" "$rootmnt" else : fi @@ -341,13 +405,22 @@ copy_live_to() { return 1 fi - # begin copying.. + # begin copying (or uncompressing) mkdir "${copyto}" echo "mount -t ${fstype} ${mount_options} ${dev} ${copyto}" mount -t "${fstype}" ${mount_options} "${dev}" "${copyto}" - cp -a ${copyfrom}/* ${copyto} # "cp -a" from busybox also copies hidden files - umount ${copyfrom} - mount -r --move ${copyto} ${copyfrom} + + if [ "$extension" == "tgz" ]; then + cd "${copyto}" + tar zxf "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})" + rm -f "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})" + mount -r --move "${copyto}" "${rootmnt}" + cd "${OLDPWD}" + else + cp -a ${copyfrom}/* ${copyto} # "cp -a" from busybox also copies hidden files + umount ${copyfrom} + mount -r --move ${copyto} ${copyfrom} + fi rmdir ${copyto} return 0 } @@ -366,6 +439,19 @@ do_netmount() { NFSROOT=${ROOTSERVER}:${ROOTPATH} fi + # source relevant ipconfig output + . /tmp/net-${DEVICE}.conf + export HOSTNAME + + if [ -n "${FETCH}" ] && do_httpmount; then + rc=0 + return ${rc} + fi + + if [ "${NFSROOT#*:}" = "$NFSROOT" ] && [ "$NETBOOT" != "cifs" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + [ "$quiet" != "y" ] && log_begin_msg "Trying netboot from ${NFSROOT}" if [ "${NETBOOT}" != "nfs" ] && do_cifsmount ; then @@ -380,6 +466,23 @@ do_netmount() { return ${rc} } +do_httpmount() { + rc=1 + extension=`echo "${FETCH}" | sed 's/\(.*\)\.\(.*\)/\2/'` + case "${extension}" in + squashfs|tgz|tar) + [ "$quiet" != "y" ] && log_begin_msg "Trying wget ${FETCH} -O ${mountpoint}/$(basename ${FETCH})" + mkdir -p "${mountpoint}/${LIVE_MEDIA_PATH}" + wget "${FETCH}" -O "${mountpoint}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})" + [ $? -eq 0 ] && rc=0 + [ "${extension}" == "tgz" ] && live_dest="ram" + ;; + *) + [ "$quiet" != "y" ] && log_begin_msg "Unrecognized archive extension for ${FETCH}" + esac + return ${rc} +} + do_nfsmount() { rc=1 modprobe "${MP_QUIET}" nfs @@ -520,7 +623,7 @@ setup_unionfs() { image_directory="$1" rootmnt="$2" - modprobe "${MP_QUIET}" -b unionfs + modprobe "${MP_QUIET}" -b ${UNIONTYPE} # run-init can't deal with images in a subdir, but we're going to # move all of these away before it runs anyway. No, we're not, @@ -532,8 +635,10 @@ setup_unionfs() { # Let's just mount the read-only file systems first rofsstring="" rofslist="" - if [ "${NETBOOT}" = "nfs" ] ; then - roopt="nfsro" # go aroung a bug in nfs-unionfs locking + minor_kernel_version=`uname -r|cut -c 5-|sed 's/[^0-9].*//'` + if [ "${NETBOOT}" = "nfs" ] && [ "${minor_kernel_version}" -lt 22 ]; then + # go aroung a bug in nfs-unionfs locking for unionfs <= 1.4 + roopt="nfsro" else roopt="ro" fi @@ -604,7 +709,7 @@ setup_unionfs() { mount ${cowdevice} -t ${cow_fstype} -o rw /cow || panic "Can not mount $cowdevice on /cow" - mount -t unionfs -o dirs=/cow=rw:$rofsstring unionfs "$rootmnt" || panic "Unionfs mount failed" + mount -t ${UNIONTYPE} -o dirs=/cow=rw:$rofsstring ${UNIONTYPE} "$rootmnt" || panic "${UNIONTYPE} mount failed" # Adding other custom mounts if [ -n "${PERSISTENT}" ]; then @@ -635,8 +740,8 @@ setup_unionfs() { fi # shows cow fs on /cow for use by live-snapshot - mkdir -p "${rootmnt}/cow" - mount -o bind /cow "${rootmnt}/cow" + mkdir -p "${rootmnt}/live/cow" + mount -o bind /cow "${rootmnt}/live/cow" } check_dev () @@ -729,7 +834,7 @@ mountroot() { exec > live.log exec 2>&1 - parse_cmdline + Arguments set_usplash_timeout [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/live-premount" @@ -742,7 +847,7 @@ mountroot() { set_usplash_timeout - if [ ! -z "${NETBOOT}" ]; then + if [ ! -z "${NETBOOT}" ] || [ ! -z "${FETCH}" ]; then if do_netmount ; then livefs_root="${mountpoint}" else @@ -769,7 +874,7 @@ mountroot() { live_dest="${TODISK}" fi if [ "${live_dest}" ]; then - log_begin_msg "Copying live_media to ${live_dest}" + log_begin_msg "Copying live media to ${live_dest}" copy_live_to "${livefs_root}" "${live_dest}" log_end_msg fi