=================================================================== RCS file: /cvs/openbsd/update_openbsd/update_openbsd,v retrieving revision 1.97 retrieving revision 1.103 diff -u -r1.97 -r1.103 --- openbsd/update_openbsd/update_openbsd 2017/12/11 00:52:41 1.97 +++ openbsd/update_openbsd/update_openbsd 2017/12/11 02:50:09 1.103 @@ -1,5 +1,5 @@ #!/bin/sh -# $AFresh1: update_openbsd,v 1.96 2017/12/10 21:20:53 andrew Exp $ +# $AFresh1: update_openbsd,v 1.102 2017/12/11 02:36:03 andrew Exp $ # # Copyright (c) 2012 Andrew Fresh # @@ -79,10 +79,10 @@ echo $_v } -set_boot_partition() { - BOOT_PARTITION=$( df -nP /bsd | sed -ne 's! .*/$!!p' ) +set_boot_device() { + BOOT_DEVICE=$( df -nP /bsd | sed -ne 's! .*/$!!p' ) - root_disk=$( echo $BOOT_PARTITION | + root_disk=$( echo $BOOT_DEVICE | sed -e 's,/dev/\([a-z]*[0-9]\)[a-z].*,\1,' ) msdos_partition=$( fdisk $root_disk | grep -q '^*.*FAT32' \ @@ -91,9 +91,33 @@ ) [ "$msdos_partition" ] && - BOOT_PARTITION="/dev/$root_disk$msdos_partition" + BOOT_DEVICE="/dev/$root_disk$msdos_partition" } +boot_device_mounted="" +mount_boot_device() { + [ "$boot_device_mounted" ] && return + + local default_mount=$( df -lnP /bsd | sed -ne 's!/dev/.* !!p' ) + local boot_mount=$( mount | + sed -ne "s!^$BOOT_DEVICE on \([^ ]*\).*!\1!p" ) + + if [ ! "$boot_mount" ]; then + mount $BOOT_DEVICE /mnt + boot_device_mounted=1 + KERNEL_ROOT=/mnt + elif [ "$boot_mount" != "$default_mount" ]; then + KERNEL_ROOT=$boot_mount/ + else + KERNEL_ROOT=${default_mount%/}/ + fi +} + +umount_boot_device() { + [ "$boot_device_mounted" ] && umount $BOOT_DEVICE + boot_device_mounted="" +} + set_version() { CUR_VER=`uname -r` NEW_VER=`dc -e "$CUR_VER 0.1 + p"` @@ -190,6 +214,9 @@ FTP=${MIRROR}/${_dir}/`machine` fi + KERNEL_ROOT="" + [ -z "$BOOT_DEVICE" ] && set_boot_device + BOOT_KERNEL=`( \ echo bsd; \ [ -e /boot.conf ] && sed -E '/^ *(set +image|boot) +/!d ; \ @@ -371,26 +398,25 @@ install_kernels() { local _d=$1 - local default_mount=$( df -lnP /bsd | sed -ne 's!/dev/.* !!p' ) + local default_mount local boot_mount local mount_is_msdos if [ ! "$_d" ]; then - boot_mount=$( mount | - sed -ne "s!^$BOOT_PARTITION on \([^ ]*\).*!\1!p" ) + default_mount=$( df -lnP /bsd | sed -ne 's!/dev/.* !!p' ) + mount_boot_device - local _ik="$INSTALL_KERNELS" - INSTALL_KERNELS="${BOOT_KERNEL#/} bsd.rd" + if [ "$KERNEL_ROOT" != "$default_mount" ]; then + local _ik="$INSTALL_KERNELS" + INSTALL_KERNELS="${BOOT_KERNEL#/} bsd.rd" - if [ ! "$boot_mount" ]; then - mount $BOOT_PARTITION /mnt - install_kernels /mnt/ - umount $BOOT_PARTITION - elif [ "$boot_mount" != "$default_mount" ]; then - install_kernels $boot_mount/ + install_kernels $KERNEL_ROOT + + INSTALL_KERNELS="$_ik" fi - INSTALL_KERNELS="$_ik" + umount_boot_device + install_kernels $default_mount return fi @@ -402,7 +428,7 @@ exit 1 fi - mount | grep -q " ${_d%/} .* msdos" && mount_is_msdos=1 + [ $_d != / ] && mount | grep -q " on ${_d%/} .* msdos" && mount_is_msdos=1 if [ X"$BOOT_KERNEL_VERSION" != X"$NEW_KERNEL_VERSION" ]; then echo "===> Backing up $BOOT_KERNEL to ${_d}obsd" @@ -567,7 +593,6 @@ export PKG_PATH TRUSTED_PKG_PATH set_version -[ -z "$BOOT_PARTITION" ] && set_boot_partition TRUSTED_PKG_PATH=${TRUSTED_PKG_PATH:=/usr/ports/packages/`machine -a`/all} if [ "$FORCE_DIR" = "No" ]; then @@ -592,7 +617,7 @@ echo "TRUSTED_PKG_PATH: $TRUSTED_PKG_PATH" echo " RELEASEDIR: $RELEASEDIR" echo " DESTDIR: $DESTDIR" -echo " BOOT_PARTITION: $BOOT_PARTITION" +echo " BOOT_DEVICE: $BOOT_DEVICE" echo " BOOT_KERNEL: $BOOT_KERNEL" echo " INSTALL_KERNELS: $INSTALL_KERNELS" echo " INSTALLED_SETS: $INSTALLED_SETS"