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>