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

next in thread | previous in thread | raw e-mail | index | archive | help

--=-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--




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