¿Por qué los programas personalizados siempre se instalan en /opt, /srv, /usr/local, etc. y no en la carpeta ~/ (inicio)?

¿Por qué los programas personalizados siempre se instalan en /opt, /srv, /usr/local, etc. y no en la carpeta ~/ (inicio)?

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, /srvo /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 sudopara 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 /optsuelen 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 PREFIXvariable (o la proporciona en la línea de comando make); ./configure --helppuede 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 manXdirectorios que puede crear (eche un vistazo /usr/share/mana 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_PATHes crucial o los ejecutables no podrán vincularse a ellas. MANPATHEs posible que no funcione en todos los sistemas y, de todos modos, no es estrictamente necesario; si man foobarfalla, probablemente sabrá dónde buscarlo.

información relacionada