web-dev-qa-db-ja.com

実際には$ RPM_BUILD_ROOTとは何ですか?

RPMパッケージをビルドするプロセスでは、BuildRootを指定する必要があり、後で$ RPM_BUILD_ROOTを呼び出す%installで使用されます。 $ RPM_BUILD_ROOTは、RPMがパッケージ化を実行するための偽のインストールであると常に考えています。次に、RPMパッケージを使用したインストール時に、実際の場所にインストールされます。例えば:

$RPM_BUILD_ROOT/usr/bin

$ RPM_BUILD_ROOTはパッケージングプロセス専用であり、何らかの方法でRPMが$ RPM_BUILD_ROOTを区別でき、ユーザーが「rpm -ivh package.rpm」を実行したときの実際のインストール場所は/ usr/binになると考えました。

しかし最近、いくつかのドキュメントを読んだときに、$ RPM_BUILD_ROOTがインストールされる実際の場所であり、ユーザーが希望するパッケージをインストールできるように、環境変数$ RPM_BUILD_ROOTの設定でユーザーが$ RPM_BUILD_ROOTを指定することが推奨されます場所。それ以外の場合、$ RPM_BUILD_ROOTはnullになり、デフォルトの場所にインストールされます。上記の場合、それは/ usr/binです。したがって、$ RPM_BUILD_ROOTはパッケージ化または「偽のインストール」プロセスのためだけでなく、Windowsでフォルダーの場所を選択するのと同様に、ユーザーがインストール場所を定義する方法です。

私の考えが正しいかどうかわかりません。誰か確認していただけますか?前もって感謝します。

31
Amumu

$RPM_BUILD_ROOT(または同等の%{buildroot} SPECファイルマクロ)alwaysは、RPMがパッケージ化するファイルを探すディレクトリを保持します。 RPMスクリプト(たとえば、マニュアルページを圧縮するスクリプト)もその値を使用して、インストールされたばかりのファイルを探す場所を認識します。通常、この値は空ではなく、システムディレクトリから離れた場所を含みます。通常は、/tmpまたは/var/tmpの下にあります。

SPECファイルの作成者は、make install(または問題のソフトウェアが使用しているインストーラー)がすべてのファイルを$RPM_BUILD_ROOTの下に配置し、ソフトウェアが使用されるときに使用するのと同じ階層を持つことを確認する必要があります最後にインストールされます。例えば。 RPMでls/bin/lsにインストールするには、%install SPECファイルセクションで、ls$RPM_BUILD_ROOT/bin/lsに配置されていることを確認する必要があります。

SPECファイルの作成者は、BuildRoot:タグを使用して適切な場所を指定することも期待されています。または、ビルドシステムに、rpmrc RPM構成ファイルに適切なエントリを含めることができます。 任意の場合 では、ビルドルートを設定する必要があります。

  • 通常のユーザーは、ソースパッケージをビルドできます。

  • スーパーユーザーがソースパッケージをビルドする場合、スーパーユーザーが結果のバイナリパッケージをインストールしない限り、ビルドプロセスはシステムファイルを上書きしません。そして、はい、someパッケージをrootとしてビルドする正当な理由があるかもしれません-例えば、完全なglibc testsuiteを実行するには、いくつかのテストにroot特権が必要です。

ただし、RPMは空のビルドルート変数を使用してパッケージをビルドできます。その場合、ビルドのインストールと最終的なインストール先の両方が一致します。たとえば、 make installはデフォルトの場所を使用するため、たとえば、システムファイルを上書きします。 /usr/lib十分な特権で実行した場合。また、/usr/bin/*セクションに%filesを含めると、ビルドホスト/usr/bin/ディレクトリのすべてのコンテンツがバイナリパッケージに格納されます。

結論:

  • 空のビルドルートを使用しないでください。

  • 他に方法がない限り、パッケージをrootとしてビルドしないでください。

35
thkala

ファイル〜/ .rpmmacrosは、ユーザーごとのパスを定義します。

%_topdir %(echo $HOME)/rpmbuild
%_tmppath %{_topdir}/tmp

また、rpmbuildコマンドラインパラメーターで定義することもできます。

rpmbuild --define '_topdir /home/username/rpmbuild'
13
Martin Zeitler