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

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

私は基本的に、3.2.25を使用するEnterprise Linux 5システムで使用するためにBash 4.2をRPMパッケージとしてビルドしようとしています。これはうまくいきましたが、システムパッケージとの競合を避け、システム/その他のスクリプトが互換性のあるbash3を引き続き使用できるように、両方のバージョンがシステムに共存していることを願っています。

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

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

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

ベストアンサー1

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

ファイル数と変更が少ないため、インストール前に変更を適用するための小さなスクリプトを作成する半手動アプローチをお勧めします。選択して使用してください時計の取り付けインストール中にすべてをキャプチャする必要がありますが、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(名前は変わっていませんが)。

おすすめ記事