Qual é a diferença entre / etc e / usr / local / etc

24

Estou desenvolvendo um daemon que precisa armazenar muitos dados de aplicativos e notei que no meu sistema (Fedora 15), há um /usr/local/etcdiretório.

Decidi instalar o meu daemon /usr/local/bine preciso de um local para meus arquivos de configuração.

Eu não vi isso na Wikipedia . Isso não é padrão ou é de fato o local padrão dos programas instalados /usr/local/binpara armazenar arquivos de configuração?

Por uma razão, eu quero comercializar isso para sys-admins, e obter algo assim errado não é um ótimo ponto de venda ...

beatgammit
fonte
2
Alguma razão para não colocá-lo diretamente abaixo /etc/myapp? Se eu estivesse procurando alterar uma configuração, seria o primeiro lugar em que eu procuraria.
233116
@ new123456- Pessoalmente, gosto da idéia de manter os arquivos de configuração próximos do binário (por exemplo, /usr/local/bin-> /usr/local/etc), mas as convenções vencem nesse caso.
beatgammit

Respostas:

24

/usr/localgeralmente é para aplicativos criados a partir da fonte. ou seja, eu instalo a maioria dos meus pacotes usando algo parecido apt, mas se eu fizer o download de uma versão mais recente de algo ou de um software que não faça parte da minha distribuição, eu o compilaria da fonte e colocaria tudo na hierarquia `/ usr / local '.

Isso permite a separação do restante da distribuição.

Se você está desenvolvendo um software para os outros, você deve projetá-lo para que ele possa ser instalado em qualquer lugar as pessoas querem, mas deve padrão para os regulares FHS especificadas diretórios do sistema quando especificar o prefixo para ser /usr( /etc, /usr/bin, etc.)

ou seja, /usr/localé para seu uso pessoal, não deve ser o único local para instalar o seu software.

Leia bem o FHS e use as ferramentas padrão do Linux para permitir que sua fonte seja criada e instalada em qualquer lugar, para que os construtores de pacotes para as várias distribuições possam configurá-los conforme necessário para sua distribuição, e os usuários possam inseri-los /usr/local se desejarem. ou os diretórios regulares do sistema, se assim o desejarem.

EightBitTony
fonte
Sim, acho que permitir a personalização é bom, mas eu queria saber se /usr/local/etcé padrão para arquivos de configuração para esses tipos de programas.
beatgammit
/ usr / local / etc é algo que eu poderia escolher se construísse seu daemon a partir do código-fonte, mas / etc é o lugar que alguém escolheria se empacotasse seu daemon com o debian ou Ubuntu.
08
4
Na verdade, os padrões GNU exigem que o pacote seja padronizado no caminho local, pois as pessoas que o constroem a partir da fonte geralmente não especificam onde. As distribuições o mudarão para o caminho não local quando o empacotarem / construirem.
Psusi
@ psusi- Bom ponto, vou me certificar de que seja o padrão. Talvez eu detecte quando meu make install é executado como usuário root ou regular. Se root, o padrão será / usr / local, se usuário, para o diretório inicial do usuário. Também adicionarei definições de configuração.
beatgammit
@ EightBitTony- Existem outras plataformas com convenções diferentes? Já estou criando scripts de inicialização diferentes para as diferentes plataformas (upstart, systemd, init).
beatgammit
7

Uma resposta muito curta

/ etc é usado pelo seu sistema operacional para seus arquivos de configuração

/ usr / local / etc pode ser usado por seus arquivos de configuração por você e seu software instalado adicionalmente

AndyM
fonte
4

/usr/local/etcraramente é usado no mundo Linux. Mas a decisão de arquivos de configuração do armazenamento em /etc, /usr/local/etcou algum outro local é geralmente feito em tempo de compilação (e muitas vezes pode ser substituído através de uma opção de linha de comando ou variável de ambiente). Realmente não importa qual é o padrão ao compilar, apenas certifique-se de que seja fácil de configurar (normalmente uma opção para --sysconfdir, após o autoconf). Se o seu daemon estiver empacotado para uma distribuição, o executável entrará /usr/sbin(o padrão ao criar a partir da fonte /usr/local/sbin) e a configuração em /etc.

Observe que /etceste não é o lugar para "muitos dados de aplicativos". Isso entra /var. O padrão ao construir a partir da origem pode ser /var/local/mydaemonou /var/lib/mydaemon; Novamente, não existe uma convenção forte para o padrão ao criar a partir do código-fonte. Deve haver uma maneira de alterar o padrão em tempo de compilação (normalmente com configure --localstatedir) e o padrão em tempo de execução (com uma configuração em um arquivo de configuração, possivelmente com uma opção de linha de comando ou variável de ambiente).

Gilles 'SO- parar de ser mau'
fonte
Existe uma razão pela qual /usr/local/etcnão é usado com muita frequência? Eu gosto da idéia de manter os arquivos de configuração no mesmo nível do sistema de arquivos que o binário.
beatgammit
11
@tjameson Eu não sei se há uma razão generalizada. O BSD faz assim. Como administrador, eu gosto que todos os arquivos de configuração (que deve ser feito backup e controlado de mudança, ao contrário as coisas em bine libe assim por diante, que pode ser reinstalado) ao vivo no mesmo lugar.
Gilles 'SO- stop be evil'
1

Como usuário do Arch, eu evitaria / usr / local em conjunto e usaria apenas / etc para configuração. Ao instalar a partir do código-fonte, prefiro escrever um pequeno arquivo PKGBUILD enquanto estou nele e possivelmente enviá-lo para o Arch User Repository (AUR), para outros e para mim em outro computador no futuro. A julgar pelo número de pacotes no AUR e pela velocidade com que eles são criados, não estou sozinho pensando dessa maneira. Isso aumenta as chances de que um pacote esteja disponível para todos, em vez de precisar instalá-lo a partir da fonte, além de poder evitar locais obsoletos como / usr / local.

O Debian também parece gostar da idéia de construir um pacote da fonte em vez de instalar qualquer coisa no / usr / local, portanto utilitários como o checkinstall .

Criar um pacote da fonte que você deseja instalar seria uma boa maneira de acompanhar onde estão os arquivos e garantir que alguns deles não sejam substituídos inconsistentemente por outro pacote ou por outro "make install". Desinstalar com "make uninstall" não é uma boa solução. Informações sobre qual versão está instalada é outra coisa que os gerenciadores de pacotes modernos são bons em acompanhar.

Eu abandonaria completamente / usr / local completamente. Não é um bom lugar para colocar nada, não para instalar pacotes (os diretórios do sistema são mais adequados) e não para os usuários.

Alexander
fonte