カスタムバイナリ/ドキュメント名でbash(または代替Linuxパッケージ)をビルドする

カスタムバイナリ/ドキュメント名でbash(または代替Linuxパッケージ)をビルドする

私は、デフォルトで 3.2.25 が付属する Enterprise Linux 5 システムで使用するために、Bash 4.2 を RPM パッケージとしてビルドしようとしています。これは正常に動作しますが、システム パッケージとの競合を回避し、システム/その他のスクリプトが互換性のある bash3 を引き続き使用できるようにするために、両方のバージョンがシステム上で共存できるようにしたいと考えています。

私の計画は次のとおりです。

  • パッケージの名前を「bash4」に変更し、「bash」と競合しないようにするか、「sh」を提供します。
  • bash をバイナリ名 'bash4' でビルドするように設定し、それに応じてドキュメントやサポート ファイルのパスを変更します。

理論上はこれは単純で、Vim は configure スクリプトでバイナリ プレフィックス/サフィックスを提供していますが、bash にはこの機能がないようです。私が見つけた中で最も近いのは、実行可能拡張子 (Windows の .exe など) をサポートする automake の EXEEXT ですが、これは私がやりたいこと向けに設計されたものではなく、ドキュメントの問題を解決するものでもありません。

答え1

bashautoconfのバージョン(2.63)は少し古い(2008年9月)ですが、--program-transform-nameおよび--program-suffix機能をサポートしています。残念ながら、bashビルドプロセスではこれらの機能は使用されません。ドキュメントで詳細に説明また、マニュアル ページのビルド時の処理を可能にするパラメータも使用しません。

ファイル数や変更点が少ないため、半手動のアプローチ、つまりインストール前に変更を加えるための小さなスクリプトを書くことをお勧めします。オプションでインストールウォッチインストール中にすべてを確実にキャッチできるようにするために、bash実際には非常に最小限の修正が必要です。(参考までに、FreeBSD bash ポートと Debian bash パッチをざっと確認しましたが、適切な修正の兆候はありませんでした。)

一般的にはビルドを破壊する興味深い方法ですが、できるここで虐待EXEEXT:

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

名前を変更するだけで済むので、あまりお勧めしません ;-)

さらに得られるものがもう少しあります:

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

これにより、生成されたスクリプト内での変更も反映されますbashbug(ただし、名前は変更されません)。

関連情報