4

RPMがソースrpmなのかバイナリrpmなのかを検出するにはどうすればよいですか?

明らかに、私はファイル名に依存したくありません。

4

4 に答える 4

3

ソース rpm は、ヘッダー内の SOURCERPM タグの存在によって定義されます。rpm に SOURCERPM タグがある場合、rpm がバイナリ rpm であることを意味します (SOURCERPM タグは、バイナリ rpm を構築するために使用された srpm を示します)。SOURCERPM タグがない場合、rpm は srpm です。

これが srpm の何らかの「公式」定義であるかどうかはわかりrpmbuildませんが、特定の rpm が srpm であるか参照 rpm 実装にないかを判断するために他のユーティリティが現在使用しているロジックです ( headerIsSource(を参照)。 ) lib/headerutil.c 内)。したがって、それはかなり合理的なようです。

rpmコマンドライン ユーティリティを使用して、SOURCERPM タグが rpm に存在するかどうかを確認する方法を次に示します。

$ rpm --query --package foo-1.2.3-1.src.rpm \
      --queryformat "%|SOURCERPM?{binary-rpm}:{source-rpm}|\n"
source-rpm
$ rpm --query --package foo-1.2.3-1.el7.x86_64.rpm \
      --queryformat "%|SOURCERPM?{binary-rpm}:{source-rpm}|\n"
binary-rpm
于 2014-12-14T06:03:22.860 に答える
0

いくつかのヒューリスティックを適用して合理的な推測を行うことができるかもしれませんが、あなたが望むことを行うための決定的な方法はないと思います。

  1. rpm -qi -p rpmfilenameを使用して、「ソースRPM:」値があるかどうかを確認します。

  2. パッケージrpmlsから使用します。rpmdevtools出力の検査のみに基づくと、SRPMSには.tar.gzまたは.tar.bz2と.specファイルが含まれているように見えます。

これで答えに近づくと思いますが、決定的なものではありません。これで十分かどうかは、状況において正確に正しいことがどれほど重要かによって異なります。

于 2012-09-25T16:02:38.453 に答える
0

rpm -qlp rpmfilename | grep -c /usr/src/redhat含まれているソースファイルの数をカウントします(通常、ソースアーカイブ、仕様ファイル、およびいくつかのパッチ)。プログラムで実行している場合は、grep -q一致するか一致しないかを返します。

于 2012-09-26T02:15:00.303 に答える