기술 가이드

Apt-Pinning 간단 소개

4 min read 시스템 관리 업데이트됨 22 Oct 2025
Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정
Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정

개요

이 문서는 Debian 및 Debian 기반 배포판에서 apt-pinning을 사용하는 방법을 간단히 정리한 것입니다. apt-pinning을 사용하면 시스템에 여러 릴리스를 추가해 특정 패키지를 어떤 릴리스에서 설치할지 지정할 수 있습니다. 예를 들어 대체로 안정 릴리스(stable)를 사용하면서 일부 최신 패키지는 testing 또는 unstable에서 가져와 설치할 수 있습니다.

중요: 이 가이드는 일반적인 절차와 예시를 설명합니다. 환경에 따라 의존성 문제나 충돌이 발생할 수 있으므로 운영 중인 시스템에 적용하기 전에 테스트 환경에서 먼저 검증하세요.

전제(사전 조건)

  • 이 글의 예시는 Debian Lenny(stable)를 기준으로 설명합니다. 다른 배포판/버전에서는 패키지 이름이나 리포지토리 URL이 다를 수 있습니다.
  • 루트(root) 권한이 필요합니다.
  • /etc/apt/sources.list와 /etc/apt/preferences(또는 /etc/apt/preferences.d/*) 파일을 편집할 수 있어야 합니다.

예시 패키지: phpmyadmin

이 글에서는 예시로 phpmyadmin 패키지를 사용합니다. 작성 시점에서 각 릴리스의 버전은 다음과 같았습니다(참고 링크: http://packages.debian.org/search?keywords=phpmyadmin&searchon=names&suite=all§ion=all):

  • lenny (stable): 4:2.11.8.1-5
  • squeeze (testing): 4:3.1.2-2
  • sid (unstable): 4:3.1.3-1

(버전은 시간이 지나며 바뀔 수 있습니다 — 위 링크에서 최신 정보를 확인하세요.)

1. sources.list에 testing/unstable 추가

다음 예시는 /etc/apt/sources.list에 testing과 unstable 리포지토리를 추가한 경우입니다. 원본 예시는 Lenny 기준입니다.

vi /etc/apt/sources.list
deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

## Lenny / Stable
deb http://ftp2.de.debian.org/debian/ lenny main
deb-src http://ftp2.de.debian.org/debian/ lenny main

deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

## Squeeze / Testing
deb http://ftp2.de.debian.org/debian/ squeeze main
deb-src http://ftp2.de.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

## Sid / Unstable
deb http://ftp2.de.debian.org/debian/ sid main
deb-src http://ftp2.de.debian.org/debian/ sid main

2. apt 캐시 크기 설정

apt의 캐시 제한 때문에 update 중 오류가 날 수 있습니다. /etc/apt/apt.conf 파일에 다음을 추가하세요:

vi /etc/apt/apt.conf
APT::Cache-Limit "100000000";

오류 예시:

E: Dynamic MMap ran out of room

이후 패키지 데이터베이스를 갱신합니다:

apt-get update

3. 현재 우선순위 확인

apt은 기본적으로 최신 버전을 설치하려고 합니다(종종 unstable/testing에서). apt-pinning으로 우선순위를 조절하면 stable 패키지가 우선되도록 하거나 특정 패키지만 다른 릴리스에서 가져오도록 만들 수 있습니다.

현재 우선순위를 확인하려면:

apt-cache policy

예시 출력(요약):

server1:~# apt-cache policy
 Package files:
  100 /var/lib/dpkg/status
      release a=now
  500 http://volatile.debian.org lenny/volatile/main Packages
      release o=volatile.debian.org,a=stable,l=debian-volatile,c=main
      origin volatile.debian.org
  500 http://ftp2.de.debian.org sid/main Packages
      release o=Debian,a=unstable,l=Debian,c=main
      origin ftp2.de.debian.org
  500 http://security.debian.org squeeze/updates/main Packages
      release v=None,o=Debian,a=testing,l=Debian-Security,c=main
      origin security.debian.org
  500 http://ftp2.de.debian.org squeeze/main Packages
      release o=Debian,a=testing,l=Debian,c=main
      origin ftp2.de.debian.org
  500 http://security.debian.org lenny/updates/main Packages
      release v=5.0,o=Debian,a=stable,l=Debian-Security,c=main
      origin security.debian.org
  500 http://ftp2.de.debian.org lenny/main Packages
      release v=5.0,o=Debian,a=stable,l=Debian,c=main
      origin ftp2.de.debian.org
 Pinned packages:
server1:~#

위 예시에서 stable/testing/unstable 모두 우선순위 500을 가지고 있어 최신 버전(이 경우 unstable의 phpmyadmin)이 후보가 됩니다.

특정 패키지의 후보 버전을 확인하려면:

apt-cache policy phpmyadmin

출력 예시:

server1:~# apt-cache policy phpmyadmin
 phpmyadmin:
   Installed: (none)
   Candidate: 4:3.1.3-1
   Version table:
     4:3.1.3-1 0
        500 http://ftp2.de.debian.org sid/main Packages
     4:3.1.2-2 0
        500 http://ftp2.de.debian.org squeeze/main Packages
     4:2.11.8.1-5 0
        500 http://ftp2.de.debian.org lenny/main Packages
server1:~#

4. 우선순위(P)의 의미

(자세한 내용은 man 5 apt_preferences 참조)

  • P > 1000: 다운그레이드여도 해당 버전 설치를 강제
  • 990 < P <= 1000: 설치 대상 릴리스가 아니더라도 설치 가능(단, 이미 설치된 버전이 더 최신이면 제외)
  • 500 < P <= 990: 타깃 릴리스의 패키지가 없을 때 설치
  • 100 < P <= 500: 다른 배포판의 패키지가 없을 때 설치
  • 0 < P <= 100: 설치되어 있지 않을 때만 설치
  • P < 0: 설치 금지

5. /etc/apt/preferences 예시

아래 예시는 stable을 기본으로 사용하고 testing에는 낮은 우선순위, unstable은 거의 사용하지 않도록 설정하는 간단한 예입니다. 실제 우선순위 값은 필요에 따라 조정하세요.

Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release a=testing
Pin-Priority: 400

Package: *
Pin: release a=unstable
Pin-Priority: 50

특정 패키지(예: phpmyadmin)만 testing에서 설치하도록 고정하려면:

Package: phpmyadmin
Pin: release a=testing
Pin-Priority: 990

이렇게 하면 일반적으로 stable을 사용하지만 phpmyadmin은 testing에서 가져옵니다.

실무 팁과 권장 절차

  • 먼저 테스트 머신에서 구성 변경을 검증하세요.
  • 중요한 서버에서는 apt-get -s upgrade(시뮬레이션)를 이용해 의존성 충돌 여부를 확인하세요.
  • 변경 후 apt-cache policy <패키지>로 후보 버전과 출처를 항상 확인하세요.
  • 대규모 환경에서는 /etc/apt/preferences.d/ 디렉터리에 파일을 분리해 관리하면 추적과 롤백이 쉽습니다.

중요: 우선순위 값을 너무 높게 설정하면 원치 않는 다운그레이드나 의존성 충돌이 발생할 수 있습니다.

대안적 접근법

  • 특정 패키지를 고정하려면 apt-mark hold <패키지>를 사용해 자동 업그레이드를 방지할 수 있습니다. 그러나 이 방법은 새 버전으로 업데이트해야 할 때 수동 개입이 필요합니다.
  • 임시로 다른 릴리스에서 설치하려면 apt-get -t testing install <패키지>처럼 -t 옵션으로 타겟 릴리스를 지정할 수 있습니다.

실패 예시와 주의사항

  • 라이브러리 의존성 문제로 인해 패키지 설치가 부분적으로 실패할 수 있습니다. 이 경우 의존성 트리를 확인하고 필요한 경우 관련 패키지도 함께 핀(pinning)해야 합니다.
  • 여러 패키지를 혼합한 시스템은 추적과 보안 패치 관리가 까다롭습니다. 가능한 한 최소한의 패키지만 다른 릴리스에서 가져오세요.

점검 목록(롤 기반)

시스템 관리자:

  • sources.list 또는 sources.list.d에 불필요한 리포지토리가 없는지 확인
  • /etc/apt/preferences.d/에 핀 설정을 분리하고 주석으로 이유를 기록
  • 변경 후 apt-get update 및 시뮬레이션 업그레이드 실행

개발자/운영 팀:

  • 특정 패키지의 테스트 커버리지 확인
  • 보안 패치 적용 계획 수립
  • 롤백 절차(패키지 다운그레이드, 설정 복원) 문서화

간단 용어집

  • apt-pinning: 서로 다른 패키지 출처(릴리스)들에 우선순위를 매기는 메커니즘
  • Pin-Priority: apt가 패키지 버전 선택 시 참고하는 정수 우선순위
  • Candidate: apt가 설치할 것으로 선택한 버전

요약

  • apt-pinning을 통해 기본적으로 stable을 유지하면서 일부 패키지를 testing/unstable에서 가져올 수 있습니다.
  • 우선순위(P)는 설치 정책을 결정하므로 신중하게 설정해야 합니다.
  • 변경 전에 테스트 및 시뮬레이션을 통해 의존성 문제를 확인하세요.

중요: 어떤 설정도 무조건적인 보장을 제공하지 않습니다. 프로덕션 적용 전 반드시 테스트하세요.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Debian 11에 Podman 설치 및 사용하기
컨테이너

Debian 11에 Podman 설치 및 사용하기

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정
시스템 관리

Apt-Pinning 간단 소개 — Debian 패키지 우선순위 설정

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드
그래픽 가이드

OptiScaler로 FSR 4 주입: 설치·설정·문제해결 가이드

Debian Etch에 Dansguardian+Squid(NTLM) 구성
네트워크

Debian Etch에 Dansguardian+Squid(NTLM) 구성

안드로이드 SD카드 설치 오류(Error -18) 완전 해결
안드로이드 오류

안드로이드 SD카드 설치 오류(Error -18) 완전 해결

KNetAttach로 원격 네트워크 폴더 연결하기
네트워킹

KNetAttach로 원격 네트워크 폴더 연결하기