Montagens automáticas de compartilhamentos CIFS no laptop

8

Já vi perguntas semelhantes a essa feitas em várias variações, mas ainda não encontrei uma resposta satisfatória.

Aqui está o que eu tenho:

  • Um laptop Debian altamente móvel que troca de rede com freqüência.
  • Um servidor FreeNAS em casa com um monte de compartilhamentos CIFS nele.

Aqui está o que eu quero:

  • Se eu acessar o diretório de compartilhamento CIFS quando estiver em casa, monte automaticamente o compartilhamento CIFS.
  • Se eu acessar o compartilhamento CIFS quando estiver em outro lugar, retorne um erro imediatamente (ou seja, não contemple a rede por cinco minutos antes de descobrir que o NAS não existe).
  • Ao suspender ou hibernar a máquina, desmonte o compartilhamento de forma limpa para que o suporte não aponte para o nada quando a máquina voltar a funcionar. Se o compartilhamento não puder ser desmontado corretamente (um processo está usando um diretório):
    • Interrompa a suspensão / hibernação e me diga quem está acampando no monte; ou
    • Force a desmontagem de qualquer maneira e continue com suspender / hibernar.
  • Crédito extra: quando a conexão de rede cair (puxe o plugue ou perca a associação com o WAP), tente desmontar corretamente o compartilhamento.
  • Crédito Extra: Essa mágica deve ser independente do gerenciador de rede em uso.

Nenhuma das várias opções que eu li sobre parece ser apropriada:

  • autofs parece ser confiável, mas não parece ter conhecimento de suspender / hibernar.
  • A _netdevopção mounte /etc/fstabparece interessante, mas parece se aplicar apenas aos compartilhamentos NFS.
  • Ainda não consegui gvfstrabalhar, mas não tentei muito.

Alguma sugestão sobre como abordar isso?

TERMO ADITIVO:

Aqui está a versão curta do que acabei fazendo até agora. Eu instalei autofse escrevi um pequeno script de shell para forçar a expiração de todos os volumes montados automaticamente, que são chamados sempre que uma interface de rede é desativada.

Criei um mapa de montador automático para meu servidor CIFS, com as credenciais armazenadas em um arquivo externo (eca). Em seguida, escrevi o seguinte 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

Enviar o sinal USR1 para o daemon de montagem automática faz com que expire à força todas as montagens não utilizadas. Em seguida, coloquei esse script /etc/network/if-down.d/autofs, com um softlink em /etc/network/if-post-down.d/autofs. O NetworkManager chama todos os scripts deste último diretório quando uma conexão é interrompida; portanto, qualquer sistema de arquivos montado automaticamente deve ser desmontado.

Eu não estou muito feliz com o arranjo, no entanto. Para começar, autofsnão faz distinção entre volumes montados automaticamente e, ao receber USR1, desmontará todos os volumes inativos, incluindo volumes não pertencentes à rede, o que é bastante pesado.

Além disso, a senha de login do servidor CIFS deve ser armazenada em um arquivo. Eu preferiria muito ser solicitado.

Enfim, é isso que eu reuni até agora. Funciona, mas ficarei feliz em usar algo melhor ...

ewhac
fonte
Você pode dar uma olhada na ferramenta Gigolo: uvena.de/gigolo/index.html . Eu o uso para gerenciar o restabelecimento de montagens SMB em casa e trabalhar no meu laptop.
slm
@ slm: Gigolo parece interessante, mas não parece haver uma maneira de alterar as opções de montagem. Como conseqüência, o compartilhamento surge no modo que eu chamo de "burro FAT", onde todos os arquivos e diretórios têm permissões 0700. Por outro lado, montar o mesmo compartilhamento usando sudo mount -t cifs ...resultados preferíveis. Vou mexer um pouco mais, mas não acho que Gigolo seja exatamente o que estou procurando.
ewhac

Respostas:

2

Se você usa o NetworkManager, pode escrever scripts que são executados em uma interface de rede subindo ou descendo.

O NetworkManager executará scripts no diretório /etc/NetworkManager/dispatcher.d em ordem alfabética, em resposta aos eventos da rede. Cada script deve ser (a) um arquivo regular, (b) pertencente à raiz, (c) não gravável por grupo ou outro, (d) não configurado, (e) e executável pelo proprietário. Cada script recebe dois argumentos, o primeiro sendo o nome da interface do dispositivo que acabou de ser ativado, e o segundo uma ação.

Detecte sua própria rede, por exemplo, no domínio de pesquisa e monte ou desmonte quando a interface ficar 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
HBruijn
fonte
O acima assume que os CIFS montagem é definido em /etc/fstabcom a noautoopção
HBruijn
Por favor, adicione essa suposição na resposta.
Dedos Sangrentos