I think that it's a good idea. Maybe there's some way to give sysctl.conf the 
equivalent of #file preprocessor directives?

Sent from my iPhone

On Dec 19, 2012, at 7:56 AM, Ian Lepore <free...@damnhippie.dyndns.org> wrote:

> 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 <free...@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-unsubscr...@freebsd.org"
> 
> 
_______________________________________________
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-unsubscr...@freebsd.org"

Reply via email to