CentOS/Rocky Linux에서 패키지 및 커널 업데이트를 차단하는 방법
이 페이지에서
- 전제 조건
- 방법 1 - 패키지 설치/업데이트를 영구적으로 비활성화(yum.conf 사용)\n
- 커널 업데이트 차단
- repo 파일을 통한 저장소 차단\n
패키지 관리자는 아마도 Linux 사용자에게 가장 유용한 도구일 것입니다. 단일 명령으로 Linux 시스템에서 모든 소프트웨어/패키지를 설치, 업그레이드 및 제거할 수 있습니다. 그러나 때로는 설치 또는 업그레이드할 패키지와 자동 업그레이드를 차단할 패키지를 세부적으로 제어해야 합니다. 왜 이것을 하시겠습니까? 때때로 당신은 패키지 업데이트 버전이 버그가 있다는 것을 알게 됩니다. 다음에
sudo yum upgrade
를 실행할 때 해당 패키지가 업그레이드되는 것을 원하지 않습니다. 그리고 각 패키지를 개별적으로 업그레이드하는 것은 고통스러운 일입니다.이 자습서에서는 특정 패키지가 설치 또는 업그레이드되는 것을 차단하는 방법과 특정 버전의 패키지 또는 커널이 설치되는 것을 차단하는 방법에 대해 설명합니다.
참고: 버그가 없는 버전이 나온 경우에도 일정 시간이 지나면 어떤 패키지를 보관했는지 잊어버리기 쉽습니다. 패키지를 오랫동안 보관하면 보안 문제가 발생할 수 있으므로 주의를 기울이십시오.
여기서는 다섯 가지 방법에 대해 설명합니다. 이러한 모든 메서드에는
yum
(Yellow dog Updater, Modified) 및dnf
(Dandified YUM) 패키지 관리자가 포함됩니다.전제 조건
- CentOS 또는 Rocky Linux 또는 Alma Linux가 설치된 서버. Rocky Linux 9가 이 튜토리얼에 사용되었지만 여기의 명령은 다른 운영 체제 및 이전 릴리스에서도 잘 작동해야 합니다.\n
- sudo 권한이 있는 루트가 아닌 사용자.\n
방법 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 or $ 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 or $ sudo yum --exclude=kernel* update
커널 업데이트를 차단하는 다른 모든 방법에서
kernel*
을 패키지 이름으로 사용할 수 있습니다.방법 2 - 패키지 설치/업데이트를 일시적으로 비활성화
이 방법에는 추가 매개변수와 함께 yum 명령을 사용하는 것이 포함됩니다.
패키지를 업데이트할 때 명령과 함께 -x 스위치를 사용하여 업데이트하지 않으려는 특정 패키지를 차단하십시오.
$ sudo dnf -x nginx update or $ sudo yum -x nginx update
위의 명령은 시스템에서 nginx 패키지를 제외한 모든 패키지를 업데이트합니다. 단일 명령어로 여러 패키지를 차단하려면 -x 스위치를 여러 번 사용하세요.
$ sudo dnf -x nginx -x php update or $ sudo yum -x nginx -x php update
같은 방식으로 -x 대신 --exclude 스위치를 사용할 수도 있습니다.
$ sudo dnf --exclude nginx, php or $ sudo yum --exclude nginx, php
방법 3 - 리포지토리 사용(.repo 파일 사용)
해당 리포지토리를 통해 패키지를 설치한 경우 업그레이드를 중지하는 다른 방법이 있습니다.
/etc/yum.repos.d
디렉토리에서 찾을 수 있는.repo
파일을 편집하면 됩니다.시스템에 Epel 저장소가 추가되어 있고 여기에서
golang
패키지를 설치하지 않으려는 경우exclude=certbot
줄을 추가하여 차단할 수 있습니다. 표시된 대로/etc/yum.repos.d/epel.repo
파일에 있습니다.[epel] name=Extra Packages for Enterprise Linux 8 - $basearch # It is much more secure to use the metalink, but if you wish to use a local mirror # place its address here. #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 or $ 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 or $ 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 repo
업데이트에서 Epel 리포지토리를 제외하려면 다음 명령을 사용하십시오.
$ sudo dnf update --disablerepo=epel or $ sudo yum update --disablerepo=epel
ID를 쉼표로 구분하여 여러 리포지토리를 비활성화할 수 있습니다.
$ sudo dnf update --disablerepo=epel, extras or $ sudo yum update --disablerepo=epel, extras
repo 파일을 통해 저장소 차단
특정 repo 파일 편집과 관련된 저장소를 차단하는 또 다른 방법이 있습니다.
편집을 위해
epel.repo
파일을 엽니다.$ sudo nano /etc/yum.repos.d/epel.repo
enabled
변수 값을 1에서 0으로 변경합니다.[epel] name=Extra Packages for Enterprise Linux 8 - $basearch # It is much more secure to use the metalink, but if you wish to use a local mirror # place its address here. #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 or $ 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 패키지 관리자용 플러그인입니다. 이 플러그인은 잠금이 수행될 때 설치된 것보다 더 높은 버전으로 패키지를 업그레이드하는 것을 허용하지 않습니다.
먼저 버전 잠금을 설치합니다.
$ sudo dnf install dnf-plugin-versionlock or $ sudo yum install dnf-plugin-versionlock
이렇게 하면 시스템에
/etc/yum/pluginconf.d/versionlock.list
파일도 생성됩니다.시스템에 설치된
mariadb-server
의 현재 버전을 잠그려면 다음 명령을 실행하십시오.$ sudo dnf versionlock mariadb-server or $ 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 or $ 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 or $ 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 or $ 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.*
버전 잠금에서 패키지를 제거하려면 다음 명령을 사용하십시오.
$ sudo dnf versionlock delete mariadb-server or $ 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 or $ sudo yum versionlock clear
또는 버전 잠금 플러그인을 사용하여 패키지를 차단하도록
/etc/yum/pluginconf.d/versionlock.list
파일을 편집할 수 있습니다.설치된 패키지를 파일에 추가하려면 다음 명령을 사용하십시오.
$ 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 시스템에서 설치 또는 업그레이드를 원하지 않는 패키지의 특정 버전을 차단할 수 있습니다.