GNU/Linux >> Linux の 問題 >  >> Linux

バイナリを /bin、/sbin、/usr/bin、および /usr/sbin にインストールし、 --prefix および DESTDIR と対話します

基本的に、/ の違いは そして /usr 階層は、パッケージの上流のメンテナーの手に渡ってはいけませんし、そうすべきではありません (読んでください:あなたの責任ではありません)。 /以降 起動と /usr の作成に必要なファイルのみを含める必要があります / をどうするかは管理上の決定です .ソースからのインストールの場合、この決定はインストーラーによって行われ、ディストリビューションの場合はパッケージのメンテナーによって行われます。

根拠として、誰かが chroot を構築しようとしているとします。 環境。 /usr と / の区別は、環境では意味がなく、行われません。すべてのプレフィックスは /foo/bar/chroot に設定されています 、および $prefix をいじる configure スクリプト 奇妙な行動を誘発する可能性があります。同じ引数は、通常の $prefix に依存する Debian パッケージング ヘルパーのようなスクリプトにも当てはまります。 動作するセマンティクス。

したがって、最もクリーンなソリューションは bash-4.1 です 解決。基本的に 2 つのクリーンなオプションがあります。パッケージを起動に重要な部分と起動に重要でない部分に分割するか、configure を スクリプトは、デフォルトで / に設定されている、起動に不可欠な部分の代替プレフィックスを提供します 、残 $prefix /usr として .


この質問には 2 つの異なるレベルがあり、あなたの質問はすべて 2 番目の意味 (*.spec ファイル、debian/rules、または *.pkg ファイルによって生成されたバイナリ パッケージ) に当てはまるようです。気にしないでください。 configure.ac で /usr/local 以外のデフォルトのプレフィックスを指定しようとしてはいけません。インストール先の指定は、configure.ac ではなく、バイナリ パッケージ コントロール ファイルで行われます。 autoconf によって生成された configure スクリプトを使用するソース配布は、デフォルトで /usr/local にインストールする必要があり、それ以外はパッケージング エラーです。

ユーザーが特定のプラットフォームの特定の場所に簡単にインストールできるソース配布が必要な場合は、そのためのスクリプトを tarball に含めることができます。たとえば、次のようなビルド スクリプトを含めることができます。

#!/bin/sh

case $1 in
foo) args='--prefix=/usr --bindir=/bin --sysconfdir=/etc';;
bar) args='--prefix=/opt';;
*) args=;;
esac
$(dirname $0)/configure $args &&
make &&
make install

これは、'foo' および 'bar' プラットフォーム用に構成するデフォルトの引数を指定しますが、あなたの質問はバイナリ パッケージの制御ファイルに関するものであるように思えます。


Linux
  1. / bin/shが/bin/bashではなく/bin/ dashを指すのはなぜですか?

  2. Node.jsの競合:/ sbin/nodeと/usr/ bin / node?

  3. Kubuntuがログイン時にエラーを表示する(file:///usr/share/sddm//themes/breeze/main.qml:noそのようなファイルまたはディレクトリ)?

  1. /usr/sbin、/usr/local/sbin、/usr/local/bin の意味は何ですか?

  2. #!/bin/bash と #!/bin/sh はいつ使用する必要がありますか?

  3. /bin と /usr/bin の違い

  1. / usr/binと/usr/ local / bin Linuxの場合?

  2. /bin の内容を /usr/bin に移動しました。元に戻すことはできますか?

  3. 推奨される使用方法に従って、Web サイトは /var/ または /usr/ に配置する必要がありますか?