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...
答え2
~のため質問2(rpmdevtoolsがないためインストールできない場合):
最小インストールではyumが必要なので、PythonとrpmのPythonパッケージも必要です。次に、2つのバージョンを比較すると、次のようになります。
python -c "import sys,rpm; print rpm.labelCompare((None, '$VER1', '$REL1'), (None, '$VER2', '$REL2'));"
「rpm-4.14-0.69」パッケージ名が与えられた場合、$ VERはバージョン部分(4.14)、$ RELはリリース部分(0.69)です。パッケージ名を「-」で区切って抽出できます。あなたの例にはパッケージ名にepochが含まれていないので、ここではepoch部分をNoneに設定しました。
labelCompareの結果は0、1、または-1です。
実際にはrpmdev-vercmpまたはrpmdev-sort(https://fedorahosted.org/releases/r/p/rpmdevtools/)単純なPythonスクリプトなので、rpmdevtoolsをインストールしなくても使用できます。