svn commit: r316487 - head/etc
Cy Schubert
Cy.Schubert at komquats.com
Wed Apr 5 03:55:22 UTC 2017
In message <58CC0B95-0423-429E-BA73-0F0BD3A2ABBE at gmail.com>, Ngie Cooper
writes
:
>
>
> > On Apr 4, 2017, at 20:05, Cy Schubert <Cy.Schubert at komquats.com> wrote:
> >
> > In message <201704041143.v34BhVNA046204 at repo.freebsd.org>,
> > =?UTF-8?Q?Dag-Erling
> > _Sm=c3=b8rgrav?= writes:
> >> Author: des
> >> Date: Tue Apr 4 11:43:31 2017
> >> New Revision: 316487
> >> URL: https://svnweb.freebsd.org/changeset/base/316487
> >>
> >> Log:
> >> Allow command modifiers (fast, quiet etc.) to be stacked in any order.
> >> Add a "debug" modifier that sets rc_debug.
> >>
> >> MFC after: 3 weeks
> >>
> >> Modified:
> >> head/etc/rc.subr
> >>
> >> Modified: head/etc/rc.subr
> >> ==========================================================================
> ===
> >> =
> >> --- head/etc/rc.subr Tue Apr 4 08:17:03 2017 (r316486)
> >> +++ head/etc/rc.subr Tue Apr 4 11:43:31 2017 (r316487)
> >> @@ -703,10 +703,11 @@ check_startmsgs()
> >> # If argument has a given prefix, then change the operation as follows:
> >> # Prefix Operation
> >> # ------ ---------
> >> -# fast Skip the pid check, and set rc_fast=yes, rc_quiet=yes
> >> -# force Set ${rcvar} to YES, and set rc_force=yes
> >> -# one Set ${rcvar} to YES
> >> -# quiet Don't output some diagnostics, and set rc_quiet=yes
> >> +# debug Enable debugging messages and set rc_debug to yes
> >> +# fast Skip the pid check and set rc_fast and rc_quiet to yes
> >> +# force Skip sanity checks and set ${rcvar} and rc_force to yes
> >> +# one Set ${rcvar} and set rc_one to yes
> >> +# quiet Don't output some diagnostics, and set rc_quiet to yes
> >> #
> >> # The following globals are used:
> >> #
> >> @@ -856,6 +857,8 @@ check_startmsgs()
> >> # rc_arg Argument to command, after fast/force/one processing
> >> # performed
> >> #
> >> +# rc_debug True if "debug" was provided
> >> +#
> >> # rc_flags Flags to start the default command with.
> >> # Defaults to ${name}_flags, unless overridden
> >> # by $flags from the environment.
> >> @@ -863,9 +866,11 @@ check_startmsgs()
> >> #
> >> # rc_pid PID of command (if appropriate)
> >> #
> >> -# rc_fast Not empty if "fast" was provided (q.v.)
> >> +# rc_fast Not empty if "fast" was provided
> >> +#
> >> +# rc_force Not empty if "force" was provided
> >> #
> >> -# rc_force Not empty if "force" was provided (q.v.)
> >> +# rc_one Not empty if "one" was provided
> >> #
> >> # rc_quiet Not empty if "quiet" was provided
> >> #
> >> @@ -884,34 +889,47 @@ run_rc_command()
> >> shift 1
> >> rc_extra_args="$*"
> >>
> >> - _rc_prefix=
> >> - case "$rc_arg" in
> >> - fast*) # "fast" prefix; don't check pid
> >> - rc_arg=${rc_arg#fast}
> >> - rc_fast=yes
> >> - rc_quiet=yes
> >> - ;;
> >> - force*) # "force" prefix; always run
> >> - rc_force=yes
> >> - _rc_prefix=force
> >> - rc_arg=${rc_arg#${_rc_prefix}}
> >> - if [ -n "${rcvar}" ]; then
> >> - eval ${rcvar}=YES
> >> - fi
> >> - ;;
> >> - one*) # "one" prefix; set ${rcvar}=yes
> >> - _rc_prefix=one
> >> - rc_arg=${rc_arg#${_rc_prefix}}
> >> + : ${rc_debug:=no} ${rc_fast:=no} ${rc_force:=no} ${rc_one:=no} ${rc_q
> ui
> >> et:=no}
> >> + while :; do
> >> + case "$rc_arg" in
> >> + debug*) # "debug" prefix; enable debugging
> >> + rc_debug=yes
> >> + rc_quiet=no
> >> + rc_arg=${rc_arg#debug}
> >> + _rc_prefix="${_rc_prefix}debug"
> >> + ;;
> >> + fast*) # "fast" prefix; don't check pid
> >> + rc_fast=yes
> >> + rc_quiet=yes
> >> + rc_arg=${rc_arg#fast}
> >> + _rc_prefix="${_rc_prefix}fast"
> >> + ;;
> >> + force*) # "force" prefix; always run
> >> + rc_force=yes
> >> + rc_arg=${rc_arg#force}
> >> + _rc_prefix="${_rc_prefix}force"
> >> + ;;
> >> + one*) # "one" prefix; set ${rcvar}=yes
> >> + rc_one=yes
> >> + rc_arg=${rc_arg#one}
> >> + _rc_prefix="${_rc_prefix}one"
> >> + ;;
> >> + quiet*) # "quiet" prefix; omit some messages
> >> + rc_quiet=yes
> >> + rc_arg=${rc_arg#quiet}
> >> + _rc_prefix="${_rc_prefix}quiet"
> >> + ;;
> >> + *)
> >> + break
> >> + ;;
> >> + esac
> >> + done
> >> + if checkyesno rc_force || checkyesno rc_one ; then
> >> if [ -n "${rcvar}" ]; then
> >> eval ${rcvar}=YES
> >> fi
> >> - ;;
> >> - quiet*) # "quiet" prefix; omit some messages
> >> - _rc_prefix=quiet
> >> - rc_arg=${rc_arg#${_rc_prefix}}
> >> - rc_quiet=yes
> >> - ;;
> >> - esac
> >> + fi
> >> + debug "_rc_prefix=${_rc_prefix}"
> >>
> >> eval _override_command=\$${name}_program
> >> command=${_override_command:-$command}
> >>
> >>
> >
> >
> > Hi des,
> >
> > This patch caused some boot failures because the contents of rc_force were
> > redefined from "yes" (for yes) and NULL (for no) to the words "yes" and
> > "no". This in turn caused etc/rc.d/dhclient to assume force when $rc_force
> > was not NULL (test -z failed). Interfaces with static IP addresses invoked
> > rc.d/dhclient through devd. The attached patch should make all instances
> > $rc_force consistent with your change.
>
> This deserves relnotes (for sure), and it might cause issues in downstream co
> nsumers (ports, etc) :/...
Here's a much smaller patch. It reverts the defined values of rc_force back
to the previous definition, albeit rc_force is no longer consistent with
the other rc_* variables.
Maybe I should commit this to have statically IPed systems boot again until
it can be decided whether rc_force should be made consistent with other
rc_* variables or not.
-------------- next part --------------
Index: rc.subr
===================================================================
--- rc.subr (revision 316487)
+++ rc.subr (working copy)
@@ -929,6 +929,9 @@
eval ${rcvar}=YES
fi
fi
+ if ! checkyesno rc_force; then
+ rc_force=
+ fi
debug "_rc_prefix=${_rc_prefix}"
eval _override_command=\$${name}_program
-------------- next part --------------
Cheers,
Cy Schubert <Cy.Schubert at cschubert.com>
FreeBSD UNIX: <cy at FreeBSD.org> Web: http://www.FreeBSD.org
The need of the many outweighs the greed of the few.
More information about the svn-src-all
mailing list