Qual è la differenza tra / etc e / usr / local / etc


24

Sto sviluppando un demone che deve archiviare molti dati dell'applicazione e ho notato che sul mio sistema (Fedora 15) c'è una /usr/local/etcdirectory.

Ho deciso di installare il mio demone /usr/local/bine ho bisogno di un posto per i miei file di configurazione.

Non l'ho visto su Wikipedia . Questo non è standard o è in effetti il ​​posto standard per i programmi installati /usr/local/binper archiviare i file di configurazione?

A ragione, voglio commercializzare questo a amministratori di sistema e sbagliare qualcosa del genere non è un grande punto di forza ...


2
Qualche motivo per non metterlo direttamente sotto /etc/myapp? Se stessi cercando di cambiare una configurazione, sarebbe il primo posto in cui starei.
nuovo123456,

@ new123456- Personalmente mi piace l'idea di mantenere i file di configurazione vicini al binario (es. /usr/local/bin-> /usr/local/etc), ma in questo caso le convenzioni vincono.
beatgammit,

Risposte:


24

/usr/localdi solito è per le applicazioni create dalla fonte. cioè installo la maggior parte dei miei pacchetti usando qualcosa del genere apt, ma se scarico una versione più recente di qualcosa o un software che non fa parte della mia distribuzione, lo costruirei dal sorgente e metterei tutto nella gerarchia `/ usr / local '.

Ciò consente la separazione dal resto della distribuzione.

Se si sta sviluppando un pezzo di software per gli altri, è necessario progettare in modo che esso può essere installato ovunque la gente vuole, ma dovrebbe di default per i regolari FHS specificate directory di sistema quando si specificano il prefisso di essere /usr( /etc, /usr/bin, etc.)

cioè /usr/localè per uso personale, non dovrebbe essere l'unico posto dove installare il software.

Avere una buona lettura dell'FHS e utilizzare gli strumenti Linux standard per consentire la generazione e l'installazione del proprio sorgente ovunque, in modo che i compilatori di pacchetti per le varie distribuzioni possano configurarli come richiesto per la loro distribuzione e gli utenti possano inserirla /usr/local se lo desiderano o le directory di sistema regolari se lo desiderano.


Sì, immagino che consentire la personalizzazione sia buono, ma mi chiedevo se /usr/local/etcè standard per i file di configurazione per quel tipo di programmi.
beatgammit,

/ usr / local / etc è qualcosa che potrei scegliere se ho creato il tuo demone dal sorgente, ma / etc è il posto che qualcuno sceglierebbe se impacchettasse il tuo demone con debian o Ubuntu.
EightBitTony il

4
In realtà gli standard GNU richiedono che il pacchetto sia predefinito sul percorso locale poiché le persone che lo costruiscono dal sorgente di solito non specificano dove. Le distribuzioni lo cambieranno nel percorso non locale quando lo comprenderanno / lo creeranno.
psusi,

@ psusi- Buon punto, mi assicurerò di renderlo predefinito. Forse rileverò quando il mio make install viene eseguito come utente root o normale. Se root, per impostazione predefinita sarò / usr / local, se utente, nella home directory degli utenti. Aggiungerò anche le impostazioni di configurazione.
beatgammit,

@ EightBitTony- Ci sono altre piattaforme con convenzioni diverse? Sto già realizzando diversi script di avvio per le diverse piattaforme (upstart, systemd, init).
beatgammit,

7

Una risposta molto breve

/ etc viene utilizzato dal sistema operativo in uso per i file di configurazione

/ usr / local / etc può essere utilizzato per i file di configurazione dall'utente e dal software installato in aggiunta


4

/usr/local/etcè usato raramente nel mondo Linux. Ma la decisione se i file di configurazione in negozio /etc, /usr/local/etco qualche altra posizione è normalmente fornita al momento della compilazione (e spesso può essere ignorato attraverso una linea di comando o un'opzione variabile d'ambiente). Non importa quale sia l'impostazione predefinita durante la compilazione, assicurati solo che sia facile da impostare (in genere un'opzione su --sysconfdir, seguendo autoconf). Se il tuo demone è impacchettato per una distribuzione, l'eseguibile andrà in /usr/sbin(l'impostazione predefinita quando si costruisce dal sorgente dovrebbe essere /usr/local/sbin) e la configurazione in /etc.

Si noti che /etcnon è il luogo per "molti dati dell'applicazione". Questo va dentro /var. L'impostazione predefinita quando si crea dalla fonte potrebbe essere /var/local/mydaemono /var/lib/mydaemon; ancora una volta non esiste una convenzione forte in entrambi i casi per l'impostazione predefinita quando si costruisce dalla fonte. Dovrebbe esserci un modo per modificare sia il valore predefinito di compilazione (in genere con configure --localstatedir) sia quello predefinito di runtime (con un'impostazione in un file di configurazione, possibilmente con un'opzione della riga di comando o una variabile di ambiente).


C'è un motivo per cui /usr/local/etcnon viene usato molto spesso? Mi piace l'idea di mantenere i file di configurazione allo stesso livello del file system del file binario.
beatgammit,

1
@tjameson Non so se c'è una ragione diffusa. BSD lo fa in questo modo. In qualità di amministratore, mi piace che tutti i file di configurazione (che deve essere eseguito il backup e il cambiamento-controllato, a differenza della roba in bine libe così via, che possono essere reinstallati) dal vivo nello stesso luogo.
Gilles 'SO- smetti di essere malvagio' il

1

Come utente Arch, eviterei / usr / local complessivamente e userò solo / etc per la configurazione. Durante l'installazione dal sorgente, preferirei scrivere un piccolo file PKGBUILD mentre ci sono, e possibilmente caricarlo nell'Arch User Repository (AUR), sia per gli altri che per me stesso su un altro computer in futuro. A giudicare dal numero di pacchetti in AUR e dalla velocità con cui vengono creati, non sono il solo a pensare in questo modo. Ciò aumenta le possibilità per tutti che un pacchetto sia disponibile invece di doverlo installare dal sorgente e di poter evitare posizioni obsolete come / usr / local.

Debian sembra anche apprezzare l'idea di costruire un pacchetto del sorgente invece di installare qualsiasi cosa in / usr / local, quindi utilità come checkinstall .

La creazione di un pacchetto della fonte che si desidera installare sarebbe un buon modo per tenere traccia di dove si trovano i file e assicurarsi che alcuni di essi non vengano sovrascritti in modo incoerente da un altro pacchetto o da un altro "make install". La disinstallazione con "make uninstall" non è una buona soluzione. Le informazioni su quale versione è installata sono un'altra cosa che i gestori di pacchetti moderni sono bravi a tenere traccia.

Vorrei solo rinunciare / usr / local completamente. Non è un buon posto per mettere nulla, non per l'installazione di pacchetti (le directory a livello di sistema sono più adatte) e non per gli utenti.

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.