Nuestro administrador del sistema instaló una aplicación de software (Maven) en el servidor y les dijo a todos que agregaran la /usr/local/maven/bin/
carpeta a su ruta.
Creo que podría ser más conveniente simplemente vincular los pocos programas en esa carpeta desde la /bin
carpeta (u otra carpeta que todos tengan en su camino) de esta manera:
ln -s /usr/local/maven/bin/* /bin
¿Es esto correcto? ¿Hay algunos efectos secundarios ocultos en mi sugerencia?
symlink
path
directory-structure
Erel Segal-Halevi
fuente
fuente
/opt
.Respuestas:
En la vinculación
Por lo general, no se vinculan
/usr/local/*
con/bin
, pero esto es más bien una práctica histórica. En general, hay algunas razones "técnicas" por las que no puede hacer lo que sugiere.Hacer enlaces a ejecutables en
/bin
puede causar problemas:Probablemente la mayor advertencia sería si su sistema tiene paquetes administrados por algún tipo de administrador de paquetes como RPM, dpkg, APT, YUM, pacman, pkg_add, etc. En estos casos, generalmente querrá dejar el paquete gerente de hacer su trabajo y administrar directorios, tales como
/sbin
,/bin
,/lib
, y/usr
. Una excepción sería, por/usr/local
lo general, un lugar seguro para hacer lo que mejor le parezca en la caja, sin tener que preocuparse de que un administrador de paquetes interfiera con sus archivos.Muchas veces los ejecutables creados para
/usr/local
tendrán esta RUTA codificada en sus ejecutables. También puede haber archivos de configuración que se incluyen/usr/local
como parte de la instalación de estas aplicaciones. Por lo tanto, vincular solo el ejecutable podría causar problemas con estas aplicaciones para encontrar los.cfg
archivos más tarde. Aquí hay un ejemplo de tal caso:El mismo problema que se aplica a la búsqueda de
.cfg
archivos también puede ocurrir con ejecutables "auxiliares" que la aplicación principal necesita para ejecutarse. También sería necesario vincularlos/usr/bin
, sabiendo que esto podría ser problemático y solo aparecería cuando realmente intentara ejecutar la aplicación vinculada.NOTA: en general, es mejor evitar la tentación de vincular aplicaciones únicas
/usr/bin
./etc/profile.d
En lugar de que todos los usuarios proporcionen esta administración, el administrador podría agregar esto fácilmente a todos
$PATH
en el cuadro agregando un archivo correspondiente en el/etc/profile.d
directorio.Un archivo como este
/etc/profile.d/maven.sh
:Por lo general, haces esto como administrador en lugar de contaminar todas las configuraciones de los usuarios con esto.
Usando alternativas
La mayoría de las distribuciones ahora proporcionan otra herramienta llamada
alternatives
(Fedora / CentOS) oupdate-alternatives
(Debian / Ubuntu) que también puede usar para acceder a las$PATH
herramientas que podrían estar fuera del/bin
. Es preferible utilizar herramientas como estas, ya que se adhieren más a lo que la mayoría de los administradores considerarían "práctica estándar" y, por lo tanto, hace que los sistemas sean más fáciles de transferir de un administrador a otro.Esta herramienta hace algo similar al crear enlaces
/bin
; pero gestiona la creación y destrucción de estos enlaces, por lo que es más fácil comprender la configuración prevista de un sistema cuando se realiza a través de una herramienta en lugar de hacerlo directamente como sugiere.Aquí estoy usando ese sistema para administrar Java de Oracle en una caja:
Puedes ver los efectos de esto:
Mi $ 0.02
Hacer enlaces
/bin
, aunque sea plausible, probablemente sería muy desalentado por la mayoría de los administradores de sistemas:fuente
/bin
directorio. Aquí hay un ejemplo. En las distribuciones de Red Hat que utilizan RPM si un archivo ya existe en/bin
RPM no se instalará como se ha descrito, a menos que sea necesario hacerlo mediante el--replacefiles
interruptor. Entonces esa no es realmente una razón técnica. Lo mismo con otros directorios. Entiendo lo que estás diciendo sobre el "propietario" del sistema operativo,/bin
pero no es tan claro como estás diciendo.Respondiendo a las preguntas formuladas:
No , es una mala práctica.
Sí, hay varios efectos secundarios. Su sugerencia podría funcionar o no dependiendo de la aplicación, y podría retroceder o romperse a largo plazo.
Hay razones razonables para no crear un enlace tan simbólico:
Los administradores no "poseen"
/bin
(ver nota 1) ya que este directorio pertenece a los desarrolladores del sistema operativo / distribución. Por otro lado,/usr/local
es una ubicación tradicional para el software creado por el administrador local, que/opt/<packagename>
es una para el software desagregado. Si crea un archivo o un enlace/bin
, existe el riesgo de que se sobrescriba mediante la instalación de un paquete, en su caso, unmaven
paquete hipotético proporcionado por el sistema operativo, lo que podría provocar una regresión si el creado localmente se crea a partir de una versión más reciente código fuente que la versión del sistema operativo. Por ejemplo, los tarballs SVR4pkgadd
, debiandpkg
, red-hatrpm
y slackware sobrescribirán ciegamente su enlace simbólico.Algunas aplicaciones miran al lugar donde se les llama para recuperar archivos de configuración, complementos y recursos similares. Si llama a la aplicación por un enlace simbólico, es posible que su código no pueda seguirla y luego busque estos archivos de recursos
/usr/bin
donde no están.Puede haber otros archivos binariosSe eliminó porque ya tiene eso en cuenta con su comando al vincular todos los comandos potenciales./usr/local/maven/bin
y no agregar este directorio a su RUTA hará que no estén disponibles.La página de maven2 le dice que agregue este directorio a su RUTA (precisamente: Agregue la variable de entorno M2 a su ruta, por ejemplo, exportar RUTA = $ M2: $ RUTA ), al usar un enfoque diferente, está rompiendo ese paso, por lo que no se admite. camino. Por supuesto, si la mayoría de los usuarios de un sistema son
maven
usuarios potenciales , tendría más sentido configurarloPATH
globalmente que en todos y cada uno.profile
.Nota 1:
Documentación de Slackware:
Estándar de jerarquía de Debian / sistema de archivos
Documentación de Solaris:
La prueba simple que muestra Debian
dpkg
no conserva un enlace existente, incluso cuando la--force-overwrite
opción no se utiliza:fuente
/bin
o/usr/bin
. Al descubrir los problemas de los binarios del sistema ocultos o destruidos (el más famoso fuetest
), se adoptó progresivamente la mejor práctica para instalar binarios que no son del sistema en otro lugar.Si desea un enlace simbólico, sería mejor hacerlo
/usr/local/bin
. En mi servidor, solía instalar software local/opt/NAME
y vincular los archivos binarios a/usr/local/bin
.fuente
Una alternativa a los dos métodos sugeridos es crear un script de shell en el
/usr/local/bin
que, cuando se ejecute, ejecute cualquier binario que especifique en el script. Por ejemplo, usando maven como ejemplo, crearía un script de shell en/usr/local/bin
llamadomaven
que tiene un pequeño script dentro para ejecutar el binario de maven donde está ubicado y pasarle cualquier argumento:Esto tiene la desventaja de tener que hacer esto para cada binario que desea "vincular", pero le permite llamar a esos binarios desde la línea de comandos sin necesidad de acumular su
$PATH
variable de entorno.fuente