1#!/bin/ksh 2# 3# $OpenBSD: reorder_kernel.sh,v 1.13 2022/11/07 15:55:56 kn 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 23KERNEL=$(sysctl -n kern.osversion) 24KERNEL=${KERNEL%#*} 25KERNEL_DIR=/usr/share/relink/kernel 26LOGFILE=$KERNEL_DIR/$KERNEL/relink.log 27PROGNAME=${0##*/} 28SHA256=/var/db/kernel.SHA256 29 30# Silently skip if on a NFS mounted filesystem. 31df -t nonfs $KERNEL_DIR >/dev/null 2>&1 32 33# Install trap handlers to inform about success or failure via syslog. 34ERRMSG='failed' 35trap 'trap - EXIT; logger -st $PROGNAME "$ERRMSG" >/dev/console 2>&1' ERR 36trap 'logger -t $PROGNAME "kernel relinking done"' EXIT 37 38# Create kernel compile dir and redirect stdout/stderr to a logfile. 39mkdir -m 700 -p $KERNEL_DIR/$KERNEL 40exec 1>$LOGFILE 41exec 2>&1 42 43ERRMSG="failed -- see $LOGFILE" 44 45if [[ -f $KERNEL_DIR.tgz ]]; then 46 rm -rf $KERNEL_DIR/$KERNEL/* 47 # The directory containing the logfile was just deleted, redirect 48 # stdout/stderr again to a new logfile. 49 exec 1>$LOGFILE 50 exec 2>&1 51 tar -C $KERNEL_DIR -xzf $KERNEL_DIR.tgz $KERNEL 52 rm -f $KERNEL_DIR.tgz 53fi 54 55if ! sha256 -C $SHA256 /bsd; then 56 cat <<__EOF 57 58Failed to verify /bsd's checksum, therefore a randomly linked kernel (KARL) 59is not being built. KARL can be re-enabled for next boot by issuing as root: 60 61sha256 -h $SHA256 /bsd 62__EOF 63 # Trigger ERR trap 64 false 65fi 66 67cd $KERNEL_DIR/$KERNEL 68make newbsd 69[ -f /etc/bsd.re-config ] && config -e -c /etc/bsd.re-config -f bsd 70make newinstall 71sync 72 73echo "\nKernel has been relinked and is active on next reboot.\n" 74cat $SHA256 75