svn commit: r244198 - in head: etc/rc.d sbin/sysctl
Alfred Perlstein
bright at mu.org
Wed Dec 19 19:04:22 UTC 2012
I didn't catch your idea of multiple files to parse. That sounds like a better idea than mine (# based file directives) for sure.
Sent from my iPhone
On Dec 19, 2012, at 9:37 AM, Alfred Perlstein <bright at mu.org> wrote:
> 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 <freebsd at 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 <freebsd at 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 at freebsd.org mailing list
>>> http://lists.freebsd.org/mailman/listinfo/svn-src-all
>>> To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
>
More information about the svn-src-all
mailing list