Partages CIFS à montage automatique sur ordinateur portable

8

J'ai vu des questions similaires à cela posées auparavant dans plusieurs variantes, mais je n'ai pas encore trouvé de réponse satisfaisante.

Voici ce que j'ai:

  • Un ordinateur portable Debian très mobile qui change fréquemment de réseau.
  • Un serveur FreeNAS à la maison avec un tas de partages CIFS dessus.

Voici ce que je veux:

  • Si j'accède au répertoire de partage CIFS lorsque je suis chez moi, montez automatiquement le partage CIFS.
  • Si j'accède au partage CIFS lorsque je suis ailleurs, renvoie une erreur immédiatement (c'est-à-dire ne contemplez pas le réseau pendant cinq minutes avant de déterminer que le NAS n'est pas là).
  • Lorsque je suspends ou hiberne la machine, démontez proprement le partage de sorte que le support ne pointe pas dans l'air lorsque la machine se réveille à nouveau. Si le partage ne peut pas être démonté proprement (un processus utilise un répertoire), soit:
    • Annulez la suspension / hibernation et dites-moi qui campe sur le mont; ou
    • Forcez le démontage de toute façon et continuez avec suspendre / mettre en veille prolongée.
  • Crédit supplémentaire: lorsque la connexion réseau tombe (débranchez la prise ou perdez l'association avec le WAP), essayez de démonter proprement le partage.
  • Crédit supplémentaire: cette magie doit être indépendante du gestionnaire de réseau utilisé.

Aucune des différentes options que j'ai lues ne semble appropriée:

  • autofs semble fiable, mais ne semble pas avoir conscience de la suspension / mise en veille prolongée.
  • L' _netdevoption mountet /etc/fstabsemble intéressante, mais semble s'appliquer uniquement aux partages NFS.
  • Je n'ai pas encore pu me rendre gvfsau travail, mais je n'ai pas essayé très fort.

Des suggestions sur la façon d'aborder cela?

ADDENDA:

Voici la version courte de ce que j'ai fini par faire jusqu'à présent. J'ai installé autofset écrit un petit script shell pour forcer l'expiration de tous les volumes montés automatiquement, qui est appelé chaque fois qu'une interface réseau tombe en panne.

J'ai créé une carte de montage automatique pour mon serveur CIFS, avec les informations d'identification stockées dans un fichier externe (beurk). J'ai ensuite écrit le script shell suivant:

#!/bin/sh -e

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

L'envoi du signal USR1 au démon de montage automatique provoque l'expiration forcée de tous les montages inutilisés. J'ai ensuite placé ce script /etc/network/if-down.d/autofsdedans, avec un softlink dedans /etc/network/if-post-down.d/autofs. NetworkManager appelle tous les scripts de ce dernier répertoire lorsqu'une connexion est interrompue, donc tout système de fichiers monté automatiquement doit être démonté.

Cependant, je ne suis pas très satisfait de cet arrangement. Pour commencer, autofsne fait aucune distinction entre les volumes montés automatiquement et, lors de la réception de l'USR1, démontera tous les volumes inactifs, y compris les volumes hors réseau, ce qui est plutôt lourd.

De plus, le mot de passe de connexion pour le serveur CIFS doit être stocké dans un fichier. Je préférerais de beaucoup être invité à le faire.

Quoi qu'il en soit, c'est ce que j'ai fait jusqu'à présent. Cela fonctionne, mais je serai heureux d'utiliser quelque chose de mieux ...

ewhac
la source
Vous voudrez peut-être jeter un œil à l'outil Gigolo: uvena.de/gigolo/index.html . Je l'utilise pour gérer le rétablissement des supports SMB n / b à la maison et travailler sur mon ordinateur portable.
slm
@slm: Gigolo semble intéressant, mais il ne semble pas y avoir de moyen de modifier les options de montage. Par conséquent, le partage apparaît dans ce que j'appelle le mode "dumb FAT", où tous les fichiers et répertoires ont les autorisations 0700. En revanche, monter le même partage en utilisant sudo mount -t cifs ...donne des résultats préférables. Je vais en jouer un peu plus, mais je ne pense pas que Gigolo soit tout à fait ce que je recherche.
ewhac

Réponses:

2

Si vous utilisez NetworkManager, vous pouvez écrire des scripts qui s'exécutent sur une interface réseau qui monte ou descend.

NetworkManager exécutera les scripts dans le répertoire /etc/NetworkManager/dispatcher.d dans l'ordre alphabétique en réponse aux événements du réseau. Chaque script doit être (a) un fichier normal, (b) appartenant à root, (c) non accessible en écriture par le groupe ou autre, (d) non défini par uid, (e) et exécutable par le propriétaire. Chaque script reçoit deux arguments, le premier étant le nom d'interface du périphérique qui vient d'être activé et le second une action.

Détectez votre propre réseau, par exemple du domaine de recherche, puis montez ou démontez lorsque l'interface est en ligne:

#!/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
la source
Ce qui précède suppose que le montage cifs est défini /etc/fstabavec l' noautooption
HBruijn
Veuillez ajouter cette hypothèse dans la réponse.
Bleeding Fingers