시스템 관리 · 6 min read · Dec 01, 2025
CentOS / Rocky Linux에서 패키지 및 커널 업데이트 차단하는 방법

패키지 관리자는 아마도 리눅스 사용자에게 가장 유용한 도구일 것입니다. 단일 명령으로 리눅스 시스템에서 소프트웨어/패키지를 설치, 업그레이드 및 제거할 수 있습니다. 그러나 때때로 어떤 패키지를 설치하거나 업그레이드할지, 어떤 패키지를 자동으로 업그레이드하지 않도록 차단할지에 대한 세부적인 제어가 필요합니다. 왜 이렇게 하길 원할까요? 때때로 패키지의 업데이트된 버전이 버그가 있을 수 있습니다. 다음 번에 sudo yum upgrade를 실행할 때 해당 패키지가 업그레이드되는 것을 원하지 않습니다. 그리고 각 패키지를 개별적으로 업그레이드하는 것은 번거롭습니다.
이 튜토리얼에서는 특정 패키지가 설치되거나 업그레이드되는 것을 차단하는 방법과 특정 버전의 패키지나 커널이 설치되는 것을 차단하는 방법을 다룰 것입니다.
참고: 시간이 지나면 어떤 패키지를 보류했는지 잊어버리기 쉽습니다. 버그가 없는 버전이 출시되더라도 마찬가지입니다. 따라서 패키지를 오랫동안 보류하면 보안 문제가 발생할 수 있으므로 주의해야 합니다.
여기서는 다섯 가지 방법을 논의할 것입니다. 이 모든 방법은 yum ( Yellow dog Updater, Modified) 및 dnf ( Dandified YUM) 패키지 관리자를 포함합니다.
전제 조건
- CentOS 또는 Rocky Linux 또는 Alma Linux가 설치된 서버. 이 튜토리얼에서는 Rocky Linux 9를 사용했지만 여기의 명령은 다른 운영 체제 및 이전 릴리스에서도 잘 작동해야 합니다.
- sudo 권한이 있는 비루트 사용자.
방법 1 - 패키지 설치/업데이트 영구적으로 비활성화 (yum.conf 사용)
패키지를 영구적으로 설치, 업데이트 또는 제거하지 않도록 잠그려면 /etc/yum.conf 또는 /etc/dnf/dnf.conf 파일을 사용할 수 있습니다.
다음과 같이 보일 것입니다.
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False예를 들어, nginx 패키지가 설치, 업데이트 또는 제거되지 않도록 하려면 파일의 끝에 다음 줄을 추가합니다.
exclude=nginx모든 nginx 패키지를 중지하려면 * 문자를 사용할 수 있습니다.
exclude=nginx*여러 패키지를 제외하려면 이름을 공백으로 구분하여 나열할 수 있습니다.
exclude=nginx php잠긴 패키지는 시스템을 업그레이드하더라도 동일한 버전으로 유지됩니다. 이는 그래픽 드라이버를 보류하는 데 특히 유용합니다.
차단된 패키지인 nginx를 설치해 보겠습니다.
$ sudo dnf install nginx
또는
$ sudo yum install nginx유사한 출력을 얻을 것입니다.
Last metadata expiration check: 0:00:21 ago on Mon 05 Dec 2022 10:42:01 AM UTC.
All matches were filtered out by exclude filtering for argument: nginx
Error: Unable to find a match: nginx여기에서 아키텍처를 통해 패키지를 차단할 수도 있습니다. 예를 들어, 32비트 패키지를 차단하려면 /etc/yum.conf 파일에 다음 줄을 입력할 수 있습니다.
exclude=*.i?86 *i686이 방법에는 중요한 주의 사항이 있습니다. 패키지는 sudo yum upgrade 명령을 사용하거나 시스템을 업그레이드할 때 자동으로 업그레이드되지 않지만, 여전히 수동으로 패키지를 제거할 수 있습니다. sudo yum remove 는 보류된 패키지에서도 여전히 작동합니다.
이 방법은 패키지가 자동으로 변경되는 것을 차단할 뿐입니다. 보류 상태로 유지하면 수동으로 제거하기로 결정하지 않는 한 현재 버전으로 유지됩니다.
커널 업데이트 차단
커널 업데이트를 차단하려면 다음 명령을 사용하십시오.
$ sudo dmf --exclude=kernel* update
또는
$ sudo yum --exclude=kernel* update모든 다른 방법에서 커널 업데이트를 차단하기 위해 패키지 이름으로 kernel*을 사용할 수 있습니다.
방법 2 - 패키지 설치/업데이트 일시적으로 비활성화
이 방법은 추가 매개변수와 함께 yum 명령을 사용하는 것입니다.
패키지를 업데이트할 때 업데이트하고 싶지 않은 특정 패키지를 차단하기 위해 -x 스위치를 사용하십시오.
$ sudo dnf -x nginx update
또는
$ sudo yum -x nginx update위 명령은 시스템에서 nginx 패키지를 제외한 모든 패키지를 업데이트합니다. 단일 명령으로 여러 패키지를 차단하려면 -x 스위치를 여러 번 사용하십시오.
$ sudo dnf -x nginx -x php update
또는
$ sudo yum -x nginx -x php update동일한 방식으로 -x 대신 –exclude 스위치를 사용할 수도 있습니다.
$ sudo dnf --exclude nginx, php
또는
$ sudo yum --exclude nginx, php방법 3 - 리포지토리 사용 (.repo 파일 사용)
리포지토리를 통해 설치된 패키지가 있는 경우, 이를 업그레이드하지 않도록 차단하는 또 다른 방법이 있습니다. 이는 /etc/yum.repos.d 디렉토리에서 해당 .repo 파일을 편집하여 수행됩니다.
시스템에 Epel 리포지토리가 추가되어 있고, 그로부터 golang 패키지를 설치하고 싶지 않다면, /etc/yum.repos.d/epel.repo 파일에 exclude=certbot 줄을 추가하여 차단할 수 있습니다.
[epel]
name=Extra Packages for Enterprise Linux 8 - $basearch
# 메탈링크를 사용하는 것이 훨씬 더 안전하지만, 로컬 미러를 사용하려면
# 여기에 주소를 입력하십시오.
#baseurl=https://download.example/pub/epel/8/Everything/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
exclude=certbot
...이제 Epel 리포지토리를 통해 사용할 수 있는 certbot 패키지를 설치해 보십시오.
$ sudo dnf install certbot
또는
$ sudo yum install certbot유사한 출력을 얻을 것입니다.
Extra Packages for Enterprise Linux 8 - x86_64 20 kB/s | 4.5 kB 00:00
All matches were filtered out by exclude filtering for argument: certbot
Error: Unable to find a match: certbot방법 4 - 전체 리포지토리 업데이트 차단
대신 전체 리포지토리의 업데이트를 차단할 수 있습니다.
먼저 시스템의 모든 리포지토리를 확인해 보겠습니다.
$ dnf repolist
또는
$ yum repolist유사한 출력을 얻을 것입니다.
repo id repo name
appstream Rocky Linux 8 - AppStream
baseos Rocky Linux 8 - BaseOS
digitalocean-agent DigitalOcean Agent
docker-ce-stable Docker CE Stable - x86_64
epel Extra Packages for Enterprise Linux 8 - x86_64
extras Rocky Linux 8 - Extras
nginx-stable nginx stable repoEpel 리포지토리의 업데이트를 제외하려면 다음 명령을 사용하십시오.
$ sudo dnf update --disablerepo=epel
또는
$ sudo yum update --disablerepo=epel여러 리포지토리를 비활성화하려면 ID를 쉼표로 구분하여 나열하십시오.
$ sudo dnf update --disablerepo=epel, extras
또는
$ sudo yum update --disablerepo=epel, extras리포지토리 파일을 통해 리포지토리 차단
특정 리포지토리 파일을 편집하여 리포지토리를 차단하는 또 다른 방법이 있습니다.
epel.repo 파일을 편집하기 위해 열어 보겠습니다.
$ sudo nano /etc/yum.repos.d/epel.repoenabled 변수의 값을 1에서 0으로 변경합니다.
[epel]
name=Extra Packages for Enterprise Linux 8 - $basearch
# 메탈링크를 사용하는 것이 훨씬 더 안전하지만, 로컬 미러를 사용하려면
# 여기에 주소를 입력하십시오.
#baseurl=https://download.example/pub/epel/8/Everything/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
...Ctrl + X를 눌러 파일을 저장하고, 프롬프트가 나타나면 Y를 입력합니다.
이제 epel 리포지토리에서 사용할 수 있는 certbot 패키지를 설치해 보겠습니다.
$ sudo dnf install certbot
또는
$ sudo yum install certbot유사한 출력을 얻을 것입니다.
Last metadata expiration check: 0:02:10 ago on Mon 05 Dec 2022 10:48:31 AM UTC.
No match for argument: certbot
Error: Unable to find a match: certbot방법 5 - 특정 버전에서 패키지 차단 (versionlock 플러그인 사용)
Versionlock은 Yum 패키지 관리자를 위한 플러그인입니다. 이 플러그인은 패키지가 잠금이 수행된 시점에 설치된 버전보다 높은 버전으로 업그레이드되지 않도록 합니다.
먼저 versionlock을 설치합니다.
$ sudo dnf install dnf-plugin-versionlock
또는
$ sudo yum install dnf-plugin-versionlock이것은 시스템에 /etc/yum/pluginconf.d/versionlock.list 파일도 생성합니다.
시스템에 설치된 mariadb-server의 현재 버전을 잠그려면 다음 명령을 실행합니다.
$ sudo dnf versionlock mariadb-server
또는
$ sudo yum versionlock mariadb-server유사한 출력을 얻을 것입니다.
Last metadata expiration check: 0:01:05 ago on Mon 05 Dec 2022 12:14:16 PM UTC.
Adding versionlock on: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*한 번에 여러 패키지를 추가할 수 있습니다.
$ sudo dnf versionlock evolution golang
또는
$ sudo yum versionlock evolution golang유사한 출력을 얻을 것입니다.
Last metadata expiration check: 0:01:05 ago on Mon 05 Dec 2022 12:14:16 PM UTC.
Adding versionlock on: evolution-0:3.28.5-18.el8.*
Adding versionlock on: golang-0:1.18.4-1.module+el8.7.0+1073+99e3b3cd.*mariadb-server 패키지를 업데이트해 보겠습니다.
$ sudo dnf update mariadb-server
또는
$ sudo yum update mariadb-server유사한 출력을 얻을 것입니다.
Last metadata expiration check: 0:02:07 ago on Mon 05 Dec 2022 12:14:16 PM UTC.
Package mariadb-server available, but not installed.
No match for argument: mariadb-server
Error: No packages marked for upgrade.versionlock 플러그인을 통해 차단된 패키지 목록을 확인하려면 다음 명령을 사용하십시오.
$ dnf versionlock list
또는
$ yum versionlock list유사한 출력을 얻을 것입니다.
Last metadata expiration check: 0:00:05 ago on Wed 07 Dec 2022 02:36:20 AM UTC.
elasticsearch-7.17.5-1.x86_64
mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*
evolution-0:3.28.5-18.el8.*
golang-0:1.18.4-1.module+el8.7.0+1073+99e3b3cd.*versionlock에서 패키지를 제거하려면 다음 명령을 사용하십시오.
$ sudo dnf versionlock delete mariadb-server
또는
$ sudo yum versionlock delete mariadb-server다음과 같은 출력을 얻을 것입니다.
Deleting versionlock for: mariadb-server-3:10.3.35-1.module+el8.6.0+1005+cdf19c22.*목록을 버리고 차단을 해제하려면 다음 명령을 사용하십시오.
$ sudo dnf versionlock clear
또는
$ sudo yum versionlock clear또는 /etc/yum/pluginconf.d/versionlock.list 파일을 편집하여 versionlock 플러그인을 사용하여 패키지를 차단할 수 있습니다.
설치된 패키지를 파일에 추가하려면 다음 명령을 사용하십시오.
$ sudo sh -c 'rpm -qa | grep evolution >> /etc/yum/pluginconf.d/versionlock.list'위 명령은 evolution 패키지를 목록에 추가하여 차단합니다. 우리는 rpm -qa | grep evolution을 사용하여 전체 패키지 이름을 가져왔습니다. 그리고 sudo sh -c 명령은 파일에 쓰기 위해 실행되는 명령을 포함하는 sudo 셸을 실행합니다.
결론
이 튜토리얼은 여기까지입니다. 이제 CentOS 또는 Rocky Linux 시스템에서 설치되거나 업그레이드되기를 원하지 않는 특정 버전의 패키지를 차단할 수 있어야 합니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.