![Por que os programas personalizados são sempre instalados em /opt, /srv, /usr/local, etc. e não na pasta ~/ (home)?](https://rvso.com/image/38709/Por%20que%20os%20programas%20personalizados%20s%C3%A3o%20sempre%20instalados%20em%20%2Fopt%2C%20%2Fsrv%2C%20%2Fusr%2Flocal%2C%20etc.%20e%20n%C3%A3o%20na%20pasta%20~%2F%20(home)%3F.png)
O repositório LTS é muito bom, mas por algum motivo prefiro o método "construir a partir do código-fonte" para alguns programas. Um dos motivos é que obtenho a versão preferida (o PHP no LTS está na 5.3, enquanto posso compilar a 5.4 a partir do código-fonte). Semelhante é o caso de nginx
, node.js
, etc.
Agora eu gostaria de saber por que todos os tutoriais insistem em instalar os programas nas pastas "de propriedade do root", como /opt
, /srv
, ou /usr/local
. Acho muito mais fácil instalá-lo na minha pasta pessoal, como:
/home/prahlad/programas/PHP-5.4
Uma vantagem é que não preciso usar sudo
para instalar esses programas. A segunda e uma vantagem relacionada ésegurançapreocupação. E se (suponhamos) que alguma dessas fontes contenha malware (embora menos provável no Linux)? Negar-lhes o privilégio de root não é uma boa coisa a fazer?
Gostaria de saber um exemplo em que é necessário que um programa seja instalado em uma pasta de propriedade do root?
Responder1
Os guias dizem para você instalar em /usr/local/
ou /opt
etc para que outros possam usá-los.
Se você instalar em seu diretório inicial, somente você terá acesso a eles. Se você está apenas compilando para si mesmo, tudo bem.
Responder2
Esta não é uma regra rígida e rápida, mas o padrão /opt
é geralmente independente e pode exigir que você copie ou vincule executáveis em um caminho executável ou adicione uma pasta interna ao arquivo $PATH
. Isso é simples o suficiente para descobrir se você prefere colocá-lo em outro lugar e usar um arquivo $HOME/bin
.
O material criado pela fonte cujo padrão é /usr/local
, no entanto, também pode instalar bibliotecas compartilhadas e páginas de manual. Se você quiser colocá-la em outro lugar, normalmente você primeiro exporta a PREFIX
variável (ou a fornece na linha de comando com make
); ./configure --help
pode confirmar e explicar isso.
Nesse caso, você precisa de um pouco de hierarquia de diretórios no caminho que deseja usar. Deveria ser assim:
bin/
lib/
include/
share/
man/
man1/
Existem outros manX
diretórios que você pode criar (dê uma olhada /usr/share/man
em um modelo), embora os instaladorespoderiacrie-os se eles não existirem. Você desejará o seguinte, por exemplo ~/.profile
:
export PATH=~/bin:$PATH
export LD_LIBRARY_PATH=~/lib:$LD_LIBRARY_PATH
export MANPATH=~/share/man:$MANPATH
Se o pacote usar bibliotecas compartilhadas, isso LD_LIBRARY_PATH
será crucial ou os executáveis não poderão ser vinculados a elas. MANPATH
pode não funcionar em todos os sistemas e, de qualquer forma, não é estritamente necessário - se man foobar
falhar, você provavelmente saberá onde procurá-lo.