version 1.39, 2012/12/08 19:52:08 |
version 1.49, 2013/10/20 01:13:38 |
|
|
#!/bin/sh |
#!/bin/sh |
# $AFresh1: update_openbsd,v 1.38 2012/04/19 04:03:47 andrew Exp $ |
# $AFresh1: update_openbsd,v 1.48 2013/01/26 18:13:03 andrew Exp $ |
|
# |
|
# Copyright (c) 2012 Andrew Fresh <andrew@afresh1.com> |
|
# |
|
# Permission to use, copy, modify, and distribute this software for any |
|
# purpose with or without fee is hereby granted, provided that the above |
|
# copyright notice and this permission notice appear in all copies. |
|
# |
|
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|
# |
|
|
installed_sets() { |
installed_sets() { |
local misc=/usr/share/doc/README |
local misc=/usr/share/doc/README |
|
|
[ -e /boot.conf ] && sed -E '/^ *(set +image|boot) +/!d ; \ |
[ -e /boot.conf ] && sed -E '/^ *(set +image|boot) +/!d ; \ |
s///; s/^.*://; s/ .*$//' /boot.conf \ |
s///; s/^.*://; s/ .*$//' /boot.conf \ |
) | tail -1` |
) | tail -1` |
|
BOOT_KERNEL=`follow_symlink /$BOOT_KERNEL` |
BOOT_KERNEL="/${BOOT_KERNEL#/}" |
BOOT_KERNEL="/${BOOT_KERNEL#/}" |
BOOT_KERNEL=`follow_symlink $BOOT_KERNEL` |
|
|
|
BOOT_KERNEL_VERSION=`kernel_file_version $BOOT_KERNEL` |
BOOT_KERNEL_VERSION=`kernel_file_version $BOOT_KERNEL` |
|
|
|
|
|
|
# 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 [ X"$INSTALL_KERNELS" == X"bsd.sp" ]; then |
|
INSTALL_KERNELS="bsd" |
|
fi |
# with a second option of an mp kernel if is is a likely candidate |
# with a second option of an mp kernel if is is a likely candidate |
if [ X"$INSTALL_KERNELS" != X"bsd.mp" ]; then |
if [ X"$INSTALL_KERNELS" != X"bsd.mp" ]; then |
local _ncpu=$(sysctl -n hw.ncpufound) |
local _ncpu=$(sysctl -n hw.ncpufound) |
|
|
local _v=$FILE_VER |
local _v=$FILE_VER |
|
|
for _b in $INSTALL_KERNELS; do |
for _b in $INSTALL_KERNELS; do |
if [ -e /${_b} -a ! -e ./${_b} ]; then |
if [ ! -e ./${_b} ]; then |
echo $FTP_CMD ${FTP}/${_b} |
echo $FTP_CMD ${FTP}/${_b} |
$FTP_CMD ${FTP}/${_b} |
$FTP_CMD ${FTP}/${_b} |
fi |
fi |
|
|
|
|
local _type |
local _type |
for _type in $CHECKSUM_TYPES; do |
for _type in $CHECKSUM_TYPES; do |
if [ ! -e $_type ]; then |
[ -e $_type ] && break |
echo $FTP_CMD ${FTP}/$_type |
echo $FTP_CMD ${FTP}/$_type |
$FTP_CMD ${FTP}/$_type |
$FTP_CMD ${FTP}/$_type |
fi |
|
done |
done |
} |
} |
|
|
|
|
exit 1 |
exit 1 |
fi |
fi |
|
|
echo "Backing up $BOOT_KERNEL to /obsd" |
if [ X"$BOOT_KERNEL_VERSION" != X"$NEW_KERNEL_VERSION" ]; then |
$SUDO ln -f $BOOT_KERNEL /obsd |
echo "Backing up $BOOT_KERNEL to /obsd" |
if [ $? -ne 0 ]; then |
$SUDO ln -f $BOOT_KERNEL /obsd |
echo "Error copying old kernel!" >&2 |
if [ $? -ne 0 ]; then |
exit 1 |
echo "Error copying old kernel!" >&2 |
|
exit 1 |
|
fi |
fi |
fi |
|
|
cd $RELEASEDIR |
cd $RELEASEDIR |
|
|
|
|
local _v=$FILE_VER |
local _v=$FILE_VER |
|
|
if [ $CUR_VER != $NEW_VER -a ! -e /sbin/oreboot ]; then |
if [ X"$BOOT_KERNEL_VERSION" != X"$BOOTED_KERNEL_VERSION" \ |
|
-a ! -e /sbin/oreboot ]; then |
$SUDO cp /sbin/reboot /sbin/oreboot |
$SUDO cp /sbin/reboot /sbin/oreboot |
if [ $? -ne 0 ]; then |
if [ $? -ne 0 ]; then |
echo "Error copying old reboot command!" >&2 |
echo "Error copying old reboot command!" >&2 |
|
|
update_etc() { |
update_etc() { |
echo '### UPDATING ETC ###' |
echo '### UPDATING ETC ###' |
if [ ! -e $SYSMERGE ]; then |
if [ ! -e $SYSMERGE ]; then |
SYSMERGE= |
echo "ERROR: Can't find sysmerge!" >&2 |
|
exit 1; |
fi |
fi |
|
|
if [ X"" == X"$SYSMERGE" ]; then |
if [ X"" == X"$RELEASEDIR" ]; then |
if [ -e /var/tmp/temproot ]; then |
echo "ERROR: no source for etc!" >&2 |
MERGEMASTER=`which mergemaster` |
exit 1 |
|
fi |
|
|
if [ $? != 0 ]; then |
cd $RELEASEDIR |
$SUDO pkg_add -i mergemaster |
|
|
|
MERGEMASTER=`which mergemaster` |
local _v=$FILE_VER |
if [ $? != 0 ]; then |
local _args="" |
echo ERROR: mergemaster not installed! >&2 |
if [ -e etc${_v}.tgz ]; then |
exit 1 |
_args="$_args -s etc${_v}.tgz" |
fi |
fi |
fi |
if [ -e xetc${_v}.tgz ]; then |
|
_args="$_args -x xetc${_v}.tgz" |
echo '### RUNNING MERGEMASTER ###' |
fi |
$SUDO $MERGEMASTER -irv |
if [ X"" == X"$_args" ]; then |
else |
echo ERROR: No upgrade sets found! >&2 |
echo "ERROR: no source for etc!" >&2 |
|
exit 1 |
|
fi |
|
else |
else |
if [ X"" == X"$RELEASEDIR" ]; then |
echo '### RUNNING SYSMERGE ###' |
echo "ERROR: no source for etc!" >&2 |
$SUDO $SYSMERGE $_args |
exit 1 |
|
else |
|
cd $RELEASEDIR |
|
fi |
|
|
|
local _v=$FILE_VER |
|
local _args="" |
|
if [ -e etc${_v}.tgz ]; then |
|
_args="$_args -s etc${_v}.tgz" |
|
fi |
|
if [ -e xetc${_v}.tgz ]; then |
|
_args="$_args -x xetc${_v}.tgz" |
|
fi |
|
if [ X"" == X"$_args" ]; then |
|
echo ERROR: No upgrade sets found! >&2 |
|
else |
|
echo '### RUNNING SYSMERGE ###' |
|
if sysmerge 2>&1 | grep -- -a >/dev/null; then |
|
_args="-a $_args" |
|
fi |
|
$SUDO $SYSMERGE $_args |
|
fi |
|
fi |
fi |
|
|
|
cd $OLDPWD |
} |
} |
|
|
|
|
|
|
read _temp |
read _temp |
fi |
fi |
|
|
if [ X"" != X"$SUDO" ]; then |
if [ -n "$SUDO" -a $CUR_VER != $NEW_VER ]; then |
echo Please enter your sudo password if prompted. |
echo >&2 |
echo You may be asked for it again later in the process. |
echo "!!! You are upgrading between OpenBSD versions. !!!" >&2 |
$SUDO -v |
echo "!!! You should make sure you have a root shell open !!!" >&2 |
|
echo "!!! It is needed in order to run /sbin/oreboot. !!!" >&2 |
|
echo "!!! sudo MAY NOT WORK after sets are extracted. !!!" >&2 |
|
echo >&2 |
|
echo "ctrl+C to cancel, enter to continue" >&2 |
|
local _temp |
|
read _temp |
fi |
fi |
|
|
|
if [ -n "$SUDO" ]; then |
|
echo |
|
echo You may be asked for your sudo password multiple times. |
|
$SUDO -v -p "sudo Password: " |
|
fi |
|
|
install_kernels |
install_kernels |
install_sets |
install_sets |
|
|
if [ $CUR_VER == $NEW_VER ]; then |
if [ X"$BOOT_KERNEL_VERSION" == X"$BOOTED_KERNEL_VERSION" ]; then |
if [ -e /sbin/oreboot ]; then |
if [ -e /sbin/oreboot ]; then |
echo Removing /sbin/oreboot |
echo Removing /sbin/oreboot |
$SUDO rm -f /sbin/oreboot |
$SUDO rm -f /sbin/oreboot |