Wo werden Binärdateien abgelegt, damit sie immer im Pfad sind und leicht gefunden werden können?

10

Ich mache einige Binärdateien, Skripte usw., die ich einfach installieren möchte (mit meinen eigenen RPMs). Da ich möchte, dass sie für alle zugänglich sind, besteht meine Intuition darin, sie in / usr / bin abzulegen.

  • PATH muss nicht geändert werden

jedoch; Meine ausführbaren Dateien verschwinden jetzt in einem Pool aller anderen. Wie finde ich alle ausführbaren Dateien, die ich dort abgelegt habe, auf einfache Weise zurück? Ich dachte an:

  • ein Unterverzeichnis in / usr / bin (ich weiß, dass ich das nicht kann; nur um mein Denken zu veranschaulichen)
  • ein anderes Verzeichnis (/ opt / yourself / bin) und Verknüpfung jeder ausführbaren Datei mit / usr / bin (viel Arbeit)
  • ein anderes Verzeichnis (/ opt / yourself / bin) und Verknüpfung des Verzeichnisses mit / usr / bin (ist das möglich?)

Was wäre der "beste und Linux-konformste Weg", dies zu tun?

BEARBEITEN: Wir hatten eine Diskussion darüber in der Firma und kamen auf diese suboptimale Option: Legen Sie Binärdateien in / usr / bin / company mit einem symbolischen Link von / usr / bin ab. Ich bin nicht begeistert von dieser Lösung (Diskussion läuft)

Chris Maes
quelle

Antworten:

7

Wenn Sie Ihre Binärdateien in Ihren eigenen RPMs bündeln, ist es trivial, eine Liste zu erhalten, was sie sind und wo sie installiert wurden.

Beispiel

$ 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

Ich würde vorschlagen, Ihre ausführbaren Dateien entweder in /usr/binoder zu setzen /usr/local/binund Ihre eigene RPM zu rollen. Dies ist ziemlich trivial. Wenn Sie Ihre Softwarebereitstellung mit einem RPM verwalten, können Sie ein Bundle mit einer Versionsnummer kennzeichnen, was die Konfigurationsverwaltung Ihrer Software während der Bereitstellung weiter vereinfacht.

Bestimmen, welche Drehzahlen "meine" sind?

Sie können Ihre RPMs mit einigen bekannten Informationen erstellen, die dann vor dem Erstellen vereinbart werden können. Ich erstelle häufig Pakete auf Systemen, die meiner Domain gehören. Daher ist es trivial, RPMs zu finden, indem ich einfach alle RPMs durchsuche, die auf Host X.mydom.com erstellt wurden.

Beispiel

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

Dies wäre die Build HostLinie innerhalb der Drehzahlen.

Die Verwendung von / usr / bin / company?

Ich würde wahrscheinlich von der Verwendung eines solchen Ortes abraten. Hauptsächlich, weil alle Ihre Systeme $PATHerweitert werden müssen, um sie einzuschließen, und dies nicht dem Standard entspricht. Das Anpassen von Dingen war schon immer ein "Durchgangsrecht" für jeden Möchtegern-Unix-Administrator, aber ich rate immer davon ab, es sei denn, dies ist absolut notwendig.

Das größte Problem bei solchen Anpassungen ist, dass sie sowohl für die Wartung Ihrer Umgebung als auch für die Aktualisierung der Nutzung Ihrer Umgebung durch neue Mitarbeiter eine Belastung darstellen.

Kann ich nur eine Liste der Dateien von RPM erhalten?

Ja, Sie können dies erreichen, aber es sind 2 RPM-Aufrufe erforderlich. Der erste wird eine Liste von Paketen erstellen, die auf Host X.mydom.com erstellt wurden. Nachdem Sie diese Liste erhalten haben, müssen Sie die RPM-Abfrage für die Dateien, die jedem dieser Pakete gehören, erneut aufrufen. Sie können dies mit diesem einen Liner erreichen:

$ 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
quelle
und wie bekomme ich eine Liste aller Binärdateien, die von allen von mir installierten RPMs installiert wurden? Zum Glück haben wir uns darauf geeinigt, unseren Firmennamen in die RPM-Namen aufzunehmen. so etwas wie "rpm -qa | grep company" listet meine installierten RPMs auf
Chris Maes
@ ChrisMaes - siehe Updates. Ich benutze Build Host, um zu bestimmen, welche Pkgs "meine" sind.
slm
Danke für das Update; Wenn Sie einfach einen Befehl hinzufügen könnten, um alle Binärdateien zu finden, die meinen RPMs gehören (deren Name "Firma" enthält), wäre das fantastisch
Chris Maes,
@ChrisMaes - siehe Update, LMK, wenn Sie weitere Anleitungen benötigen.
slm
sehr schöne schriftliche Antwort; vollständig und gut formatiert. Danke vielmals!
Chris Maes
4

Ein naheliegender Vorschlag ist, Ihre Binärdateien oder Pakete auf besondere Weise zu benennen. So könnten Sie ihnen beispielsweise cm-gemäß Ihren in diesem Beitrag angegebenen Initialen ein Präfix voranstellen . Wenn Sie RPMs installieren, müssen diese /usr/bingemäß FHS aufgerufen werden (wenn es sich um ausführbare Dateien auf Benutzerebene handelt). Sie sollten /usr/local/binzum Beispiel nicht darauf eingehen . Dies gilt nur für lokale Installationen.

Ich finde die Idee, Binärdateien in einem speziellen Verzeichnis abzulegen und zu verknüpfen, überhaupt nicht ansprechend, obwohl ich denke, dass solche Dinge manchmal getan werden. Denken Sie auch daran, dass Sie das Verpackungssystem einfach abfragen können, wenn Sie herausfinden möchten, welche Binärdateien zu welchem ​​Paket gehören.

Faheem Mitha
quelle
3

Binärdateien, die nicht Teil des Systems oder der Distribution sind, befinden sich normalerweise in

/usr/local/bin

Das Verzeichnis befindet sich normalerweise im Standard, $PATHsodass Ihre Binärdateien gefunden werden.

Matteo
quelle
Normalerweise ist / usr / local / bin für Binärdateien gedacht, die nur "lokal" auf diesem Computer vorhanden sind. Nicht für Binärdateien, die ich mit einer Drehzahl auf anderen Computern verteilen werde ...?
Chris Maes
2
Ist unter Linux /usr/local/binfür manuell installierte ausführbare Dateien. Vom Paketmanager verwaltete ausführbare Dateien gehen in /usr/bin.
Gilles 'SO - hör auf böse zu sein'
@ Gilles, meine erste Interpretation der Frage war die Installation auf einem einzelnen Computer, um die Binärdateien jedem Benutzer zur Verfügung zu stellen (nicht in $ HOME zu installieren). Jetzt sehe ich, dass es nicht wirklich das war, was ich verstanden habe.
Matteo