LinuxでRPMが少なくとも特定のバージョンであることを確認するスクリプトを作成する必要があります。
たとえば、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
最初の部分では、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
ツールは、--queryformat
と呼ばれる機能も提供し、生成する出力をカスタマイズできます。これを知っていれば、rpm
に「VERSION」マクロを次のように出力するように指示できます。
$ 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の場合(rpmdevtoolsがなく、インストールできない場合):
最小限のインストールでは、yumが必要です。したがって、python and rpm python packageも必要です。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/ )をダウンロードして、rpmdevtoolsをインストールせずに使用することもできます。これらは単純なpythonスクリプトです。