web-dev-qa-db-ja.com

rpmプリアンブルを抽出する方法

私は非Redhatベースのマシンで作業しており、マシンを通過するいくつかの.rpmからバージョン:x.y.zおよびリリース:a.b.c情報を抽出する必要があります。

通常、次のようにします。

rpm -qip ./Foo.x.y.z.rpm | grep Version | awk ...

しかし、これはRedHatベースのマシンではないので、rpmがなく、とにかく2番目のパッケージマネージャーをインストールしたくありません。

私がやったら:

rpm2cpio ./Foo.x.y.z.rpm | cpio -idmv

次に、cpioが抽出されると、.preambleという名前のファイルまたはデータが含まれているファイルが見つかりました。しかし、運がありません。誰か別の方法を知っていますか?

2
nolandda

rpm2cpioのユースケースは、メタデータなしでファイルを抽出することです。これは、必要なものとは逆です。他のツールと同様に、librpmに対してリンクする必要があります。 rpmファイルを探索するMidnightCommanderでさえ、rpmバイナリを使用します。

Yumを備えたシステムでは、createrepoを使用してこれらのrpmからリポジトリを作成します。 XMLとsqliteはメタデータを使用して生成されます。 rpmバイナリ形式よりも解析は簡単ですが、yumを使用していない場合は、自分でクエリを作成する必要があります。機能的なyumリポジトリがあるように、リポジトリを保持します。

さらに別のレベルの抽象化に進むと、システムライフサイクルツールにはコンテンツ管理が含まれます。つまり、KatelloまたはRedHatSatelliteです。シェルスクリプトに比べると少し重いですが、APIを使用してホストとそれらがサブスクライブするパッケージを取得できます。

4
John Mahowald

先に進んでrpmをインストールしてください。それが最も簡単なことです。あなたのディストリビューションはほぼ確実にあなたがそれを利用できるようにしています。

これで、RPMクエリ形式を使用して必要な情報を抽出できます。

例えば:

file=/path/to/filename.rpm

name=$(rpm --queryformat "%{name}" -qp $file)
version=$(rpm --queryformat "%{version}" -qp $file)
release=$(rpm --queryformat "%{release}" -qp $file)

echo "This RPM named $name has version $version release $release"
2
Michael Hampton