X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=scripts%2Flive;h=0e1b2f444550c5fdb37ee0ea926eb6bdcf104cc7;hb=5207256fc43b965b1816f2d874ea227b039321d0;hp=412094aee2b4990b231e064e71da8d423ed4abee;hpb=ed0ef79a722eff0140c5521b63e80283054e416e;p=live-boot-grml.git diff --git a/scripts/live b/scripts/live index 412094a..0e1b2f4 100755 --- a/scripts/live +++ b/scripts/live @@ -88,12 +88,8 @@ Arguments () ethdevice=*) DEVICE="${ARGUMENT#ethdevice=}" - export DEVICE - ;; - - ethdevice=*) - ETHDEVICE="${ARGUMENT#ethdevice=}" - export ETHDEVICE + ETHDEVICE="${DEVICE}" + export DEVICE ETHDEVICE ;; ethdevice-timeout=*) @@ -466,7 +462,7 @@ is_nice_device () { sysfs_path="${1#/sys}" - if /lib/udev/path_id "${sysfs_path}" | egrep -q "ID_PATH=(usb|pci-|platform-orion-ehci|platform-mmc|platform-mxsdhci|)" + if /lib/udev/path_id "${sysfs_path}" | egrep -q "ID_PATH=(usb|pci-|platform-sata_mv|platform-orion-ehci|platform-mmc|platform-mxsdhci|)" then return 0 elif echo "${sysfs_path}" | grep -q '^/block/vd[a-z]$' @@ -643,6 +639,22 @@ do_netsetup () HWADDR="$(cat /sys/class/net/${DEVICE}/address)" fi + if [ ! -e "/etc/resolv.conf" ] + then + echo "Creating /etc/resolv.conf" + + if [ -n "${DNSDOMAIN}" ] + then + echo "domain ${DNSDOMAIN}" > /etc/resolv.conf + echo "search ${DNSDOMAIN}" > /etc/resolv.conf + fi + + for i in ${IPV4DNS0} ${IPV4DNS1} ${IPV4DNS1} + do + echo "nameserver $i" >> /etc/resolv.conf + done + fi + # Check if we have a network device at all if ! ls /sys/class/net/"$DEVICE" > /dev/null 2>&1 && \ ! ls /sys/class/net/eth0 > /dev/null 2>&1 && \ @@ -789,7 +801,7 @@ do_httpmount () fi modprobe fuse $FUSE_MOUNT "${url}" "${dest}" - FUSE_PID="$(minips h -C "$FUSE_MOUNT" | { read x y ; echo "$x" ; } )" + ROOT_PID="$(minips h -C "$FUSE_MOUNT" | { read x y ; echo "$x" ; } )" fi [ ${?} -eq 0 ] && rc=0 [ "${extension}" = "tgz" ] && live_dest="ram" @@ -820,9 +832,6 @@ do_httpmount () elif [ "${webfile}" != "FETCH" ] ; then NETBOOT="${webfile}" export NETBOOT - if [ -n "${FUSE_PID}" ] ; then - echo "${FUSE_PID}" > ${mountpoint}/root.pid - fi fi return ${rc} @@ -887,6 +896,8 @@ do_snap_copy () if [ -b "${fromdev}" ] then + log_success_msg "Copying snapshot ${fromdev} to ${todir}..." + # look for free mem if [ -n "${HOMEMOUNTED}" -a "${snap_type}" = "HOME" ] then @@ -924,9 +935,8 @@ do_snap_copy () return 0 else - return 1 - log_warning_msg "Unable to find the snapshot ${snap_type} medium" + return 1 fi } @@ -956,6 +966,16 @@ try_snap () snapdata="${1}" snap_mount="${2}" snap_type="${3}" + snap_relpath="${4}" + + if [ -z "${snap_relpath}" ] + then + # root snapshot, default usage + snap_relpath="/" + else + # relative snapshot (actually used just for "/home" snapshots) + snap_mount="${2}${snap_relpath}" + fi if [ -n "${snapdata}" ] && [ ! -b "${snapdata}" ] then @@ -964,19 +984,20 @@ try_snap () snapback="$(echo ${snapdata} | cut -f2 -d ' ')" snapfile="$(echo ${snapdata} | cut -f3 -d ' ')" - RES="" if ! try_mount "${snapdev}" "${snapback}" "ro" then break fi + RES="0" + if echo "${snapfile}" | grep -qs '\(squashfs\|ext2\|ext3\|ext4\|jffs2\)' then # squashfs, jffs2 or ext2/ext3/ext4 snapshot dev=$(get_backing_device "${snapback}/${snapfile}") do_snap_copy "${dev}" "${snap_mount}" "${snap_type}" - RES=$? + RES="$?" else # cpio.gz snapshot @@ -992,9 +1013,20 @@ try_snap () cpioargs='--unconditional --make-directories' fi - if ! (cd "${snap_mount}" && zcat "${snapback}/${snapfile}" | cpio $cpioargs --extract --preserve-modification-time --no-absolute-filenames --sparse 2>/dev/null) + if [ -s "${snapback}/${snapfile}" ] + then + BEFOREDIR="$(pwd)" + cd "${snap_mount}" && zcat "${snapback}/${snapfile}" | $cpiopath $cpioargs --extract --preserve-modification-time --no-absolute-filenames --sparse 2>/dev/null + RES="$?" + cd "${BEFOREDIR}" + else + log_warning_msg "${snapback}/${snapfile} is empty, adding it for sync on reboot." + RES="0" + fi + + if [ "${RES}" != "0" ] then - log_warning_msg "failure to \"zcat ${snapback}/${snapfile} | cpio $cpioargs --extract --preserve-modification-time --no-absolute-filenames --sparse\"" + log_warning_msg "failure to \"zcat ${snapback}/${snapfile} | $cpiopath $cpioargs --extract --preserve-modification-time --no-absolute-filenames --sparse\"" fi fi @@ -1022,7 +1054,7 @@ try_snap () if ! do_snap_copy "${dev}" "${snap_mount}" "${snap_type}" then - log_warning_msg "Impossible to include the ${snap_type} Snapshot" + log_warning_msg "Impossible to include the ${snap_type} Snapshot (i)" return 1 else if [ -n "${snapfile}" ] @@ -1032,11 +1064,11 @@ try_snap () fi fi else - log_warning_msg "Impossible to include the ${snap_type} Snapshot" + log_warning_msg "Impossible to include the ${snap_type} Snapshot (o)" return 1 fi - echo "export ${snap_type}SNAP="/cow${snap_mount#$rootmnt}":${snapdev}:${snapfile}" >> /etc/live.conf # for resync on reboot/halt + echo "export ${snap_type}SNAP=${snap_relpath}:${snapdev}:${snapfile}" >> snapshot.conf # for resync on reboot/halt return 0 } @@ -1374,7 +1406,7 @@ setup_unionfs () # Look for other snapshots to copy in try_snap "${root_snapdata}" "${rootmnt}" "ROOT" # This second type should be removed when snapshot grow smarter - try_snap "${home_snapdata}" "${rootmnt}/home" "HOME" + try_snap "${home_snapdata}" "${rootmnt}" "HOME" "/home" fi if [ -n "${SHOWMOUNTS}" ] @@ -1595,6 +1627,7 @@ find_livefs () fi done elif [ "${fstype}" = "squashfs" -o \ + "${fstype}" = "btrfs" -o \ "${fstype}" = "ext2" -o \ "${fstype}" = "ext3" -o \ "${fstype}" = "ext4" -o \ @@ -1612,16 +1645,6 @@ find_livefs () return 1 } -set_usplash_timeout () -{ - if [ -x /sbin/usplash_write ] - then - /sbin/usplash_write "TIMEOUT 120" - else if [ -x /sbin/splashy_update ] ; then - /sbin/splashy_update "TIMEOUT 120" - fi ; fi -} - integrity_check () { media_mountpoint="${1}" @@ -1648,14 +1671,6 @@ integrity_check () fi } -start_usplash_pulse () -{ - if [ -x /sbin/usplash_write ] - then - /sbin/usplash_write "PULSELOGO" - fi -} - mountroot () { if [ -x /scripts/local-top/cryptroot ]; then @@ -1674,9 +1689,6 @@ mountroot () Arguments - set_usplash_timeout - start_usplash_pulse - maybe_break live-premount log_begin_msg "Running /scripts/live-premount" run_scripts /scripts/live-premount @@ -1685,8 +1697,6 @@ mountroot () # Needed here too because some things (*cough* udev *cough*) # changes the timeout - set_usplash_timeout - if [ ! -z "${NETBOOT}" ] || [ ! -z "${FETCH}" ] || [ ! -z "${HTTPFS}" ] || [ ! -z "${FTPFS}" ] then if do_netmount @@ -1704,6 +1714,20 @@ mountroot () # Do a local boot from hd livefs_root=${ROOT} else + if [ -x /usr/bin/memdiskfind ] + then + MEMDISK=$(/usr/bin/memdiskfind) + + if [ $? -eq 0 ] + then + # We found a memdisk, set up phram + modprobe phram phram=memdisk,${MEMDISK} + + # Load mtdblock, the memdisk will be /dev/mtdblock0 + modprobe mtdblock + fi + fi + # Scan local devices for the image i=0 while [ "$i" -lt 60 ] @@ -1764,6 +1788,11 @@ mountroot () mount_images_in_directory "${livefs_root}" "${rootmnt}" "${mac}" fi + + if [ -n "${ROOT_PID}" ] ; then + echo "${ROOT_PID}" > "${rootmnt}"/live/root.pid + fi + log_end_msg # unionfs-fuse needs /dev to be bind-mounted for the duration of @@ -1780,6 +1809,24 @@ mountroot () mount --move /live/image /root/live/image fi + # aufs2 in kernel versions around 2.6.33 has a regression: + # directories can't be accessed when read for the first the time, + # causing a failure for example when accessing /var/lib/fai + # when booting FAI, this simple workaround solves it + ls /root/* >/dev/null 2>&1 + + # copy snapshot configuration if exists + if [ -f snapshot.conf ] + then + log_begin_msg "Copying snapshot.conf to ${rootmnt}/etc/live/boot.d" + if [ ! -d "${rootmnt}/etc/live/boot.d" ] + then + mkdir -p "${rootmnt}/etc/live/boot.d" + fi + cp snapshot.conf "${rootmnt}/etc/live/boot.d/" + log_end_msg + fi + maybe_break live-bottom log_begin_msg "Running /scripts/live-bottom\n"