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
You must be logged in to post a comment.