rpmが少なくとも特定のバージョンであることを確認するBashスクリプト

rpmが少なくとも特定のバージョンであることを確認するBashスクリプト

RPMが少なくともLinux上で特定のバージョンであることを確認するスクリプトを作成する必要があります。

  • 質問1:「.src.rpm」までのバージョンを含めるために、変数$RPM_VERSIONからRPMバージョンをどのように取得しますか?
  • 質問2:これら2つのバージョンを比較する最良の方法は何ですか?

例:rpm-4.2-9.69.src.rpmをrpm-4.14-0.69.src.rpmと比較します。これは私の試みですが、うまくいきません。

STR_BASE_ACCEPTABLE_VER="rpm-4.2-0.69.src.rpm"

if  [[ "$RPM_VERSION" < "$STR_BASE_ACCEPTABLE_VER" ]]; then   
    echo "$RPM_VERSION is too low..."  \
else   
    echo "$RPM_VERSION is fine"  \
fi

ベストアンサー1

解析されたバージョン

ハッキー方式

最初の部分では、次のようにRPMに特定のバージョン情報を問い合わせます。

$ rpm -qi vim-enhanced | grep Version
Version     : 7.4.417

これにより、次のように解析できます。

$ rpm -qi vim-enhanced | awk -F': ' '/Version/ {print $2}'
7.4.417

これは次の変数でキャプチャできます。

$ RPM_VERSION=$(rpm -qi vim-enhanced | awk -F': ' '/Version/ {print $2}')

$ echo $RPM_VERSION
7.4.417

クエリ形式の使用

このツールは、生成される出力をカスタマイズするためのrpmツールも提供します。これを知っている場合は、次のように「VERSION」マクロを印刷--queryformatできます。rpm

$ rpm -q --queryformat '%{VERSION}' vim-enhanced
7.4.417

変数に入れます。

$ RPM_VERSION=$(rpm -q --queryformat '%{VERSION}' vim-enhanced)

メモ:--querytagsスイッチを使用してすべてのクエリタグを表示できますrpm。たとえば、次のようになります。

$ rpm --querytags | head -5
ARCH
ARCHIVESIZE
BASENAMES
BUGURL
BUILDARCHS

バージョン比較

比較がもっとトリッキーになります。幸いにもrpmdevtoolsパッケージにrpmdev-vercmp

使用法

$ rpmdev-vercmp --help

rpmdev-vercmp <epoch1> <ver1> <release1> <epoch2> <ver2> <release2>
rpmdev-vercmp <EVR1> <EVR2>
rpmdev-vercmp # with no arguments, prompt

Exit status is 0 if the EVR's are equal, 11 if EVR1 is newer, and 12 if EVR2
is newer.  Other exit statuses indicate problems.

返された終了ステータスを確認すると、ツールに要求してRPMの2つの名前を指定して、どのバージョンが最新であるかを確認できます。

はい

$ rpmdev-vercmp rpm-4.2-9.69 rpm-4.14-0.69
rpm-4.2-9.69 < rpm-4.14-0.69
$ echo $?
12

したがって、終了コード12に基づいて、2番目のパラメーターは2つのパラメーターのうち最新のパラメーターになります。

一緒に入れる

あなたの解決策は次のとおりです

rpmdev-vercmp $RPM_VERSION $STR_BASE_ACCEPTABLE_VER > /dev/null
if [[ $? == 12 ]]; then
  echo "$RPM_VERSION is too low..."
else 
  echo "$RPM_VERSION is fine"
fi

したがって、変数を次のように設定すると:

$ STR_BASE_ACCEPTABLE_VER="rpm-4.2-9.69"
$ RPM_VERSION="rpm-4.14-0.69"

$ ./cmp_rpmvers.bash    
rpm-4.14-0.69 is fine

交換する場合:

$ STR_BASE_ACCEPTABLE_VER="rpm-4.14-0.69"
$ RPM_VERSION="rpm-4.2-9.69"

$ ./cmp_rpmvers.bash
rpm-4.2-9.69 is too low...

おすすめ記事