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

APT는 아마도 리눅스 사용자에게 가장 유용한 도구일 것입니다. 단일 명령으로 리눅스 시스템에서 소프트웨어/패키지를 설치, 업그레이드 및 제거할 수 있습니다. 그러나 때때로 어떤 패키지를 설치하거나 업그레이드할지, 어떤 패키지를 자동으로 업그레이드하지 않도록 차단할지에 대한 세부적인 제어가 필요합니다. 왜 이렇게 하기를 원할까요? 때때로 패키지의 업데이트된 버전이 버그가 있을 수 있습니다. 다음 번에 sudo apt upgrade를 실행할 때 해당 패키지가 업그레이드되지 않기를 원합니다. 그리고 각 패키지를 개별적으로 업그레이드하는 것은 번거롭습니다.
이 튜토리얼에서는 특정 패키지가 설치되거나 업그레이드되는 것을 차단하는 방법과 특정 버전의 패키지 또는 커널이 설치되는 것을 차단하는 방법을 다룰 것입니다.
참고: 시간이 지나면 어떤 패키지를 보류하고 있는지 잊어버리기 쉽습니다. 버그가 없는 버전이 출시되더라도 마찬가지입니다. 따라서 패키지를 오랫동안 보류하면 보안 문제가 발생할 수 있으므로 주의해야 합니다.
여기서는 두 가지 방법을 논의할 것입니다. 첫 번째 방법은 특정 패키지에 대한 모든 설치 및 업그레이드를 차단합니다. 두 번째 방법은 더 세부적인 제어를 제공하여 특정 버전의 패키지를 차단할 수 있습니다.
전제 조건
- Ubuntu 또는 Debian OS가 설치된 서버. 이 튜토리얼에서는 Ubuntu 22.04를 사용했지만, 여기의 명령은 다른 Debian 기반 운영 체제 및 이전 릴리스에서도 잘 작동해야 합니다.
- sudo 권한이 있는 비루트 사용자.
방법 1 (apt-mark)
패키지가 설치, 업데이트 또는 제거되지 않도록 잠그려면 apt-mark 명령을 사용할 수 있습니다.
예를 들어, htop 패키지가 설치, 업데이트 또는 제거되지 않도록 하려면 다음 명령을 사용하십시오.
$ sudo apt-mark hold htop
다음과 같은 출력을 볼 수 있어야 합니다.
htop set on hold.
잠긴 패키지는 시스템을 업그레이드하더라도 동일한 버전으로 유지됩니다. 이는 그래픽 드라이버를 보류하는 데 특히 유용합니다.
패키지에 대한 보류를 제거하려면 다음 명령을 입력하십시오.
$ sudo apt-mark unhold htop
다음과 같은 출력을 볼 수 있어야 합니다.
Canceled hold on htop.
여기에는 중요한 주의 사항이 있습니다. sudo apt upgrade 명령을 사용하거나 시스템을 업그레이드할 때 패키지가 자동으로 업그레이드되지 않지만, 여전히 패키지를 수동으로 제거할 수 있습니다. sudo apt remove 는 보류된 패키지에서도 여전히 작동합니다.
이 방법은 패키지가 자동으로 변경되는 것을 차단할 뿐입니다. 수동으로 제거하기로 결정하지 않는 한 보류 상태로 유지하면 현재 버전에서 계속 유지됩니다.
방법 2 (/etc/apt/preferences)
이 방법은 /etc/apt/preferences 파일을 편집하는 것으로, 여기에서 어떤 저장소의 어떤 패키지 버전을 설치할지 정확히 지정할 수 있습니다.
각 패키지는 APT가 패키지를 설치할지 여부를 결정하는 데 기반이 되는 숫자 우선 순위를 부여받습니다. 그리고 설치할 경우 어떤 저장소에서 가져올지를 결정합니다.
예를 들어, nginx 패키지에 대한 세부 정보를 확인해 보겠습니다. 다음 명령을 입력하십시오.
$ apt-cache policy nginx
유사한 출력을 볼 수 있어야 합니다.
nginx:
Installed: (none)
Candidate: 1.22.1-1~jammy
Version table:
1.22.1-1~jammy 500
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.22.0-1~jammy 500
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.20.2-1~jammy 500
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.18.0-6ubuntu14.3 500
500 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages
1.18.0-6ubuntu14 500
500 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 Packages
nginx가 설치되는 두 개의 저장소가 있음을 볼 수 있습니다. 첫 번째는 Ubuntu의 저장소이고 두 번째는 nginx의 저장소입니다.
모든 저장소에 대해 500이 적혀 있는 것을 볼 수 있습니다. 이 숫자는 패키지의 우선 순위를 지정합니다. 모든 저장소에서 동일하므로 nginx가 어느 저장소에서든지 올 확률은 동일합니다. 그렇다면 시스템은 어떤 패키지를 선택할까요? 가장 높은 버전을 선택합니다. 이 경우 1.22.1입니다. Ubuntu의 경우 전체 버전 번호는 1.22.1-1~jammy가 됩니다.
1.22.1 버전으로 업그레이드하고 싶지 않다면 차단해야 하므로 /etc/apt/preferences 파일을 편집해야 합니다.
nano 편집기로 파일을 엽니다.
$ sudo nano /etc/apt/preferences
이 명령은 시스템에 파일이 없었던 경우 파일을 생성하는 데도 도움이 됩니다.
파일에 다음 코드를 붙여넣습니다.
Package: nginx
Pin: version 1.22.1-1~jammy
Pin-Priority: -1
우선 순위를 0보다 낮게 설정하면 패키지가 설치되지 않습니다. 패키지를 항상 설치하려면 우선 순위를 1000 이상으로 설정하십시오.
파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.
패키지를 다시 확인해 보겠습니다.
$ apt-cache policy nginx
다음과 같은 출력을 볼 수 있습니다.
nginx:
Installed: (none)
Candidate: 1.22.0-1~jammy
Version table:
1.22.1-1~jammy -1
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.22.0-1~jammy 500
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.20.2-1~jammy 500
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.18.0-6ubuntu14.3 500
500 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages
1.18.0-6ubuntu14 500
500 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 Packages
차이점을 주목하시겠습니까? 후보 릴리스 버전이 1.22.1에서 1.22.0으로 떨어졌습니다. 이는 시스템이 이제 설치할 다음 높은 버전이 1.22.0이라는 것을 의미합니다. 최신 버전에는 -1이 적혀 있어 시스템이 해당 버전을 건너뛰어야 함을 나타냅니다.
한 버전은 건너뛰고 다른 버전은 허용하기
파일에 대해 동일한 패키지에 대한 여러 항목을 추가할 수 있습니다. 예를 들어, 파일에 다음 코드를 추가합니다.
Package: nginx
Pin: version 1.22.1-1~jammy
Pin-Priority: -1
Package: nginx
Pin: version 1.20.2-1~jammy
Pin-Priority: 1000
여기서는 시스템에 1.22.1 버전을 건너뛰도록 지시하지만 1.20.2 버전은 항상 설치하도록 지시하고 있습니다.
apt-cache policy 명령을 사용하여 다시 확인해 보겠습니다.
nginx:
Installed: (none)
Candidate: 1.20.2-1~jammy
Version table:
1.22.1-1~jammy -1
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.22.0-1~jammy 500
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.20.2-1~jammy 1000
500 http://nginx.org/packages/ubuntu jammy/nginx amd64 Packages
1.18.0-6ubuntu14.3 500
500 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages
1.18.0-6ubuntu14 500
500 http://us.archive.ubuntu.com/ubuntu jammy/main amd64 Packages
후보 버전이 이제 1.22.0 대신 1.20.2로 변경되었습니다.
저장소 우선 순위 변경
한 가지 경우를 더 고려해 보겠습니다. Nginx가 자신의 저장소에서 설치되는 것을 차단하고 Ubuntu 저장소에서 선택하고 싶다면, Nginx 저장소를 제거하는 방법도 있지만, 다시 한 번 preferences 파일을 사용하여 저장소를 선택할 수 있습니다.
파일에 다음 코드를 입력합니다.
Package: nginx
Pin: release o=nginx
Pin-Priority: -1
release 키워드는 단순히 다음 높은 버전을 지정합니다. o=nginx는 패키지의 출처를 나타냅니다. 여기서는 nginx입니다. 이는 시스템이 nginx 패키지를 자신의 저장소에서 설치하지 않아야 함을 의미합니다. 동일한 결과를 얻기 위한 또 다른 방법은 다음 코드를 사용하는 것입니다.
Package: nginx
Pin: release o=jammy
Pin-Priority: 1000
이번에는 Ubuntu(jammy) 저장소 패키지의 우선 순위를 1000으로 설정했습니다. 이는 Nginx가 항상 Ubuntu 저장소에서 설치되도록 보장합니다.
패키지의 출처를 지정할 수 있을 뿐만 아니라, 시스템이 선택해야 하는 패키지의 아카이브, 구성 요소, 레이블 및 아키텍처를 다음 키워드를 사용하여 추가할 수 있습니다.
- c -> 구성 요소
- a -> 아카이브
- o -> 출처
- l -> 레이블
- n -> 아키텍처
특정 커널 업데이트 차단
특정 커널 업그레이드를 차단하는 방법을 살펴보겠습니다. 시스템의 모든 커널 관련 패키지를 나열합니다.
$ dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}'
유사한 출력을 볼 수 있습니다.
linux-headers-5.15.0-33-generic
linux-image-5.15.0-33-generic
linux-modules-5.15.0-33-generic
linux-modules-extra-5.15.0-33-generic
다음 방법은 여기에서 얻은 모든 패키지에 대해 반복해야 합니다.
방법 1 (apt-mark)
먼저, 현재 활성화된 커널의 버전을 확인해 보겠습니다. 이를 위해 다음 명령을 실행합니다.
$ uname -r
유사한 출력을 볼 수 있습니다.
5.15.0-53-generic
커널이 더 이상 업그레이드되지 않도록 하려면 apt-mark 명령을 간단히 사용할 수 있습니다.
$ sudo apt-mark hold linux-image-$(uname -r)
유사한 출력을 볼 수 있습니다.
linux-image-5.15.0-53-generic set on hold.
커널 헤더를 차단하려면 linux-headers-$(uname -r) 패키지를 차단하는 동일한 방법을 따를 수 있습니다.
방법 2 (/etc/apt/apt.conf.d/50unattended-upgrades)
두 번째 방법은 /etc/apt/apt.conf.d/50unattended-upgrades 파일을 포함합니다.
편집을 위해 열어보십시오.
$ sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Package-Blacklist 섹션으로 스크롤하여 다음과 같이 편집합니다.
Unattended-Upgrade::Package-Blacklist {
"linux-generic";
"linux-image-generic";
"linux-headers-generic";
"linux-modules-generic";
"linux-modules-extra-generic";
};
프롬프트가 나타나면 Ctrl + X를 눌러 파일을 저장하고 Y를 입력합니다.
방법 3 (dpkg)
dpkg를 사용하여 커널 업그레이드를 보류하려면 다음 명령을 입력하십시오. 이 명령은 모든 커널 관련 패키지를 동시에 보류합니다.
$ for i in $(dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}'); do echo $i hold | dpkg --set-selections; done
보류를 제거하려면 다음 명령을 사용하십시오.
$ for i in $(dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}'); do echo $i install | dpkg --set-selections; done
방법 4 (/etc/apt/preferences)
먼저 현재 커널 버전에 대한 세부 정보를 확인해 보겠습니다.
$ apt-cache policy linux-image-$(uname -r)
다음과 같은 출력을 볼 수 있습니다.
linux-image-5.15.0-53-generic:
Installed: 5.15.0-53.59
Candidate: 5.15.0-53.59
Version table:
*** 5.15.0-53.59 500
500 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu jammy-security/main amd64 Packages
100 /var/lib/dpkg/status
이 튜토리얼을 작성하는 시점에서 5.15.0.53 커널이 최신 버전이지만, 다음 버전이 이미 출시되었다고 가정합니다(5.15.0.56이 현재 안정적인 리눅스 커널 버전입니다).
커널의 다음 버전을 차단하려면 /etc/apt/preferences 파일에 다음 코드를 입력합니다.
Package: linux-image-5.15.0-53-generic linux-headers-5.15.0-33-generic linux-modules-5.15.0-33-generic linux-modules-extra-5.15.0-33-generic
Pin: version 5.15.0-53.59
Pin-Priority: -1
위 코드는 Ubuntu가 커널에 대한 모든 업그레이드를 설치하지 못하도록 차단합니다.
방법 2와 3은 커널뿐만 아니라 일반 패키지에도 적용할 수 있습니다.
결론
이 튜토리얼은 여기까지입니다. 이제 Ubuntu 또는 Debian 시스템에서 설치되거나 업그레이드되기를 원하지 않는 모든 패키지 또는 특정 버전을 차단할 수 있어야 합니다. 질문이 있으면 아래 댓글에 남겨주세요.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.