diff options
Diffstat (limited to 'meta/recipes-core/initrdscripts/files/init-install-efi.sh')
-rw-r--r-- | meta/recipes-core/initrdscripts/files/init-install-efi.sh | 87 |
1 files changed, 65 insertions, 22 deletions
diff --git a/meta/recipes-core/initrdscripts/files/init-install-efi.sh b/meta/recipes-core/initrdscripts/files/init-install-efi.sh index f564f4e2d6..ffd3870199 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 @@ -122,8 +141,8 @@ 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 .*: .*MB' | cut -d" " -f 3 | sed -e "s/MB//") @@ -140,10 +159,17 @@ swap_start=$((rootfs_end)) # 2) they are detected asynchronously (need rootwait) rootwait="" part_prefix="" -if [ ! "${device#/dev/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 @@ -164,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 @@ -196,7 +229,7 @@ if [ -d /tgt_root/etc/ ] ; then 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... if [ -d /tgt_root/etc/udev/ ] ; then - echo "${device}" >> /tgt_root/etc/udev/mount.blacklist + echo "${device}" >> /tgt_root/etc/udev/mount.ignorelist fi fi @@ -222,38 +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=[^ ]*/ /g" $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 rootuuid=$(blkid -o value -s PARTUUID ${rootfs}) - GUMMIBOOT_CFGS="/boot/loader/entries/*.conf" - # copy config files for gummiboot + 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 |