Onde um aplicativo deve ser instalado se consistir em vários arquivos?

2

Tenho notado que essencialmente todos os arquivos em /usr/bin são executáveis independentes, em vez de um diretório contendo o executável mais outros arquivos que o executável possa precisar (como arquivos de configuração, arquivos de dados, etc.)

Se eu desenvolver um aplicativo que consista em vários arquivos, onde ele deve ser salvo? Meu primeiro instinto foi salvar o diretório do aplicativo em /opt e criar um link para o executável em /usr/bin . No entanto, o Google Chrome é o único aplicativo no meu computador que faz isso, fazendo-me pensar que há uma abordagem mais padrão.

    
por Alessandro Power 31.12.2015 / 20:39

2 respostas

2

Existem duas maneiras principais de organizar arquivos a partir do software instalado: por pacote ou por tipo.

Sistemas Unix tendem a organizar arquivos de programas por tipo: executáveis em /usr/bin , executáveis que são úteis apenas para o administrador do sistema em /usr/sbin , bibliotecas de código e outros arquivos dependentes da arquitetura do processador em /usr/lib , arquivos de dados que não dependem do tipo de processador em /usr/share , páginas de manual em /usr/man , documentação diversa /usr/doc , etc. (Esta não é uma lista exaustiva e existem muitas variações). Eu usei o prefixo /usr , mas há, na verdade, três desses fanouts: em / para programas que são necessários no momento da inicialização (às vezes isso é mesclado com /usr , pois a distinção nem sempre é relevante), em /usr para programas que vêm com sistema operacional e em /usr/local para programas instalados manualmente pelo administrador do sistema.

Na maioria dos sistemas Linux, a distinção entre /usr e /usr/local é que /usr (e / ) é gerenciado pelo gerenciador de pacotes e /usr/local não é. Portanto, se seu aplicativo for instalado usando a estrutura por tipo, ele deverá ficar abaixo de /usr quando distribuído como um pacote (rpm, deb,…) e sob /usr/local quando não distribuído como um pacote (por exemplo, se for distribuído como arquivo para ser descompactado manualmente).

Os arquivos de configuração normalmente são todos em /etc , porque devem ser modificados pelo administrador do sistema. Se possível, faça com que seu aplicativo leia dados de configuração de /etc e /usr/etc ou /usr/local/etc conforme apropriado, com as configurações em /etc/ substituindo as de /usr/etc ou /usr/local/etc . É comum agrupar dados de configuração com outros dados em /usr/share ou /usr/local/share , portanto, você descobrirá que muitos sistemas não têm /usr/etc ou /usr/local/etc .

O lado positivo da organização por tipo é que os arquivos são colocados onde serão usados. Todos os executáveis estão nos diretórios no caminho de procura executável ( $PATH ), todas as bibliotecas estão no caminho de pesquisa da biblioteca, todas as páginas de manual estão no caminho de pesquisa da página do manual etc. A única limitação dessa organização é que ela requer gerenciador de pacotes para acompanhar quais arquivos são instalados por cada pacote. Como a maioria dos softwares no Linux é distribuída através de um gerenciador de pacotes, a maioria dos softwares acaba em /usr .

Outra maneira de organizar arquivos é por pacote, e o lugar padrão para isso é /opt . Normalmente, ele é organizado como /opt/APPLICATION/bin , /opt/APPLICATION/lib , etc., às vezes com um nível adicional /opt/AUTHOR/APPLICATION/bin etc. No entanto, os aplicativos são livres para gerenciar o diretório que quiserem; alguns colocam arquivos diversos diretamente em /opt/APPLICATION . Isso torna o gerenciamento de pacotes trivial (apenas descompacte no lugar certo, use ls para listar o software instalado, use rm -r para desinstalar), mas dificulta o uso do software: o administrador ou o usuário precisa adicionar os locais apropriados caminhos de pesquisa ou para usar caminhos completos ou para criar links simbólicos.

Os arquivos em /opt geralmente são gerenciados manualmente (esse é o ponto principal dessa organização), mas é possível ter pacotes lá gerenciados por um gerenciador de pacotes. Por exemplo, os pacotes deb do Chrome colocam-no em /opt . Uma vantagem de fazer isso é que o Chrome está sempre em /opt/google/chrome , independentemente de como ele foi instalado; possivelmente isso torna o suporte de distribuição cruzada um pouco mais fácil.

Se você quiser os detalhes de como os aplicativos e distribuições devem organizar arquivos no Linux, leia a FHS .

Em poucas palavras:

  • Ao criar um pacote (deb, rpm,…), instale em /usr , com a opção de diretórios da distribuição (por exemplo, /usr/man vs /usr/share/man , /usr/lib vs /usr/libexec , /usr/lib vs /usr/lib64 , etc.).
  • Ao instalar diretamente (por exemplo, make install ), o padrão é instalar em /usr/local (com os subdiretórios padrão: executáveis em /usr/local/bin , arquivos de dados em /usr/local/share/APPLICATION , etc.) e suporta outras opções que o administrador do sistema pode fazer. Note que o diretório onde os arquivos serão copiados durante a instalação pode não ser o mesmo diretório onde os arquivos serão usados, por exemplo, devido ao uso de stow (consulte Acompanhamento de programas ).

/opt também é uma possibilidade em ambos os casos, mas você está sobrecarregando o administrador do sistema.

    
por 31.12.2015 / 23:11
1

Se você está fazendo um pacote, isso depende um pouco da distro que você está segmentando. Você pode seguir o Padrão de hierarquia do sistema de arquivos . O Debian segue o FHS, com algumas exceções . Essencialmente:

  • /etc : configuração do sistema específica do host
  • /usr/bin : a maioria dos comandos de usuário
  • /usr/lib : bibliotecas para programação e pacotes
  • /usr/share : dados independentes de arquitetura

Nos sistemas baseados em Debian para pacotes que suportam múltiplas arquiteturas, os dados independentes de arquitetura são freqüentemente divididos em um pacote separado.

Veja, por exemplo, como apache2 , apache2-bin , apache2-data e apache2-doc no Ubuntu são organizados.

    
por 31.12.2015 / 22:26