dónde poner los binarios para que siempre estén en camino y se puedan encontrar fácilmente

10

Estoy creando algunos binarios, scripts, etc. que quiero instalar fácilmente (usando mis propios rpms). Como quiero que sean accesibles para todos, mi intuición sería ponerlos en / usr / bin;

  • no es necesario cambiar la RUTA

sin embargo; mis ejecutables ahora desaparecen en un grupo de todos los demás; ¿Cómo puedo encontrar todos los ejecutables que puse allí de una manera fácil? Estaba pensando en:

  • un subdirectorio en / usr / bin (sé que no puedo hacer esto; solo para ilustrar mi pensamiento)
  • otro directorio (/ opt / myself / bin) y vincular cada ejecutable a / usr / bin (mucho trabajo)
  • otro directorio (/ opt / myself / bin) y vincular el directorio a / usr / bin (¿es esto posible?)

¿Cuál sería la "mejor y más compatible con Linux" para hacer esto?

EDITAR: tuvimos una discusión sobre esto en la empresa y se nos ocurrió esta opción subóptima: poner binarios en / usr / bin / company con un enlace simbólico desde / usr / bin. No estoy entusiasmado con esta solución (discusión en curso)

Chris Maes
fuente

Respuestas:

7

Si agrupa sus binarios en sus propios RPM, es trivial obtener una lista de lo que son y dónde se instalaron.

Ejemplo

$ rpm -ql httpd| head -10
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
/etc/httpd/conf.modules.d/00-base.conf

Sugeriría poner sus ejecutables en o /usr/bino /usr/local/biny rodar sus propios RPM. Es bastante trivial hacer esto y al administrar su implementación de software utilizando un RPM, podrá etiquetar un paquete con un número de versión, lo que facilitará aún más la administración de la configuración de su software a medida que lo implemente.

¿Determinando qué RPM son "míos"?

Puede construir sus RPM utilizando cierta información conocida que luego se podría acordar antes de hacer el edificio. A menudo construyo paquetes en sistemas que son propiedad de mi dominio, por lo que es trivial encontrar RPM simplemente buscando a través de todos los RPM que se construyeron en el host X.mydom.com.

Ejemplo

$ rpm -qi httpd
Name        : httpd
Version     : 2.4.7
Release     : 1.fc19
Architecture: x86_64
Install Date: Mon 17 Feb 2014 01:53:15 AM EST
Group       : System Environment/Daemons
Size        : 3865725
License     : ASL 2.0
Signature   : RSA/SHA256, Mon 27 Jan 2014 11:00:08 AM EST, Key ID 07477e65fb4b18e6
Source RPM  : httpd-2.4.7-1.fc19.src.rpm
Build Date  : Mon 27 Jan 2014 08:39:13 AM EST
Build Host  : buildvm-20.phx2.fedoraproject.org
Relocations : (not relocatable)
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

Esta sería la Build Hostlínea dentro de los RPM.

El uso de / usr / bin / company?

Probablemente desaliente el uso de una ubicación como esta. Principalmente porque requiere que todos sus sistemas tengan sus $PATHaumentados para incluirlo y no es estándar. Personalizar las cosas siempre ha sido un "derecho de paso" para todos los aspirantes a administrador de Unix, pero siempre lo desaconsejo a menos que sea absolutamente necesario.

El mayor problema con la personalización como esta es que se convierten en una carga tanto para mantener su entorno como para poner al día a las personas nuevas sobre cómo usar su entorno.

¿Puedo obtener una lista de archivos de RPM?

Sí, puede lograr esto, pero requerirá 2 llamadas a RPM. El primero creará una lista de paquetes que se crearon en el host X.mydom.com. Después de obtener esta lista, deberá volver a llamar a RPM para consultar los archivos que posee cada uno de estos paquetes. Puede lograr esto usando este único revestimiento:

$ rpm -ql $(rpm -qa --queryformat "%-30{NAME}%{BUILDHOST}\n" | \
    grep X.mydom.com | awk '{print $1}') | head -10
/etc/pam.d/run_init
/etc/sestatus.conf
/usr/bin/secon
/usr/bin/semodule_deps
/usr/bin/semodule_expand
/usr/bin/semodule_link
/usr/bin/semodule_package
/usr/bin/semodule_unpackage
/usr/sbin/fixfiles
/usr/sbin/genhomedircon
slm
fuente
y cómo obtener una lista de todos los binarios que instalaron todos los rpms que instalé? Afortunadamente acordamos poner el nombre de nuestra compañía en los nombres de rpm; así que algo como "rpm -qa | grep company" enumera mis rpms instalados
Chris Maes
@ChrisMaes - ver actualizaciones. Uso build host para determinar qué pkgs son "míos".
slm
gracias por la actualización; si pudieras agregar un comando para encontrar todos los binarios propiedad de mis rpms (que tienen "compañía" en su nombre) sería fantástico
Chris Maes
@ChrisMaes: vea la actualización, LMK si necesita más orientación.
slm
muy buena respuesta escrita; Completo y bien formateado. ¡Muchas gracias!
Chris Maes
4

Una sugerencia obvia es nombrar sus binarios o sus paquetes de una manera especial. Entonces, por ejemplo, podría agregarles un prefijo cm-, según sus iniciales como se indica en esta publicación. Si está instalando rpms, deben ingresar /usr/bin(si son ejecutables a nivel de usuario), según el FHS. No deberían entrar /usr/local/binpor ejemplo. Eso es solo para instalaciones locales.

Para el registro, no creo que la idea de poner binarios en un directorio especial y vincularlos sea atractiva, aunque supongo que a veces se hacen tales cosas. Tenga en cuenta también que si necesita averiguar qué binarios pertenecen a qué paquete, puede consultar el sistema de empaquetado.

Faheem Mitha
fuente
3

Los archivos binarios que no forman parte del sistema o distribución generalmente están en

/usr/local/bin

el directorio generalmente está en el estándar $PATHpara que se encuentren sus binarios.

Matteo
fuente
normalmente / usr / local / bin es para archivos binarios que existen solo "localmente" en esa máquina; no para binarios que distribuiré en otras máquinas usando un rpm ...?
Chris Maes
2
En Linux, /usr/local/bines para ejecutables instalados manualmente. Los ejecutables administrados por el administrador de paquetes entran /usr/bin.
Gilles 'SO- deja de ser malvado'
@Gilles, mi primera interpretación de la pregunta fue instalar en una sola máquina haciendo que los archivos binarios estén disponibles para todos los usuarios (no se instalan en $ HOME). Ahora veo que no era realmente lo que entendía.
Matteo