[Linux]패키지를 업데이트할 수 있는 2가지 방법(제외/롤백 포함)
dnf update
와 dnf upgrade
는 둘 다 리눅스 시스템에서 패키지를 업데이트하는 명령어입니다. 그러나 두 명령어 간에는 약간의 차이가 있습니다:
- dnf update: 기존에 설치된 모든 패키지를 최신 버전으로 업그레이드하면서, 필요하다면 새로운 패키지도 설치합니다.
- dnf upgrade: 현재 설치된 패키지를 최신 버전으로 업그레이드하지만, update와 달리 새로운 패키지를 설치하지는 않습니다.
일반적으로는 dnf update
를 사용하는 것이 권장되며, 이 명령을 실행하기 전에 cache를 재구성하는 것은 좋은 방법입니다.
앞서 말씀드린 것처럼 dnf update
은 모든 패키지를 최신 버전으로 업그레이드합니다. 그런데 시스템을 운영하다보면 특정 패키지는 업그레이드를 하면 안되는 경우가 발생합니다. 불행히도 dnf update
와 dnf upgrade
는 특정 패키지를 업데이트에서 제외하는 직접적인 옵션이 없습니다. 이런 경우에는 dnf versionlock
옵션을 사용할 수 있습니다.
아래 예시는 openssl 관련 패키지들를 제외하고 dnf update
명령을 사용하는 절차입니다.
[root@centos8 ~]# dnf -y install 'dnf-command(versionlock)' [root@centos8 ~]# rpm -qa | grep "^openssl" | sortopenssl-1.1.1k-6.el8.x86_64 openssl-libs-1.1.1k-6.el8.x86_64 openssl-pkcs11-0.4.10-2.el8.x86_64[root@centos8 ~]# dnf versionlock openssl [root@centos8 ~]# dnf versionlock openssl-pkcs11 [root@centos8 ~]# dnf versionlock openssl-libs [root@centos8 ~]# dnf versionlock listLast metadata expiration check: 0:52:55 ago on Tue 31 Oct 2023 12:59:58 PM KST. openssl-pkcs11-0:0.4.10-2.el8.* openssl-libs-1:1.1.1k-6.el8.* openssl-1:1.1.1k-6.el8.*[root@centos8 ~]# dnf update....... Complete![root@centos8 ~]# rpm -qa | grep "^openssl" | sortopenssl-1.1.1k-6.el8.x86_64 openssl-libs-1.1.1k-6.el8.x86_64 openssl-pkcs11-0.4.10-2.el8.x86_64
openssl 관련 패키지들을 제외하지 않고 다시 dnf update
명령을 실행하고 업데이트된 결과를 확인해 보겠습니다.
[root@centos8 ~]# dnf versionlock clearLast metadata expiration check: 0:53:10 ago on Tue 31 Oct 2023 12:59:58 PM KST.[root@centos8 ~]# dnf versionlock listLast metadata expiration check: 0:53:22 ago on Tue 31 Oct 2023 12:59:58 PM KST.[root@centos8 ~]# dnf updateLast metadata expiration check: 0:55:05 ago on Tue 31 Oct 2023 12:59:58 PM KST. Dependencies resolved. ========================================================================== Package Architecture Version Repository Size ========================================================================== Upgrading: openssl x86_64 1:1.1.1k-9.el8 baseos 737 k openssl-libs x86_64 1:1.1.1k-9.el8 baseos 1.5 M openssl-pkcs11 x86_64 0.4.10-3.el8 baseos 66 k Transaction Summary ========================================================================== Upgrade 3 Packages Total download size: 2.3 M Is this ok [y/N]: Upgraded: openssl-1:1.1.1k-9.el8.x86_64 openssl-libs-1:1.1.1k-9.el8.x86_64 openssl-pkcs11-0.4.10-3.el8.x86_64 Complete![root@centos8 ~]# rpm -qa | grep "^openssl" | sortopenssl-1.1.1k-9.el8.x86_64 openssl-libs-1.1.1k-9.el8.x86_64 openssl-pkcs11-0.4.10-3.el8.x86_64
dnf update
는 트랜잭션 기반으로 동작하며, yum update
명령과는 달리 업데이트된 이후에는도 롤백하는 기능이 내장되어 있습니다. dnf 패키지 매니저는 history 명령을 사용하여 이전 트랜잭션을 확인하고 rollback을 통해 특정 트랜잭션으로 시스템을 되돌릴 수 있습니다.
[root@centos8 ~]# dnf history listID | Command line | Date and time | Action(s) | Altered --------------------------------------------------------------------------------------------------- 8 | update | 2023-10-31 13:55 | Upgrade | 3 EE 7 | update | 2023-10-31 13:33 | I, U | 621 EE 6 | -y install dnf-command(versionlock) | 2023-10-31 13:24 | Install | 1 5 | -y remove dnf-command(versionlock) | 2023-10-31 13:10 | Removed | 1 4 | install dnf-command(versionlock) | 2023-10-31 10:12 | I, U | 3 3 | install iscsi-initiator-utils | 2023-10-23 15:17 | Upgrade | 2 2 | -y install nmap | 2023-10-19 11:15 | I, U | 2 1 | | 2023-10-19 09:21 | Install | 1379 EE[root@centos8 ~]# dnf history undo 8....... Downgraded: openssl-1:1.1.1k-6.el8.x86_64 openssl-libs-1:1.1.1k-6.el8.x86_64 openssl-pkcs11-0.4.10-2.el8.x86_64 Complete![root@centos8 ~]# rpm -qa | grep "^openssl" | sortopenssl-1.1.1k-6.el8.x86_64 openssl-libs-1.1.1k-6.el8.x86_64 openssl-pkcs11-0.4.10-2.el8.x86_64