web-dev-qa-db-ja.com

システムバイナリを置き換えるときのベストプラクティスはどれですか?

私はMacOS Xで作業しています。これは、主に/usr/bin//usr/sbin/にあるいくつかのバイナリで出荷されます。一部のLinuxディストリビューションのようなネイティブパッケージマネージャーがないため、自分のバイナリの管理、/usr/local/<package_name>/でのビルドとインストールに慣れました。

このようにして、.bashrcファイルのPATH変数とMANPATH変数を手動で更新する代わりに、システムからパッケージを完全に削除できます。

簡単な例を次に示します。

Mac OS Xには、/usr/binにあるant1.7.0が付属しています。最新バージョンを使用する必要があるので、Apacheからダウンロードしてから、/usr/local/Apache-ant-1.8.2に解凍(ビルド)します。次に、.bashrcファイルを次のように更新します。

# Mac OS X original PATH
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"
# Apache Ant 1.8.2
PATH="$PATH:/usr/local/Apache-ant-1.8.2/bin"
export PATH

ant以外にもオーバーライドしたくないバイナリが存在することが多いため、/usr/bin/の前に/usr/sbin/ant/bin/を必ずエクスポートします。

問題は、which antと入力すると/usr/bin/が表示されることです。そこで、最新のビルドで作業するために、/usr/bin/antの名前を/usr/bin/ant-oldに変更します。

これは機能しますが、システムバイナリを置き換えるためのより良いアプローチがあるかどうかを知りたいです(主に最後の名前変更を回避するため)。

6
nunaxe

システムバイナリの交換は最後の手段です。

私のアドバイスは次のとおりです。

  • /usr/local/binおよびPATH上の他のシステムディレクトリの前に/usr/binを配置します。
  • /usr/local/bin/ant/usr/local/Apache-ant-1.8.2/bin/antへのシンボリックリンクにします。
  • PATH/usr/local/Apache-ant-1.8.2/binを含めないでください。

こちらです:

  • /usr/local/bin内の)カスタマイズは、システムのデフォルトを上書きします。
  • シンボリックリンク/usr/local/bin/antは、そのバージョンのantをどこで入手したかを示します。
  • デフォルトの設定で何かをテストしたい場合は、テスト期間中、PATHから/usr/local/binを削除するだけです。

システムバイナリをオーバーライドする通常の方法は、新しいバイナリを/usr/local/bin(またはsbin)にインストールし、パスの/usr/local/binの前に/usr/binが来るようにすることです。

通常、これを行うには、パッケージを--prefix=/usr/localで構成します。これにより、パッケージごとに/usr/local/binにディレクトリを作成する代わりに、/usr/localの下にバイナリをインストールします。

/usr/local/Apache-ant-1.8.2/binに使用したくないバイナリがあると言っていますか?その場合は、(現在行っているように)/usr/local/Apache-ant-1.8.2の下にインストールすることをお勧めしますが、(パスに/usr/local/binを配置する代わりに)../Apache-ant-1.8.2/bin/antから/usr/local/Apache-ant-1.8.2/binへのシンボリックリンクを作成します。

4
cjm