Is /etc/rc.conf scriptable?

Paul Schenkeveld freebsd at psconsult.nl
Tue Feb 1 12:57:17 UTC 2011


On Tue, Feb 01, 2011 at 08:35:06PM +0800, Yue Wu wrote:
> Hi list,
> 
> I'm trying to do something to make rc.conf can act conditionally
> 
> What I want is:
> 
> 1. List the wireless access points,
> 
> grep if there is one which bssid is 'bb:bb:bb:bb:bb:bb',
> 
> if there is, then set ifconfig_wlan0 to the value:
> 
>     "inet 192.168.1.111 netmask 255.255.255.0 WPA"
> 
> 2. check if bitlbee has been installed, if so, then let bitlbee
> service start.
> 
> 
> So I tried with following settings in rc.conf, but all of them failed,
> i.e., the networking can't be connected and bitlbee service doesn't
> run.
> 
> /etc/rc.conf
> 
> if ifconfig wlan0 list scan 2>/dev/null | grep -q 'bb:bb:bb:bb:bb:bb' >/dev/null 2>&1; then
>     ifconfig_wlan0="inet 192.168.1.111 netmask 255.255.255.0 WPA"
> fi
> if [ -x /usr/local/sbin/bitlbee ]; then
>     bitlbee_enable="YES"
> fi

/etc/rc.conf is scriptable (unless you are also using a dashboard or
other software that wants to interpret/update /etc/rc.conf).

Your problem here is that rc.conf is read (and executed) before wlan0
gets created.  After creation of an interface, /etc/start_if.<interface>
is called, perhaps you could use that but keep in mind it's run just
after creation of the interface so if you use it for wlan0 and need the
output of a station scan you should use ifconfig wlan0 scan instead of
ifconfig wlan0 list scan.  This may take some time during which your
boot process is stalled.

> My question is, how to achieve what I want? The simpler, the better :)

Otherwise, perhaps devd could help you to run your script asynchronously
after wlan0 is created.

Regards,

Paul Schenkeveld


More information about the freebsd-stable mailing list