古いパッケージの名前を取得するにはどうすればいいですか?

古いパッケージの名前を取得するにはどうすればいいですか?

私は RHEL を使用しており、サーバーの 1 つに同じ RPM パッケージを 2 つの異なるバージョンでインストールしました。

[root ~]# rpm -qa | grep my-package-name
my-package-name-6.6.2-129.x86_64
my-package-name-7.0.2-1.x86_64

古いパッケージ名だけを受け取ることは可能でしょうか? 基本的には次のようなことを実現したいです:

[root ~]# rpm -qa | grep my-package-name | get-the-oldest-package

どうすればいいですか?

答え1

同じパッケージの 2 つのバージョンをどうやってインストールしたのかはよくわかりませんが、次のようにすればうまくいくはずです。

rpm -q --queryformat "%{VERSION} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" my-package-name | \
  sort -V | \
  awk 'NR==1 { print $2 }'

最初の行は、my-package-name について RPM データベースを照会し、RPM に特定の形式 (VERSION の後にデフォルトの "rpm -qa" フィールドが続く) で結果を提供するように要求します。これは、sort -Vバージョン番号をソートするために にパイプされ (試行)、その後に にパイプされてawk最初の行だけが印刷され、追加の VERSION フィールドが削除されて、rpm -qaデフォルトの出力になります。

これにより、ソートのフラグを持つ RHEL システムでこれを実行しているという、おそらく安全な仮定が立てられます-V

答え2

私はバージョン文字列を解釈するプログラムに依存することに常に不安を感じているので、Jeff の解決策の代わりに次のようにすることもできます。

[root@jb87-workstation ~]# rpm -q kernel --queryformat "%{INSTALLTIME} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" | sort -n | head -1 | awk '{print $NF}'
kernel-4.8.13-300.fc25.x86_64

(kernelパッケージ名に置き換えてください)

これは基本的に、同じコマンドを実行しrpm -qa--queryformat各行の先頭にインストール時の Unix タイムスタンプ (タグ内%{INSTALLTIME}) を付けるだけで、完全なパッケージ名を出力します。次に、sort -n出力を古いものから新しいものに並べ替え、出力の最初の行を取得して、完全なパッケージ名となる最後の列を出力します。

しかし、ジェフのものは問題なく動作します。これはおそらく個人的な好みの問題でしょう。

答え3

yum downgrade package-name を使用できます。新しいパッケージにはバグがある場合があります。私は古いパッケージにダウングレードしました。

関連情報