où placer les fichiers binaires afin qu'ils soient toujours sur le chemin et puissent être trouvés facilement


10

Je fais pas mal de binaires, de scripts, etc. que je veux installer facilement (en utilisant mes propres rpms). Comme je veux qu'ils soient accessibles à tous, mon intuition serait de les mettre dans / usr / bin;

  • pas besoin de changer de CHEMIN

pourtant; mes exécutables disparaissent maintenant dans un pool de tous les autres; comment puis-je retrouver facilement tous les exécutables que j'y ai mis. Je pensais à:

  • un sous-répertoire dans / usr / bin (je sais que je ne peux pas faire cela; juste pour illustrer ma pensée)
  • un autre répertoire (/ opt / moi-même / bin) et reliant chaque exécutable à / usr / bin (beaucoup de travail)
  • un autre répertoire (/ opt / moi-même / bin) et la liaison du répertoire à / usr / bin (est-ce possible?)

quelle serait la "meilleure façon, la plus conforme à Linux" de faire cela?

EDIT: nous avons eu une discussion à ce sujet dans l'entreprise et avons proposé cette option sous-optimale: mettre les binaires dans / usr / bin / company avec un lien symbolique depuis / usr / bin. Je ne suis pas ravi de cette solution (discussion en cours)

Réponses:


7

Si vous regroupez vos binaires dans vos propres RPM, il est trivial d'obtenir une liste de ce qu'ils sont et où ils ont été installés.

Exemple

$ 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

Je suggérerais de mettre vos exécutables dans ou /usr/binou de /usr/local/binrouler votre propre RPM. C'est assez trivial de le faire et en gérant votre déploiement de logiciels à l'aide d'un RPM, vous pourrez étiqueter un ensemble avec un numéro de version, ce qui facilitera davantage la gestion de la configuration de votre logiciel lorsque vous le déploierez.

Déterminer quels RPM sont "à moi"?

Vous pouvez créer vos RPM en utilisant des informations connues qui pourraient ensuite être convenues avant de faire le bâtiment. Je construis souvent des packages sur des systèmes appartenant à mon domaine, il est donc trivial de trouver des RPM en recherchant simplement tous les RPM construits sur l'hôte X.mydom.com.

Exemple

$ 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.

Ce serait la Build Hostligne dans les RPM.

L'utilisation de / usr / bin / company?

Je découragerais probablement l'utilisation d'un tel emplacement. Principalement parce qu'il nécessite que tous vos systèmes soient $PATHaugmentés pour l'inclure et n'est pas standard. La personnalisation des choses a toujours été un "droit de passage" pour chaque administrateur Unix de wannabee, mais je le décourage toujours, sauf si cela est absolument nécessaire.

Le plus gros problème avec les personnalisations comme celle-ci est qu'elles deviennent un fardeau à la fois pour la maintenance de votre environnement et pour informer de nouvelles personnes sur la façon d'utiliser votre environnement.

Puis-je simplement obtenir une liste de fichiers de RPM?

Oui, vous pouvez y parvenir, mais cela nécessitera 2 appels vers RPM. Le premier va construire une liste de packages qui ont été construits sur l'hôte X.mydom.com. Après avoir obtenu cette liste, vous devrez rappeler la requête RPM pour les fichiers appartenant à chacun de ces packages. Vous pouvez y parvenir en utilisant cette doublure:

$ 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

et comment obtenir une liste de tous les binaires installés par tous les rpms que j'ai installés? Heureusement, nous avons accepté de mettre le nom de notre entreprise dans les noms de tours; donc quelque chose comme "rpm -qa | grep company" répertorie mes rpms installés
Chris Maes

@ChrisMaes - voir les mises à jour. J'utilise build host pour déterminer quels paquets sont "à moi".
slm

Merci pour la mise à jour; si vous pouviez simplement ajouter une commande pour trouver tous les binaires appartenant à mes rpms (qui ont "company" en leur nom) ce serait fantastique
Chris Maes

@ChrisMaes - voir mise à jour, LMK si vous avez besoin de conseils supplémentaires.
slm

très belle réponse écrite; complet et bien formaté. Merci beaucoup!
Chris Maes

4

Une suggestion évidente est de nommer vos binaires ou vos packages d'une manière spéciale. Ainsi, par exemple, vous pouvez les préfixer avec cm-, selon vos initiales comme indiqué dans ce post. Si vous installez des rpms, ils doivent entrer /usr/bin(s'ils sont des exécutables de niveau utilisateur), selon le FHS. Ils ne devraient pas entrer /usr/local/binpar exemple. C'est uniquement pour les installations locales.

Pour mémoire, je ne trouve pas l'idée de mettre des binaires dans un répertoire spécial et de les lier attrayante, même si je suppose que de telles choses sont parfois faites. Gardez également à l'esprit que si vous avez besoin de savoir quels fichiers binaires appartiennent à quel package, vous pouvez simplement interroger le système d'emballage.


3

Les fichiers binaires ne faisant pas partie du système ou de la distribution sont généralement en

/usr/local/bin

le répertoire est généralement dans la norme $PATHafin que vos binaires soient trouvés.


normalement / usr / local / bin est pour les binaires qui n'existent que "localement" sur cette machine; pas pour les binaires que je distribuerai sur d'autres machines en utilisant un rpm ...?
Chris Maes

2
Sous Linux, /usr/local/binc'est pour les exécutables installés manuellement. Les exécutables gérés par le gestionnaire de packages entrent dans /usr/bin.
Gilles 'SO- arrête d'être méchant'

@Gilles, ma première interprétation de la question a été d'installer sur une seule machine rendant les binaires disponibles pour chaque utilisateur (ne pas installer dans $ HOME). Maintenant, je vois que ce n'était pas vraiment ce que j'avais compris.
Matteo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.