RPMがソースrpmなのかバイナリrpmなのかを検出するにはどうすればよいですか?
明らかに、私はファイル名に依存したくありません。
ソース 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
いくつかのヒューリスティックを適用して合理的な推測を行うことができるかもしれませんが、あなたが望むことを行うための決定的な方法はないと思います。
rpm -qi -p
rpmfilenameを使用して、「ソースRPM:」値があるかどうかを確認します。
パッケージrpmls
から使用します。rpmdevtools
出力の検査のみに基づくと、SRPMSには.tar.gzまたは.tar.bz2と.specファイルが含まれているように見えます。
これで答えに近づくと思いますが、決定的なものではありません。これで十分かどうかは、状況において正確に正しいことがどれほど重要かによって異なります。
rpm -qlp rpmfilename | grep -c /usr/src/redhat
含まれているソースファイルの数をカウントします(通常、ソースアーカイブ、仕様ファイル、およびいくつかのパッチ)。プログラムで実行している場合は、grep -q
一致するか一致しないかを返します。