diff options
Diffstat (limited to 'meta/recipes-core/initrdscripts/files')
-rw-r--r-- | meta/recipes-core/initrdscripts/files/init-install-efi-testfs.sh | 18 | ||||
-rw-r--r-- | meta/recipes-core/initrdscripts/files/init-install-efi.sh | 116 | ||||
-rw-r--r-- | meta/recipes-core/initrdscripts/files/init-install-testfs.sh | 2 | ||||
-rw-r--r-- | meta/recipes-core/initrdscripts/files/init-install.sh | 127 | ||||
-rwxr-xr-x[-rw-r--r--] | meta/recipes-core/initrdscripts/files/init-live.sh | 50 |
5 files changed, 217 insertions, 96 deletions
diff --git a/meta/recipes-core/initrdscripts/files/init-install-efi-testfs.sh b/meta/recipes-core/initrdscripts/files/init-install-efi-testfs.sh index 7a0b4d4406..1fcd29e54c 100644 --- a/meta/recipes-core/initrdscripts/files/init-install-efi-testfs.sh +++ b/meta/recipes-core/initrdscripts/files/init-install-efi-testfs.sh @@ -27,7 +27,7 @@ do # Try sleeping here to avoid getting kernel messages # obscuring/confusing user sleep 5 - echo "Found drive at /dev/${device}. Do you want to install this image there ? [y/n]" + echo "Found drive at /dev/${device}. Do you want to install this image there? [y/n]" read answer if [ "$answer" = "y" ] ; then break @@ -69,7 +69,7 @@ umount /dev/${device}* 2> /dev/null || /bin/true mkdir -p /tmp cat /proc/mounts > /etc/mtab -disk_size=$(parted /dev/${device} unit mb print | grep Disk | cut -d" " -f 3 | sed -e "s/MB//") +disk_size=$(parted /dev/${device} unit mb print | grep '^Disk .*: .*MB' | cut -d" " -f 3 | sed -e "s/MB//") testfs_size=$((disk_size*testfs_ratio/100)) rootfs_size=$((disk_size-boot_size-testfs_size)) @@ -133,7 +133,7 @@ mount -o rw,loop,noatime,nodiratime /run/media/$1/$2 /rootmnt echo "Copying rootfs files..." cp -a /rootmnt/* /ssd -touch /ssd/etc/masterimage +touch /ssd/etc/controllerimage if [ -d /ssd/etc/ ] ; then # We dont want udev to mount our root device while we're booting... @@ -171,19 +171,19 @@ if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then fi if [ -d /run/media/$1/loader ]; then - GUMMIBOOT_CFGS="/ssd/loader/entries/*.conf" - # copy config files for gummiboot + SYSTEMDBOOT_CFGS="/ssd/loader/entries/*.conf" + # copy config files for systemd-boot cp -dr /run/media/$1/loader /ssd # delete the install entry rm -f /ssd/loader/entries/install.conf # delete the initrd lines - sed -i "/initrd /d" $GUMMIBOOT_CFGS + sed -i "/initrd /d" $SYSTEMDBOOT_CFGS # delete any LABEL= strings - sed -i "s/ LABEL=[^ ]*/ /" $GUMMIBOOT_CFGS + sed -i "s/ LABEL=[^ ]*/ /" $SYSTEMDBOOT_CFGS # delete any root= strings - sed -i "s/ root=[^ ]*/ /" $GUMMIBOOT_CFGS + sed -i "s/ root=[^ ]*/ /" $SYSTEMDBOOT_CFGS # add the root= and other standard boot options - sed -i "s@options *@options root=$rootfs rw $rootwait quiet @" $GUMMIBOOT_CFGS + sed -i "s@options *@options root=$rootfs rw $rootwait quiet @" $SYSTEMDBOOT_CFGS # Add the test label echo -ne "title test\nlinux /test-kernel\noptions root=$testfs rw $rootwait quiet\n" > /ssd/loader/entries/test.conf fi diff --git a/meta/recipes-core/initrdscripts/files/init-install-efi.sh b/meta/recipes-core/initrdscripts/files/init-install-efi.sh index fc4908ef91..f667518b89 100644 --- a/meta/recipes-core/initrdscripts/files/init-install-efi.sh +++ b/meta/recipes-core/initrdscripts/files/init-install-efi.sh @@ -8,8 +8,19 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin -# We need 20 Mb for the boot partition -boot_size=20 +# figure out how big of a boot partition we need +boot_size=$(du -ms /run/media/$1/ | awk '{print $1}') +# remove rootfs.img ($2) from the size if it exists, as its not installed to /boot +if [ -e /run/media/$1/$2 ]; then + boot_size=$(( boot_size - $( du -ms /run/media/$1/$2 | awk '{print $1}') )) +fi +# remove initrd from size since its not currently installed +if [ -e /run/media/$1/initrd ]; then + boot_size=$(( boot_size - $( du -ms /run/media/$1/initrd | awk '{print $1}') )) +fi +# add 10M to provide some extra space for users and account +# for rounding in the above subtractions +boot_size=$(( boot_size + 10 )) # 5% for swap swap_ratio=5 @@ -22,6 +33,8 @@ live_dev_name=${live_dev_name#\/dev/} case $live_dev_name in mmcblk*) ;; + nvme*) + ;; *) live_dev_name=${live_dev_name%%[0-9]*} ;; @@ -29,7 +42,13 @@ esac echo "Searching for hard drives ..." -for device in `ls /sys/block/`; do +# Some eMMC devices have special sub devices such as mmcblk0boot0 etc +# we're currently only interested in the root device so pick them wisely +devices=`ls /sys/block/ | grep -v mmcblk` || true +mmc_devices=`ls /sys/block/ | grep "mmcblk[0-9]\{1,\}$"` || true +devices="$devices $mmc_devices" + +for device in $devices; do case $device in loop*) # skip loop device @@ -78,17 +97,23 @@ for hdname in $hdnamelist; do cat /sys/block/$hdname/device/uevent fi echo - # Get user choice - while true; do - echo -n "Do you want to install this image there? [y/n] " - read answer - if [ "$answer" = "y" -o "$answer" = "n" ]; then +done + +# Get user choice +while true; do + echo "Please select an install target or press n to exit ($hdnamelist ): " + read answer + if [ "$answer" = "n" ]; then + echo "Installation manually aborted." + exit 1 + fi + for hdname in $hdnamelist; do + if [ "$answer" = "$hdname" ]; then + TARGET_DEVICE_NAME=$answer break fi - echo "Please answer y or n" done - if [ "$answer" = "y" ]; then - TARGET_DEVICE_NAME=$hdname + if [ -n "$TARGET_DEVICE_NAME" ]; then break fi done @@ -116,11 +141,11 @@ umount ${device}* 2> /dev/null || /bin/true mkdir -p /tmp # Create /etc/mtab if not present -if [ ! -e /etc/mtab ]; then - cat /proc/mounts > /etc/mtab +if [ ! -e /etc/mtab ] && [ -e /proc/mounts ]; then + ln -sf /proc/mounts /etc/mtab fi -disk_size=$(parted ${device} unit mb print | grep Disk | cut -d" " -f 3 | sed -e "s/MB//") +disk_size=$(parted ${device} unit mb print | grep '^Disk .*: .*MB' | cut -d" " -f 3 | sed -e "s/MB//") swap_size=$((disk_size*swap_ratio/100)) rootfs_size=$((disk_size-boot_size-swap_size)) @@ -134,10 +159,17 @@ swap_start=$((rootfs_end)) # 2) they are detected asynchronously (need rootwait) rootwait="" part_prefix="" -if [ ! "${device#mmcblk}" = "${device}" ]; then +if [ ! "${device#/dev/mmcblk}" = "${device}" ] || \ + [ ! "${device#/dev/nvme}" = "${device}" ]; then part_prefix="p" rootwait="rootwait" fi + +# USB devices also require rootwait +if [ -n `readlink /dev/disk/by-id/usb* | grep $TARGET_DEVICE_NAME` ]; then + rootwait="rootwait" +fi + bootfs=${device}${part_prefix}1 rootfs=${device}${part_prefix}2 swap=${device}${part_prefix}3 @@ -158,18 +190,25 @@ parted ${device} mkpart boot fat32 0% $boot_size parted ${device} set 1 boot on echo "Creating rootfs partition on $rootfs" -parted ${device} mkpart root ext3 $rootfs_start $rootfs_end +parted ${device} mkpart root ext4 $rootfs_start $rootfs_end echo "Creating swap partition on $swap" parted ${device} mkpart swap linux-swap $swap_start 100% parted ${device} print +echo "Waiting for device nodes..." +C=0 +while [ $C -ne 3 ] && [ ! -e $bootfs -o ! -e $rootfs -o ! -e $swap ]; do + C=$(( C + 1 )) + sleep 1 +done + echo "Formatting $bootfs to vfat..." mkfs.vfat $bootfs -echo "Formatting $rootfs to ext3..." -mkfs.ext3 $rootfs +echo "Formatting $rootfs to ext4..." +mkfs.ext4 $rootfs echo "Formatting swap partition...($swap)" mkswap $swap @@ -184,8 +223,8 @@ mount -o rw,loop,noatime,nodiratime /run/media/$1/$2 /src_root echo "Copying rootfs files..." cp -a /src_root/* /tgt_root if [ -d /tgt_root/etc/ ] ; then - boot_uuid=$(blkid -o value -s UUID ${device}1) - swap_part_uuid=$(blkid -o value -s PARTUUID ${device}3) + boot_uuid=$(blkid -o value -s UUID ${bootfs}) + swap_part_uuid=$(blkid -o value -s PARTUUID ${swap}) echo "/dev/disk/by-partuuid/$swap_part_uuid swap swap defaults 0 0" >> /tgt_root/etc/fstab echo "UUID=$boot_uuid /boot vfat defaults 1 2" >> /tgt_root/etc/fstab # We dont want udev to mount our root device while we're booting... @@ -206,7 +245,7 @@ mkdir -p $EFIDIR cp /run/media/$1/EFI/BOOT/*.efi $EFIDIR if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then - root_part_uuid=$(blkid -o value -s PARTUUID ${device}2) + root_part_uuid=$(blkid -o value -s PARTUUID ${rootfs}) GRUBCFG="$EFIDIR/grub.cfg" cp /run/media/$1/EFI/BOOT/grub.cfg $GRUBCFG # Update grub config for the installed image @@ -216,37 +255,48 @@ if [ -f /run/media/$1/EFI/BOOT/grub.cfg ]; then sed -i "/initrd /d" $GRUBCFG # Delete any LABEL= strings sed -i "s/ LABEL=[^ ]*/ /" $GRUBCFG - # Delete any root= strings - sed -i "s/ root=[^ ]*/ /" $GRUBCFG - # Add the root= and other standard boot options - sed -i "s@linux /vmlinuz *@linux /vmlinuz root=PARTUUID=$root_part_uuid rw $rootwait quiet @" $GRUBCFG + # Replace root= and add additional standard boot options + # We use root as a sentinel value, as vmlinuz is no longer guaranteed + sed -i "s/ root=[^ ]*/ root=PARTUUID=$root_part_uuid rw $rootwait quiet /g" $GRUBCFG fi if [ -d /run/media/$1/loader ]; then - GUMMIBOOT_CFGS="/boot/loader/entries/*.conf" - # copy config files for gummiboot + rootuuid=$(blkid -o value -s PARTUUID ${rootfs}) + SYSTEMDBOOT_CFGS="/boot/loader/entries/*.conf" + # copy config files for systemd-boot cp -dr /run/media/$1/loader /boot # delete the install entry rm -f /boot/loader/entries/install.conf # delete the initrd lines - sed -i "/initrd /d" $GUMMIBOOT_CFGS + sed -i "/initrd /d" $SYSTEMDBOOT_CFGS # delete any LABEL= strings - sed -i "s/ LABEL=[^ ]*/ /" $GUMMIBOOT_CFGS + sed -i "s/ LABEL=[^ ]*/ /" $SYSTEMDBOOT_CFGS # delete any root= strings - sed -i "s/ root=[^ ]*/ /" $GUMMIBOOT_CFGS + sed -i "s/ root=[^ ]*/ /" $SYSTEMDBOOT_CFGS # add the root= and other standard boot options - sed -i "s@options *@options root=PARTUUID=$rootuuid rw $rootwait quiet @" $GUMMIBOOT_CFGS + sed -i "s@options *@options root=PARTUUID=$rootuuid rw $rootwait quiet @" $SYSTEMDBOOT_CFGS fi umount /tgt_root -cp /run/media/$1/vmlinuz /boot +# copy any extra files needed for ESP +if [ -d /run/media/$1/esp ]; then + cp -r /run/media/$1/esp/* /boot +fi + +# Copy kernel artifacts. To add more artifacts just add to types +# For now just support kernel types already being used by something in OE-core +for types in bzImage zImage vmlinux vmlinuz fitImage; do + for kernel in `find /run/media/$1/ -name $types*`; do + cp $kernel /boot + done +done umount /boot sync -echo "Remove your installation media, and press ENTER" +echo "Installation successful. Remove your installation media and press ENTER to reboot." read enter diff --git a/meta/recipes-core/initrdscripts/files/init-install-testfs.sh b/meta/recipes-core/initrdscripts/files/init-install-testfs.sh index ac62160528..7b49001659 100644 --- a/meta/recipes-core/initrdscripts/files/init-install-testfs.sh +++ b/meta/recipes-core/initrdscripts/files/init-install-testfs.sh @@ -158,7 +158,7 @@ mount -o rw,loop,noatime,nodiratime /run/media/$1/$2 /src_root echo "Copying rootfs files..." cp -a /src_root/* /tgt_root -touch /tgt_root/etc/masterimage +touch /tgt_root/etc/controllerimage if [ -d /tgt_root/etc/ ] ; then echo "$bootfs /boot ext3 defaults 1 2" >> /tgt_root/etc/fstab diff --git a/meta/recipes-core/initrdscripts/files/init-install.sh b/meta/recipes-core/initrdscripts/files/init-install.sh index f9e9768e43..e71579631b 100644 --- a/meta/recipes-core/initrdscripts/files/init-install.sh +++ b/meta/recipes-core/initrdscripts/files/init-install.sh @@ -7,8 +7,19 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin -# We need 20 Mb for the boot partition -boot_size=20 +# figure out how big of a boot partition we need +boot_size=$(du -ms /run/media/$1/ | awk '{print $1}') +# remove rootfs.img ($2) from the size if it exists, as its not installed to /boot +if [ -e /run/media/$1/$2 ]; then + boot_size=$(( boot_size - $( du -ms /run/media/$1/$2 | awk '{print $1}') )) +fi +# remove initrd from size since its not currently installed +if [ -e /run/media/$1/initrd ]; then + boot_size=$(( boot_size - $( du -ms /run/media/$1/initrd | awk '{print $1}') )) +fi +# add 10M to provide some extra space for users and account +# for rounding in the above subtractions +boot_size=$(( boot_size + 10 )) # 5% for the swap swap_ratio=5 @@ -21,6 +32,8 @@ live_dev_name=${live_dev_name#\/dev/} case $live_dev_name in mmcblk*) ;; + nvme*) + ;; *) live_dev_name=${live_dev_name%%[0-9]*} ;; @@ -28,7 +41,13 @@ esac echo "Searching for hard drives ..." -for device in `ls /sys/block/`; do +# Some eMMC devices have special sub devices such as mmcblk0boot0 etc +# we're currently only interested in the root device so pick them wisely +devices=`ls /sys/block/ | grep -v mmcblk` || true +mmc_devices=`ls /sys/block/ | grep "mmcblk[0-9]\{1,\}$"` || true +devices="$devices $mmc_devices" + +for device in $devices; do case $device in loop*) # skip loop device @@ -72,17 +91,23 @@ for hdname in $hdnamelist; do cat /sys/block/$hdname/device/uevent fi echo - # Get user choice - while true; do - echo -n "Do you want to install this image there? [y/n] " - read answer - if [ "$answer" = "y" -o "$answer" = "n" ]; then +done + +# Get user choice +while true; do + echo "Please select an install target or press n to exit ($hdnamelist ): " + read answer + if [ "$answer" = "n" ]; then + echo "Installation manually aborted." + exit 1 + fi + for hdname in $hdnamelist; do + if [ "$answer" = "$hdname" ]; then + TARGET_DEVICE_NAME=$answer break fi - echo "Please answer y or n" done - if [ "$answer" = "y" ]; then - TARGET_DEVICE_NAME=$hdname + if [ -n "$TARGET_DEVICE_NAME" ]; then break fi done @@ -112,13 +137,13 @@ if [ ! -b /dev/loop0 ] ; then fi mkdir -p /tmp -if [ ! -L /etc/mtab ]; then - cat /proc/mounts > /etc/mtab +if [ ! -L /etc/mtab ] && [ -e /proc/mounts ]; then + ln -sf /proc/mounts /etc/mtab fi -disk_size=$(parted ${device} unit mb print | grep Disk | cut -d" " -f 3 | sed -e "s/MB//") +disk_size=$(parted ${device} unit mb print | grep '^Disk .*: .*MB' | cut -d" " -f 3 | sed -e "s/MB//") -grub_version=$(grub-install -v|sed 's/.* \([0-9]\).*/\1/') +grub_version=$(grub-install -V|sed 's/.* \([0-9]\).*/\1/') if [ $grub_version -eq 0 ] ; then bios_boot_size=0 @@ -141,11 +166,17 @@ swap_start=$((rootfs_end)) # 2) they are detected asynchronously (need rootwait) rootwait="" part_prefix="" -if [ ! "${device#mmcblk}" = "${device}" ]; then +if [ ! "${device#/dev/mmcblk}" = "${device}" ] || \ + [ ! "${device#/dev/nvme}" = "${device}" ]; then part_prefix="p" rootwait="rootwait" fi +# USB devices also require rootwait +if [ -n `readlink /dev/disk/by-id/usb* | grep $TARGET_DEVICE_NAME` ]; then + rootwait="rootwait" +fi + if [ $grub_version -eq 0 ] ; then bios_boot='' bootfs=${device}${part_prefix}1 @@ -183,7 +214,7 @@ fi echo "Creating rootfs partition on $rootfs" [ $grub_version -eq 0 ] && pname='primary' || pname='root' -parted ${device} mkpart $pname ext3 $rootfs_start $rootfs_end +parted ${device} mkpart $pname ext4 $rootfs_start $rootfs_end echo "Creating swap partition on $swap" [ $grub_version -eq 0 ] && pname='primary' || pname='swap' @@ -191,11 +222,18 @@ parted ${device} mkpart $pname linux-swap $swap_start 100% parted ${device} print +echo "Waiting for device nodes..." +C=0 +while [ $C -ne 3 ] && [ ! -e $bootfs -o ! -e $rootfs -o ! -e $swap ]; do + C=$(( C + 1 )) + sleep 1 +done + echo "Formatting $bootfs to ext3..." mkfs.ext3 $bootfs -echo "Formatting $rootfs to ext3..." -mkfs.ext3 $rootfs +echo "Formatting $rootfs to ext4..." +mkfs.ext4 $rootfs echo "Formatting swap partition...($swap)" mkswap $swap @@ -211,13 +249,13 @@ echo "Copying rootfs files..." cp -a /src_root/* /tgt_root if [ -d /tgt_root/etc/ ] ; then if [ $grub_version -ne 0 ] ; then - boot_uuid=$(blkid -o value -s UUID ${device}2) - swap_part_uuid=$(blkid -o value -s PARTUUID ${device}4) + boot_uuid=$(blkid -o value -s UUID ${bootfs}) + swap_part_uuid=$(blkid -o value -s PARTUUID ${swap}) bootdev="UUID=$boot_uuid" swapdev=/dev/disk/by-partuuid/$swap_part_uuid else - bootdev=${device}2 - swapdev=${device}4 + bootdev=${bootfs} + swapdev=${swap} fi echo "$swapdev swap swap defaults 0 0" >> /tgt_root/etc/fstab echo "$bootdev /boot ext3 defaults 1 2" >> /tgt_root/etc/fstab @@ -229,19 +267,46 @@ fi umount /tgt_root umount /src_root +echo "Looking for kernels to use as boot target.." +# Find kernel to boot to +# Give user options if multiple are found +kernels="$(find /run/media/$1/ -type f \ + -name bzImage* -o -name zImage* \ + -o -name vmlinux* -o -name vmlinuz* \ + -o -name fitImage* \ + | sed s:.*/::)" +if [ -n "$(echo $kernels)" ]; then + # only one kernel entry if no space + if [ -z "$(echo $kernels | grep " ")" ]; then + kernel=$kernels + echo "$kernel will be used as the boot target" + else + echo "Which kernel do we want to boot by default? The following kernels were found:" + echo $kernels + read answer + kernel=$answer + fi +else + echo "No kernels found, exiting..." + exit 1 +fi + # Handling of the target boot partition mount $bootfs /boot echo "Preparing boot partition..." + if [ -f /etc/grub.d/00_header -a $grub_version -ne 0 ] ; then echo "Preparing custom grub2 menu..." - root_part_uuid=$(blkid -o value -s PARTUUID ${device}3) - boot_uuid=$(blkid -o value -s UUID ${device}2) + root_part_uuid=$(blkid -o value -s PARTUUID ${rootfs}) + boot_uuid=$(blkid -o value -s UUID ${bootfs}) GRUBCFG="/boot/grub/grub.cfg" mkdir -p $(dirname $GRUBCFG) cat >$GRUBCFG <<_EOF +timeout=5 +default=0 menuentry "Linux" { search --no-floppy --fs-uuid $boot_uuid --set root - linux /vmlinuz root=PARTUUID=$root_part_uuid $rootwait rw $5 $3 $4 quiet + linux /$kernel root=PARTUUID=$root_part_uuid $rootwait rw $5 $3 $4 quiet } _EOF chmod 0444 $GRUBCFG @@ -255,10 +320,16 @@ if [ $grub_version -eq 0 ] ; then echo "timeout 30" >> /boot/grub/menu.lst echo "title Live Boot/Install-Image" >> /boot/grub/menu.lst echo "root (hd0,0)" >> /boot/grub/menu.lst - echo "kernel /vmlinuz root=$rootfs rw $3 $4 quiet" >> /boot/grub/menu.lst + echo "kernel /$kernel root=$rootfs rw $3 $4 quiet" >> /boot/grub/menu.lst fi -cp /run/media/$1/vmlinuz /boot/ +# Copy kernel artifacts. To add more artifacts just add to types +# For now just support kernel types already being used by something in OE-core +for types in bzImage zImage vmlinux vmlinuz fitImage; do + for kernel in `find /run/media/$1/ -name $types*`; do + cp $kernel /boot + done +done umount /boot diff --git a/meta/recipes-core/initrdscripts/files/init-live.sh b/meta/recipes-core/initrdscripts/files/init-live.sh index d852c5737f..b20660b60a 100644..100755 --- a/meta/recipes-core/initrdscripts/files/init-live.sh +++ b/meta/recipes-core/initrdscripts/files/init-live.sh @@ -2,7 +2,7 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin -ROOT_MOUNT="/rootfs/" +ROOT_MOUNT="/rootfs" ROOT_IMAGE="rootfs.img" MOUNT="/bin/mount" UMOUNT="/bin/umount" @@ -28,8 +28,7 @@ udev_daemon() { _UDEV_DAEMON=`udev_daemon` early_setup() { - mkdir -p /proc - mkdir -p /sys + mkdir -p /proc /sys /run /var/run mount -t proc proc /proc mount -t sysfs sysfs /sys mount -t devtmpfs none /dev @@ -37,9 +36,6 @@ early_setup() { # support modular kernel modprobe isofs 2> /dev/null - mkdir -p /run - mkdir -p /var/run - $_UDEV_DAEMON --daemon udevadm trigger --action=add } @@ -80,7 +76,13 @@ read_args() { boot_live_root() { # Watches the udev event queue, and exits if all current events are handled udevadm settle --timeout=3 --quiet - killall "${_UDEV_DAEMON##*/}" 2>/dev/null + # Kills the current udev running processes, which survived after + # device node creation events were handled, to avoid unexpected behavior + killall -9 "${_UDEV_DAEMON##*/}" 2>/dev/null + + # Don't run systemd-update-done on systemd-based live systems + # because it triggers a slow rebuild of ldconfig caches. + touch ${ROOT_MOUNT}/etc/.updated ${ROOT_MOUNT}/var/.updated # Allow for identification of the real root even after boot mkdir -p ${ROOT_MOUNT}/media/realroot @@ -89,8 +91,11 @@ boot_live_root() { # Move the mount points of some filesystems over to # the corresponding directories under the real root filesystem. for dir in `awk '/\/dev.* \/run\/media/{print $2}' /proc/mounts`; do - mkdir -p ${ROOT_MOUNT}/media/${dir##*/} - mount -n --move $dir ${ROOT_MOUNT}/media/${dir##*/} + # Parse any OCT or HEX encoded chars such as spaces + # in the mount points to actual ASCII chars + dir=`printf $dir` + mkdir -p "${ROOT_MOUNT}/media/${dir##*/}" + mount -n --move "$dir" "${ROOT_MOUNT}/media/${dir##*/}" done mount -n --move /proc ${ROOT_MOUNT}/proc mount -n --move /sys ${ROOT_MOUNT}/sys @@ -169,8 +174,8 @@ mount_and_boot() { # determine which unification filesystem to use union_fs_type="" - if grep -q -w "overlayfs" /proc/filesystems; then - union_fs_type="overlayfs" + if grep -q -w "overlay" /proc/filesystems; then + union_fs_type="overlay" elif grep -q -w "aufs" /proc/filesystems; then union_fs_type="aufs" else @@ -179,14 +184,15 @@ mount_and_boot() { # make a union mount if possible case $union_fs_type in - "overlayfs") + "overlay") mkdir -p /rootfs.ro /rootfs.rw if ! mount -n --move $ROOT_MOUNT /rootfs.ro; then rm -rf /rootfs.ro /rootfs.rw fatal "Could not move rootfs mount point" else mount -t tmpfs -o rw,noatime,mode=755 tmpfs /rootfs.rw - mount -t overlayfs -o "lowerdir=/rootfs.ro,upperdir=/rootfs.rw" overlayfs $ROOT_MOUNT + mkdir -p /rootfs.rw/upperdir /rootfs.rw/work + mount -t overlay overlay -o "lowerdir=/rootfs.ro,upperdir=/rootfs.rw/upperdir,workdir=/rootfs.rw/work" $ROOT_MOUNT mkdir -p $ROOT_MOUNT/rootfs.ro $ROOT_MOUNT/rootfs.rw mount --move /rootfs.ro $ROOT_MOUNT/rootfs.ro mount --move /rootfs.rw $ROOT_MOUNT/rootfs.rw @@ -214,11 +220,7 @@ mount_and_boot() { boot_live_root } -case $label in - boot) - mount_and_boot - ;; - install|install-efi) +if [ "$label" != "boot" -a -f $label.sh ] ; then if [ -f /run/media/$i/$ISOLINUX/$ROOT_IMAGE ] ; then ./$label.sh $i/$ISOLINUX $ROOT_IMAGE $video_mode $vga_mode $console_params else @@ -226,10 +228,8 @@ case $label in fi # If we're getting here, we failed... - fatal "Installation image failed" - ;; - *) - # Not sure what boot label is provided. Try to boot to avoid locking up. - mount_and_boot - ;; -esac + fatal "Target $label failed" +fi + +mount_and_boot + |