guessnet ist ein Programm, mit dem man eine Netzwerkumgebung auf bestimmte Eigenschaften untersuchen kann. Aufgrund dieser Eigenschaften können Variablen gesetzt werden, welche wiederum in einem IfPlugd-Skript ausgewertet werden können.
Auf diese Weise lassen sich zum Beispiel statische Adresse konfigurieren, NFS mounten, Benutzerrechte und Firewalls konfigurieren.
Die Installation guessnet auf Ubuntu-Systeme ist trivial und hier erklärt. Eine modifizierte /etc/network/interfaces könnte so aussehen:
auto lo
iface lo inet loopback
mapping eth0
script /usr/sbin/guessnet-ifupdown
map timeout: 4
map default: unbekannt
iface aachen-wohnung inet static
scheme aachen-wohnung
address 192.168.XXX.99
netmask 255.255.255.0
gateway 192.168.XXX.1
dns-nameservers 192.168.XXX.1 192.168.XXX.1
test1 peer address 192.168.XXX.1 mac 00:16:32:8E:XX:XX source 192.168.XXX.99
iface eltern inet static
scheme eltern
address 192.168.XXX.99
netmask 255.255.255.0
gateway 192.168.XXX.1
dns-nameservers 192.168.XXX.1 192.168.XXX.1
test1 peer address 192.168.XXX.1 mac 00:0F:3D:35:XX:XX source 192.168.XXX.99
iface mechapro inet dhcp
scheme mechapro
test1 peer address 192.168.XXX.1 mac 00:1C:28:1B:XX:XX source 192.168.XXX.XXX
iface keinnetz inet manual
scheme keinnetz
test1 missing-cable
iface unbekannt inet dhcp
scheme unbekannt
Ein Dump der exportieren Variablen mit typeset -x zeigt:
declare -x ADDRFAM="inet"
declare -x DISPLAY=":0"
declare -x IFACE="eth0"
declare -x IF_ADDRESS="192.168.XXX.99"
declare -x IF_DNS_NAMESERVERS="192.168.220.1 192.168.XXX.1"
declare -x IF_GATEWAY="192.168.XXX.1"
declare -x IF_METRIC="100"
declare -x IF_NETMASK="255.255.255.0"
declare -x IF_SCHEME="aachen-wohnung
declare -x IF_TEST1="peer address 192.168.XXX.1 mac 00:16:32:8E:XX:XX source 192.168.XXX.99"
declare -x LOGICAL="aachen-wohnung"
declare -x METHOD="static"
declare -x MODE="start"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
declare -x PHASE="post-up"
declare -x PWD="/"
declare -x SHLVL="1"
declare -x VERBOSITY="0"
An PHASE können wir also den Aufrufmodus erkennen.
Unter /etc/network/mount (x-Flag nicht vergessen) werte ich den aktuellen Zustand aus:
#!/bin/bash
export DISPLAY=:0
logger "Network Mounts for $IF_SCHEME in phase $PHASE"
if [ -z $IF_SCHEME ]; then
exit 0
fi
if [ "$IF_SCHEME" = "aachen-wohnung" ]; then
PRETTY_TEXT="Aachen Wohnung"
OPTIONS="username=xxx,password=xxx,uid=xxx,gid=xxx,codepage=cp852,iocharset=utf8,rw"
targets=(apps movies music stuff)
for target in $targets
do
if [ "$PHASE" = "post-up" ]; then
if [ ! -d /mnt/aaa/$target ]; then
mkdir -p /mnt/xxx/$target
fi
mount -t smbfs //192.168.xxx.xxx/$target /mnt/aaa/$target -o ${OPTIONS}
else
umount -fl /mnt/aaa/$target
fi
done
fi
if [ "$IF_SCHEME" = "mechapro" ]; then
PRETTY_TEXT="Mechapro"
OPTIONS="username=xxx,password=xxx,uid=xxx,gid=xxx,codepage=cp852,iocharset=utf8,rw"
if [ "$PHASE" = "post-up" ]; then
mount -t smbfs //192.168.xxx.xxx/bbb /mnt/xxx/bbb -o ${OPTIONS}
mount -t smbfs //192.168.xxx.xxx/ccc /mnt/xxx/ccc -o ${OPTIONS}
ttt_start /home/xxx/Arbeitszeit/Mechapro.ttt
else
umount -fl /mnt/xxx/bbb
umount -fl /mnt/xxx/ccc
fi
fi
if [ "$IF_SCHEME" = "eltern" ]; then
if [ ! -d /mnt/megadrive ]
then
mkdir -p /mnt/megadrive
fi
PRETTY_TEXT="Eltern"
OPTIONS="uid=xxx,gid=xxx,codepage=cp852,iocharset=utf8,rw"
sshfs -pxxxxx xxx@xxx.xxx-ass.org:~/ /mnt/megadrive/ -o $OPTIONS
fi
if [ -n "$PRETTY_TEXT" ]
then
notify-send -c network -i network-ethernet-connected $PRETTY_TEXT
fi
exit 0