Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Dec 2012 08:56:47 -0700
From:      Ian Lepore <freebsd@damnhippie.dyndns.org>
To:        Alfred Perlstein <bright@mu.org>
Cc:        "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>, Andrey Zonov <zont@freebsd.org>, "src-committers@freebsd.org" <src-committers@freebsd.org>, Xin LI <delphij@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>
Subject:   Re: svn commit: r244198 - in head: etc/rc.d sbin/sysctl
Message-ID:  <1355932607.1198.206.camel@revolution.hippie.lan>
In-Reply-To: <05CC5BAD-B968-4A7A-8097-A3344D970D63@mu.org>
References:  <201212132332.qBDNWmK4037503@svn.freebsd.org> <50D1D720.80206@FreeBSD.org> <1355931456.1198.203.camel@revolution.hippie.lan> <05CC5BAD-B968-4A7A-8097-A3344D970D63@mu.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Hrm.  Yeah, it would.  Or at least, it might.  If the error message
cites the text of the line it chokes on, maybe that's not a problem.

Running sysctl once passing it a list of files would fix that, but would
probably be more complexity than it's worth.  I just always try to find
ways to reduce rc processing time on wimpy platforms, so these wild
ideas pop into my head.

-- Ian

On Wed, 2012-12-19 at 07:52 -0800, Alfred Perlstein wrote:
> Wouldn't this obfuscate any errors in files?
> 
> Sent from my iPhone
> 
> On Dec 19, 2012, at 7:37 AM, Ian Lepore <freebsd@damnhippie.dyndns.org> wrote:
> 
> > On Wed, 2012-12-19 at 19:02 +0400, Andrey Zonov wrote:
> >> On 12/14/12 3:32 AM, Xin LI wrote:
> >>> Author: delphij
> >>> Date: Thu Dec 13 23:32:47 2012
> >>> New Revision: 244198
> >>> URL: http://svnweb.freebsd.org/changeset/base/244198
> >>> 
> >>> Log:
> >>>  Teach sysctl(8) about parsing a file (while I'm there also give it
> >>>  capability of parsing both = and : formats).
> >>> 
> >>>  Submitted by:    hrs (initial version, bugs are mine)
> >>>  MFC after:    3 months
> >>> 
> >>> Modified:
> >>>  head/etc/rc.d/sysctl
> >>>  head/sbin/sysctl/sysctl.8
> >>>  head/sbin/sysctl/sysctl.c
> >>> 
> >>> Modified: head/etc/rc.d/sysctl
> >>> ==============================================================================
> >>> --- head/etc/rc.d/sysctl    Thu Dec 13 23:19:13 2012    (r244197)
> >>> +++ head/etc/rc.d/sysctl    Thu Dec 13 23:32:47 2012    (r244198)
> >>> @@ -8,51 +8,27 @@
> >>> . /etc/rc.subr
> >>> 
> >>> name="sysctl"
> >>> +command="/sbin/sysctl"
> >>> stop_cmd=":"
> >>> start_cmd="sysctl_start"
> >>> reload_cmd="sysctl_start"
> >>> lastload_cmd="sysctl_start last"
> >>> extra_commands="reload lastload"
> >>> 
> >>> -#
> >>> -# Read in a file containing sysctl settings and set things accordingly.
> >>> -#
> >>> -parse_file()
> >>> -{
> >>> -    if [ -f $1 ]; then
> >>> -        while read var comments
> >>> -        do
> >>> -            case ${var} in
> >>> -            \#*|'')
> >>> -                ;;
> >>> -            *)
> >>> -                mib=${var%=*}
> >>> -                val=${var#*=}
> >>> -
> >>> -                if current_value=`${SYSCTL} -n ${mib} 2>/dev/null`; then
> >>> -                    case ${current_value} in
> >>> -                    ${val})
> >>> -                        ;;
> >>> -                    *)
> >>> -                        if ! sysctl "${var}" >/dev/null 2>&1; then
> >>> -                            warn "unable to set ${var}"
> >>> -                        fi
> >>> -                        ;;
> >>> -                    esac
> >>> -                elif [ "$2" = "last" ]; then
> >>> -                    warn "sysctl ${mib} does not exist."
> >>> -                fi
> >>> -                ;;
> >>> -            esac
> >>> -        done < $1
> >>> -    fi
> >>> -}
> >>> -
> >>> sysctl_start()
> >>> {
> >>> -
> >>> -    parse_file /etc/sysctl.conf $1
> >>> -    parse_file /etc/sysctl.conf.local $1
> >>> +    case $1 in
> >>> +    last)
> >>> +        command_args="-i -f"
> >>> +    ;;
> >>> +    *)
> >>> +        command_args="-f"
> >>> +    ;;
> >>> +    esac
> >>> +
> >>> +    for _f in /etc/sysctl.conf /etc/sysctl.conf.local; do
> >>> +        [ -r ${_f} ] && ${command} ${command_args} ${_f} > /dev/null
> >>> +    done
> >>> }
> >>> 
> >>> load_rc_config $name
> >> 
> >> Hi,
> >> 
> >> I'd really like to see something like the patch bellow in the tree.  I
> >> found it very useful with cfengine configuration (as like as cron.d).
> >> 
> >> What do think?
> >> 
> >> diff --git a/etc/rc.d/sysctl b/etc/rc.d/sysctl
> >> index 36f1414..014e4c5 100755
> >> --- a/etc/rc.d/sysctl
> >> +++ b/etc/rc.d/sysctl
> >> @@ -26,7 +26,7 @@ sysctl_start()
> >>        ;;
> >>        esac
> >> 
> >> -       for _f in /etc/sysctl.conf /etc/sysctl.conf.local; do
> >> +       for _f in `ls /etc/sysctl.d/* 2> /dev/null` /etc/sysctl.conf
> >> /etc/sysctl.conf.local; do
> >>                [ -r ${_f} ] && ${command} ${command_args} ${_f} > /dev/null
> >>        done
> >> }
> > 
> > Instead of running sysctl a bunch of times, how about something
> > conceptually similar to
> > 
> >   cat /etc/sysctl.d/* /etc/sysctl.conf | sysctl -f -
> > 
> > Along with this (untested) patch to make sysctl understand "-f -".
> > 
> > Hmmm, is /dev/stdin available as early as sysctl.conf runs?  If not, the
> > attached patch isn't going to work.
> > 
> > -- Ian
> > 
> > diff -r cc5bd6d80aa1 sbin/sysctl/sysctl.c --- sbin/sysctl/sysctl.c	Sun Aug 19 11:01:08 2012 -0600 +++ sbin/sysctl/sysctl.c	Wed Dec 19 08:31:14 2012 -0700 @@ -112,7 +112,10 @@ main(int argc, char **argv) eflag = 1; break; case 'f': - conffile = optarg; +	 if (strcmp(optarg, "-") == 0) +	 conffile = "/dev/stdin"; + else +	 conffile = optarg; break; case 'h': hflag = 1;
> _______________________________________________
> svn-src-all@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"





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