summaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
authorRobert Peichaer <rpe@cvs.openbsd.org>2017-06-30 17:06:04 +0000
committerRobert Peichaer <rpe@cvs.openbsd.org>2017-06-30 17:06:04 +0000
commit8e9de0761f18eed086596c3122e960b43cedc2e3 (patch)
treeffcbc329ba340b417c636a7326aeeb3c63928fbf /etc
parentc2b8ae8d2e84ae8031fc081d35911588ba3b9b27 (diff)
Improve reorder_kernel()
- check for and exit if /usr/share is on a nfs mounted filesystem - add trap handlers that mail the logfile to the admin user - use $_compile instead of $_compile_dir like in the installer - use $_compile/$_kernel instead of $_kernel_dir - remove the now redundant sha256 -h ... after make newinstall - write stdout/stderr of the background subshell to a logfile OK tb@ deraadt@
Diffstat (limited to 'etc')
-rw-r--r--etc/rc40
1 files changed, 23 insertions, 17 deletions
diff --git a/etc/rc b/etc/rc
index b1bcd2be844..f078d8d8196 100644
--- a/etc/rc
+++ b/etc/rc
@@ -1,4 +1,4 @@
-# $OpenBSD: rc,v 1.505 2017/06/27 03:42:00 tedu Exp $
+# $OpenBSD: rc,v 1.506 2017/06/30 17:06:03 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
@@ -222,33 +222,39 @@ 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() {
+ 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
- _compile_dir=/usr/share/compile
+ 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%#*}
- _kernel_dir=$_compile_dir/$_kernel
_sha256=/var/db/kernel.SHA256
- if [[ -f /usr/share/compile.tgz ]]; then
- rm -rf $_compile_dir
- mkdir -m 700 -p $_compile_dir
- tar -C $_compile_dir -xzf /usr/share/compile.tgz $_kernel
- rm -f /usr/share/compile.tgz
+ if [[ -f $_compile.tgz ]]; then
+ rm -rf $_compile
+ mkdir -m 700 -p $_compile
+ tar -C $_compile -xzf $_compile.tgz $_kernel
+ rm -f $_compile.tgz
fi
sha256 -q -C $_sha256 /bsd
- cd $_kernel_dir
- make newbsd >$_kernel_dir/log 2>&1
- make newinstall >>$_kernel_dir/log 2>&1
- (umask 077 && sha256 -h $_sha256 /bsd)
-
- (echo "Kernel has been relinked and is active on next reboot\n"; \
- cat $_sha256; echo "\nRelink log:\n"; cat $_kernel_dir/log ) |
- mail -Es "$(hostname) Kernel relink info" root >/dev/null
+ cd $_compile/$_kernel
+ make newbsd
+ make newinstall
- ) >/dev/null 2>&1 &
+ 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.