Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Jul 2009 12:24:09 +0100
From:      chris scott <kraduk@googlemail.com>
To:        Giorgos Keramidas <keramida@ceid.upatras.gr>
Cc:        Polytropon <freebsd@edvax.de>, freebsd-questions@freebsd.org
Subject:   Re: backticks in rc.conf
Message-ID:  <d36406630907210424p3e9e77c8tf12ab26da0573c89@mail.gmail.com>
In-Reply-To: <87ljmi1dyq.fsf@kobe.laptop>
References:  <d36406630907210146m4e84c7dbpd55776168a50090c@mail.gmail.com> <20090721112920.c174849b.freebsd@edvax.de> <87ljmi1dyq.fsf@kobe.laptop>

next in thread | previous in thread | raw e-mail | index | archive | help
2009/7/21 Giorgos Keramidas <keramida@ceid.upatras.gr>

> On Tue, 21 Jul 2009 11:29:20 +0200, Polytropon <freebsd@edvax.de> wrote:
> > On Tue, 21 Jul 2009 09:46:47 +0100, chris scott <kraduk@googlemail.com>
> wrote:
> >> can i use backticks in rc.conf?
> >
> > Basically, yes. The /etc/rc.conf file is run through sh, it is
> > a shell script that assigns values to variables, but can (ab)use
> > it to execute programs.
> >
> >> rsyncd_flags="--config=/etc/rsyncd.conf --address="` ifconfig bce1 |
> grep
> >> inet | awk '{print $2}'`
> >>
> >> it works fine from the shell, however on reboot the address section
> doesnt
> >> expand, or rather it goes blank
> >
> > You should use the full pathnames leading to ifconfig, grep, and awk.
> > Make sure they are accessible when rc.conf is "executed".
>
> There's a catch here that may go unnoticed for a while...
>
> rc.conf may be sourced by /etc/rc *long* before filesystems are
> mounted.  As a result grep or awk may be not be available and stop
> rc.conf from loading.
>
> It's probably a good idea to:
>
>  * Add a special rsyncd_bind_address variable that is handled in
>    `/usr/local/etc/rc.d/rsyncd' itself
>
>  * Permit "AUTO" as the value of ${rsyncd_bind_address} and do the
>    smart thing there.
>
>  * Edit `/usr/local/etc/rc.d/rsyncd' to add a dependency for the
>    "NETWORKING" and "FILESYSTEMS" special names, so that `rc.d/rsyncd'
>    runs only after networking is up and /usr or other late-mounted
>    filesystems have finished loading.
>
> thanks for the advice but I've found a solution (see below).

My systems dont generally have a /usr slice as i like to keep all the os in
one place, having a slice for /usr/local. /var, /home, and /tmp so the late
fs isnt an issue for me.

My latest test builds are pure zfs so wont be an issue there either 8)

a=`echo $ifconfig_bge0 | /usr/bin/awk '{ for ( i=1 ; i <= NF; i++) { if ( $i
~ /[iI][nN][eE][tT]/ ) { sub(/\/.*/,"", $(i+1)); print $(i+1) } } }'`
rsyncd_flags="--config=/etc/rsyncd.conf --address=$a"



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