Condivisioni CIFS a montaggio automatico su laptop


8

Ho visto domande simili a questa poste in diverse varianti, ma devo ancora trovare una risposta soddisfacente.

Ecco cosa ho:

  • Un laptop Debian altamente mobile che cambia frequentemente le reti.
  • Un server FreeNAS a casa con un sacco di condivisioni CIFS su di esso.

Ecco cosa voglio:

  • Se accedo alla directory della condivisione CIFS quando sono a casa, monto automaticamente la condivisione CIFS.
  • Se accedo alla condivisione CIFS quando sono altrove, restituisco immediatamente un errore (ovvero non contemplare la rete per cinque minuti prima di capire che il NAS non è lì).
  • Quando sospendo o ibisco la macchina, smonta in modo pulito la condivisione in modo che il supporto non si punti nel nulla quando la macchina si risveglia di nuovo. Se la condivisione non può essere smontata in modo chiaro (un processo utilizza una directory):
    • Interrompi la sospensione / ibernazione e dimmi chi è accampato sul monte; o
    • Forzare comunque lo smontaggio e procedere con la sospensione / ibernazione.
  • Credito extra: quando la connessione di rete si interrompe (staccare la spina o perdere l'associazione con il WAP), provare a smontare in modo chiaro la condivisione.
  • Credito extra: questa magia dovrebbe essere indipendente dal gestore della rete in uso.

Nessuna delle varie opzioni di cui ho letto sembra essere appropriata:

  • autofs sembra essere affidabile, ma non sembra avere alcuna consapevolezza di sospendere / ibernare.
  • L' _netdevopzione è interessante mounte /etc/fstabsembra interessante, ma sembra applicarsi solo alle condivisioni NFS.
  • Non sono ancora riuscito a mettermi gvfsal lavoro, ma poi non ci ho provato molto.

Qualche suggerimento su come affrontare questo?

APPENDICE:

Ecco la versione breve di quello che ho finito per fare finora. Ho installato autofse scritto un piccolo script di shell per forzare la scadenza di tutti i volumi montati automaticamente, che viene chiamato ogni volta che un'interfaccia di rete non funziona.

Ho creato una mappa di automounter per il mio server CIFS, con le credenziali memorizzate in un file esterno (yuck). Ho quindi scritto il seguente script di shell:

#!/bin/sh -e

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

L'invio del segnale USR1 al demone automount provoca la scadenza forzata di tutti i mount non utilizzati. Ho quindi inserito questo script /etc/network/if-down.d/autofs, con un softlink in /etc/network/if-post-down.d/autofs. NetworkManager richiama tutti gli script in quest'ultima directory quando si interrompe una connessione, quindi tutti i filesystem montati automaticamente devono essere smontati.

Non sono terribilmente soddisfatto dell'accordo, comunque. Tanto per cominciare, autofsnon fa distinzione tra volumi montati automaticamente e, alla ricezione di USR1, smonterà tutti i volumi inattivi, compresi i volumi non di rete, che è piuttosto pesante.

Inoltre, la password di accesso per il server CIFS deve essere memorizzata in un file. Preferirei di gran lunga essere richiesto.

Ad ogni modo, è quello che ho raccolto insieme finora. Funziona, ma sarò felice di usare qualcosa di meglio ...


Potresti dare un'occhiata allo strumento Gigolo: uvena.de/gigolo/index.html . Lo uso per gestire il ristabilimento dei supporti SMB in b / n a casa e lavorare sul mio laptop.
slm

@slm: Gigolo sembra interessante, ma non sembra esserci un modo per modificare le opzioni di montaggio. Di conseguenza, la condivisione si presenta in quella che chiamo modalità "stupida FAT", dove tutti i file e le directory hanno i permessi 0700. Al contrario, montare la stessa condivisione usando sudo mount -t cifs ...risultati preferibili. Ci giocherò un po 'di più, ma non credo che Gigolo sia proprio quello che sto cercando.
ewhac,

Risposte:


2

Se si utilizza NetworkManager, è possibile scrivere script che vengono eseguiti su un'interfaccia di rete che sale o scende.

NetworkManager eseguirà gli script nella directory /etc/NetworkManager/dispatcher.d in ordine alfabetico in risposta agli eventi di rete. Ogni script dovrebbe essere (a) un file normale, (b) di proprietà di root, (c) non scrivibile per gruppo o altro, (d) non impostato, (e) ed eseguibile dal proprietario. Ogni script riceve due argomenti, il primo è il nome dell'interfaccia del dispositivo appena attivato e il secondo un'azione.

Rileva la tua rete, ad esempio dal dominio di ricerca, quindi monta o smonta quando l'interfaccia diventa online:

#!/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

Quanto sopra presuppone che il mount cifs sia definito /etc/fstabcon l' noautoopzione
HBruijn il

Si prega di aggiungere tale presupposto nella risposta.
Bleeding Fingers
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.