On Sun, Nov 06, 2022 at 07:47:35PM +0000, Klemens Nanni wrote: > On Mon, Oct 31, 2022 at 11:11:22AM +0000, Klemens Nanni wrote: > > On Sun, Oct 16, 2022 at 05:22:57AM +0000, Klemens Nanni wrote: > > > On Sat, Oct 08, 2022 at 07:25:26PM +0000, Klemens Nanni wrote: > > > > If /usr is mounted read-only, kernel relinking fails silently without > > > > any log trace. > > > > > > > > # ksh /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 during boot because init(8) redirects > > > > stdout/err to /dev/null, executes rc(8) which inherits this and executes > > > > reorder_kernel with both streams thus discarded. > > > > > > > > Eventually, I'd like reorder_kernel to temporarily remount $KERNEL_DIR > > > > read-write, just like rc's reorder_libs() does. I have a diff for that > > > > but would like to approach things in smaller steps. > > > > > > > > So first, defer the logfile setup after the syslog/console setup such > > > > that mkdir's failure triggers the ERR trap and users get notified: > > > > > > > > # 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/daemon > > > > Oct 13 17:04:06 pbp reorder_kernel.sh: kernel relinking done > > > > > > > > As of now, this logs success despite actual failure because of ksh's > > > > redirection/trap bug (see mail on tech@): mkdir does not fail because > > > > the directory already exists, so `exec 1>$LOGFILE' tries to truncate but > > > > fails to trigger the ERR trap, thus hitting the non-default EXIT trap. > > > > > > > > With ksh fixed this would log > > > > Oct 13 17:04:06 pbp reorder_kernel.sh: failed -- see > > > > /usr/share/relink/kernel/GENERIC.MP/relink.log > > > > which admittedly misleading, given that creating/truncating that vary > > > > logfile is the failure reason, but it seems better than silent nothing. > > > > > > ksh's exec got fixed, so failure is now logged with this diff: > > > > > > # tail -n0 -f /var/log/messages > > > [1] 95776 > > > # /usr/libexec/reorder_kernel > > > /usr/libexec/reorder_kernel[35]: cannot create > > > /usr/share/relink/kernel/GENERIC.MP/relink.log: Read-only file system > > > no log except stderr > > > > > > # ksh ./reorder_kernel.sh > > > ./reorder_kernel.sh[40]: cannot create > > > /usr/share/relink/kernel/GENERIC.MP/relink.log: Read-only file system > > > Oct 16 09:16:37 eru reorder_kernel.sh: failed -- see > > > /usr/share/relink/kernel/GENERIC.MP/relink.log > > > same "failed" message in xconsole(1) > > > > > > > It could set up an intermediate trap or truly silently bail out on > > > > read-only FFS just like it does for NFS now, but it seems best to handle > > > > ro /usr as mentioned as a follow-up step. > > > > > > Anyone? > > > > > > This diff now works as expected; not perfect but an improvement, imho. > > > Feedback? Objection? OK? > > > > No feedback so far. > > > > Supporting /usr on read-only FFS or not, I think reorder_kernel must not > > fail silently without relinking anything. > > > > There is definitely room for improvement. > > Here's a trivial version that says only "reorder_kernel: failed" until > the log file is set up (which fails on read-only /usr) and says > "reorder_kernel: failed -- see $LOGFILE" once it actually logs to the > file. > > Anyone?
ok tb > > > Index: reorder_kernel.sh > =================================================================== > RCS file: /cvs/src/libexec/reorder_kernel/reorder_kernel.sh,v > retrieving revision 1.11 > diff -u -p -r1.11 reorder_kernel.sh > --- reorder_kernel.sh 13 May 2022 13:20:16 -0000 1.11 > +++ reorder_kernel.sh 6 Nov 2022 19:43:38 -0000 > @@ -30,15 +30,17 @@ LOGFILE=$KERNEL_DIR/$KERNEL/relink.log > PROGNAME=${0##*/} > SHA256=/var/db/kernel.SHA256 > > +# Install trap handlers to inform about success or failure via syslog. > +ERRMSG='failed' > +trap 'trap - EXIT; logger -st $PROGNAME "$ERRMSG" >/dev/console 2>&1' ERR > +trap 'logger -t $PROGNAME "kernel relinking done"' EXIT > + > # Create kernel compile dir and redirect stdout/stderr to a logfile. > mkdir -m 700 -p $KERNEL_DIR/$KERNEL > exec 1>$LOGFILE > exec 2>&1 > > -# Install trap handlers to inform about success or failure via syslog. > -trap 'trap - EXIT; logger -st $PROGNAME \ > - "failed -- see $LOGFILE" >>/dev/console 2>&1' ERR > -trap 'logger -t $PROGNAME "kernel relinking done"' EXIT > +ERRMSG="failed -- see $LOGFILE" > > if [[ -f $KERNEL_DIR.tgz ]]; then > rm -rf $KERNEL_DIR/$KERNEL/* >