LabHub
배우기 러닝패스 코스

パッケージ管理

自分のリポジトリを作る

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