Utilizzare libfuse in un progetto, senza accesso root (per l'installazione)? FTP Attacchi e inotify / kqueue / FSEvents

StackOverflow https://stackoverflow.com/questions/4321035

  •  29-09-2019
  •  | 
  •  

Domanda

Vorrei la mia domanda per essere in grado di mostrare un elenco di directory da un FTP remoto (o SFTP, ecc) posizione. Quando un file / directory cambia nella struttura di directory remota, l'applicazione dovrebbe aggiornare la sua vista con le modifiche rilevanti.

Perché attraversare l'intero albero è lento e dispendioso, mi piacerebbe usare qualcosa sulla falsariga di FSEvents (inotify / kqueues su Linux), ma ovviamente queste librerie sono filesystem-based, e una connessione a un server FTP è non è la stessa come un file system montato.

Al fine di rendere queste librerie lavoro, avrei bisogno di montare in realtà un file system supportato da FTP / SFTP sulla macchina locale, quindi collegare un FSEventStream (o kqueue ecc) per questo locale montare. So FUSE può fare questo, ma c'è un modo posso usare FUSE senza che l'utente dover installare un primo momento? Voglio dire, posso bundle con la mia applicazione (Mac) e creare supporti senza dover mettere l'utente attraverso il processo di effettivamente in esecuzione un pacchetto di installazione per copiare libfuse e il kernel moduli nel sistema? Fa assumere esiste /dev/fuse, o può questo al di fuori dal vivo del percorso /dev/, dentro la mia directory dell'applicazione?

applicazioni

??Nizza Mac sono installati con un semplice drag & drop e vorrei mantenere la mia in questo modo, se possibile. Sono chiaro su se è possibile utilizzare direttamente libfuse (a condizione che i file sono inclusi con l'applicazione), senza installarlo nei percorsi di sistema.

In alternativa, qualcuno ha altri suggerimenti per il monitoraggio di cambiamenti nel corso FTP, senza polling?

È stato utile?

Soluzione

FTP e SFTP non supporta alcuna forma di comunicazione del cliente.

Proprio come HTTP che si basano su un sistema di richiesta / risposta, in cui ogni trasferimento dei dati viene iniziata dal client. Ciò che rende le cose peggio è che, a differenza di HTTP, non v'è alcun modo per chiedere al server di informare il cliente di eventuali cambiamenti da una data specifica.

Questo significa che non solo è necessario utilizzare polling, ma anche che dicono polling volontà in alcun modo essere leggero.

Per quanto riguarda FUSE è legata, la maggior parte dei moduli di FTP e SFTP che sono disponibili solo aggiornare la loro visione del file system quando le applicazioni userspace chiedono un elenco di directory (ad esempio colpendo Aggiorna in una finestra del browser di file). Essi non eseguire il polling per conto proprio. L'applicazione userspace avrà per avviare l'aggiornamento dal polling della directory stessa.

EDIT:

Per chiarire un paio di cose, le versioni recenti di FUSE fanno gli eventi di notifica di supporto. Essi semplicemente passare attraverso gli eventi dei moduli al kernel. I moduli devono ancora generarli e nel caso di un modulo client FTP / SFTP che è impossibile senza il polling del server.

Anche tenere a mente che molti NFS attuali implementazioni non supportano le notifiche di modifica sia, nonostante il fatto che NFSv4.1 ha le disposizioni necessarie. Molti / server CIFS SMB (esp. Quelli nei sistemi di Network-Attached-Storage a basso costo embedded) hanno limitato o nessun sostegno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top