1#!/bin/ksh 2# 3# $OpenBSD: reorder_kernel.sh,v 1.10 2021/09/13 11:49:21 robert Exp $ 4# 5# Copyright (c) 2017 Robert Peichaer <rpe@openbsd.org> 6# 7# Permission to use, copy, modify, and distribute this software for any 8# purpose with or without fee is hereby granted, provided that the above 9# copyright notice and this permission notice appear in all copies. 10# 11# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 19set -o errexit 20 21export PATH=/usr/bin:/bin:/usr/sbin:/sbin 22 23# Skip if /usr/share is on a nfs mounted filesystem. 24df -t nfs /usr/share >/dev/null 2>&1 && exit 1 25 26KERNEL=$(sysctl -n kern.osversion) 27KERNEL=${KERNEL%#*} 28KERNEL_DIR=/usr/share/relink/kernel 29LOGFILE=$KERNEL_DIR/$KERNEL/relink.log 30PROGNAME=${0##*/} 31SHA256=/var/db/kernel.SHA256 32 33# Create kernel compile dir and redirect stdout/stderr to a logfile. 34mkdir -m 700 -p $KERNEL_DIR/$KERNEL 35exec 1>$LOGFILE 36exec 2>&1 37 38# Install trap handlers to inform about success or failure via syslog. 39trap 'trap - EXIT; logger -st $PROGNAME \ 40 "failed -- see $LOGFILE" >>/dev/console 2>&1' ERR 41trap 'logger -t $PROGNAME "kernel relinking done"' EXIT 42 43if [[ -f $KERNEL_DIR.tgz ]]; then 44 rm -rf $KERNEL_DIR/$KERNEL/* 45 # The directory containing the logfile was just deleted, redirect 46 # stdout again to a new logfile. 47 exec 1>$LOGFILE 48 tar -C $KERNEL_DIR -xzf $KERNEL_DIR.tgz $KERNEL 49 rm -f $KERNEL_DIR.tgz 50fi 51 52if ! sha256 -C $SHA256 /bsd; then 53 cat <<__EOF 54 55Failed to verify /bsd's checksum, therefore a randomly linked kernel (KARL) 56is not being built. KARL can be re-enabled for next boot by issuing as root: 57 58sha256 -h $SHA256 /bsd 59__EOF 60 # Trigger ERR trap 61 false 62fi 63 64cd $KERNEL_DIR/$KERNEL 65make newbsd 66[ -f /etc/bsd.re-config ] && config -e -c /etc/bsd.re-config -f bsd 67make newinstall 68sync 69 70echo "\nKernel has been relinked and is active on next reboot.\n" 71cat $SHA256 72