Dove devo mettere la cache delle applicazioni per le app basate su Unix?


10

Sto creando un'applicazione da riga di comando e ho bisogno di salvare alcuni dati temporanei sui file. Non so dove sia la convenzione per le applicazioni di archiviare la loro cache su sistemi basati su unix (in questo caso Ubuntu 12.0.4)?

Risposte:


12

I "sistemi basati su Unix" sono una categoria troppo generica per effettuare qualsiasi tipo di determinazione generalmente applicabile che si applicherà a tutti i sistemi basati su Unix. Il problema è che la struttura del filesystem (e il posto "corretto" / "convenzionale" per mettere le cose) è così selvaggiamente diversa tra i diversi gusti di "Unix" (se puoi anche chiamarlo così) che devi praticamente gestirlo caso per caso.

Alcuni esempi:

  • Su Ubuntu, le librerie a 64 bit vanno in / usr / lib o / usr / lib / x86_64-linux / e le librerie a 32 bit vanno in / usr / lib32
  • Su Fedora, le librerie a 64 bit vanno in / usr / lib64 e le librerie a 32 bit vanno in / usr / lib
  • Fedora non ha più la nozione di / lib o / bin (sono solo collegamenti simbolici nelle directory equivalenti / usr)
  • La maggior parte delle distribuzioni Linux preferisce installare software installato dall'utente (ovvero software non fornito dal gestore pacchetti) in / usr / local / (con lib, bin, ecc, var e così via all'interno di / usr / local /)
  • Molte distribuzioni Linux usano / var / cache per cache, anche se se è "transitorio" (non importa se si perde), può essere memorizzato in / tmp
  • Alcune applicazioni di tipo "app in a folder" memorizzano tutto in una sottodirectory di / opt (specialmente installer clickwrap)
  • Alcune app si installano in una sottodirectory della directory ~ dell'utente (di solito / home / nome utente)
  • Su Solaris, ho visto / srv usato in modo simile a / opt, o talvolta / srv è il www-root

La risposta è che la convenzione canonica, socialmente accettabile e ben integrata per dove archiviare qualsiasi cosa su qualsiasi sistema operativo, che si tratti di una distribuzione di Linux, BSD, Solaris, HP-UX, ecc. Dipende dalle circostanze esatte . In particolare:

  • Come viene distribuito il pacchetto?
  • L'utente richiede l'accesso come root per installarlo?
  • Il pacchetto dipende o si integra direttamente con altri pacchetti già presenti nel sistema, ad esempio un plug-in o un componente aggiuntivo?
  • Il pacchetto verrà integrato nei repository upstream della distribuzione, in modo che gli utenti possano utilizzare un comando simile apt-geto yuminstallarlo direttamente senza scaricare un programma di installazione da un sito Web?
  • Il software avrà una configurazione separata per ciascun utente diverso che gestisce il computer?
  • Il software avrà impostazioni di configurazione globali che dovrebbero essere modificabili solo dall'amministratore (root)?
  • Il software deve integrarsi con il sistema init (ad es. Per l'avvio all'avvio)?

Non esiste una risposta diretta per questo senza considerare tutti i fattori. Tuttavia, per Ubuntu 12.04 in particolare , se stai costruendo il tuo pacchetto in un .debfile da distribuire in un PPA o per l'invio ai repository di pacchetti di Ubuntu ( maino universe), consiglierei di archiviare la cache /var/cache. Ma questo è solo per Ubuntu e non dovresti certamente applicare il presupposto che ogni sistema operativo basato su Unix o distro lo considererà accettabile.

Inoltre, se non ci sono vantaggi nel salvare i dati della cache negli boot del sistema, penso che potrebbe anche appartenere a / tmp.

Si noti che si verificheranno questi problemi relativi alla convenzione di percorso per ogni tipo di file utilizzato dal programma: dati condivisi, file eseguibili, librerie, file della guida, immagini, audio, pagine Web e così via. Quindi mi chiedo, se stai chiedendo dei file di cache, come stai pianificando di gestire gli altri tipi di file. Stai solo facendo ipotesi ingenue e speri che nessuno sia in disaccordo con te? Se non hai letto documenti o standard di Ubuntu che suggeriscano dove metterli, è una cattiva idea assumere solo una cosa o l'altra. Ad esempio, attaccare sempre le librerie in / usr / lib potrebbe essere un errore, poiché a seconda della situazione a cui potrebbero appartenere altrove.

Inoltre, come sviluppatore di software, penso che la cosa più responsabile da fare sia consentire all'utente finale di decidere dove inserire i propri file. Puoi impostare le impostazioni predefinite, ma gli utenti (e i distributori) possono e personalizzeranno la build per adattarla alla loro distribuzione.

Il modo più semplice per farlo è costruire il tuo programma usando GNU Autoconf . Autoconf è un sistema di build in cui l'utente può passare argomenti della riga di comando allo script di build per modificare i percorsi dei vari "tipi di directory" lontano dalle impostazioni predefinite. Quasi ogni distribuzione ha uno script di build per ogni pacchetto di Autoconf che imposta le directory convenzionali appropriate per ogni tipo. Hanno anche specificamente un tipo di directory per la cache: sharedstatedir .


Innanzitutto grazie mille per la tua risposta, davvero molto dettagliata. La natura dell'applicazione (ruby) è quella di memorizzare nella cache le chiamate API che servono contenuto statico. Questa è un'applicazione ruby, e da quello che ho letto nel tuo posto di risposta per la mia cache del disco sarebbe la /tmpcartella. Le risposte alle tue domande sarebbero (download, no, no, no, no, no, no). Probabilmente sembra normale per la maggior parte delle persone concludere che sia, /tmpma sono nuovo sui sistemi unix e le convenzioni basate su Ubuntu OS non mi sono familiari. Questo apre un'idea interessante per gem per consentire la memorizzazione nella cache del disco agnostico (agnostico dell'utente). Grazie, +1 da parte mia.
Dolphin,

Si noti che il sistema ruby ​​gem installato sulla maggior parte delle distribuzioni Linux ha una directory molto specifica in cui le gemme sono installate dallo gemstrumento. Tuttavia, probabilmente non sarebbe appropriato creare file in fase di esecuzione all'interno della stessa directory in cui l'applicazione viene scaricata dalla gemma. D'altra parte, se stai eseguendo l'app come utente, hai bisogno di una directory che sia in lettura e scrittura per gli utenti e ciò significhi cambiare le autorizzazioni (che richiede un lavoro di integrazione del sistema ancora maggiore al momento dell'installazione come la creazione di un gruppo ecc.) o utilizzando una directory globale di lettura / scrittura, ad esempio / tmp.
allquixotic,

Non si può, e non deve scrivere dati /usr, /libo /bindalla vostra applicazione.
ctrl-alt-delor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.