version 1.109, 2018/02/08 19:08:01 |
version 1.113, 2018/12/16 20:31:06 |
|
|
#!/bin/sh |
#!/bin/sh |
# $AFresh1: update_openbsd,v 1.108 2018/02/08 19:07:06 andrew Exp $ |
# $AFresh1: update_openbsd,v 1.112 2018/12/16 20:23:38 andrew Exp $ |
# |
# |
# Copyright (c) 2012 Andrew Fresh <andrew@afresh1.com> |
# Copyright (c) 2012 Andrew Fresh <andrew@afresh1.com> |
# |
# |
|
|
} |
} |
|
|
set_boot_device() { |
set_boot_device() { |
BOOT_DEVICE=$( df -nP /bsd | sed -ne 's! .*/$!!p' ) |
BOOT_DEVICE=$( df -lnP /bsd | sed -ne 's! .*/$!!p' ) |
|
|
root_disk=$( echo $BOOT_DEVICE | |
root_disk=$( echo $BOOT_DEVICE | |
sed -e 's,/dev/\([a-z]*[0-9]\)[a-z].*,\1,' ) |
sed -e 's,/dev/\([a-z]*[0-9]\)[a-z].*,\1,' ) |
|
|
[ "$boot_device_mounted" ] && return |
[ "$boot_device_mounted" ] && return |
[ "$BOOT_DEVICE" ] || return |
[ "$BOOT_DEVICE" ] || return |
|
|
local default_mount=$( df -lnP /bsd | sed -ne 's!/dev/.* !!p' ) |
|
local boot_mount=$( mount | |
local boot_mount=$( mount | |
sed -ne "s!^$BOOT_DEVICE on \([^ ]*\).*!\1!p" ) |
sed -ne "s!^$BOOT_DEVICE on \([^ ]*\).*!\1!p" ) |
|
|
if [ ! "$boot_mount" ]; then |
if [ ! "$boot_mount" ]; then |
mount $BOOT_DEVICE /mnt |
mount $BOOT_DEVICE /mnt |
boot_device_mounted=1 |
boot_device_mounted=1 |
KERNEL_ROOT=/mnt |
|
elif [ "$boot_mount" != "$default_mount" ]; then |
|
KERNEL_ROOT=$boot_mount/ |
|
else |
|
KERNEL_ROOT=${default_mount%/}/ |
|
fi |
fi |
} |
} |
|
|
|
|
|
|
local _cv=`echo $CUR_VER | sed -e 's/\.//'` |
local _cv=`echo $CUR_VER | sed -e 's/\.//'` |
local _nv=`echo $NEW_VER | sed -e 's/\.//'` |
local _nv=`echo $NEW_VER | sed -e 's/\.//'` |
local _v |
local _v _d _pkr |
|
|
if [ X"No" != X"$FORCE_DIR" -a -d $FORCE_DIR ]; then |
if [ X"No" != X"$FORCE_DIR" -a -d $FORCE_DIR ]; then |
_dir=$FORCE_DIR |
_dir=$FORCE_DIR |
|
|
[ -z "$BOOT_DEVICE" ] && set_boot_device |
[ -z "$BOOT_DEVICE" ] && set_boot_device |
|
|
mount_boot_device |
mount_boot_device |
|
|
|
# _pkr == possible_kernel_roots |
|
_pkr=/ |
|
[ "$BOOT_DEVICE" ] && _pkr="/mnt/ $_pkr" |
|
|
|
for _d in $_pkr; do |
|
KERNEL_ROOT=$( df -lnP ${_d}bsd 2>/dev/null | sed -ne 's!/dev/.* !!p' ) |
|
[ "$KERNEL_ROOT" ] && break |
|
done |
|
|
|
if ! [ "$KERNEL_ROOT" ]; then |
|
echo "Unable to find KERNEL_ROOT, tried $_pkr" >&2 |
|
exit 2 |
|
fi |
|
|
cd $KERNEL_ROOT |
cd $KERNEL_ROOT |
BOOT_KERNEL=$( find_boot_kernel ) |
BOOT_KERNEL=$( find_boot_kernel ) |
BOOT_KERNEL_VERSION=$( kernel_file_version $BOOT_KERNEL ) |
BOOT_KERNEL_VERSION=$( kernel_file_version $BOOT_KERNEL ) |
|
|
|
|
|
|
install_kernels() { |
install_kernels() { |
local _d=$1 |
local _d="$1" |
local default_mount |
|
local boot_mount |
local boot_mount |
local mount_is_msdos |
local mount_is_msdos |
|
|
if [ ! "$_d" ]; then |
if [ "$_d" ]; then |
default_mount=$( df -lnP /bsd | sed -ne 's!/dev/.* !!p' ) |
_d=$( readlink -nf "$_d" ) |
|
else |
mount_boot_device |
mount_boot_device |
|
|
if [ "$KERNEL_ROOT" != "$default_mount" ]; then |
if [ "$KERNEL_ROOT" != "/" ]; then |
local _ik="$INSTALL_KERNELS" |
local _ik="$INSTALL_KERNELS" |
INSTALL_KERNELS="$BOOT_KERNEL bsd.rd" |
INSTALL_KERNELS="$BOOT_KERNEL bsd.rd" |
|
|
|
|
|
|
umount_boot_device |
umount_boot_device |
|
|
install_kernels $default_mount |
install_kernels / |
return |
return |
fi |
fi |
|
|
|
|
exit 1 |
exit 1 |
fi |
fi |
|
|
|
[ $_d != / ] && _d=${_d%/}/ |
[ $_d != / ] && mount | grep -q " on ${_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 |
if [ X"$BOOT_KERNEL_VERSION" != X"$NEW_KERNEL_VERSION" ]; then |
|
|
echo |
echo |
|
|
mount_boot_device |
mount_boot_device |
|
l=$KERNEL_ROOT |
|
[ "$l" = / ] || l="$BOOT_DEVICE:" |
for k in $INSTALL_KERNELS; do |
for k in $INSTALL_KERNELS; do |
if [ -e $KERNEL_ROOT$k ]; then |
if [ -e $KERNEL_ROOT$k ]; then |
echo "Existing $BOOT_DEVICE:$k" |
echo "Existing $l$k" |
kernel_file_version $KERNEL_ROOT$k |
kernel_file_version $KERNEL_ROOT$k |
fi |
fi |
done |
done |