⏲️
yum/dnfで変更したpkgをロールバックする
パッケージのアップデートなどをしたり、
うっかり間違えてパッケージをアップデートして、切り戻しを行いたいケースがあります。
環境が整っていれば、事前にスナップショットなどで切り戻すのがベターですが、
個人の趣味で触っていたらそこまでしない(出来ない)、ということのもあります。
この場合、やり方を知らないと依存関係かあるので、結構面倒です。
環境
- 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つ以上パッケージをアップデート |
参考
- RedHat Customer Portal
9.2. DNF トランザクションの取り消し
Discussion