![¿Por qué los programas personalizados siempre se instalan en /opt, /srv, /usr/local, etc. y no en la carpeta ~/ (inicio)?](https://rvso.com/image/38709/%C2%BFPor%20qu%C3%A9%20los%20programas%20personalizados%20siempre%20se%20instalan%20en%20%2Fopt%2C%20%2Fsrv%2C%20%2Fusr%2Flocal%2C%20etc.%20y%20no%20en%20la%20carpeta%20~%2F%20(inicio)%3F.png)
El repositorio LTS es bastante bueno, pero por alguna razón prefiero el método "compilar desde el código fuente" para algunos programas. Una razón es que obtengo la versión preferida (PHP en LTS está en 5.3, mientras que puedo compilar 5.4 desde el código fuente). Similar es el caso de nginx
, node.js
, etc.
Ahora me gustaría saber por qué todos los tutoriales insisten en instalar los programas en las carpetas "propiedad de la raíz", como /opt
, /srv
o /usr/local
. Me resulta mucho más fácil instalarlo en mi carpeta de inicio, como por ejemplo:
/home/prahlad/programas/PHP-5.4
Una ventaja es que no necesito usarlos sudo
para instalar estos programas. La segunda ventaja y relacionada esseguridadinquietud. ¿Qué pasa si (supongamos) que alguna de estas fuentes contiene malware (aunque es menos probable en Linux)? ¿No es bueno negarles el privilegio de root?
Me gustaría saber un ejemplo en el que es necesario que un programa se instale en una carpeta de propiedad raíz.
Respuesta1
Las guías le indican que las instale en /usr/local/
o /opt
, etc. para que otros puedan utilizarlas.
Si lo instala en su directorio de inicio, solo usted tendrá acceso a ellos. Si sólo estás compilando para ti mismo, entonces esto está bien.
Respuesta2
Esta no es una regla estricta, pero las cosas predeterminadas /opt
suelen ser independientes y pueden requerir que copie o vincule simbólicamente los ejecutables en una ruta ejecutable, o que agregue una carpeta interna a $PATH
. Es bastante sencillo saber si prefieres colocarlo en otro lugar y utilizar un archivo $HOME/bin
.
Sin embargo, el material creado en código fuente que por defecto es /usr/local
, también puede ser la instalación de bibliotecas compartidas y páginas de manual. Si desea colocarlo en otro lugar, generalmente primero exporta la PREFIX
variable (o la proporciona en la línea de comando make
); ./configure --help
puede confirmar y explicar esto.
En ese caso, necesita un poco de jerarquía de directorios en la ruta que desea utilizar. Debería verse así:
bin/
lib/
include/
share/
man/
man1/
Hay más manX
directorios que puede crear (eche un vistazo /usr/share/man
a un modelo), aunque los instaladorespuedecrearlos si no existen. Entonces querrás lo siguiente, por ejemplo ~/.profile
:
export PATH=~/bin:$PATH
export LD_LIBRARY_PATH=~/lib:$LD_LIBRARY_PATH
export MANPATH=~/share/man:$MANPATH
Si el paquete utiliza bibliotecas compartidas, LD_LIBRARY_PATH
es crucial o los ejecutables no podrán vincularse a ellas. MANPATH
Es posible que no funcione en todos los sistemas y, de todos modos, no es estrictamente necesario; si man foobar
falla, probablemente sabrá dónde buscarlo.