Completing an Air-Gap Transfer
한국어 원문으로 표시합니다.
목표
반입 번들을 만들어 매니페스트로 검증하고, 아카이브로 묶었다 풀고, 저장소를 세워 그것만으로 설치합니다. 폐쇄망 절차 전체를 한 번에 통과합니다.
왜 중요한가
반입 매체에는 rpm 만 담으면 안 됩니다. rpm, repodata, GPG 키, 매니페스트, 체크섬, 설치 절차서 여섯 가지가 다 있어야 하고, 실제로 가장 자주 빠지는 것이 매니페스트와 GPG 키입니다.
그리고 검증은 양방향이어야 합니다. 매니페스트의 모든 파일이 매체에 있는가(누락 검사), 그리고 매체에 매니페스트에 없는 파일이 있는가(추가 검사). 누락은 설치 실패로 금방 드러나지만 추가된 파일은 아무도 모르게 지나갑니다 — 반입 심의 관점에서는 이쪽이 더 위험합니다.
단계
/root/airgap/rpms디렉터리를 만들고,tree와nano를 의존성까지 모두(이미 설치된 것도 포함) 그 디렉터리로 내려받으세요./root/airgap/MANIFEST.tsv를 만드세요. 첫 줄은NAME EPOCH VERSION RELEASE ARCH SHA256 FILE헤더(탭 구분)이고, 각 rpm 에 대해 한 줄씩 그 값을 채워야 합니다. epoch 가 없는 패키지는0으로 채우세요.rpms디렉터리와 매니페스트를/root/airgap/bundle.tar.gz로 묶고, 그 아카이브의 sha256 을/root/airgap/bundle.sha256에 저장하세요./root/airgap/unpacked/에 아카이브를 풀고, 매니페스트의 체크섬과 실제 파일을 대조한 결과를/root/airgap/verify.txt에 저장하세요. 그리고 매니페스트에 없는데 디렉터리에 있는 파일의 개수를 숫자 한 줄로/root/airgap/extra.txt에 적으세요(0 이어야 합니다)./root/airgap/unpacked/rpms에 메타데이터를 만들고,/etc/yum.repos.d/airgap.repo를 작성하세요. 저장소 ID 는airgap-local,name에snapshot과 날짜,baseurl=file:///root/airgap/unpacked/rpms,enabled=1,gpgcheck=0,metadata_expire=-1을 포함해야 합니다.- 다른 저장소를 모두 끄고
airgap-local만 켠 상태로tree를 재설치하고, 출력을/root/airgap/install.txt로 저장하세요. - 상태 기록을 남기세요.
/root/airgap/state-modules.txt에 모듈 목록을,/root/airgap/state-userinstalled.txt에 사용자 설치 목록을 저장하세요. /root/airgap/report.txt를 다음 6줄로 만드세요.BUNDLE_ID=airgap-<오늘 날짜 YYYY-MM-DD>/PACKAGES=<rpms 안 .rpm 개수>/MANIFEST_LINES=<매니페스트의 헤더 제외 줄 수>/VERIFY=OK/EXTRA=0/INSTALLED_FROM=airgap-local
참고
- 내려받기는
dnf download --resolve --alldeps --destdir=/root/airgap/rpms tree nano입니다. - NEVRA 뽑기:
rpm -qp --queryformat '%{NAME}\t%|EPOCH?{%{EPOCH}}:{0}|\t%{VERSION}\t%{RELEASE}\t%{ARCH}' <파일> - 매니페스트에 없는 파일 찾기:
comm -13 <(정렬된 매니페스트 파일명) <(정렬된 실제 파일명) - 저장소 하나만 쓰기:
dnf --disablerepo='*' --enablerepo=airgap-local install -y tree(이미 깔려 있으면install --reinstall이 아니라reinstall서브커맨드를 쓰세요 — 이 dnf 에서는 앞의 형태가 오류입니다) - 흔한 실수 1: 2번에서 epoch 가
(none)으로 들어가는 경우. 삼항 표기로 0 을 채우세요. - 흔한 실수 2: 4번에서 매니페스트를 절대 경로로 만들어 다른 디렉터리에서 대조가 깨지는 경우.
반입 번들 수집
/root/airgap/rpms 디렉터리를 만들고, tree 와 nano 를 의존성까지 모두(이미 설치된 것도 포함) 그 디렉터리로 내려받으세요.
의존성까지 받되 이미 설치된 것도 건너뛰지 않는 옵션 조합이 필요합니다.
매니페스트 생성
/root/airgap/MANIFEST.tsv 를 만드세요. 첫 줄은 NAME EPOCH VERSION RELEASE ARCH SHA256 FILE 헤더(탭 구분)이고, 각 rpm 에 대해 한 줄씩 그 값을 채워야 합니다. epoch 가 없는 패키지는 0 으로 채우세요.
NEVRA 와 체크섬을 함께 담습니다. epoch 가 없는 패키지는 0 으로 채우는 표기가 있습니다.
아카이브로 묶기
rpms 디렉터리와 매니페스트를 /root/airgap/bundle.tar.gz 로 묶고, 그 아카이브의 sha256 을 /root/airgap/bundle.sha256 에 저장하세요.
매체에 담을 단일 객체를 만듭니다. 아카이브 자체의 체크섬도 남기세요.
풀고 검증
/root/airgap/unpacked/ 에 아카이브를 풀고, 매니페스트의 체크섬과 실제 파일을 대조한 결과를 /root/airgap/verify.txt 에 저장하세요. 그리고 매니페스트에 없는데 디렉터리에 있는 파일의 개수를 숫자 한 줄로 /root/airgap/extra.txt 에 적으세요(0 이어야 합니다).
다른 경로에 풀어 체크섬을 대조합니다. 매니페스트에 없는 파일도 확인하세요.
저장소 구성
/root/airgap/unpacked/rpms 에 메타데이터를 만들고, /etc/yum.repos.d/airgap.repo 를 작성하세요. 저장소 ID 는 airgap-local, name 에 snapshot 과 날짜, baseurl=file:///root/airgap/unpacked/rpms, enabled=1, gpgcheck=0, metadata_expire=-1 을 포함해야 합니다.
메타데이터를 만들고 .repo 파일을 씁니다. 폐쇄망이므로 만료 설정을 조정하세요.
그 저장소만으로 설치
다른 저장소를 모두 끄고 airgap-local 만 켠 상태로 tree 를 재설치하고, 출력을 /root/airgap/install.txt 로 저장하세요.
다른 저장소를 전부 끄고 반입 저장소만 켠 상태로 설치합니다.
모듈 상태 기록
상태 기록을 남기세요. /root/airgap/state-modules.txt 에 모듈 목록을, /root/airgap/state-userinstalled.txt 에 사용자 설치 목록을 저장하세요.
모듈 목록과 사용자 설치 목록을 남깁니다. 반입 기록의 일부입니다.
반입 보고서
/root/airgap/report.txt 를 다음 6줄로 만드세요.
BUNDLE_ID=airgap-<오늘 날짜 YYYY-MM-DD> / PACKAGES=<rpms 안 .rpm 개수> / MANIFEST_LINES=<매니페스트의 헤더 제외 줄 수> / VERIFY=OK / EXTRA=0 / INSTALLED_FROM=airgap-local
번들 정보와 검증 결과를 모읍니다. 값은 실제 확인 결과여야 합니다.