Automatische Montage von CIFS-Freigaben auf dem Laptop

8

Ich habe ähnliche Fragen gesehen, die zuvor in verschiedenen Variationen gestellt wurden, aber ich habe noch keine zufriedenstellende Antwort gefunden.

Folgendes habe ich:

  • Ein hochmobiler Debian-Laptop, der häufig zwischen Netzwerken wechselt.
  • Ein FreeNAS-Server zu Hause mit einer Reihe von CIFS-Freigaben.

Folgendes möchte ich:

  • Wenn ich zu Hause auf das CIFS-Freigabeverzeichnis zugreife, mounten Sie die CIFS-Freigabe automatisch.
  • Wenn ich an einem anderen Ort auf die CIFS-Freigabe zugreife, geben Sie sofort einen Fehler zurück (dh betrachten Sie das Netzwerk fünf Minuten lang nicht, bevor Sie herausfinden, dass der NAS nicht vorhanden ist).
  • Wenn ich die Maschine anhalte oder in den Ruhezustand versetze, entfernen Sie die Freigabe sauber, damit die Halterung nicht in Luft aufsteigt, wenn die Maschine wieder aufwacht. Wenn die Freigabe nicht sauber aufgehoben werden kann (ein Prozess verwendet ein Verzeichnis), gilt Folgendes:
    • Brechen Sie den Suspend / Hibernate ab und sagen Sie mir, wer auf dem Berg kampiert. oder
    • Erzwingen Sie trotzdem das Aufheben der Bereitstellung und fahren Sie mit Suspend / Hibernate fort.
  • Zusätzliches Guthaben: Wenn die Netzwerkverbindung unterbrochen wird (ziehen Sie den Stecker oder verlieren Sie die Verbindung zum WAP), versuchen Sie, die Freigabe sauber aufzuheben.
  • Zusätzliches Guthaben: Diese Magie sollte unabhängig vom verwendeten Netzwerkmanager sein.

Keine der verschiedenen Optionen, über die ich gelesen habe, scheint angemessen zu sein:

  • autofs scheint zuverlässig zu sein, scheint aber kein Bewusstsein für Suspend / Hibernate zu haben.
  • Die _netdevOption in mountund /etc/fstabsieht interessant aus, scheint jedoch nur für NFS-Aktien zu gelten.
  • Ich konnte noch nicht gvfszur Arbeit gehen, aber dann habe ich mich nicht sehr bemüht.

Irgendwelche Vorschläge, wie man das angeht?

NACHTRAG:

Hier ist die Kurzversion von dem, was ich bisher gemacht habe. Ich habe autofsein kleines Shell-Skript installiert und geschrieben, um das automatische Ablaufen aller automatisch gemounteten Volumes zu erzwingen, das aufgerufen wird, wenn eine Netzwerkschnittstelle ausfällt.

Ich habe eine Automounter-Map für meinen CIFS-Server erstellt, deren Anmeldeinformationen in einer externen Datei gespeichert sind (yuck). Ich habe dann folgendes Shell-Skript geschrieben:

#!/bin/sh -e

# Expire everything in the automounter.
if [ -f /var/run/autofs.pid ]; then
    kill -USR1 "$(cat /var/run/autofs.pid)"
fi

Durch das Senden des USR1-Signals an den Automount-Daemon werden alle nicht verwendeten Mounts zwangsweise abgelaufen. Ich habe dieses Skript dann /etc/network/if-down.d/autofsmit einem Softlink eingefügt /etc/network/if-post-down.d/autofs. NetworkManager ruft alle Skripte im letzteren Verzeichnis auf, wenn eine Verbindung unterbrochen wird. Daher sollten alle automatisch gemounteten Dateisysteme nicht gemountet werden.

Ich bin jedoch nicht besonders zufrieden mit dem Arrangement. Zunächst autofswird nicht zwischen automatisch gemounteten Volumes unterschieden, und beim Empfang von USR1 werden alle inaktiven Volumes, einschließlich Nicht-Netzwerk-Volumes, ausgehängt, was ziemlich umständlich ist.

Außerdem muss das Anmeldekennwort für den CIFS-Server in einer Datei gespeichert werden. Ich würde es sehr vorziehen, dazu aufgefordert zu werden.

Jedenfalls habe ich mich bisher zusammengetan. Es funktioniert, aber ich werde gerne etwas Besseres verwenden ...

ewhac
quelle
Vielleicht möchten Sie sich das Tool Gigolo ansehen : uvena.de/gigolo/index.html . Ich verwende es, um die Wiederherstellung von SMB-Halterungen s / w zu Hause zu verwalten und an meinem Laptop zu arbeiten.
slm
@slm: Gigolo sieht interessant aus, aber es scheint keine Möglichkeit zu geben, die Mount-Optionen zu ändern. Infolgedessen wird die Freigabe im sogenannten "dummen FAT" -Modus angezeigt, in dem alle Dateien und Verzeichnisse über die Berechtigung 0700 verfügen. Im Gegensatz dazu führt das Mounten derselben Freigabe mithilfe von sudo mount -t cifs ...bevorzugten Ergebnissen. Ich werde ein bisschen mehr damit herumspielen, aber ich denke nicht, dass Gigolo genau das ist, wonach ich suche.
ewhac

Antworten:

2

Wenn Sie NetworkManager verwenden, können Sie Skripts schreiben, die auf einer Netzwerkschnittstelle ausgeführt werden, die hoch- oder runtergeht.

NetworkManager führt als Reaktion auf Netzwerkereignisse Skripts im Verzeichnis /etc/NetworkManager/dispatcher.d in alphabetischer Reihenfolge aus. Jedes Skript sollte (a) eine reguläre Datei sein, (b) Eigentum von root sein, (c) nicht von einer Gruppe oder einer anderen beschreibbar sein, (d) keine Set-UID, (e) und vom Eigentümer ausführbar. Jedes Skript erhält zwei Argumente, das erste ist der Schnittstellenname des gerade aktivierten Geräts und das zweite eine Aktion.

Erkennen Sie Ihr eigenes Netzwerk beispielsweise anhand der Suchdomäne und stellen Sie es bereit, wenn die Schnittstelle online geschaltet wird:

#!/bin/bash
#/etc/NetworkManager/dispatcher.d/mount-my-cifs    
case "$2" in
  up)
    # some logic to detect if we're at home
    grep "search myhome.local" /etc/resolv.conf
    if [ "$?" != "0" ] ; then 
       exit
    else 
       mount /mnt/cifs
    fi
    ;;
  down)
       umount /mnt/cifs
    ;;
esac
HBruijn
quelle
Das obige setzt voraus, dass die cifs-Montage /etc/fstabmit der noautoOption
HBruijn
Bitte fügen Sie diese Annahme in die Antwort ein.
Blutende Finger