Padrão de hierarquia do sistema de arquivos
A distro recebe /usr
, você recebe /usr/local
, os ISVs recebem /opt
.
Onde é o melhor caminho para instalar todos os arquivos do pacote ao compilar?
Por exemplo - eu quero instalar o ProFTPd, então há uma opção
--prefix=/usr/local/proftpd
, o que significa que todos os arquivos após a compilação (incluindo arquivos binários e de configuração) serão armazenados aqui. Como você sabe, todos os pacotes, que são instalados via sistema de pacotes (como zypper no SuSE ou apt no Ubuntu) geralmente armazenam seus arquivos de configuração em / etc / e arquivos binários em / sbin / e também armazenam um link no meu $ PATH, então eu posso rodar apenas digitando proftpd (sem / sbin).
A enorme vantagem dos pacotes instalados via sistema de pacotes, eu acho, é o processo de desinstalação fácil. Eu gostaria de poder desinstalar pacotes compilados também fácil.
Acho que posso criar alguns arquivos de lote, que poderei usar assim:
uninstall --package=proftpd
E meu script encontrará todos os arquivos proftpd em caminhos usuais (/ etc, / sbin) e os removerá usando rm.
Existe alguma prática recomendada, onde armazenar todos esses arquivos, ou existem (des) vantagens do meu primeiro exemplo (--prefix = / usr / local / proftpd)?
Eu realmente não acho que seja legal ter 2 caminhos com arquivos de configuração e arquivos binários, mas talvez eu esteja interpretando mal os princípios básicos do Linux ...: -)
Padrão de hierarquia do sistema de arquivos
A distro recebe /usr
, você recebe /usr/local
, os ISVs recebem /opt
.
Os melhores locais para instalar pacotes na sua máquina são /usr/local
se você tiver direitos de administrador e quiser que todos usem seu programa, ou $HOME
se você quiser apenas fazer uma cópia para si mesmo.
Normalmente, você define o prefixo como --prefix=/usr/local
para que os arquivos do aplicativo sejam armazenados em /usr/local/bin
configurações em /usr/local/etc
e assim por diante.
A vantagem de usar esses locais padrão é ... bem, basicamente, que eles são padrão. As pessoas sabem onde procurar os arquivos. Por exemplo, /usr/local/bin
está quase sempre em todo mundo $PATH
, então você não precisará mexer na variável $PATH
para fazer com que as pessoas o executem. Da mesma forma, as bibliotecas são encontradas verificando $LD_LIBRARY_PATH
, mas /usr/local/lib
geralmente é marcado por padrão, portanto, você não precisa adicioná-lo manualmente e assim por diante.
Sobre a desinstalação: Depois de executar e configurar o programa, make install
irá instalá-lo para você e make uninstall
removerá os arquivos automaticamente.
Na verdade, a melhor abordagem é provavelmente criar um pacote que você possa instalar.
Muitos aplicativos vêm com os arquivos necessários para criar pacotes RPM ou DEB. Se não o fizerem, existem ferramentas para criar pacotes automaticamente, por exemplo, checkinstall .
checkinstall
monitorará as operações de make install
e redirecionará os arquivos instalados para criar um pacote DEB ou RPM a partir deles. Dessa forma, você obtém um pacote regular integrado aos seus outros pacotes.
Existem algumas ressalvas (você não obterá dependências e alguns scripts de instalação muito complicados poderão falhar), mas normalmente funciona muito bem.
A melhor prática é seguir a Base Padrão do Linux , especialmente as padrão de hierarquia do sistema de arquivos .