| version 1.50, 2013/10/20 01:18:04 | version 1.60, 2014/01/22 19:35:46 | 
|  |  | 
| #!/bin/sh | #!/bin/sh | 
| # $AFresh1: update_openbsd,v 1.49 2013/10/20 00:13:38 andrew Exp $ | # $AFresh1: update_openbsd,v 1.59 2014/01/22 06:44:53 andrew Exp $ | 
| # | # | 
| # Copyright (c) 2012 Andrew Fresh <andrew@afresh1.com> | # Copyright (c) 2012 Andrew Fresh <andrew@afresh1.com> | 
| # | # | 
|  |  | 
| } | } | 
|  |  | 
| get_sets() { | get_sets() { | 
| echo '### GETTING SETS ###' | echo '==> GETTING SETS' | 
| if [ X"" == X"$FTP" ]; then | if [ X"" == X"$FTP" ]; then | 
| echo ERROR: No FTP site set! >&2 | echo ERROR: No FTP site set! >&2 | 
| return 1 | return 1 | 
|  |  | 
|  |  | 
| for _b in $INSTALL_KERNELS; do | for _b in $INSTALL_KERNELS; do | 
| if [ ! -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 | 
| done | done | 
|  |  | 
| fi | fi | 
|  |  | 
| if [ ! -e ./${_file} ]; then | if [ ! -e ./${_file} ]; then | 
| echo $FTP_CMD ${FTP}/${_file} | echo "===> $FTP_CMD ${FTP}/${_file}" | 
| $FTP_CMD ${FTP}/${_file} | $FTP_CMD ${FTP}/${_file} | 
| fi | fi | 
| done | done | 
|  |  | 
| local _type | local _type | 
|  | local _ftp | 
| for _type in $CHECKSUM_TYPES; do | for _type in $CHECKSUM_TYPES; do | 
| [ -e $_type ] && break | [ -e $_type ] && break | 
| echo $FTP_CMD ${FTP}/$_type | _ftp=`echo "$FTP" | sed -e 's,://[^/]*/,://ftp.openbsd.org/,'` | 
| $FTP_CMD ${FTP}/$_type | echo "===> $FTP_CMD ${_ftp}/$_type" | 
|  | $FTP_CMD ${_ftp}/$_type | 
| done | done | 
| } | } | 
|  |  | 
|  |  | 
|  |  | 
| check_sum () { | check_sum () { | 
| local _type=$1 | local _type=$1 | 
| echo "### CHECKING $_type SUMS ###" | echo "==> CHECKING $_type SUMS" | 
| cd $RELEASEDIR | cd $RELEASEDIR | 
|  |  | 
| if [ ! -e $_type ]; then | if [ ! -e $_type ]; then | 
|  |  | 
| return 1 | return 1 | 
| fi | fi | 
|  |  | 
| ls bsd* *gz | sed -e 's/\(.*\)/(\1)/' > index | local _nv=`echo $NEW_VER | sed -e 's/\.//'` | 
| grep -f index $_type | sum -c | local _signify=`which signify` | 
|  | local _keyfile=/etc/signify/${_nv}base.pub | 
|  | local _b _s | 
|  |  | 
|  | ( | 
|  | for _b in $INSTALL_KERNELS; do echo "($_b)"        ; done | 
|  | for _s in $INSTALLED_SETS;  do echo "($_s$_nv.tgz)"; done | 
|  | ) > index | 
|  |  | 
|  |  | 
|  | if [ -n "$_signify" -a "$_type" != "${_type%.sig}" ]; then | 
|  | echo "===> Checking signature"; | 
|  | if [ ! -e $_keyfile ]; then | 
|  | echo "key [$_keyfile] does not exist, cannot check $_type" >&2 | 
|  | return 2 | 
|  | fi | 
|  | signify -V -e -p $_keyfile -x $_type -m - | grep -f index | sum -c - | 
|  | else | 
|  | grep -f index $_type | sum -c | 
|  | fi | 
|  |  | 
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | 
| echo ERROR: $_type does not match! >&2 | echo ERROR: $_type does not match! >&2 | 
| return 1 | return 1 | 
|  |  | 
| } | } | 
|  |  | 
| check_sets() { | check_sets() { | 
| echo '### CHECKING SETS ###' | echo '==> CHECKING SETS' | 
| cd $RELEASEDIR | cd $RELEASEDIR | 
|  |  | 
| local _missing_sets | local _missing_sets | 
|  |  | 
| done | done | 
|  |  | 
| if [ X"" == X"${_missing_sets}" ]; then | if [ X"" == X"${_missing_sets}" ]; then | 
| echo All OK | echo '===> All OK' | 
| fi | fi | 
|  |  | 
| local _type | local _type | 
| for _type in $CHECKSUM_TYPES; do | for _type in $CHECKSUM_TYPES; do | 
| if [ -e $_type ]; then | if [ -e $_type ]; then | 
| check_sum $_type | check_sum $_type && break | 
|  | [ -z "$IGNORE_CHECKSUM_ERROR" ] || exit 1 | 
| fi | fi | 
| done | done | 
|  |  | 
|  | return 0 | 
| } | } | 
|  |  | 
|  |  | 
| install_kernels() { | install_kernels() { | 
| echo '### INSTALLING KERNEL ###' | echo '==> INSTALLING KERNEL' | 
| if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then | if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then | 
| echo ${0##*/} must be run as root or SUDO must be set! >&2 | echo ${0##*/} must be run as root or SUDO must be set! >&2 | 
| exit 1 | exit 1 | 
|  |  | 
| fi | fi | 
|  |  | 
| if [ X"$BOOT_KERNEL_VERSION" != X"$NEW_KERNEL_VERSION" ]; then | if [ X"$BOOT_KERNEL_VERSION" != X"$NEW_KERNEL_VERSION" ]; then | 
| echo "Backing up $BOOT_KERNEL to /obsd" | echo "===> Backing up $BOOT_KERNEL to /obsd" | 
| $SUDO ln -f $BOOT_KERNEL /obsd | $SUDO ln -f $BOOT_KERNEL /obsd | 
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | 
| echo "Error copying old kernel!" >&2 | echo "Error copying old kernel!" >&2 | 
|  |  | 
| local _is_boot="" | local _is_boot="" | 
| [ X"$BOOT_KERNEL" == X"/${_bd}" ] && _is_boot="# boot kernel" | [ X"$BOOT_KERNEL" == X"/${_bd}" ] && _is_boot="# boot kernel" | 
|  |  | 
| echo "Copying $_b to /$_bd $_is_boot" | echo "===> Copying $_b to /$_bd $_is_boot" | 
| $SUDO cp ${_b} /nbsd && $SUDO mv /nbsd /${_bd} | $SUDO cp ${_b} /nbsd && $SUDO mv /nbsd /${_bd} | 
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | 
| echo ERROR: Could not copy new $_bd kernel! >&2 | echo ERROR: Could not copy new $_bd kernel! >&2 | 
|  |  | 
| for _b in $BOOT_KERNELS; do | for _b in $BOOT_KERNELS; do | 
| [ X"$_b" == X"bsd" ] && _b="bsd.sp" | [ X"$_b" == X"bsd" ] && _b="bsd.sp" | 
| if [ -e $_b ]; then | if [ -e $_b ]; then | 
| echo symlinking $_b to /bsd | echo "===> symlinking $_b to /bsd" | 
| $SUDO ln -sf $_b bsd | $SUDO ln -sf $_b bsd | 
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | 
| echo ERROR: Could not symlink new kernel! >&2 | echo ERROR: Could not symlink new kernel! >&2 | 
|  |  | 
| } | } | 
|  |  | 
| install_sets() { | install_sets() { | 
| echo '### INSTALLING SETS ###' | echo '==> INSTALLING SETS' | 
| if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then | if [ X"$USER" != X"root" -a X"$SUDO" == X"" ]; then | 
| echo ${0##*/} must be run as root or SUDO must be set! >&2 | echo ${0##*/} must be run as root or SUDO must be set! >&2 | 
| exit 1 | exit 1 | 
|  |  | 
| _path=/var/tmp/temproot | _path=/var/tmp/temproot | 
| fi | fi | 
|  |  | 
| echo Extracting $_f to $_path | echo "===> Extracting $_f to $_path" | 
| $SUDO mkdir -p $_path | $SUDO mkdir -p $_path | 
| $SUDO tar -C $_path -xzphf ${RELEASEDIR}/${_f} | $SUDO tar -C $_path -xzphf ${RELEASEDIR}/${_f} | 
| if [ $? -ne 0 ]; then | if [ $? -ne 0 ]; then | 
|  |  | 
| fi | fi | 
| done | done | 
|  |  | 
| echo Extracted all sets. | echo '===> Extracted all sets.' | 
|  | } | 
|  |  | 
|  | install_sendmail_smtp_auth() { | 
| if [ -e ${RELEASEDIR}/sendmail-smtp_auth.gz ]; then | if [ -e ${RELEASEDIR}/sendmail-smtp_auth.gz ]; then | 
| gzcat ${RELEASEDIR}/sendmail-smtp_auth.gz > \ | gzcat ${RELEASEDIR}/sendmail-smtp_auth.gz > \ | 
| ${RELEASEDIR}/sendmail-smtp_auth | ${RELEASEDIR}/sendmail-smtp_auth | 
|  |  | 
| ${RELEASEDIR}/sendmail-smtp_auth \ | ${RELEASEDIR}/sendmail-smtp_auth \ | 
| /usr/libexec/sendmail/sendmail | /usr/libexec/sendmail/sendmail | 
|  |  | 
| echo Installed sendmail with smtp_auth | echo '===> Installed sendmail with smtp_auth' | 
| fi | fi | 
| } | } | 
|  |  | 
| update_etc() { | update_etc() { | 
| echo '### UPDATING ETC ###' | echo '==> UPDATING ETC' | 
| if [ ! -e $SYSMERGE ]; then | if [ ! -e $SYSMERGE ]; then | 
| echo "ERROR: Can't find sysmerge!" >&2 | echo "ERROR: Can't find sysmerge!" >&2 | 
| exit 1; | exit 1; | 
|  |  | 
| local _v=$FILE_VER | local _v=$FILE_VER | 
| local _args="" | local _args="" | 
| if [ -e etc${_v}.tgz ]; then | if [ -e etc${_v}.tgz ]; then | 
| _args="$_args -s etc${_v}.tgz" | _args="$_args -s ${RELEASEDIR}/etc${_v}.tgz" | 
| fi | fi | 
| if [ -e xetc${_v}.tgz ]; then | if [ -e xetc${_v}.tgz ]; then | 
| _args="$_args -x xetc${_v}.tgz" | _args="$_args -x ${RELEASEDIR}/xetc${_v}.tgz" | 
| fi | fi | 
| if [ X"" == X"$_args" ]; then | if [ X"" == X"$_args" ]; then | 
| echo ERROR: No upgrade sets found! >&2 | echo ERROR: No upgrade sets found! >&2 | 
| else | else | 
| echo '### RUNNING SYSMERGE ###' | echo '==> RUNNING SYSMERGE' | 
| $SUDO $SYSMERGE $_args | $SUDO $SYSMERGE $_args | 
| fi | fi | 
|  |  | 
|  |  | 
|  |  | 
| INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`} | INSTALLED_SETS=${INSTALLED_SETS:=`installed_sets`} | 
|  |  | 
| CHECKSUM_TYPES=${CHECKSUM_TYPES:=SHA256 MD5} | CHECKSUM_TYPES=${CHECKSUM_TYPES:=SHA256.sig SHA256} | 
|  |  | 
| set_version | set_version | 
| local _error=$? | local _error=$? | 
|  |  | 
|  |  | 
| check_sets || exit | check_sets || exit | 
|  |  | 
| echo "Last booted:\n$BOOTED_KERNEL_VERSION" | echo "===> Last booted:\n$BOOTED_KERNEL_VERSION" | 
| if [ X"$BOOT_KERNEL_VERSION" != X"$BOOTED_KERNEL_VERSION" \ | if [ X"$BOOT_KERNEL_VERSION" != X"$BOOTED_KERNEL_VERSION" \ | 
| -a X"$BOOT_KERNEL_VERSION" != X"$NEW_KERNEL_VERSION" ]; then | -a X"$BOOT_KERNEL_VERSION" != X"$NEW_KERNEL_VERSION" ]; then | 
| echo "Next boot (unless replaced):\n$BOOT_KERNEL_VERSION" | echo "Next boot (unless replaced):\n$BOOT_KERNEL_VERSION" | 
| fi | fi | 
| if [ -n "$NEW_KERNEL_VERSION" ]; then | if [ -n "$NEW_KERNEL_VERSION" ]; then | 
| echo "New $BOOT_KERNEL:\n$NEW_KERNEL_VERSION"; | echo "===> New $BOOT_KERNEL:\n$NEW_KERNEL_VERSION"; | 
| else | else | 
| echo "\n!!! WARNING: Will not replace boot kernel $BOOT_KERNEL! !!!\n" >&2 | echo "\n!!! WARNING: Will not replace boot kernel $BOOT_KERNEL! !!!\n" >&2 | 
| echo "ctrl+C to cancel, enter to continue anyway" >&2 | echo "ctrl+C to cancel, enter to continue anyway" >&2 | 
| local _temp | local _temp | 
| read _temp | read _temp | 
|  | NEW_KERNEL_VERSION=$BOOT_KERNEL_VERSION | 
| fi | fi | 
|  |  | 
| if [ -n "$SUDO" -a $CUR_VER != $NEW_VER ]; then | if [ -n "$SUDO" -a $CUR_VER != $NEW_VER ]; then | 
|  |  | 
| $SUDO -v -p "sudo Password: " | $SUDO -v -p "sudo Password: " | 
| fi | fi | 
|  |  | 
| if [ X"$BOOT_KERNEL_VERSION" != X"$BOOTED_KERNEL_VERSION" \ | if [ X"$NEW_KERNEL_VERSION" != X"$BOOTED_KERNEL_VERSION" \ | 
| -a ! -e /sbin/oreboot ]; then | -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 | 
|  |  | 
| install_kernels | install_kernels | 
| install_sets | install_sets | 
|  |  | 
| if [ X"$BOOT_KERNEL_VERSION" == X"$BOOTED_KERNEL_VERSION" ]; then | if [ X"$NEW_KERNEL_VERSION" == X"$BOOTED_KERNEL_VERSION" ]; then | 
|  | install_sendmail_smtp_auth | 
|  |  | 
| 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 | 
| fi | fi | 
| update_etc | update_etc | 
|  |  | 
| echo '### UPDATING PACKAGES ###' | echo '==> UPDATING PACKAGES' | 
| $SUDO pkg_add -ui -F update -F updatedepends | $SUDO pkg_add -ui -F update -F updatedepends | 
|  |  | 
| else | else | 
|  |  | 
| echo New kernel installed.  Please reboot! | echo New kernel installed.  Please reboot! | 
| if [ -e /sbin/oreboot ]; then | if [ -e /sbin/oreboot ]; then | 
| echo Possibly using /sbin/oreboot | echo Possibly using /sbin/oreboot | 
| fi |  | 
|  |  | 
| local _send_dmesg=`dirname $0`/send_dmesg |  | 
| if [ -e "$_send_dmesg" ]; then |  | 
| if [ -e $RELEASEDIR/.send_dmesg ]; then |  | 
| $_send_dmesg |  | 
| rm -f $RELEASEDIR/.send_dmesg |  | 
| elif [ X"$CUR_VER" != X"$NEW_VER" ]; then |  | 
| touch $RELEASEDIR/.send_dmesg |  | 
| fi |  | 
| fi | fi |