Hallo,
folgendes Skript soll einem Mobilgerät abhängig vom Aufenthaltsort unterschiedliche Mount-Optionen unterjubeln:
---- Code ---- #!/bin/sh IP=`/sbin/ifconfig eth0 | sed 's/:/ /g' | awk '/inet Adresse/ {print$3}'`
echo "$IP"
if [ "$IP" = "a.b.c.d" ]; then echo "bin zuhause" rsync -av /etc/auto.home.lan /etc/auto.home /etc/init.d/autofs restart
else
echo "bin unterwegs" rsync -av /etc/auto.home.mobil /etc/auto.home /etc/init.d/autofs restart
fi ---- /Code ----
Das Skript funktioniert soweit, wenn ich es im Terminal ausführe.
Jedoch aus z.B. /etc/gdm3/Init/Default heraus aufgerufen liefert es das Gegenteil des zu erwartenden Ergebnisses.
Hat jemand ne Idee, woran das liegen könnte?
Danke & Grüße,
Bernhard
Hallo,
Nur Tipps ins Balue, ohne Dein Skript wirklich geistig debugged zu haben
shebang is /bin/sh - bei der Umstellung in debain bin ich damit oft auf die Nase gefallen, ein /bin/bash half da sofort sed und awk - sind nicht absolut angegeben, vielleicht findet der user oder die Umgebung es aus dem GDM nicht ifconfig - welcher user lässt das Skript im GCM laufen, darf der ifconfig
Gib Dir doch im else-Zweig mal $IP aus, ich vermute es ist leer.
Mit freundlichen Grüßen / Kind regards Ronny Seffner
Am 04.11.2012, 18:32 Uhr, schrieb Ronny Seffner ronny@seffner.de:
Hallo Ronny,
Hallo,
Nur Tipps ins Balue, ohne Dein Skript wirklich geistig debugged zu haben
shebang is /bin/sh - bei der Umstellung in debain bin ich damit oft auf die Nase gefallen, ein /bin/bash half da sofort sed und awk - sind nicht absolut angegeben, vielleicht findet der user oder die Umgebung es aus dem GDM nicht ifconfig - welcher user lässt das Skript im GCM laufen, darf der ifconfig
ich nehme mal an der user gdm, und der darf wohl nicht
Gib Dir doch im else-Zweig mal $IP aus, ich vermute es ist leer.
so isses
bin jetzt auf 'ip' anstelle von 'ifconfig' umgeschwenkt; die Zeile sieht dann so aus:
IP=`/bin/ip addr show eth0 | sed 's/:/ /g' | awk '/inet/ {print$2}'`
Funktioniert aus /etc/gdm3/Init/Default und /etc/rc.local.
snip
Danke & Grüße,
Bernhard
On Sun, Nov 04, 2012 at 06:21:45PM +0100, Bernhard Bittner wrote:
folgendes Skript soll einem Mobilgerät abhängig vom Aufenthaltsort unterschiedliche Mount-Optionen unterjubeln:
---- Code ---- #!/bin/sh ---- /Code ----
Das Skript funktioniert soweit, wenn ich es im Terminal ausführe.
Jedoch aus z.B. /etc/gdm3/Init/Default heraus aufgerufen liefert es das Gegenteil des zu erwartenden Ergebnisses.
Hat jemand ne Idee, woran das liegen könnte?
Kann es sein dass die bash in deinem Terminal den Shebang etwas ignoriert bzw. einfach selbst /bin/sh implementiert, und deine eigentliche /bin/sh ein Symlink zu z.B. /bin/dash ist?
Aber des weiteren: nen Automounter kann ja auch mehrere Ziele ansprechen. Sollte das nicht reichen, um das Ziel und die Mount-Optionen an die Location anzupassen?
Gruß, Andre
Am 04.11.2012, 18:34 Uhr, schrieb Andre Klärner kandre@ak-online.be:
Hallo Andre,
snip
Aber des weiteren: nen Automounter kann ja auch mehrere Ziele ansprechen. Sollte das nicht reichen, um das Ziel und die Mount-Optionen an die Location anzupassen?
m.E. nicht, wenn ich /home/user mal per NFS vom Server und mal von der lokalen HDD (DSL-Upstream-bedingt) einbinden will. Da sollte es doch eindeutig sein, oder?
Grüße,
Bernhard
Hi Bernhard,
On Sun, Nov 04, 2012 at 07:32:10PM +0100, Bernhard Bittner wrote:
Am 04.11.2012, 18:34 Uhr, schrieb Andre Klärner kandre@ak-online.be:
Aber des weiteren: nen Automounter kann ja auch mehrere Ziele ansprechen. Sollte das nicht reichen, um das Ziel und die Mount-Optionen an die Location anzupassen?
m.E. nicht, wenn ich /home/user mal per NFS vom Server und mal von der lokalen HDD (DSL-Upstream-bedingt) einbinden will. Da sollte es doch eindeutig sein, oder?
Also, du kannst damit nicht ein gemountetes Filesystem zwischen zwei Locations springen lassen. Aber wenn das Filesystem dazwischen abgemounted wird (also z.B. Timeout) kann der nächste Mount sich wieder zwischen allen Zielen entscheiden. Das ist für ein repliziertes Filesystem gedacht, das mehrere Front-Gateways hat, über die z.B. per NFS auf das Filesystem zugegriffen werden kann.
Die genaue Syntax in indirekten Maps ist dann z.B.:
mountkey -rw,hard,intr server1:/foo server2:/foobar
bzw.
mountkey -rw,hard,intr server1,server2:/foo
Ich dachte jetzt für diesen Fall daran, dass man die ideale Kopie über z.B. den DNS-Namen "home-nfs" verfügbar macht, der nur da auflösbar ist, wenn man dieses Filesystem auch via NFS erreichen kann. Da wäre das Ergebnis z.B.:
datenplatte -rw,hard,intr home-nfs:/datenplatte localhost:/datenplatte
Wenn dann home-nfs nicht erreichbar ist (Timeout oder keine DNS-Auflösung) wird der Mount-Request zum nächsten Server geleitet der in der Liste steht. Also dann localhost, auf dem die lokale Kopie unter einem bestimmten Pfad liegt.
Alternative wäre noch, die Mount-Map dynamisch zu machen, wie zum Beispiel mit dem map-Typ "program" (man 5 auto.master) ein Skript anzugeben, das die passende Map abhänggig vom Standort generiert oder abliefert.
Gruß, Andre
Bernhard Bittner Bernhard.Bittner@gmx.net (So 04 Nov 2012 18:21:45 CET):
Hallo,
folgendes Skript soll einem Mobilgerät abhängig vom Aufenthaltsort unterschiedliche Mount-Optionen unterjubeln:
#!/bin/sh + export LC_ALL=POSIX - IP=`/sbin/ifconfig eth0 | sed 's/:/ /g' | awk '/inet Adresse/ {print$3}'` + IP=`/sbin/ifconfig eth0 | sed 's/:/ /g' | awk '/inet addr/ {print$3}'`
„ip“ ist da besser zu parsen und m.W. auch nicht locale-abhängig.
Und für die Feststellung, wo Du bist, würde ich nicht die eigene IP nehmen, sondern die MAC-Adresse des Gateways. IP-Adressen ändern sich.
Moin Heiko,
On Sun, Nov 04, 2012 at 09:18:27PM +0100, Heiko Schlittermann wrote:
#!/bin/sh
- export LC_ALL=POSIX
- IP=`/sbin/ifconfig eth0 | sed 's/:/ /g' | awk '/inet Adresse/ {print$3}'`
- IP=`/sbin/ifconfig eth0 | sed 's/:/ /g' | awk '/inet addr/ {print$3}'`
„ip“ ist da besser zu parsen und m.W. auch nicht locale-abhängig.
Gibt es eigentlichen einen "ordentlichen" Weg die IP-Adressen/Config auf einem Linux ohne ip/ifconfig oder andere Tools zu ermitteln? Ich mag es nämlich so oder so nicht, das man irgendwie nur Screen-Scraping hat, um solche Informationen zu ermitteln.
Und für die Feststellung, wo Du bist, würde ich nicht die eigene IP nehmen, sondern die MAC-Adresse des Gateways. IP-Adressen ändern sich.
Und was ist wenn das (Hardware-) Gateway ausgetauscht wird oder dynamisch konfigurierte Router sind? Gibt es irgendwo eine Best-Practice der "in welchem Netz bin ich?" Frage? Ich hab ja auch schon gesehen, dass Microsoft damit teilweise auf die Schnauze geflogen ist, die einzige richtig gute Variante für MS-Netze ist ein Domain-Controller.. Aber wie macht man es am bessten für ein Linux-only Netz?
Danke und Gruß, Andre
Andre Klärner kandre@ak-online.be (So 04 Nov 2012 21:45:08 CET):
Moin Heiko,
On Sun, Nov 04, 2012 at 09:18:27PM +0100, Heiko Schlittermann wrote:
#!/bin/sh
- export LC_ALL=POSIX
- IP=`/sbin/ifconfig eth0 | sed 's/:/ /g' | awk '/inet Adresse/ {print$3}'`
- IP=`/sbin/ifconfig eth0 | sed 's/:/ /g' | awk '/inet addr/ {print$3}'`
„ip“ ist da besser zu parsen und m.W. auch nicht locale-abhängig.
Gibt es eigentlichen einen "ordentlichen" Weg die IP-Adressen/Config auf einem Linux ohne ip/ifconfig oder andere Tools zu ermitteln? Ich mag es nämlich so oder so nicht, das man irgendwie nur Screen-Scraping hat, um solche Informationen zu ermitteln.
Du könntest die API ansehen, die ifconfig oder ip verwenden. Vielleicht kann man das in /proc oder /sys ausgraben. Aber ich denke, genau „ip“ ist dafür gemacht, zu wissen, wo der Kernel das vergraben hat.
Und für die Feststellung, wo Du bist, würde ich nicht die eigene IP nehmen, sondern die MAC-Adresse des Gateways. IP-Adressen ändern sich.
Und was ist wenn das (Hardware-) Gateway ausgetauscht wird oder dynamisch konfigurierte Router sind? Gibt es irgendwo eine Best-Practice der "in welchem Netz bin ich?" Frage? Ich hab ja auch schon gesehen, dass Microsoft damit teilweise auf die Schnauze geflogen ist, die einzige richtig gute Variante für MS-Netze ist ein Domain-Controller.. Aber wie macht man es am bessten für ein Linux-only Netz?
Der Router/GW wird am seltesten getauscht, wenn es mehrere gibt, dann sind es eben verschiedene Konfigurationen, die alle gleich sind. (So habe ich das gelöst, denn in der Praxis ist das sehr selten.)
Was ist denn die „Umgebung“? Ich könnte nach mehr als nur einer MAC-Adresse gucken. Wenn ich X% der erwarteten MACs sehe, bin ich also in einer bestimmten Umgebung. Wenn ich alle meine Heimat-PCs mit ins Büro nehme, bin ich dann netzumgebungsmäßig zu Hause oder im Büro?
Bei IPv6 könnte man - wenn ein Prefix verteilt wird im jeweiligen Netz (was wohl allermeistens so sein wird), nach dem Prefix gucken. Aber IPv6 finden wir nur sehr selten.
Am 04.11.2012, 21:18 Uhr, schrieb Heiko Schlittermann hs@schlittermann.de:
Hallo Heiko,
snip
„ip“ ist da besser zu parsen und m.W. auch nicht locale-abhängig.
und befindet sich obendrein in /bin :-)
Und für die Feststellung, wo Du bist, würde ich nicht die eigene IP nehmen, sondern die MAC-Adresse des Gateways. IP-Adressen ändern sich.
nunja, immerhin sind sie in meinem Einflußbereich mittels DHCP festgenagelt ;-)
Aber ich kann natürlich nicht ausschließen, daß außerhalb dessen nicht auch mal die gleiche IP wie im 'Heimat-Netz' zugeteilt wird - genau dann wäre die IP-Prüfung nicht mal mehr fünf Pfennig wert...
Aktuell ist das Risiko zwar gering, aber Danke für Deinen Hinweis - das ist die Sicherheit, die ich letztlich haben will.
Grüße,
Bernhard
nunja, immerhin sind sie in meinem Einflußbereich mittels DHCP festgenagelt ;-)
Da nutze doch deinen DHCP+TFTP um den Client zu "konfigurieren" lass dem DHCP sagen wo der Client ist, per TFTP bekommt er die Mountanweisung als Datei
(vielleicht geht auch was über Resource Location Server )
Aber ich kann natürlich nicht ausschließen, daß außerhalb dessen nicht auch mal die gleiche IP wie im 'Heimat-Netz' zugeteilt wird - genau dann wäre die IP-Prüfung nicht mal mehr fünf Pfennig wert...
Aktuell ist das Risiko zwar gering, aber Danke für Deinen Hinweis - das ist die Sicherheit, die ich letztlich haben will.
Grüße,
Bernhard
andreas
lug-dd@mailman.schlittermann.de