aptでパッケージを扱う
한국어 원문으로 표시합니다.
목표
apt 로 검색·설치·제거를 하고, hold 와 pin 으로 버전을 붙잡는 것까지 손에 익힙니다. 이 실습이 끝나면 apt-cache policy 출력만 보고 "왜 이 버전이 뽑혔는지" 설명할 수 있습니다.
왜 중요한가
apt 는 저장소에 실시간으로 물어보지 않습니다. /var/lib/apt/lists/ 에 캐시된 색인만 보고 판단하고, 같은 패키지가 여러 저장소에 있으면 우선순위로 고릅니다. 이 구조를 알면 "저장소에는 있는데 안 보인다"(색인이 낡음)와 "사내 미러를 넣었는데 공식에서 받아온다"(우선순위가 같음)가 한 번에 설명됩니다. 이 실습 환경에는 인터넷이 없고 /opt/localrepo 오프라인 저장소만 있으므로, 모든 설치가 그 저장소에서 일어납니다.
단계
/root/pkg디렉터리를 만들고,apt-cache policy의 전체 출력을/root/pkg/policy.txt로 저장하세요.tree라는 패키지를 검색해 결과를/root/pkg/search-tree.txt로 저장하세요. 결과 안에 이름이 정확히tree인 줄이 있어야 합니다.tree의 설치 후보 버전만 한 줄로/root/pkg/tree-version.txt에 적으세요. (예:2.1.1-2ubuntu3)tree와ncdu두 패키지를 설치하세요.cowsay를 설치하고, 그 의존성 중 Depends 줄만 골라/root/pkg/cowsay-depends.txt로 저장하세요.htop을 설치한 뒤 업그레이드 대상에서 제외(hold)하고, 그 사실을/root/pkg/hold.txt로 저장하세요./etc/apt/preferences.d/labhub.pref를 만들어htop패키지를 우선순위 1001 로 고정하세요.Package,Pin,Pin-Priority세 줄이 모두 있어야 합니다./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중 하나로 시작해야 합니다.
작업 디렉터리와 저장소 확인
/root/pkg 디렉터리를 만들고, apt-cache policy 의 전체 출력을 /root/pkg/policy.txt 로 저장하세요.
apt-cache policy 를 인자 없이 실행하면 지금 설정된 저장소와 우선순위가 전부 나옵니다. 그 출력을 파일로 저장하세요.
패키지 검색하기
tree 라는 패키지를 검색해 결과를 /root/pkg/search-tree.txt 로 저장하세요. 결과 안에 이름이 정확히 tree 인 줄이 있어야 합니다.
apt-cache search 는 이름과 설명에서 검색합니다. 결과 중 이름이 정확히 tree 인 줄이 있어야 합니다.
설치 후보 버전 확인
tree 의 설치 후보 버전만 한 줄로 /root/pkg/tree-version.txt 에 적으세요. (예: 2.1.1-2ubuntu3)
apt-cache policy <패키지> 의 Candidate 줄에 있는 값입니다. 버전 문자열만 한 줄로 적으세요.
패키지 설치하기
tree 와 ncdu 두 패키지를 설치하세요.
설치 후 dpkg -s 로 상태를 확인해 보세요. Status 줄이 'install ok installed' 여야 진짜 설치된 것입니다.
의존성 목록 뽑기
cowsay 를 설치하고, 그 의존성 중 Depends 줄만 골라 /root/pkg/cowsay-depends.txt 로 저장하세요.
먼저 설치해야 뒤 단계의 보고서가 채워집니다. apt-cache depends 는 Depends 외에 Recommends, Suggests 도 함께 보여 주니 Depends 줄만 남기세요.
업그레이드에서 제외하기
htop 을 설치한 뒤 업그레이드 대상에서 제외(hold)하고, 그 사실을 /root/pkg/hold.txt 로 저장하세요.
apt-mark 에는 hold / unhold / showhold 서브커맨드가 있습니다. 표시가 걸렸는지 확인까지 하세요.
핀 파일로 우선순위 지정
/etc/apt/preferences.d/labhub.pref 를 만들어 htop 패키지를 우선순위 1001 로 고정하세요. Package, Pin, Pin-Priority 세 줄이 모두 있어야 합니다.
핀 파일은 Package / Pin / Pin-Priority 세 줄이 한 묶음입니다. Pin 은 version, release, origin 중 하나로 시작합니다.
설치 상태 보고서
/root/pkg/report.txt 를 만드세요. 앞에서 설치한 tree, ncdu, htop, cowsay 네 패키지에 대해 이름 버전 형식으로 한 줄씩 쓰고, 마지막 줄에 HOLD=<hold 걸린 패키지 이름> 을 적으세요.
dpkg-query 의 -W -f 옵션을 쓰면 원하는 필드만 원하는 형식으로 뽑을 수 있습니다. hold 목록은 apt-mark 쪽에 있습니다.