ÈÐ Wïgê† Ðð† ñåmê

ïñ£ð§ê¢, ïñ£ðrmå†ïðñ §ê¢µr, Ðïgï†ål £ðrêñ§ï¢§, hå¢kïñg, §¥§†êm åÐmïñ阮rå†ïðñ, lïñµx ßlðg

Gêñ†ðð ñê†wðrkMåñågêr Ðï§þ冢hêr

, , , ,

Did you ever wish you could start certain scripts only when you are bringing the network up and then stop them when bring the network down?

For the longest time, I was using wicd to manage network connections.  At some point and time I decided to take a look at NetworkManager.

Using network manager, you can use the dispatcher to run scripts based on network connection, runlevel, etc.

This is how I got it working in gentoo linux and a few example scripts.

The following are the specific packages and versions I have installed:

[codesyntax lang=”bash”]

net-misc/cnetworkmanager
      Latest version available: 0.21.1
      Latest version installed: 0.21.1
      Size of files: 28 kB
      Homepage:      http://vidner.net/martin/software/cnetworkmanager/
      Description:   Command line interface for NetworkManager.
      License:       GPL-2

*  net-misc/networkmanager
      Latest version available: 0.8.2-r10
      Latest version installed: 0.8.2-r10
      Size of files: 1,591 kB
      Homepage:      http://www.gnome.org/projects/NetworkManager/
      Description:   Network configuration and management in an easy way. Desktop environment independent.
      License:       GPL-2

*  net-misc/networkmanager-openvpn
      Latest version available: 0.8.2-r1
      Latest version installed: 0.8.2-r1
      Size of files: 394 kB
      Homepage:      http://www.gnome.org/projects/NetworkManager/
      Description:   NetworkManager OpenVPN plugin.
      License:       GPL-2

*  net-misc/networkmanager-pptp
      Latest version available: 0.8.2
      Latest version installed: 0.8.2
      Size of files: 375 kB
      Homepage:      http://www.gnome.org/projects/NetworkManager/
      Description:   NetworkManager PPTP plugin
      License:       GPL-2

*  net-misc/networkmanager-vpnc
      Latest version available: 0.8.2
      Latest version installed: 0.8.2
      Size of files: 367 kB
      Homepage:      http://www.gnome.org/projects/NetworkManager/
      Description:   NetworkManager VPNC plugin
      License:       GPL-2

[/codesyntax]

Along with the use flags I have compiled with:

[codesyntax lang=”bash”]

# emerge -pv networkmanager

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R   ] net-misc/networkmanager-0.8.2-r10  USE="avahi bluetooth connection-sharing dhcpcd gnutls nss resolvconf -dhclient -doc" 0 kB

[/codesyntax]

Once that is done, disable all net devices from loading through udev.  You do that by simply adding this line to /etc/conf.d/rc

[codesyntax lang=”bash”]

RC_PLUG_SERVICES="!net.*"

[/codesyntax]

The next part you have to really think about.  Any net related service except net.lo really needs to be under the control of network manager.  So, what I did was grepped for net in /etc/init.d/* and made a list.

[codesyntax lang=”bash”]

# grep "use net" /etc/init.d/*

[/codesyntax]

And the list was:

/etc/init.d/avahi-daemon:    use net
/etc/init.d/avahi-dnsconfd:    use net
/etc/init.d/clamd:    use net
/etc/init.d/cupsd:    use net
/etc/init.d/lisa:    use net
/etc/init.d/mrtg:    # use net-snmpd
/etc/init.d/mysql:    use net.lo
/etc/init.d/netperf:    use net
/etc/init.d/ntpd:    use net dns logger
/etc/init.d/rpcbind:    use net
/etc/init.d/rsyncd:    use net
/etc/init.d/staticroute:    use network
/etc/init.d/xinetd:    use net

So then I checked what I currently had listed in my default and battery runlevels, and removed anything that was in the list above that required net from it.  This was mysql, iptables, cupsd, ntpd, sshd

I ended up with only this:

[codesyntax lang=”bash”]

rc-config list | grep default
sysstat                   default

[/codesyntax]

Then everything I removed, I created a script to be started by networkmanager.

Here are the scripts I placed in /etc/NetworkManager/dispatcher.d

[codesyntax lang=”bash” title=”48-iptables”]

echo "ran `date +%Y%m%d`" >> /tmp/nwm-firewall

/etc/init.d/iptables status | grep -q "started"
started=$?

echo $2 >> /tmp/nwm-firewall
echo $started >> /tmp/nwm-firewall

if [[ "$2" == "up" ]] ; then
        if [[ "$started" != "0" ]] ; then
                rc-config start iptables
        fi
else
        rc-config stop iptables
fi

[/codesyntax]

[codesyntax lang=”bash” title=”49-sshd”]

echo "ran `date +%Y%m%d`" >> /tmp/nwm-sshd

/etc/init.d/sshd status | grep -q "started"
started=$?

if [[ "$2" == "up" ]] ; then
        if [[ "$started" != "0" ]] ; then
                rc-config start sshd
        fi
else
        rc-config stop sshd
fi

[/codesyntax]

[codesyntax lang=”bash” title=”50-ntpd”]

echo "ran `date +%Y%m%d`" >> /tmp/nwm-ntpd

/etc/init.d/ntpd status | grep -q "started"
started=$?

if [[ "$2" == "up" ]] ; then
        if [[ "$started" != "0" ]] ; then
                rc-config start ntpd
        fi
else
        rc-config stop ntpd
fi

[/codesyntax]

[codesyntax lang=”bash” title=”51-mysql”]

echo "ran `date +%Y%m%d`" >> /tmp/nwm-mysql

/etc/init.d/mysql status | grep -q "started"
started=$?

if [[ "$2" == "up" ]] ; then
        if [[ "$started" != "0" ]] ; then
                rc-config start mysql
        fi
else
        rc-config stop mysql
fi

[/codesyntax]

[codesyntax lang=”bash” title=”52-cups”]

echo "ran `date +%Y%m%d`" >> /tmp/nwm-cupsd

/etc/init.d/cupsd status | grep -q "started"
started=$?

if [[ "$2" == "up" ]] ; then
        if [[ "$started" != "0" ]] ; then
                rc-config start cupsd
        fi
else
        rc-config stop cupsd
fi

[/codesyntax]

One thing you will notice in the above, there is no shebang line ( #!/bin/bash ) because it is not needed.  The files are owned root:root and have 700 permissions.

[codesyntax lang=”bash”]

 dispatcher.d # ls -la
total 20
drwxr-xr-x 2 root root 120 May  5 18:28 .
drwxr-xr-x 5 root root  90 Apr 27 17:00 ..
-rwx------ 1 root root 336 May  5 18:26 48-firewall
-rwx------ 1 root root 255 May  5 18:26 49-sshd
-rwx------ 1 root root 255 May  5 18:27 50-ntpd
-rwx------ 1 root root 259 May  5 18:27 51-mysql
-rwx------ 1 root root 259 May  5 18:28 52-cupsd

[/codesyntax]

So the numbering of the files affects the order they are started or shutdown, lower numbers get started first.

If you look inside /var/log/messages and restart /etc/init.d/NetworkManager you can see any error logs.  Also, in my examples above, I echo some stuff to files inside of /tmp for diagnostics, mostly just that the script was ran and the output of the init.d status check.


Leave a Reply