用 createrepo_c 做仓库
한국어 원문으로 표시합니다.
목표
rpm 을 모아 createrepo_c 로 저장소를 만들고, .repo 파일로 등록해 그 저장소만으로 설치합니다.
왜 중요한가
폐쇄망 최다 신고인 "저장소에 넣었는데 안 보인다" 의 원인 1위가 createrepo_c --update 누락입니다. 파일은 눈에 보이는데 dnf 는 모릅니다. 두 번째가 클라이언트 캐시입니다. 이 둘의 순서를 몸에 익히면 그 신고의 90% 가 몇 분 안에 끝납니다.
그리고 repomd.xml 의 구조를 알면 무엇이 저장소에 있고 없는지 판단할 수 있습니다 — 예를 들어 updateinfo 가 없으면 dnf update --security 가 조용히 아무것도 하지 않습니다.
단계
/root/repo/pool디렉터리를 만들고,tree패키지와 그 의존성을 설치하지 않고 그 디렉터리로 내려받으세요..rpm이 1개 이상 있어야 합니다.createrepo_c로/root/repo/pool에 메타데이터를 만드세요.repodata/repomd.xml이 생겨야 합니다./etc/yum.repos.d/labhub-local.repo를 만드세요. 저장소 ID 는labhub-local,name에는 스냅샷 날짜(snapshot문자열과YYYY-MM-DD)가 들어가야 하고,baseurl=file:///root/repo/pool,enabled=1,gpgcheck=0,metadata_expire=-1을 포함해야 합니다.- 캐시를 갱신하고 저장소 목록을
/root/repo/repolist.txt로 저장하세요.labhub-local이 보여야 합니다. - 다른 저장소를 모두 끄고
labhub-local만 켠 상태로tree를 재설치하고, 그 명령의 출력을/root/repo/install.txt로 저장하세요. nano패키지를 pool 에 추가로 내려받은 뒤 메타데이터를 증분 갱신하고, 갱신 후labhub-local저장소의 패키지 수를 숫자 한 줄로/root/repo/pkgcount.txt에 적으세요.repomd.xml에서 메타데이터 종류 이름만 뽑아 한 줄에 하나씩/root/repo/mdtypes.txt에 적으세요.primary,filelists,other가 모두 있어야 합니다./root/repo/report.txt를 다음 4줄로 만드세요.REPO_ID=labhub-local/PACKAGES=<6번 값>/MDTYPES=<7번 파일의 줄 수>/HAS_UPDATEINFO=<yes|no>
참고
- 내려받기는
dnf download --resolve --destdir=/root/repo/pool tree입니다. - 저장소 하나만 쓰려면
dnf --disablerepo='*' --enablerepo=labhub-local install -y tree형태입니다. 이미 깔려 있어 다시 받고 싶으면install --reinstall이 아니라reinstall서브커맨드를 쓰세요 — 이 dnf(4.14)에서install --reinstall은unrecognized arguments로 죽습니다. - 증분 갱신은
createrepo_c --update /root/repo/pool입니다. - 저장소별 패키지 수는
dnf --disablerepo='*' --enablerepo=labhub-local list available --all | wc -l등으로 셀 수 있습니다.repoquery도 좋습니다. - 흔한 실수 1: 6번에서 재색인 후
dnf clean expire-cache를 안 해 옛 정보를 보는 경우. - 흔한 실수 2: 3번에서
baseurl의 슬래시 개수를 틀리는 경우. 로컬 경로는file://다음에 절대 경로가 오므로 슬래시가 셋입니다.
rpm 모으기
/root/repo/pool 디렉터리를 만들고, tree 패키지와 그 의존성을 설치하지 않고 그 디렉터리로 내려받으세요. .rpm 이 1개 이상 있어야 합니다.
dnf 에는 설치하지 않고 rpm 만 내려받는 명령이 있습니다. 의존성까지 받는 옵션도 함께 쓰세요.
메타데이터 생성
createrepo_c 로 /root/repo/pool 에 메타데이터를 만드세요. repodata/repomd.xml 이 생겨야 합니다.
createrepo_c 에 디렉터리를 주면 그 아래에 repodata 가 만들어집니다.
저장소 정의 작성
/etc/yum.repos.d/labhub-local.repo 를 만드세요. 저장소 ID 는 labhub-local, name 에는 스냅샷 날짜(snapshot 문자열과 YYYY-MM-DD)가 들어가야 하고, baseurl=file:///root/repo/pool, enabled=1, gpgcheck=0, metadata_expire=-1 을 포함해야 합니다.
yum.repos.d 아래 .repo 파일입니다. 대괄호 안이 저장소 ID 이고 name, baseurl, enabled 가 필수입니다.
캐시 갱신과 확인
캐시를 갱신하고 저장소 목록을 /root/repo/repolist.txt 로 저장하세요. labhub-local 이 보여야 합니다.
메타데이터 캐시를 만료 표시한 뒤 저장소 목록을 봅니다. 새 저장소가 보여야 합니다.
그 저장소만으로 설치
다른 저장소를 모두 끄고 labhub-local 만 켠 상태로 tree 를 재설치하고, 그 명령의 출력을 /root/repo/install.txt 로 저장하세요.
모든 저장소를 끄고 하나만 켜는 옵션 조합이 있습니다.
패키지 추가 후 갱신
nano 패키지를 pool 에 추가로 내려받은 뒤 메타데이터를 증분 갱신하고, 갱신 후 labhub-local 저장소의 패키지 수를 숫자 한 줄로 /root/repo/pkgcount.txt 에 적으세요.
rpm 을 넣고 재색인해야 dnf 가 봅니다. 증분 갱신 옵션이 있습니다.
repomd.xml 구조 확인
repomd.xml 에서 메타데이터 종류 이름만 뽑아 한 줄에 하나씩 /root/repo/mdtypes.txt 에 적으세요. primary, filelists, other 가 모두 있어야 합니다.
각 메타데이터 종류가 type 속성으로 표시됩니다. 종류 이름만 뽑아 보세요.
저장소 보고서
/root/repo/report.txt 를 다음 4줄로 만드세요.
REPO_ID=labhub-local / PACKAGES=<6번 값> / MDTYPES=<7번 파일의 줄 수> / HAS_UPDATEINFO=<yes|no>
패키지 수와 메타데이터 종류를 모으세요. 값은 실제 확인 결과여야 합니다.