LabHub

폐쇄망 GPU 드라이버 반입 설치 · NVIDIA 드라이버 패키지 의존성 해석 · 실습

의존성 그래프 풀기

LabHub 에서 이어서 보기

목표

반입했다고 가정한 패키지 묶음에서 의존성 그래프를 풀고, 번들 안에서 해결되지 않는 의존을 찾아내고, 설치 순서를 산출합니다.

왜 중요한가

폐쇄망에서 가장 비싼 실수는 "반입했는데 의존성이 모자라 다시 나가는 것" 입니다. 반입 심의가 하루에 한 번이면 왕복 한 번이 하루입니다. 그래서 반입 전에 번들이 자기 안에서 닫히는지(closure) 확인해야 합니다. 그리고 Provides 관계를 모르면 "libcuda1 이 저장소에 없다" 며 존재하지 않는 패키지를 찾아 헤매게 됩니다.

/opt/fixtures/gpu-airgap/src/ 에는 1차 반입분 소스 트리가 들어 있습니다. 실제 NVIDIA 소프트웨어는 아니지만 의존성 그래프의 모양은 실제와 같습니다.

단계

1. /root/gpu 디렉터리를 만들고, /opt/fixtures/gpu-airgap/src/ 아래 모든 패키지의 이름 버전 을 한 줄씩 /root/gpu/inventory.txt 에 적으세요. 14줄이어야 합니다.
2. 모든 소스 디렉터리를 .deb 로 빌드해 /root/gpu/pool/ 에 모으세요. .deb 파일이 14개여야 합니다.
3. /root/gpu/poolPackages 색인과 Packages.gz 를 만드세요. 색인의 Package: 항목이 14개여야 합니다.
4. 각 패키지의 의존 관계를 <패키지> <의존대상> 형식으로 한 줄씩 /root/gpu/edges.txt 에 적으세요. 버전 조건은 빼고 이름만 씁니다. 최소 15줄이어야 합니다.
5. 번들 안에서 해결되지 않는 의존의 이름만 /root/gpu/missing.txt 에 적으세요. (번들 안에 그 이름의 패키지가 없고, 번들 안 어떤 패키지도 그것을 Provides 하지 않는 것)
6. nvidia-driver-550 을 설치하기 위해 필요한 패키지 전부를 의존이 먼저 오도록 정렬해 /root/gpu/install-order.txt 에 한 줄에 하나씩 적으세요. 11줄이어야 합니다.
7. 가상 패키지 libcuda1 을 제공하는 패키지 이름을 한 줄로 /root/gpu/provides.txt 에 적으세요.
8. /root/gpu/report.txt 를 다음 5줄로 만드세요.
BUNDLE=14 / EDGES=<4번 파일의 줄 수> / MISSING=<5번 파일의 줄 수> / ORDER=11 / LIBCUDA1_BY=<7번 값>

참고

단계 8개

  1. 반입 번들 목록화
  2. 모든 패키지 빌드
  3. 저장소 색인 생성
  4. 의존성 엣지 목록
  5. 닫히지 않는 의존 찾기
  6. 설치 순서 산출
  7. 가상 패키지 추적
  8. 의존성 분석 보고서