Erstellen Sie Bash (oder ein alternatives Linux-Paket) mit benutzerdefiniertem Binär-/Dokumentnamen

Erstellen Sie Bash (oder ein alternatives Linux-Paket) mit benutzerdefiniertem Binär-/Dokumentnamen

Ich versuche, Bash 4.2 als RPM-Paket für die Verwendung auf Enterprise Linux 5-Systemen zu erstellen, die standardmäßig mit 3.2.25 ausgeliefert werden. Dies funktioniert erfolgreich, ich möchte jedoch, dass beide Versionen auf dem System koexistieren, um Konflikte mit dem Systempaket zu vermeiden und es System-/anderen Skripten zu ermöglichen, weiterhin Bash3 zu verwenden, mit dem sie kompatibel sind.

Mein Plan ist wie folgt:

  • Benennen Sie das Paket in „bash4“ um und vermeiden Sie Konflikte mit „bash“ bzw. geben Sie „sh“ an.
  • Konfigurieren Sie Bash so, dass es mit dem Binärnamen „bash4“ erstellt wird, und ändern Sie den Pfad aller Dokumente oder Supportdateien entsprechend.

Theoretisch ist das einfach und Vim bietet in seinen Konfigurationsskripten binäre Präfixe/Suffixe an, Bash scheint diese Funktion jedoch nicht zu haben. Das Nächstliegende, was ich gefunden habe, ist EXEEXT von Automake, das Unterstützung für ausführbare Erweiterungen bietet (wie .exe unter Windows), aber das ist nicht wirklich für das konzipiert, was ich tun möchte, und es löst auch nicht das Dokumentationsproblem.

Antwort1

Obwohl die bashAutoconf-Version (2.63) etwas alt ist (September 2008), unterstützt sie die Funktionen --program-transform-nameund --program-suffix. Leider verwendet der Bash-Build-Prozess diese Funktionen nicht alsdetailliert durch die Dokumentation, noch werden Parameter verwendet, um die Verarbeitung der Manpages zur Build-Zeit zu ermöglichen.

Da die Anzahl der Dateien und Änderungen gering ist, empfehle ich einen halbmanuellen Ansatz, d. h. schreiben Sie ein kleines Skript, um die Änderungen vor der Installation vorzunehmen. Sie können optional verwendeninstallwatchum sicherzustellen, dass Sie während der Installation alles mitbekommen, bashist aber wirklich ziemlich minimal. (FWIW, ich habe einen kurzen Blick auf die FreeBSD-Bash-Ports und Debian-Bash-Patches geworfen, kein Anzeichen für eine geeignete Lösung.)

Obwohl es im Allgemeinen eine interessante Möglichkeit ist, Builds zu zerstören,dürfenMissbrauch EXEEXThier:

ac_cv_exeext=42 ./configure [...]
make
./bash42 -c 'echo $BASH_VERSION'
4.2.42(1)-release

da es Ihnen nur die Umbenennung erspart hat, kann ich es wirklich nicht empfehlen ;-)

Da ist noch ein bisschen mehr drin:

./configure [...]
make -e Program=bash42

da dies auch Ihre Änderung im generierten bashbugSkript widerspiegelt (es wird jedoch nicht umbenannt).

verwandte Informationen