| version 1.102, 2017/12/11 02:36:03 | version 1.106, 2017/12/11 03:12:34 | 
|  |  | 
| #!/bin/sh | #!/bin/sh | 
| # $AFresh1: update_openbsd,v 1.101 2017/12/11 02:34:10 andrew Exp $ | # $AFresh1: update_openbsd,v 1.105 2017/12/11 02:58:57 andrew Exp $ | 
| # | # | 
| # Copyright (c) 2012 Andrew Fresh <andrew@afresh1.com> | # Copyright (c) 2012 Andrew Fresh <andrew@afresh1.com> | 
| # | # | 
|  |  | 
| #what $1 | sed -ne 's/[[:blank:]]\{1,\}//p' | #what $1 | sed -ne 's/[[:blank:]]\{1,\}//p' | 
| } | } | 
|  |  | 
|  | kernel_is_multiprocessor() { | 
|  | printf "find cpu*\nexit\n" | config -e $1 2>/dev/null | grep -q "cpu\* at " | 
|  | } | 
|  |  | 
| version_in() { | version_in() { | 
| local _proto=${FTP%%://*} | local _proto=${FTP%%://*} | 
| local _file | local _file | 
|  |  | 
|  |  | 
| boot_device_mounted="" | boot_device_mounted="" | 
| mount_boot_device() { | mount_boot_device() { | 
| [ "boot_device_mounted" ] && return | [ "$boot_device_mounted" ] && return | 
|  |  | 
| local default_mount=$( df -lnP /bsd | sed -ne 's!/dev/.* !!p' ) | local default_mount=$( df -lnP /bsd | sed -ne 's!/dev/.* !!p' ) | 
| local boot_mount=$( mount | | local boot_mount=$( mount | | 
|  |  | 
| boot_device_mounted="" | boot_device_mounted="" | 
| } | } | 
|  |  | 
|  | find_boot_kernel() { | 
|  | local _k=$( ( \ | 
|  | echo bsd; \ | 
|  | [ -e boot.conf ] && sed -E '/^ *(set +image|boot) +/!d ; \ | 
|  | s///; s/^.*://; s/ .*$//' boot.conf \ | 
|  | ) | tail -1 ) | 
|  | _k=$( follow_symlink $_k ) | 
|  |  | 
|  | local _d=$( dirname $_k ) | 
|  | [ "$_d" = "." ] && _d=$PWD | 
|  |  | 
|  | if [ $_d = . -o $_d = $PWD ]; then | 
|  | basename $_k | 
|  | else | 
|  | echo $_k | 
|  | fi | 
|  | } | 
|  |  | 
| set_version() { | set_version() { | 
| CUR_VER=`uname -r` | CUR_VER=`uname -r` | 
| NEW_VER=`dc -e "$CUR_VER 0.1 + p"` | NEW_VER=`dc -e "$CUR_VER 0.1 + p"` | 
|  |  | 
| KERNEL_ROOT="" | KERNEL_ROOT="" | 
| [ -z "$BOOT_DEVICE" ] && set_boot_device | [ -z "$BOOT_DEVICE" ] && set_boot_device | 
|  |  | 
| BOOT_KERNEL=`( \ | mount_boot_device | 
| echo bsd; \ | cd $KERNEL_ROOT | 
| [ -e /boot.conf ] && sed -E '/^ *(set +image|boot) +/!d ; \ | BOOT_KERNEL=$( find_boot_kernel ) | 
| s///; s/^.*://; s/ .*$//' /boot.conf \ | BOOT_KERNEL_VERSION=$( kernel_file_version $BOOT_KERNEL ) | 
| ) | tail -1` | if [ $(sysctl -n hw.ncpufound) -gt 1 ] || kernel_is_multiprocessor $BOOT_KERNEL; then | 
| BOOT_KERNEL=`follow_symlink /$BOOT_KERNEL` | BOOT_KERNEL=bsd.mp | 
| BOOT_KERNEL="/${BOOT_KERNEL#/}" | fi | 
|  |  | 
| BOOT_KERNEL_VERSION=`kernel_file_version $BOOT_KERNEL` |  | 
|  |  | 
| BOOTED_KERNEL_VERSION=`sysctl -n kern.version` | BOOTED_KERNEL_VERSION=`sysctl -n kern.version` | 
| NEW_KERNEL_VERSION="" | NEW_KERNEL_VERSION="" | 
|  |  | 
| # We want to default to what we had | # We want to default to what we had | 
| INSTALL_KERNELS="${BOOT_KERNEL#/}" | INSTALL_KERNELS="$BOOT_KERNEL" | 
| # if the boot kernel was our specially named bsd.sp, we install from bsd | # if the boot kernel was our specially named bsd.sp, we install from bsd | 
| if [ X"$INSTALL_KERNELS" == X"bsd.sp" ]; then | if [ X"$INSTALL_KERNELS" == X"bsd.sp" ]; then | 
| INSTALL_KERNELS="bsd" | INSTALL_KERNELS="bsd" | 
| fi | fi | 
| # with a second option of an mp kernel if is is a likely candidate |  | 
| if [ X"$INSTALL_KERNELS" != X"bsd.mp" ]; then | # We want to update all kernels that exist | 
| local _ncpu=$(sysctl -n hw.ncpufound) | # either in the $KERNEL_ROOT or in / | 
| [ $_ncpu -gt 1 ] && INSTALL_KERNELS="$INSTALL_KERNELS bsd.mp" | for b in bsd bsd.mp; do | 
| fi | [ -e $b -o -e /$b ] || continue | 
| # or just bsd otherwise | if [ X"${INSTALL_KERNELS% *}" != X"$b" ]; then | 
| if [ X"${INSTALL_KERNELS% *}" != X"bsd" ]; then | INSTALL_KERNELS="$INSTALL_KERNELS $b" | 
| INSTALL_KERNELS="$INSTALL_KERNELS bsd" | fi | 
| fi | done | 
|  |  | 
|  | cd $OLDPWD | 
|  | umount_boot_device | 
|  |  | 
| BOOT_KERNELS=$INSTALL_KERNELS | BOOT_KERNELS=$INSTALL_KERNELS | 
| INSTALL_KERNELS="$INSTALL_KERNELS bsd.rd" | INSTALL_KERNELS="$INSTALL_KERNELS bsd.rd" | 
| } | } | 
|  |  | 
| local _missing_sets | local _missing_sets | 
| local _v=$FILE_VER | local _v=$FILE_VER | 
|  |  | 
|  | mount_boot_device | 
| for _n in $INSTALL_KERNELS; do | for _n in $INSTALL_KERNELS; do | 
| local _o=$_n | local _o=$_n | 
| [ X"bsd" == X"${_o}" -a -e /bsd.sp ] && _o=bsd.sp | [ X"bsd" == X"${_o}" -a -e ${KERNEL_ROOT}bsd.sp ] && _o=bsd.sp | 
| if [ -e /${_o} -a ! -e ./${_n} ]; then | if [ -e ${KERNEL_ROOT}${_o} -a ! -e ./${_n} ]; then | 
| echo ${_o} does not exist | echo ${_o} does not exist on $BOOT_DEVICE | 
| _missing_sets=1 | _missing_sets=1 | 
| fi | fi | 
|  |  | 
| if [ X"${BOOT_KERNEL}" == X"/${_o}" -a -e ./${_n} ]; then | if [ X"${BOOT_KERNEL}" == X"${_o}" -a -e ./${_n} ]; then | 
| NEW_KERNEL_VERSION=`kernel_file_version ./${_n}` | NEW_KERNEL_VERSION=`kernel_file_version ./${_n}` | 
| fi | fi | 
| done | done | 
|  | umount_boot_device | 
|  |  | 
| if [ X"$NEW_KERNEL_VERSION" == X"" ]; then | if [ X"$NEW_KERNEL_VERSION" == X"" ]; then | 
| echo Missing replacement for boot kernel $BOOT_KERNEL >&2 | echo Missing replacement for boot kernel $BOOT_KERNEL >&2 | 
|  |  | 
|  |  | 
| if [ "$KERNEL_ROOT" != "$default_mount" ]; then | if [ "$KERNEL_ROOT" != "$default_mount" ]; then | 
| local _ik="$INSTALL_KERNELS" | local _ik="$INSTALL_KERNELS" | 
| INSTALL_KERNELS="${BOOT_KERNEL#/} bsd.rd" | INSTALL_KERNELS="$BOOT_KERNEL bsd.rd" | 
|  |  | 
| install_kernels $KERNEL_ROOT | install_kernels $KERNEL_ROOT | 
|  |  | 
|  |  | 
| #echo "        FILE_VER: $FILE_VER" | #echo "        FILE_VER: $FILE_VER" | 
| echo | echo | 
|  |  | 
|  | mount_boot_device | 
| for k in $INSTALL_KERNELS; do | for k in $INSTALL_KERNELS; do | 
| if [ -e "/$k" ]; then | if [ -e $KERNEL_ROOT$k ]; then | 
| echo "Existing $k" | echo "Existing $BOOT_DEVICE:$k" | 
| kernel_file_version "/$k" | kernel_file_version $KERNEL_ROOT$k | 
| fi | fi | 
| done | done | 
|  | umount_boot_device | 
|  |  | 
| if [ ${_error} -ne 0 ]; then | if [ ${_error} -ne 0 ]; then | 
| exit ${_error} | exit ${_error} |