개요
이 문서는 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.listdeb 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 main2. apt 캐시 크기 설정
apt의 캐시 제한 때문에 update 중 오류가 날 수 있습니다. /etc/apt/apt.conf 파일에 다음을 추가하세요:
vi /etc/apt/apt.confAPT::Cache-Limit "100000000";오류 예시:
E: Dynamic MMap ran out of room이후 패키지 데이터베이스를 갱신합니다:
apt-get update3. 현재 우선순위 확인
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)는 설치 정책을 결정하므로 신중하게 설정해야 합니다.
- 변경 전에 테스트 및 시뮬레이션을 통해 의존성 문제를 확인하세요.
중요: 어떤 설정도 무조건적인 보장을 제공하지 않습니다. 프로덕션 적용 전 반드시 테스트하세요.