Acciones CIFS de montaje automático en la computadora portátil

8

He visto preguntas similares a esta formuladas anteriormente en varias variaciones, pero aún no he encontrado una respuesta satisfactoria.

Esto es lo que tengo:

  • Una computadora portátil Debian altamente móvil que cambia de red con frecuencia.
  • Un servidor FreeNAS en casa con un montón de recursos compartidos CIFS.

Esto es lo que quiero:

  • Si accedo al directorio compartido CIFS cuando estoy en casa, monte automáticamente el recurso compartido CIFS.
  • Si accedo al recurso compartido CIFS cuando estoy en otro lugar, devuelvo un error inmediatamente (es decir, no contemple la red durante cinco minutos antes de descubrir que el NAS no está allí).
  • Cuando suspende o hiberna la máquina, desmonte limpiamente el recurso compartido para que la montura no apunte al aire cuando la máquina vuelva a activarse. Si el recurso compartido no se puede desmontar limpiamente (un proceso está utilizando un directorio), ya sea:
    • Abortar la suspensión / hibernación y dime quién está acampando en el monte; o
    • Forzar el desmontaje de todos modos y proceder con la suspensión / hibernación.
  • Crédito adicional: cuando se corta la conexión de red (desconecte o pierda la asociación con el WAP), intente desmontar limpiamente el recurso compartido.
  • Crédito adicional: esta magia debe ser independiente del administrador de red en uso.

Ninguna de las diversas opciones sobre las que he leído parece ser apropiada:

  • autofs parece ser confiable, pero no parece tener ningún conocimiento de suspender / hibernar.
  • La _netdevopción mounty /etc/fstabparece interesante, pero parece aplicarse solo a los recursos compartidos de NFS.
  • Todavía no he podido ir gvfsa trabajar, pero tampoco me he esforzado mucho.

¿Alguna sugerencia sobre cómo abordar esto?

APÉNDICE:

Aquí está la versión corta de lo que terminé haciendo hasta ahora. Instalé autofsy escribí un pequeño script de shell para forzar el vencimiento de todos los volúmenes montados automáticamente, que se llama cada vez que se desactiva una interfaz de red.

Creé un mapa de montador automático para mi servidor CIFS, con las credenciales almacenadas en un archivo externo (yuck). Luego escribí el siguiente script de shell:

#!/bin/sh -e

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

El envío de la señal USR1 al demonio de automontaje hace que expire forzosamente todas las monturas no utilizadas. Luego coloqué este script en /etc/network/if-down.d/autofs, con un enlace suave en /etc/network/if-post-down.d/autofs. NetworkManager invoca todos los scripts en el último directorio cuando se cae una conexión, por lo que cualquier sistema de archivos montado automáticamente debe desmontarse.

Sin embargo, no estoy terriblemente feliz con el acuerdo. Para empezar, autofsno hace distinción entre los volúmenes montados automáticamente y, al recibir USR1, desmontará todos los volúmenes inactivos, incluidos los volúmenes que no son de red, que es bastante pesado.

Además, la contraseña de inicio de sesión para el servidor CIFS debe almacenarse en un archivo. Preferiría que me lo pidieran.

De todos modos, eso es lo que he reunido hasta ahora. Funciona, pero estaré feliz de usar algo mejor ...

ewhac
fuente
Es posible que desee echar un vistazo a la herramienta Gigolo: uvena.de/gigolo/index.html . Lo uso para administrar el restablecimiento de los montajes SMB en casa y trabajo en mi computadora portátil.
slm
@slm: Gigolo parece interesante, pero no parece haber una forma de alterar las opciones de montaje. Como consecuencia, el recurso compartido aparece en lo que yo llamo el modo "FAT tonto", donde todos los archivos y directorios tienen permisos 0700. Por el contrario, montar el mismo recurso compartido sudo mount -t cifs ...produce resultados preferibles. Voy a jugar un poco más, pero no creo que Gigolo sea lo que estoy buscando.
ewhac

Respuestas:

2

Si usa NetworkManager, puede escribir scripts que se ejecutan en una interfaz de red que sube o baja.

NetworkManager ejecutará scripts en el directorio /etc/NetworkManager/dispatcher.d en orden alfabético en respuesta a los eventos de la red. Cada script debe ser (a) un archivo normal, (b) propiedad de root, (c) no modificable por grupo u otro, (d) no set-uid, (e) y ejecutable por el propietario. Cada script recibe dos argumentos, el primero es el nombre de la interfaz del dispositivo que se acaba de activar y el segundo una acción.

Detecte su propia red, por ejemplo, desde el dominio de búsqueda y luego monte o desmonte cuando la interfaz se conecte:

#!/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
fuente
Lo anterior supone que el montaje cifs se define /etc/fstabcon la noautoopción
HBruijn
Agregue esa suposición a la respuesta.
Sangrado dedos