Set up logger(1) traps earlier to catch logfile setup failures
authorkn <kn@openbsd.org>
Mon, 7 Nov 2022 11:03:14 +0000 (11:03 +0000)
committerkn <kn@openbsd.org>
Mon, 7 Nov 2022 11:03:14 +0000 (11:03 +0000)
commit44e1f38769613700cf6d7ee3779e7f8af5df97e8
treec8b9d57d35ccb0a6c2c12d7a00541825710f0e51
parentacbded78c27278c842250c6dc79f34982107dc4e
Set up logger(1) traps earlier to catch logfile setup failures

If /usr is mounted read-only, kernel relinking fails silently without any
log trace:

# /usr/libexec/reorder_kernel
/usr/libexec/reorder_kernel[35]: cannot create /usr/share/relink/kernel/GENERIC.MP/relink.log: Read-only file system

This stderr line does not show up anywhere because init(8) redirects stdout
and stderr to /dev/null, executes rc(8) which inherits it and thus executes
reorder_kernel with both streams discarded.

So install the error handler first, then try to set up a log file.

Introduce ERRMSG to provide error messages to users, i.e. not say
"see .../relink.log" when creating this file is what failed:

# ksh ./reorder_kernel.sh
./reorder_kernel.sh[40]: cannot create /usr/share/relink/kernel/GENERIC.MP/relink.log: Read-only file system
# tail -n1 /var/log/message # or xconsole(1)
Nov  7 10:51:00 eru reorder_kernel.sh: failed

OK tb
libexec/reorder_kernel/reorder_kernel.sh