私は非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
という名前のファイルまたはデータが含まれているファイルが見つかりました。しかし、運がありません。誰か別の方法を知っていますか?
rpm2cpioのユースケースは、メタデータなしでファイルを抽出することです。これは、必要なものとは逆です。他のツールと同様に、librpmに対してリンクする必要があります。 rpmファイルを探索するMidnightCommanderでさえ、rpmバイナリを使用します。
Yumを備えたシステムでは、createrepoを使用してこれらのrpmからリポジトリを作成します。 XMLとsqliteはメタデータを使用して生成されます。 rpmバイナリ形式よりも解析は簡単ですが、yumを使用していない場合は、自分でクエリを作成する必要があります。機能的なyumリポジトリがあるように、リポジトリを保持します。
さらに別のレベルの抽象化に進むと、システムライフサイクルツールにはコンテンツ管理が含まれます。つまり、KatelloまたはRedHatSatelliteです。シェルスクリプトに比べると少し重いですが、APIを使用してホストとそれらがサブスクライブするパッケージを取得できます。
先に進んで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"