Trouble with freebsd rc system.

Eric van Gyzen eric at vangyzen.net
Mon Sep 15 02:08:20 UTC 2014


On Sep 14, 2014, at 6:53 PM, Alfred Perlstein <alfred at freebsd.org> wrote:

> 
> On 9/14/14, 3:40 PM, Ian Lepore wrote:
>> On Sun, 2014-09-14 at 15:26 -0700, Alfred Perlstein wrote:
>>> Hey folks,
>>> 
>>> We are building an appliance based on FreeBSD.
>>> 
>>> One of the issues we have is that during development we need to know
>>> which rc script we are in during boot so that if something is hanging or
>>> otherwise misbehaving we know which script it is.
>>> 
>>> I am contemplating this hack to /etc/rc.subr's run_rc_command() method:
>>> 
>>>     run_rc_command()
>>>     {
>>>          _return=0
>>>          rc_arg=$1
>>>          if [ -z "$name" ]; then
>>>              err 3 'run_rc_command: $name is not set.'
>>>          fi
>>> 
>>>          # Don't repeat the first argument when passing additional command-
>>>          # line arguments to the command subroutines.
>>>          #
>>>          shift 1
>>>          rc_extra_args="$*"
>>> 
>>>          echo "===> $name $rc_arg"
>>> 
>>> 
>>> As you can see I've added the call to echo so we know where we are.
>>> 
>>> This is somewhat suboptimal because we really only want that output
>>> during startup.
>>> 
>>> So a few questions:
>>> 
>>> 1. Is there a way to know we are booting when inside of
>>> /etc/rc.subr:run_rc_command() ?
>>> 2. Is there a magic thing I'm missing that does what I want (output
>>> which /etc/rc.d/ script I am about to run)?
>>> 3. How would I make a knob to turn off the "echo" so that I can
>>> contribute this back to FreeBSD without getting into a bikeshed on
>>> bootup messages.
>>> 
>>> Kindly please advise.
>>> 
>>> -Alfred
>> A bit further down in run_rc_command, in the start) case, is:
>> 
>>              check_startmsgs && echo "Starting ${name}."
>> 
>> and that output is controlled with rc_startmsgs=yes, which is the
>> default.
>> 
>> -- Ian
>> 
>> 
>> 
> I see that, however I've often been hung up in a rc script and that message is not displayed... let me check, maybe we have dumb defaults somehow.

run_rc_script() sets up a signal hander for SIGINFO, so you can type Ctrl-T to see which script is currently running.

Eric


More information about the freebsd-arch mailing list