Como eu uso inotify ou pipes nomeados sobre SSHFS?

9

Obrigado sshfs mágica, posso montar o meu diretório pessoal a partir de um servidor remoto com

sshfs user@server:/home/user ~/remote

Otimisticamente, eu pensei em definir um local inotify -hook em ~/remote/logFile (no sshfs mount) para que um programa local possa reagir a mudanças de log remotas.

cd ~/remote
touch logFile                                # create remote file
inotifywait logFile &                        # set up local inotify-hook
ssh user@server -x touch /home/user/logFile  # touch file from remote

Nada acontece . inotifywait é silencioso a menos que eu touch o arquivo localmente. Escrever em um pipe nomeado falha de maneira semelhante.

Por que isso acontece?
Como posso preencher essa lacuna?

Eu poderia rodar inotifywait no controle remoto, hackear uma estratégia de serialização de mudança do sistema de arquivos e manter uma conexão com o local, mas então estou basicamente reimplementando o SSHFS . E elimina completamente a abstração.

    
por Anko 14.07.2014 / 16:23

1 resposta

8

O sistema de arquivos SSHFS é construído sobre o protocolo SFTP . O SFTP fornece apenas recursos para manipular arquivos de maneira “clássica”; o cliente faz uma solicitação ao servidor (lista um diretório, faz upload de um arquivo, etc.) e o servidor responde. Não há nenhuma facilidade neste protocolo para o servidor notificar espontaneamente o cliente que algo aconteceu.

Isso torna impossível fornecer uma instalação como inotify dentro do SSHFS. Seria possível estender o SSHFS com extensões proprietárias ou complementá-lo com uma conexão SSH completa; mas eu não sei de tal extensão para o SSHFS.

Os pipes nomeados não podem ser implementados na parte superior do SSHFS pelo mesmo motivo. O NFS, o sistema de arquivos em rede clássico, também não tem nenhum recurso para suportar pipes nomeados entre máquinas. Em um sistema de arquivos em rede, um pipe nomeado cria um ponto de comunicação independente em cada uma das máquinas em que está montado (além do servidor).

FAM (o inotify analogue no SGI IRIX, que foi portado para o Linux) fornece um daemon que permite que as notificações ser enviado pela rede. O Linux desaprovou o FAM desde que o inotify entrou em cena, então não sei se executar o FAM seria mais fácil do que rodar o seu próprio sistema de notificação específico do aplicativo. Você precisaria configurar algum encaminhamento de porta por SSH ou estabelecer uma VPN para proteger o link de rede para FAM e NFS.

Se você optar por criar seu próprio, supondo que esteja certo em fornecer o acesso ao shell do cliente, é bastante fácil executar um monitor de inotificação em nome de um cliente: faça o cliente abrir uma conexão SSH e execute o% Comandoinotifywait no servidor, analisando sua saída no cliente. Você pode configurar uma conexão principal para torná-lo mais rápido para abrir muitas conexões do mesmo cliente para o mesmo servidor.

    
por 15.07.2014 / 12:13