패키지 관리 · apt 실전 · 실습
apt 로 패키지 다루기
목표
apt 로 검색·설치·제거를 하고, hold 와 pin 으로 버전을 붙잡는 것까지 손에 익힙니다. 이 실습이 끝나면 apt-cache policy 출력만 보고 "왜 이 버전이 뽑혔는지" 설명할 수 있습니다.
왜 중요한가
apt 는 저장소에 실시간으로 물어보지 않습니다. /var/lib/apt/lists/ 에 캐시된 색인만 보고 판단하고, 같은 패키지가 여러 저장소에 있으면 우선순위로 고릅니다. 이 구조를 알면 "저장소에는 있는데 안 보인다"(색인이 낡음)와 "사내 미러를 넣었는데 공식에서 받아온다"(우선순위가 같음)가 한 번에 설명됩니다. 이 실습 환경에는 인터넷이 없고 /opt/localrepo 오프라인 저장소만 있으므로, 모든 설치가 그 저장소에서 일어납니다.
단계
1. /root/pkg 디렉터리를 만들고, apt-cache policy 의 전체 출력을 /root/pkg/policy.txt 로 저장하세요.
2. tree 라는 패키지를 검색해 결과를 /root/pkg/search-tree.txt 로 저장하세요. 결과 안에 이름이 정확히 tree 인 줄이 있어야 합니다.
3. tree 의 설치 후보 버전만 한 줄로 /root/pkg/tree-version.txt 에 적으세요. (예: 2.1.1-2ubuntu3)
4. tree 와 ncdu 두 패키지를 설치하세요.
5. cowsay 를 설치하고, 그 의존성 중 Depends 줄만 골라 /root/pkg/cowsay-depends.txt 로 저장하세요.
6. htop 을 설치한 뒤 업그레이드 대상에서 제외(hold)하고, 그 사실을 /root/pkg/hold.txt 로 저장하세요.
7. /etc/apt/preferences.d/labhub.pref 를 만들어 htop 패키지를 우선순위 1001 로 고정하세요. Package, Pin, Pin-Priority 세 줄이 모두 있어야 합니다.
8. /root/pkg/report.txt 를 만드세요. 앞에서 설치한 tree, ncdu, htop, cowsay 네 패키지에 대해 이름 버전 형식으로 한 줄씩 쓰고, 마지막 줄에 HOLD=<hold 걸린 패키지 이름> 을 적으세요.
참고
apt-cache policy <패키지>의Candidate:줄이 설치 후보입니다.dpkg-query -W -f='${Package} ${Version}\n' <패키지>로 이름과 버전을 한 줄에 뽑을 수 있습니다.- 흔한 실수 1: 3번에서
Installed:값을 적는 경우. 아직 설치 전이면(none)입니다. - 흔한 실수 2: 7번에서
Pin: version 3.*처럼 앞의 키워드를 빼먹는 경우.Pin:값은version,release,origin중 하나로 시작해야 합니다.
단계 8개
- 작업 디렉터리와 저장소 확인
- 패키지 검색하기
- 설치 후보 버전 확인
- 패키지 설치하기
- 의존성 목록 뽑기
- 업그레이드에서 제외하기
- 핀 파일로 우선순위 지정
- 설치 상태 보고서