패키지 관리 · 로컬 저장소와 오프라인 설치 · 실습
오프라인 반입 번들 만들기
목표
패키지 하나와 그 의존성 전체를 "반입 번들" 로 묶고, 체크섬 매니페스트로 검증한 뒤, 그 번들만으로 설치를 재현합니다. 폐쇄망 반입 절차의 축소판입니다.
왜 중요한가
폐쇄망에서 가장 흔한 실패는 "받아 갔는데 의존성이 모자라서 다시 나와야 하는 것" 입니다. 반입 심의가 하루에 한 번뿐인 조직에서는 왕복 한 번이 하루입니다. 그래서 숙련자는 바깥에서 의존성 그래프를 통째로 푼 결과를 들고 들어갑니다. 그리고 매체를 통과한 파일이 온전한지 확인할 방법이 필요합니다 — 체크섬은 전송 중 손상을 잡고, 서명은 출처를 보증합니다. 이 실습은 그 절차의 뼈대를 손에 익힙니다.
단계
1. /root/offline 디렉터리를 만들고, cowsay 를 설치할 때 받아야 할 파일들의 URI 목록을 /root/offline/uris.txt 로 저장하세요. (실제로 설치하면 안 됩니다.)
2. cowsay 와 그 의존성을 내려받기만 하고, 받은 .deb 파일을 /root/offline/pool/ 로 모으세요. 최소 2개 이상이어야 합니다.
3. /root/offline/pool 안의 모든 .deb 에 대한 SHA-256 매니페스트를 /root/offline/manifest.sha256 으로 만드세요.
4. 그 매니페스트로 검증을 수행하고 결과를 /root/offline/verify.txt 로 저장하세요. 모든 줄이 정상(OK)이어야 합니다.
5. /root/offline/pool 을 저장소로 만들기 위해 Packages 와 Packages.gz 를 생성하세요.
6. /etc/apt/sources.list.d/labhub-airgap.list 로 이 저장소를 등록하고 색인을 갱신하세요.
7. cowsay 를 재설치해서 반입분으로도 설치가 되는지 확인하고, 설치 후 cowsay labhub 실행 결과를 /root/offline/run.txt 로 저장하세요.
8. /root/offline/report.txt 를 다음 4줄로 만드세요.PACKAGES=<pool 안 .deb 개수> / BYTES=<pool 안 .deb 파일 크기 합계(바이트)> / VERIFY=OK / SNAPSHOT=<오늘 날짜 YYYY-MM-DD>
참고
- 받은 파일은 보통
/var/cache/apt/archives/에 쌓입니다. 미리apt-get clean을 해 두면 이번에 받은 것만 남아 구분하기 쉽습니다. - 크기 합계는
du -bc /root/offline/pool/*.deb | tail -1또는stat -c %s합으로 구할 수 있습니다. - 흔한 실수 1: 3번 매니페스트를 절대 경로로 만들면 4번 검증이 다른 디렉터리에서 깨집니다.
cd후 상대 경로로 만드는 편이 안전합니다. - 흔한 실수 2: 1번에서 실제로 설치해 버리면 2번에서 "이미 최신" 이라며 아무것도 받지 않습니다.
- 흔한 실수 3: 6번에서
Permission denied로 색인 갱신이 실패하는 경우. apt 는 파일을 받을 때만_apt라는 비특권 사용자로 권한을 낮추는데,/root가 700 이라 그 사용자가 통과하지 못합니다.chmod o+x /root로 '들어가기' 한 칸만 열어 주면 됩니다(목록 보기는 여전히 막혀 있습니다).
단계 8개
- 무엇을 받아야 하는지 먼저 계산
- 패키지 내려받기
- 체크섬 매니페스트 생성
- 매니페스트로 검증
- 반입분으로 저장소 색인 만들기
- 반입 저장소 등록
- 반입 저장소에서 재설치
- 반입 보고서