summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Peichaer <rpe@cvs.openbsd.org>2017-07-04 19:02:12 +0000
committerRobert Peichaer <rpe@cvs.openbsd.org>2017-07-04 19:02:12 +0000
commitc28d580e44481839be92865dfb0e9f41fe859261 (patch)
tree35bf0668b1cfc6a2e9f77f6a49912e651ecd70fd
parentac3c583ce9da406ba2b8a93ab0d02eafb08318d2 (diff)
Switch reorder_kernel() from sending emails to logging via syslog
and to write the logfile inside the kernel compile dir. - turn the whole reorder_kernel function into a subshell {} -> () - create kernel compile dir early on - redirect all stdout/stderr to a logfile inside this dir - setup ERR trap handler that - disables the EXIT trap handler - syslogs the error and hints to the logfile - additionally sends this message to the console - setup EXIT trap handler that syslogs success - wipe only the content instead of the whole kernel compile dir - reestablish stdout redirection to the log after the wipe - remove -q option of sha256 to log check result - run reorder_kernel() in the background OK deraadt@ tb@
-rw-r--r--etc/rc32
1 files changed, 17 insertions, 15 deletions
diff --git a/etc/rc b/etc/rc
index f078d8d8196..48e5671335f 100644
--- a/etc/rc
+++ b/etc/rc
@@ -1,4 +1,4 @@
-# $OpenBSD: rc,v 1.506 2017/06/30 17:06:03 rpe Exp $
+# $OpenBSD: rc,v 1.507 2017/07/04 19:02:11 rpe Exp $
# System startup script run by init on autoboot or after single-user.
# Output and error are redirected to console by init, and the console is the
@@ -221,32 +221,35 @@ reorder_libs() {
# Re-link the kernel, placing the objects in a random order.
# Replace current with relinked kernel and inform root about it.
-reorder_kernel() {
+reorder_kernel() (
local _dkdev=$(df /usr/share | sed '1d;s/ .*//')
# Skip if /usr/share is on a nfs mounted filesystem.
[[ $(mount | grep "^$_dkdev") == *" type nfs "* ]] && return
- (
- set -e
- trap 'trap - EXIT; mail -s "$(hostname) Kernel relink failed" root \
- </var/log/kernel_relink.log' ERR
- trap 'mail -s "$(hostname) Kernel relink info" root \
- </var/log/kernel_relink.log' EXIT
-
_compile=/usr/share/compile
_kernel=$(sysctl -n kern.osversion)
_kernel=${_kernel%#*}
+ _log=$_compile/$_kernel/relink.log
_sha256=/var/db/kernel.SHA256
+ mkdir -m 700 -p $_compile/$_kernel
+ exec 1>$_log
+ exec 2>&1
+
+ trap 'trap - EXIT; logger -st /etc/rc \
+ "kernel relinking failed; see $_log" >>/dev/console 2>&1' ERR
+ trap 'logger -t /etc/rc "kernel relinking done"' EXIT
+ set -e
+
if [[ -f $_compile.tgz ]]; then
- rm -rf $_compile
- mkdir -m 700 -p $_compile
+ rm -rf $_compile/$_kernel/*
+ exec 1>$_log
tar -C $_compile -xzf $_compile.tgz $_kernel
rm -f $_compile.tgz
fi
- sha256 -q -C $_sha256 /bsd
+ sha256 -C $_sha256 /bsd
cd $_compile/$_kernel
make newbsd
@@ -254,8 +257,7 @@ reorder_kernel() {
echo "\nKernel has been relinked and is active on next reboot.\n"
cat $_sha256
- ) >/var/log/kernel_relink.log 2>&1 &
-}
+)
# Run rc.* script and email output to root.
# Usage: run_upgrade_script firsttime|sysmerge
@@ -619,7 +621,7 @@ echo -n 'starting local daemons:'
start_daemon apmd sensorsd hotplugd watchdogd cron wsmoused xenodm
echo '.'
-reorder_kernel
+reorder_kernel &
date
exit 0