LabHub
배우기 러닝패스 코스

Package Management

Building Your Own Repository

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

인터넷 없이 동작하는 apt 저장소를 처음부터 만들어, 거기서 패키지를 설치합니다. 저장소가 사실은 "디렉터리 + 색인 파일" 이라는 것을 손으로 확인합니다.

왜 중요한가

폐쇄망이든 사내 표준 이미지든 CI 캐시든, 결국 필요한 것은 통제 가능한 저장소입니다. apt 가 저장소에서 읽는 것은 Packages 색인과 Release 메타데이터뿐이므로, 그 둘만 만들면 file:/// 경로도 완전한 저장소가 됩니다. 이 구조를 알면 "패키지를 넣었는데 안 보인다"의 원인이 색인 재생성 누락인지 클라이언트 캐시인지 즉시 갈라집니다. 실무 저장소는 여기에 GPG 서명을 더하지만, 이번 실습은 구조에 집중하기 위해 신뢰 옵션으로 대신합니다.

단계

  1. /root/repo 디렉터리를 만들고, /opt/fixtures/pkg/labhub-tool/opt/fixtures/pkg/labhub-extra 를 각각 .deb 로 빌드해 /root/repo 안에 넣으세요.
  2. /root/repo/Packages 색인을 만드세요. 두 패키지의 Package: 항목이 모두 들어 있어야 합니다.
  3. /root/repo/Packages.gz 압축본을 만드세요.
  4. /root/repo/Release 파일을 만드세요. Origin, Label, Suite, Codename, Architectures, Components 여섯 키가 각각 한 줄씩 있어야 하고 Architectures 값에는 all 이 포함돼야 합니다.
  5. /etc/apt/sources.list.d/labhub-local.list 에 이 저장소를 등록하세요. 경로는 /root/repo, flat 형식입니다.
  6. 색인을 갱신하고, apt-cache policy labhub-extra 의 출력을 /root/repo-check/policy.txt 로 저장하세요.
  7. labhub-extra 를 apt 로 설치하세요. 의존 관계에 따라 labhub-tool 도 함께 설치돼야 합니다.
  8. /root/repo-check/origin.txt 를 두 줄로 만드세요. labhub-tool=<설치된 버전> / labhub-extra=<설치된 버전>

참고

패키지 풀 준비

/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 의 버전 표에 저장소 경로가 나옵니다. 두 패키지 모두 로컬 저장소에서 왔는지 확인하세요.