commit 2c9ebbdf92298d19a2da31e22d4581c1eb0c9607 Author: Antoine Jacoutot Date: Tue Aug 6 09:30:13 2013 +0200 Initial openup import. DO NOT USE YET! diff --git a/openup b/openup new file mode 100755 index 0000000..b3477f6 --- /dev/null +++ b/openup @@ -0,0 +1,148 @@ +#!/bin/sh +# +# Copyright (c) M:tier Ltd. +# +# 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. +# +# Author: Antoine Jacoutot + +# TODO +# https://stable.mtier.org/vuxml/53.xml +# check for pkg.conf installpath and/or PKG_PATH +# extend usage() with doc from web + +### user defined variables +#OPENUP_URL='https://stable.mtier.org/openup' +OPENUP_URL='https://www.bsdfrog.org/tmp/openup' +PKG_CERT_URL='https://stable.mtier.org/mtier.cert' +PKG_CERT_REGEX='M:Tier Ltd. OpenBSD Stable Updates' +### end of user defined variables + +# do not change this!!! +OPENUP_VERSION=0 +OPENUP_MINREL=5.3 + +error() { + echo -n "*** ERROR: $@" +} + +usage() { + echo "usage: ${0##*/} [-SUn]" >&2 + exit 1 +} + +check_unsup() { + if [ "${tag}" == -!(stable) ]; then + error "XXX -current is a no-no" + exit 1 + fi + + if [ "${version}" -lt ${OPENUP_MINREL} ]; then + error "XXX release ${version} is a no-no (non-fatal)" + fi +} + +get_cert() { + local _CERT + + if [ -r /etc/ssl/pkgca.pem ]; then + openssl x509 -noout -in /etc/ssl/pkgca.pem -issuer 2>/dev/null | \ + grep -q "${PKG_CERT_REGEX}" && return + fi + + echo "===> Downloading certificate" + _CERT=$(mktemp -p ${TMPDIR:=/tmp} pkg_cert.XXXXXXXXXX) || exit 1 + ftp -Vo ${_CERT} ${PKG_CERT_URL} + if [ $? -ne 0 ]; then + error "XXX could not download certificate; it's a no-no" + rm -f ${_CERT} + exit 1 + fi + + echo "===> Installing certificate" + [[ -n ${DRYRUN} ]] || cat /tmp/mtier.cert >>/etc/ssl/pkgca.pem + [ $? -eq 0 ] && echo "successfully added certificate to /etc/ssl/pkgca.pem" + rm -f ${_CERT} +} + +update_self() { + local _F _N + + echo "===> Checking for openup(8) update" + _F=$(mktemp -p ${TMPDIR:=/tmp} pkg_cert.XXXXXXXXXX) || exit 1 + ftp -Vo ${_F} ${OPENUP_URL} + if [ $? -ne 0 ]; then + error "XXX could not check for upenup update; it's a no-no (non-fatal)" + fi + + _N=$(grep -Eo '^OPENUP_VERSION=.*' ${_F} | awk -F '=' '{ print $2 }') + [[ -n "${_N}" ]] && \ + if [ "${OPENUP_VERSION}" -lt "${_N}" ]; then + echo "===> Updating openup(8) from version ${OPENUP_VERSION} to version ${_N}" + [[ -n "${DRYRUN}" ]] || cat ${_F} >${MEESA} + [ $? -eq 0 ] && \ + rm -f ${_F} + echo "successfully updated openup(8) to version ${_N}, restarting myself" && \ + ${MEESA} -U $@ + exit $? + fi + rm -f ${_F} +} + +update_binpatches() { + local _BP=$(pkg_info -Q binpatch$(echo $version | tr -d '.')-$(arch -s) | sed 's/.[^-]*$//' | sort -u) + + if [ -n "$_BP" ]; then + echo "===> Updating binpatch(es)" + pkg_add ${pkg_opt} ${_BP} + fi +} + +update_pkg() { + echo "===> Updating package(s)" + pkg_add -u ${pkg_opt} +} + +update_fw() { + echo "===> Updating firmware(s)" + fw_update ${fw_opt} +} + +while getopts 'SUn' arg; do + case ${arg} in + S) NOSIG=1; pkg_opt="${pkg_opt} -D nosig" ;; + U) NOSELFUPDATE=1 ;; + n) DRYRUN=1; pkg_opt="${pkg_opt} -n -D nosig"; fw_opt="-n" ;; + *) usage ;; + esac +done +[ $# = $(($OPTIND-1)) ] || usage + +if [ "$(id -u)" -ne 0 ]; then + error "need root privileges to run this script" + usage +fi + +MEESA=$(readlink -f $0) + +# magic taken from fw_update(1) +set -- $(sysctl -n kern.version | sed 's/^OpenBSD \([0-9]\.[0-9]\)\([^ ]*\).*/\1 \2/;q') +version=$1 +tag=$2 + +[[ -z $NOSELFUPDATE ]] && update_self +check_unsup +[[ -z $NOSIG ]] && get_cert +update_binpatches +update_pkg +update_fw