웹사이트 검색

CentOS/Rocky Linux에서 패키지 및 커널 업데이트를 차단하는 방법


이 페이지에서

  1. 전제 조건
  2. 방법 1 - 패키지 설치/업데이트를 영구적으로 비활성화(yum.conf 사용)\n
    1. 커널 업데이트 차단

    1. 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 시스템에서 설치 또는 업그레이드를 원하지 않는 패키지의 특정 버전을 차단할 수 있습니다.