web-dev-qa-db-ja.com

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

Enterprise Linux5システムで使用するRPMパッケージとしてBash4.2をビルドしようとしています。これは、デフォルトで3.2.25に付属しています。これは正常に機能しますが、システムパッケージとの競合を回避し、システム/他のスクリプトが互換性のあるbash3を引き続き使用できるようにするために、両方のバージョンをシステム上で共存させたいと思います。

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

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

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

3
Stealthii

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

ファイルと変更の数が少ないため、半手動のアプローチをお勧めします。つまり、インストール前に変更を加えるための小さなスクリプトを作成します。オプションで installwatch を使用して、インストール中にすべてを確実にキャッチできますが、bashは実際にはごくわずかです。 (FWIW、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スクリプト内の変更も反映しているためです(ただし、名前は変更されません)。

2
mr.spuratic