X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=scripts%2Flive;h=62b52240bdac40a0fbaa8ca3e5a275b175a3f148;hb=e23cde1bfd26cc0018d82f320d4e172a5d174ad5;hp=80f77e95cb4c88c44f12be5d1b0e2150608446f7;hpb=cdf9d1b5c0fe669dc50111f0c24efd9c642bb74a;p=live-boot-grml.git diff --git a/scripts/live b/scripts/live index 80f77e9..62b5224 100755 --- a/scripts/live +++ b/scripts/live @@ -60,6 +60,21 @@ Arguments () export FETCH ;; + hook=*) + HOOK="${ARGUMENT#hook=}" + export HOOK + ;; + + ftpfs=*) + FTPFS="${ARGUMENT#ftpfs=}" + export FTPFS + ;; + + httpfs=*) + HTTPFS="${ARGUMENT#httpfs=}" + export HTTPFS + ;; + hostname=*) HOSTNAME="${ARGUMENT#hostname=}" LIVECONF="changed" @@ -149,6 +164,12 @@ Arguments () export LIVE_MEDIA_TIMEOUT ;; + language=*|debian-installer/language=*) + language=${x#debian-installer/language=} + locale="$(lang2locale "$language")" + set_locale="true" + ;; + locale=*|debian-installer/locale=*) LOCALE="${ARGUMENT#*=}" export LOCALE @@ -229,11 +250,6 @@ Arguments () export NOKPERSONALIZER ;; - nokwallet) - NOKWALLET="Yes" - export NOKWALLET - ;; - nolanguageselector) NOLANGUAGESELECTOR="Yes" export NOLANGUAGESELECTOR @@ -322,9 +338,9 @@ Arguments () mount -n -o bind /dev /root/dev mkdir -p /root/var/run/network - chroot /root ifup -a + chroot /root dhclient eth0 chroot /root wget -P /tmp "${location}" - chroot /root ifdown -a + chroot /root ifconfig eth0 down umount /root/sys umount /root/proc @@ -381,6 +397,16 @@ Arguments () export EXPOSED_ROOT ;; + plainroot) + PLAIN_ROOT="Yes" + export PLAIN_ROOT + ;; + + root=*) + ROOT="${ARGUMENT#root=}" + export ROOT + ;; + union=*) UNIONTYPE="${ARGUMENT#union=}" export UNIONTYPE @@ -396,6 +422,11 @@ Arguments () export XDEBCONF ;; + xdriver=*) + XDRIVER="${ARGUMENT#xdriver=}" + export XDRIVER + ;; + xvideomode=*) XVIDEOMODE="${ARGUMENT#xvideomode=}" export XVIDEOMODE @@ -436,7 +467,7 @@ is_live_path () if [ -d "${DIRECTORY}"/"${LIVE_MEDIA_PATH}" ] then - for FILESYSTEM in squashfs ext2 ext3 xfs dir + for FILESYSTEM in squashfs ext2 ext3 xfs dir jffs2 do if [ "$(echo ${DIRECTORY}/${LIVE_MEDIA_PATH}/*.${FILESYSTEM})" != "${DIRECTORY}/${LIVE_MEDIA_PATH}/*.${FILESYSTEM}" ] then @@ -458,7 +489,7 @@ matches_uuid () path="${1}" uuid="$(cat /conf/uuid.conf)" - for try_uuid_file in "${mountpoint}/.disk/casper-uuid"* + for try_uuid_file in "${mountpoint}/.disk/live-uuid"* do [ -e "${try_uuid_file}" ] || continue @@ -476,8 +507,8 @@ matches_uuid () get_backing_device () { case "${1}" in - *.squashfs|*.ext2|*.ext3) - echo $(setup_loop "${1}" "loop" "/sys/block/loop*" '0' "${LIVE_MEDIA_ENCRYPTION}") + *.squashfs|*.ext2|*.ext3|*.jffs2) + echo $(setup_loop "${1}" "loop" "/sys/block/loop*" '0' "${LIVE_MEDIA_ENCRYPTION}" "${2}") ;; *.dir) @@ -513,6 +544,7 @@ mount_images_in_directory () 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}/*.jffs2" || match_files_in_dir "${directory}/${LIVE_MEDIA_PATH}/*.dir" then [ -n "${mac}" ] && adddirectory="${directory}/${LIVE_MEDIA_PATH}/${mac}" @@ -534,20 +566,6 @@ is_nice_device () return 1 } -is_supported_fs () -{ - # FIXME: do something better like the scan of supported filesystems - fstype="${1}" - - case ${fstype} in - vfat|iso9660|udf|ext2|ext3|ntfs) - return 0 - ;; - esac - - return 1 -} - copy_live_to () { copyfrom="${1}" @@ -607,7 +625,7 @@ copy_live_to () cd "${copyto}" tar zxf "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})" rm -f "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})" - mount -r --move "${copyto}" "${rootmnt}" + mount -r -o move "${copyto}" "${rootmnt}" cd "${OLDPWD}" else if [ -n "${MODULETORAMFILE}" ] @@ -619,7 +637,7 @@ copy_live_to () livefs_root umount ${copyfrom} - mount -r --move ${copyto} ${copyfrom} + mount -r -o move ${copyto} ${copyfrom} fi rmdir ${copyto} @@ -648,7 +666,7 @@ do_netmount () NFSROOT=${ROOTSERVER}:${ROOTPATH} fi - if [ -n "${FETCH}" ] && do_httpmount + if ( [ -n "${FETCH}" ] || [ -n "${HTTPFS}" ] || [ -n "${FTPFS}" ] ) && do_httpmount then rc=0 return ${rc} @@ -678,20 +696,53 @@ do_netmount () 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" - ;; + dest="${mountpoint}/${LIVE_MEDIA_PATH}" + mount -t ramfs ram "${mountpoint}" + mkdir -p "${dest}" - *) - [ "${quiet}" != "y" ] && log_begin_msg "Unrecognized archive extension for ${FETCH}" - esac + for webfile in HTTPFS FTPFS FETCH + do + url="$(eval echo \"\$\{${webfile}\}\")" + extension="$(echo "${url}" | sed 's/\(.*\)\.\(.*\)/\2/')" + + if [ -n "$url" ] + then + case "${extension}" in + squashfs|tgz|tar) + if [ "${webfile}" = "FETCH" ] + then + [ "${quiet}" != "y" ] && + log_begin_msg "Trying wget ${url} -O ${dest}/$(basename ${url})" + wget "${url}" -O "${dest}/$(basename ${url})" + else + [ "${quiet}" != "y" ] && + log_begin_msg "Trying to mount ${url} on ${dest}/$(basename ${url})" + if [ "${webfile}" = "FTPFS" ] + then + FUSE_MOUNT="curlftpfs" + url="$(dirname ${url})" + else + FUSE_MOUNT="httpfs" + fi + modprobe fuse + $FUSE_MOUNT "${url}" "${dest}" + fi + [ ${?} -eq 0 ] && rc=0 + [ "${extension}" = "tgz" ] && live_dest="ram" + break + ;; + + *) + [ "${quiet}" != "y" ] && log_begin_msg "Unrecognized archive extension for ${url}" + ;; + esac + fi + done + + if [ ${rc} != 0 ] + then + umount "${mountpoint}" + fi return ${rc} } @@ -804,7 +855,7 @@ try_snap () snap_label="${1}" snap_mount="${2}" snap_type="${3}" - snapdata=$(find_files "${snap_label}.squashfs ${snap_label}.cpio.gz ${snap_label}.ext2 ${snap_label}.ext3") + snapdata=$(find_files "${snap_label}.squashfs ${snap_label}.cpio.gz ${snap_label}.ext2 ${snap_label}.ext3 ${snap_label}.jffs2") if [ ! -z "${snapdata}" ] then @@ -812,9 +863,9 @@ try_snap () snapback="$(echo ${snapdata} | cut -f2 -d ' ')" snapfile="$(echo ${snapdata} | cut -f3 -d ' ')" - if echo "${snapfile}" | grep -qs '\(squashfs\|ext2\|ext3\)' + if echo "${snapfile}" | grep -qs '\(squashfs\|ext2\|ext3\|jffs2\)' then - # squashfs or ext2/ext3 snapshot + # squashfs, jffs2 or ext2/ext3 snapshot dev=$(get_backing_device "${snapback}/${snapfile}") if ! do_snap_copy "${dev}" "${snap_mount}" "${snap_type}" @@ -891,6 +942,9 @@ setup_unionfs () then # go aroung a bug in nfs-unionfs locking for unionfs <= 1.4 roopt="nfsro" + elif [ "${UNIONTYPE}" = "aufs" ] + then + roopt="rr" else roopt="ro" fi @@ -910,7 +964,7 @@ setup_unionfs () done else # ${MODULE}.module does not exist, create a list of images - for FILESYSTEM in squashfs ext2 ext3 xfs dir + for FILESYSTEM in squashfs ext2 ext3 xfs jffs2 dir do for IMAGE in "${image_directory}"/*."${FILESYSTEM}" do @@ -923,7 +977,7 @@ setup_unionfs () if [ -n "${addimage_directory}" ] && [ -d "${addimage_directory}" ] then - for FILESYSTEM in squashfs ext2 ext3 xfs dir + for FILESYSTEM in squashfs ext2 ext3 xfs jffs2 dir do for IMAGE in "${addimage_directory}"/*."${FILESYSTEM}" do @@ -954,7 +1008,7 @@ setup_unionfs () rofslist="${image} ${rofslist}" elif [ -f "${image}" ] then - backdev=$(get_backing_device "${image}") + backdev=$(get_backing_device "${image}" "-r") fstype=$(get_fstype "${backdev}") if [ "${fstype}" = "unknown" ] @@ -963,7 +1017,7 @@ setup_unionfs () fi mkdir -p "${croot}/${imagename}" - echo "debug: Can not mount backdev ${backdev} (image = ${image}) on croot/imagename ${croot}/${imagename}" + echo "debug: Mounting backdev \"${backdev}\" (image = ${image}) on croot/imagename \"${croot}/${imagename}\"" mount -t "${fstype}" -o ro,noatime "${backdev}" "${croot}/${imagename}" || panic "Can not mount ${backdev} (${image}) on ${croot}/${imagename}" && rofsstring="${croot}/${imagename}=${roopt}:${rofsstring}" && rofslist="${croot}/${imagename} ${rofslist}" fi done @@ -973,8 +1027,32 @@ setup_unionfs () mkdir -p /cow # Looking for "${root_persistence}" device or file - if [ -n "${PERSISTENT}" ] + if [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ] then + # Load USB modules + num_block=$(ls -l /sys/block | wc -l) + for module in sd_mod uhci-hcd ehci-hcd ohci-hcd usb-storage + do + modprobe -q -b ${module} + done + + udevtrigger + udevsettle + + # For some reason, udevsettle does not block in this scenario, + # so we sleep for a little while. + # + # See https://bugs.launchpad.net/ubuntu/+source/casper/+bug/84591 + for timeout in 5 4 3 2 1 + do + sleep 1 + + if [ $(ls -l /sys/block | wc -l) -gt ${num_block} ] + then + break + fi + done + cowprobe=$(find_cow_device "${root_persistence}") if [ -b "${cowprobe}" ] @@ -986,7 +1064,7 @@ setup_unionfs () cowdevice="tmpfs" cow_fstype="tmpfs" fi - elif [ -n "${NFS_COW}" ] + elif [ -n "${NFS_COW}" ] && [ -z "${NOPERSISTENT}" ] then # check if there are any nfs options if echo ${NFS_COW}|grep -q ',' @@ -1015,10 +1093,10 @@ setup_unionfs () [ "${quiet}" != "y" ] && log_begin_msg \ "Trying nfsmount ${nfs_cow_opts} ${cowdevice} /cow" nfsmount ${nfs_cow_opts} ${cowdevice} /cow || \ - panic "Can not mount ${cowdevice} on /cow" + panic "Can not mount ${cowdevice} (n: ${cow_fstype}) on /cow" else - mount ${cowdevice} -t ${cow_fstype} -o rw,noatime /cow || \ - panic "Can not mount ${cowdevice} on /cow" + mount -t ${cow_fstype} -o rw,noatime ${cowdevice} /cow || \ + panic "Can not mount ${cowdevice} (o: ${cow_fstype}) on /cow" fi rofscount=$(echo ${rofslist} |wc -w) @@ -1056,7 +1134,7 @@ setup_unionfs () mount -t tmpfs tmpfs ${rootmnt}/live # Adding other custom mounts - if [ -n "${PERSISTENT}" ] + if [ -n "${PERSISTENT}" ] && [ -z "${NOPERSISTENT}" ] then # directly mount /home # FIXME: add a custom mounts configurable system @@ -1087,7 +1165,7 @@ setup_unionfs () ;; *) - mount --move "${d}" "${rootmnt}/live/${d##*/}" + mount -o move "${d}" "${rootmnt}/live/${d##*/}" ;; esac done @@ -1115,6 +1193,19 @@ check_dev () devname="${loopdevname}" fi + if [ -d "${devname}" ] + then + mount -o bind "${devname}" $mountpoint || continue + + if is_live_path $mountpoint + then + echo $mountpoint + return 0 + else + umount $mountpoint + fi + fi + fstype=$(get_fstype "${devname}") if is_supported_fs ${fstype} @@ -1162,7 +1253,7 @@ find_livefs () fi # or do the scan of block devices - for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram) + for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram | grep -v 'dm-' | grep -v fd ) do devname=$(sys2dev "${sysblock}") fstype=$(get_fstype "${devname}") @@ -1184,7 +1275,8 @@ find_livefs () done elif [ "${fstype}" = "squashfs" -o \ "${fstype}" = "ext2" -o \ - "${fstype}" = "ext3" ] + "${fstype}" = "ext3" -o \ + "${fstype}" = "jffs2" ] then # This is an ugly hack situation, the block device has # an image directly on it. It's hopefully @@ -1198,14 +1290,6 @@ find_livefs () return 1 } -pulsate () -{ - if [ -x /sbin/usplash_write ] - then - /sbin/usplash_write "PULSATE" - fi -} - set_usplash_timeout () { if [ -x /sbin/usplash_write ] @@ -1216,16 +1300,22 @@ set_usplash_timeout () mountroot () { + + if [ -x /scripts/local-top/cryptroot ]; then + /scripts/local-top/cryptroot + fi + exec 6>&1 exec 7>&2 exec > live.log exec 2>&1 + tail -f live.log >&7 & + tailpid="${!}" Arguments set_usplash_timeout [ "${quiet}" != "y" ] && log_begin_msg "Running /scripts/live-premount" - pulsate run_scripts /scripts/live-premount [ "${quiet}" != "y" ] && log_end_msg @@ -1234,7 +1324,7 @@ mountroot () set_usplash_timeout - if [ ! -z "${NETBOOT}" ] || [ ! -z "${FETCH}" ] + if [ ! -z "${NETBOOT}" ] || [ ! -z "${FETCH}" ] || [ ! -z "${HTTPFS}" ] || [ ! -z "${FTPFS}" ] then if do_netmount then @@ -1243,18 +1333,24 @@ mountroot () panic "Unable to find a live file system on the network" fi else - # Scan local devices for the image - 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 "${PLAIN_ROOT}" ] && [ -n "${ROOT}" ] + then + # Do a local boot from hd + livefs_root=${ROOT} + else + # Scan local devices for the image + 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 - fi + if [ -n "${livefs_root}" ] + then + break + fi - sleep 1 - done + sleep 1 + done + fi fi if [ -z "${livefs_root}" ] @@ -1291,11 +1387,11 @@ mountroot () maybe_break live-bottom [ "${quiet}" != "y" ] && log_begin_msg "Running /scripts/live-bottom" - pulsate run_scripts /scripts/live-bottom [ "${quiet}" != "y" ] && log_end_msg exec 1>&6 6>&- exec 2>&7 7>&- + kill ${tailpid} cp live.log "${rootmnt}/var/log/" }