⏲️

yum/dnfで変更したpkgをロールバックする

2023/04/19に公開

パッケージのアップデートなどをしたり、
うっかり間違えてパッケージをアップデートして、切り戻しを行いたいケースがあります。

環境が整っていれば、事前にスナップショットなどで切り戻すのがベターですが、
個人の趣味で触っていたらそこまでしない(出来ない)、ということのもあります。
この場合、やり方を知らないと依存関係かあるので、結構面倒です。

環境

  • RHEL系OS
    ※前回の記事に続き、自分はAlmaLinux9.1で確認しました。

コマンド

  • 補足
    例ではdnfコマンドを用いていますが、yumでも同様の結果が得られます。

1.利用履歴の確認
まず、以下のコマンドでdnfの利用履歴を確認します。
基本20件まで確認できますが、
末尾にallをつけるとすべての履歴を確認できます。

$ sudo dnf history 
ID     | Command line              | Date and time    | Action(s)      | Altered
--------------------------------------------------------------------------------
     4 | -y update                 | 2023-04-17 17:44 | I, U           |   81
     3 | install bash-completion   | 2023-04-17 15:26 | Install        |    5
     2 | install sysstat           | 2023-04-17 14:49 | Install        |   12 E<
     1 |                           | 2023-04-17 12:12 | Install        |  324 >E

今回は、IDが「4」のupdateを切り戻すことにします。

2.詳細確認(面倒であればスキップして項番3に進んでも良い)
上記出力から、利用したコマンドに対応する「ID」を確認し、
以下のコマンドで詳細を確認します。

$ sudo dnf history info 4
Transaction ID : 4
Begin time     : Mon Apr 17 17:44:57 2023
Begin rpmdb    : ec1003309cebd9f94fa5d72ed456c0321e2e11dfafa927fb0d25af33089df279
End time       : Mon Apr 17 17:47:02 2023 (125 seconds)
End rpmdb      : 60826da90c279c767d0aae5a49dd31d350170430c4df3e019f94b2825085dc56
User           : <XXXXX>
Return-Code    : Success
Releasever     : 9
Command Line   : -y update
Comment        :
Packages Altered:
    Install  freetype-2.10.4-9.el9.x86_64                      @baseos
    Install  graphite2-1.3.14-9.el9.x86_64                     @baseos
    Install  grub2-tools-efi-1:2.06-46.el9_1.5.alma.x86_64     @baseos
  (略)
    Upgrade  vim-minimal-2:8.2.2637-20.el9_1.x86_64            @baseos
    Upgraded vim-minimal-2:8.2.2637-16.el9_0.3.x86_64          @@System
    Upgrade  zlib-1.2.11-35.el9_1.x86_64                       @baseos
    Upgraded zlib-1.2.11-34.el9.x86_64                         @@System

この場合、"Upgareded"がアップデート前のバージョン、
"Upgrade"がアップデート後のバージョンになります。

一応確認のため、一部パッケージの確認をしておきます。

$ sudo rpm -qa |grep zlib
zlib-1.2.11-35.el9_1.x86_64

3.対象のIDを指定し、ロールバック

$ sudo dnf history undo 4
Last metadata expiration check: 0:07:36 ago on Mon Apr 17 17:47:05 2023.
Dependencies resolved.
================================================================================
 Package                    Arch     Version                    Repo       Size
================================================================================
Removing:
 kernel-core                x86_64   5.14.0-162.23.1.el9_1      @baseos    84 M
Removing dependent packages:
 freetype                   x86_64   2.10.4-9.el9               @baseos   821 k
 graphite2                  x86_64   1.3.14-9.el9               @baseos   197 k
 grub2-tools-efi            x86_64   1:2.06-46.el9_1.5.alma     @baseos   2.7 M
 grub2-tools-extra          x86_64   1:2.06-46.el9_1.5.alma     @baseos   5.3 M
 harfbuzz                   x86_64   2.7.4-8.el9                @baseos   1.6 M
 libpng                     x86_64   2:1.6.37-12.el9            @baseos   227 k
Downgrading:
 NetworkManager             x86_64   1:1.40.0-1.el9             baseos    2.1 M
 NetworkManager-libnm       x86_64   1:1.40.0-1.el9             baseos    1.7 M
 NetworkManager-team        x86_64   1:1.40.0-1.el9             baseos     35 k
 NetworkManager-tui         x86_64   1:1.40.0-1.el9             baseos    230 k
 (略)
 tzdata                     noarch   2022f-1.el9_0              baseos    427 k
 vim-minimal                x86_64   2:8.2.2637-16.el9_0.3      baseos    680 k
 zlib                       x86_64   1.2.11-34.el9              baseos     90 k

Transaction Summary
================================================================================
Remove      7 Packages
Downgrade  74 Packages


Total download size: 54 M
Is this ok [y/N]: y
(略)

先ほど確認したパッケージのバージョン確認をします。

$ sudo rpm -qa |grep zlib
zlib-1.2.11-34.el9.x86_64

バージョンが下がりましたね。
(ここまでやってアップデート前のパッケージのバージョン情報を取っておけば良かったと後悔)

余談

dnf historyのAction部分ですが、何を行ったか確認できます。
基本的には下記「Action」に記載の出力がされますが、
複数の動作を行った場合は省略形が並ぶ形となります。
※dnfコマンドを普段利用していれば、オプションで予想できそうですね。

Action 省略形 行なった動作
Downgrade D 1つ以上パッケージをダウングレード
Erase E 1つ以上のパッケージを削除
Install I 1つ以上パッケージをインストール
Obsoleting O 1つ以上のパッケージが廃止として記録 (≒成功していないので注意)
Reinstall -R 1つ以上パッケージを再インストール
Update U 1つ以上パッケージをアップデート

参考

Discussion