From owner-svn-src-head@FreeBSD.ORG Wed Dec 19 15:37:43 2012 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6885D28B; Wed, 19 Dec 2012 15:37:43 +0000 (UTC) (envelope-from freebsd@damnhippie.dyndns.org) Received: from duck.symmetricom.us (duck.symmetricom.us [206.168.13.214]) by mx1.freebsd.org (Postfix) with ESMTP id D2C438FC19; Wed, 19 Dec 2012 15:37:42 +0000 (UTC) Received: from damnhippie.dyndns.org (daffy.symmetricom.us [206.168.13.218]) by duck.symmetricom.us (8.14.5/8.14.5) with ESMTP id qBJFbeu4010179; Wed, 19 Dec 2012 08:37:41 -0700 (MST) (envelope-from freebsd@damnhippie.dyndns.org) Received: from [172.22.42.240] (revolution.hippie.lan [172.22.42.240]) by damnhippie.dyndns.org (8.14.3/8.14.3) with ESMTP id qBJFbabs065360; Wed, 19 Dec 2012 08:37:36 -0700 (MST) (envelope-from freebsd@damnhippie.dyndns.org) Subject: Re: svn commit: r244198 - in head: etc/rc.d sbin/sysctl From: Ian Lepore To: Andrey Zonov In-Reply-To: <50D1D720.80206@FreeBSD.org> References: <201212132332.qBDNWmK4037503@svn.freebsd.org> <50D1D720.80206@FreeBSD.org> Content-Type: multipart/mixed; boundary="=-RsHxNxMBlv4DJdm7YETt" Date: Wed, 19 Dec 2012 08:37:36 -0700 Message-ID: <1355931456.1198.203.camel@revolution.hippie.lan> Mime-Version: 1.0 X-Mailer: Evolution 2.32.1 FreeBSD GNOME Team Port Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, Xin LI X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Dec 2012 15:37:43 -0000 --=-RsHxNxMBlv4DJdm7YETt Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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 --=-RsHxNxMBlv4DJdm7YETt Content-Disposition: inline; filename="sysctl.diff" Content-Type: text/x-patch; name="sysctl.diff"; charset="us-ascii" Content-Transfer-Encoding: 7bit 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; --=-RsHxNxMBlv4DJdm7YETt--