自分のリポジトリを作る
한국어 원문으로 표시합니다.
목표
인터넷 없이 동작하는 apt 저장소를 처음부터 만들어, 거기서 패키지를 설치합니다. 저장소가 사실은 "디렉터리 + 색인 파일" 이라는 것을 손으로 확인합니다.
왜 중요한가
폐쇄망이든 사내 표준 이미지든 CI 캐시든, 결국 필요한 것은 통제 가능한 저장소입니다. apt 가 저장소에서 읽는 것은 Packages 색인과 Release 메타데이터뿐이므로, 그 둘만 만들면 file:/// 경로도 완전한 저장소가 됩니다. 이 구조를 알면 "패키지를 넣었는데 안 보인다"의 원인이 색인 재생성 누락인지 클라이언트 캐시인지 즉시 갈라집니다. 실무 저장소는 여기에 GPG 서명을 더하지만, 이번 실습은 구조에 집중하기 위해 신뢰 옵션으로 대신합니다.
단계
/root/repo디렉터리를 만들고,/opt/fixtures/pkg/labhub-tool과/opt/fixtures/pkg/labhub-extra를 각각.deb로 빌드해/root/repo안에 넣으세요./root/repo/Packages색인을 만드세요. 두 패키지의Package:항목이 모두 들어 있어야 합니다./root/repo/Packages.gz압축본을 만드세요./root/repo/Release파일을 만드세요.Origin,Label,Suite,Codename,Architectures,Components여섯 키가 각각 한 줄씩 있어야 하고Architectures값에는all이 포함돼야 합니다./etc/apt/sources.list.d/labhub-local.list에 이 저장소를 등록하세요. 경로는/root/repo, flat 형식입니다.- 색인을 갱신하고,
apt-cache policy labhub-extra의 출력을/root/repo-check/policy.txt로 저장하세요. labhub-extra를 apt 로 설치하세요. 의존 관계에 따라labhub-tool도 함께 설치돼야 합니다./root/repo-check/origin.txt를 두 줄로 만드세요.labhub-tool=<설치된 버전>/labhub-extra=<설치된 버전>
참고
dpkg-scanpackages /root/repo /dev/null > /root/repo/Packages형태로 색인을 만듭니다. 경로 표기 방식에 따라Filename:값이 달라지니apt-get update뒤 에러 메시지를 잘 읽으세요.- sources.list 한 줄의 형식은
deb [옵션] <URI> <suite> [component...]이고, flat 저장소는 suite 자리에./를 씁니다. - 흔한 실수 1: 색인을 만든 뒤
apt-get update를 안 해서 계속 "찾을 수 없음" 이 나오는 경우. - 흔한 실수 2: 서명이 없어
NO_PUBKEY/not signed에러가 나는 경우. 이번 실습에서는 신뢰 옵션으로 넘어갑니다.
패키지 풀 준비
/root/repo 디렉터리를 만들고, /opt/fixtures/pkg/labhub-tool 과 /opt/fixtures/pkg/labhub-extra 를 각각 .deb 로 빌드해 /root/repo 안에 넣으세요.
픽스처 두 개를 각각 빌드해 같은 디렉터리에 모으세요. 파일 이름은 자유지만 확장자는 .deb 여야 합니다.
Packages 색인 만들기
/root/repo/Packages 색인을 만드세요. 두 패키지의 Package: 항목이 모두 들어 있어야 합니다.
dpkg-scanpackages 는 첫 인자로 스캔할 디렉터리를, 둘째 인자로 override 파일을 받습니다. override 가 없으면 /dev/null 을 줍니다.
색인 압축본 만들기
/root/repo/Packages.gz 압축본을 만드세요.
apt 는 Packages.gz 를 먼저 찾습니다. 원본도 함께 남겨 두는 편이 디버깅에 편합니다.
Release 파일 작성
/root/repo/Release 파일을 만드세요. Origin, Label, Suite, Codename, Architectures, Components 여섯 키가 각각 한 줄씩 있어야 하고 Architectures 값에는 all 이 포함돼야 합니다.
Origin, Label, Suite, Codename, Architectures, Components 여섯 키가 한 줄씩 들어갑니다. 값은 자유롭게 정하되 Architectures 에는 all 이 포함돼야 합니다.
저장소 등록
/etc/apt/sources.list.d/labhub-local.list 에 이 저장소를 등록하세요. 경로는 /root/repo, flat 형식입니다.
flat 저장소는 경로 뒤에 ./ 를 붙입니다. 서명이 없으므로 신뢰 옵션이 필요합니다.
색인 갱신과 확인
색인을 갱신하고, apt-cache policy labhub-extra 의 출력을 /root/repo-check/policy.txt 로 저장하세요.
apt-get update 후 apt-cache policy 로 후보가 어느 저장소에서 왔는지 봅니다. 출력에 저장소 경로가 보여야 합니다.
여기서 한 번 막힙니다. Could not open file ... (13: Permission denied) 가 나오면 권한 문제입니다. apt 는 내려받는 부분만 _apt 라는 비특권 사용자로 낮춰 실행하는데(APT::Sandbox::User), /root 는 700 이라 그 사용자가 안으로 들어갈 수 없습니다. 저장소가 /root 아래에 있으니 통과 권한만 열어 주면 됩니다 — chmod o+x /root. 목록을 보는 권한(r)은 여전히 닫혀 있습니다.
샌드박스를 끄는 방법(-o APT::Sandbox::User=root)도 있지만 그건 문제를 덮는 쪽입니다. 실무에서 저장소를 /srv 나 /var/www 에 두는 이유가 바로 이것입니다.
내 저장소에서 설치
labhub-extra 를 apt 로 설치하세요. 의존 관계에 따라 labhub-tool 도 함께 설치돼야 합니다.
의존 관계가 있는 쪽을 설치하면 apt 가 나머지를 알아서 끌어옵니다. dpkg -i 와 달라지는 지점입니다.
출처 확인 보고서
/root/repo-check/origin.txt 를 두 줄로 만드세요.
labhub-tool=<설치된 버전> / labhub-extra=<설치된 버전>
apt-cache policy 의 버전 표에 저장소 경로가 나옵니다. 두 패키지 모두 로컬 저장소에서 왔는지 확인하세요.