[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#680592: lsb-base: reporting errors and diagnostics in init scripts



On 07/07/2012 01:21 AM, Russ Allbery wrote:
> To take an example, the openafs-client init script.  It loads a
> kernel module and then starts a daemon.  It can't load the kernel
> module unless the module is present; if it's not present, it does:
> 
>         cat <<EOF >&2
> AFS module $MODULEDIR/$LIBAFS does not exist.
> Not starting AFS.  Please consider building kernel modules using
> instructions in /usr/share/doc/openafs-client/README.modules
> EOF
> 
> I'm not sure how I should do this using the output functions provided
> by lsb-base.  Converting this to a one-line message feels like it
> would lose information.

It does feel that way.  OTOH, on a starting system, the information you
printed to the console could scroll off-screen and be lost.  With the
lsb-base function, a hook could capture and log that information.  So
there's a tradeoff here, I think.

Would it be acceptable to do something like this:

log_action_msg "Loading AFS module $MODULEDIR/$LIBAFS"
load_afs_module
if afs_module_load_failed; then
  log_failure_msg "Module not found; see \
     /usr/share/doc/openafs-client/README.modules"
fi

(with additional info like the message you currently write put into the
docs)

> Related, using the LSB functions seems to result in hard-to-read
> messages when the daemon that's being started produces an error.
> This is because the format necessarily involves printing out the
> start of a line, then starting a daemon and printing out the end of
> the line, reporting the status.  The traditional Debian output doesn't
> provide much better tools, but with the traditional output format I
> can at least just print out the full startup message first and then
> start the daemon, since the exit status isn't part of the output format.

I've seen that happen with other scripts.  I agree that it probably
involves some arcane shell-fu, but I would think that lsb-base should do
the arcane shell-fu for you.  Something like this:

log_begin_msg "Starting AFS services: afsd"
start_daemon /sbin/afsd || log_start_failure
log_success_msg "."

Success could look something like this:

[ok] Starting AFS services: afsd.

And failure:

[error] Starting AFS services: afsd
afsd: too much mimsy in the borogroves

Where start_daemon would do the funky output capture in a way that
log_start_failure would then be able to use.

(Apologies if I haven't represented Didier's excellent fancy-output
stuff right.)



Reply to: