Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 04 Apr 2017 20:55:17 -0700
From:      Cy Schubert <Cy.Schubert@komquats.com>
To:        Ngie Cooper <yaneurabeya@gmail.com>
Cc:        Cy Schubert <Cy.Schubert@komquats.com>, =?utf-8?Q?Dag-Erling_Sm=C3=B8rgrav?= <des@FreeBSD.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r316487 - head/etc
Message-ID:  <201704050355.v353tHDR003124@slippy.cwsent.com>
In-Reply-To: Message from Ngie Cooper <yaneurabeya@gmail.com> of "Tue, 04 Apr 2017 20:18:36 -0700." <58CC0B95-0423-429E-BA73-0F0BD3A2ABBE@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multipart MIME message.

--==_Exmh_1491364344_27640
Content-Type: text/plain; charset=us-ascii

In message <58CC0B95-0423-429E-BA73-0F0BD3A2ABBE@gmail.com>, Ngie Cooper 
writes
:
> 
> 
> > On Apr 4, 2017, at 20:05, Cy Schubert <Cy.Schubert@komquats.com> wrote:
> > 
> > In message <201704041143.v34BhVNA046204@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.



--==_Exmh_1491364344_27640
Content-Type: text/plain ; name="r316487-fix.diff"; charset=us-ascii
Content-Description: r316487-fix.diff
Content-Disposition: attachment; filename="r316487-fix.diff"

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

--==_Exmh_1491364344_27640
Content-Type: text/plain; charset=us-ascii

Cheers,
Cy Schubert <Cy.Schubert@cschubert.com>
FreeBSD UNIX:  <cy@FreeBSD.org>   Web:  http://www.FreeBSD.org

	The need of the many outweighs the greed of the few.

--==_Exmh_1491364344_27640--





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201704050355.v353tHDR003124>