summaryrefslogtreecommitdiffstats
path: root/libexec/reorder_kernel/reorder_kernel.sh
diff options
context:
space:
mode:
authorrpe <rpe@openbsd.org>2017-08-21 21:24:11 +0000
committerrpe <rpe@openbsd.org>2017-08-21 21:24:11 +0000
commit6248d275279851465c9013c61a38254643611b2d (patch)
tree1e9cd4ada5e8dd595bc1b1df6162528c5990ecd6 /libexec/reorder_kernel/reorder_kernel.sh
parentSame as previous for \r alone. (diff)
downloadwireguard-openbsd-6248d275279851465c9013c61a38254643611b2d.tar.xz
wireguard-openbsd-6248d275279851465c9013c61a38254643611b2d.zip
Move the kernel relinking code from /etc/rc into a seperate script
/usr/libexec/reorder_kernel. Requested by ajacoutot@ to be able to relink the kernel from within syspatch(8). OK deraadt@ tb@
Diffstat (limited to 'libexec/reorder_kernel/reorder_kernel.sh')
-rw-r--r--libexec/reorder_kernel/reorder_kernel.sh58
1 files changed, 58 insertions, 0 deletions
diff --git a/libexec/reorder_kernel/reorder_kernel.sh b/libexec/reorder_kernel/reorder_kernel.sh
new file mode 100644
index 00000000000..62cb8affa1e
--- /dev/null
+++ b/libexec/reorder_kernel/reorder_kernel.sh
@@ -0,0 +1,58 @@
+#!/bin/ksh
+#
+# $OpenBSD: reorder_kernel.sh,v 1.1 2017/08/21 21:24:11 rpe Exp $
+#
+# Copyright (c) 2017 Robert Peichaer <rpe@openbsd.org>
+#
+# 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.
+
+set -o errexit
+
+# Skip if /usr/share is on a nfs mounted filesystem.
+DISK_DEV=$(df /usr/share | sed '1d;s/ .*//')
+[[ $(mount | grep "^$DISKDEV") == *" type nfs "* ]] && exit 1
+
+COMPILE_DIR=/usr/share/compile
+KERNEL=$(sysctl -n kern.osversion)
+KERNEL=${KERNEL%#*}
+LOGFILE=$COMPILE_DIR/$KERNEL/relink.log
+PROGNAME=${0##*/}
+SHA256=/var/db/kernel.SHA256
+
+# Create kernel compile dir and redirect stdout/stderr to a logfile.
+mkdir -m 700 -p $COMPILE_DIR/$KERNEL
+exec 1>$LOGFILE
+exec 2>&1
+
+# Install trap handlers to inform about success or failure via syslog.
+trap 'trap - EXIT; logger -st $PROGNAME \
+ "kernel relinking failed; see $LOGFILE" >>/dev/console 2>&1' ERR
+trap 'logger -t $PROGNAME "kernel relinking done"' EXIT
+
+if [[ -f $COMPILE_DIR.tgz ]]; then
+ rm -rf $COMPILE_DIR/$KERNEL/*
+ # The directory containing the logfile was just deleted, redirect
+ # stdout again to a new logfile.
+ exec 1>$LOGFILE
+ tar -C $COMPILE_DIR -xzf $COMPILE_DIR.tgz $KERNEL
+ rm -f $COMPILE_DIR.tgz
+fi
+
+sha256 -C $SHA256 /bsd
+
+cd $COMPILE_DIR/$KERNEL
+make newbsd
+make newinstall
+
+echo "\nKernel has been relinked and is active on next reboot.\n"
+cat $SHA256