RHEL 계열 관리 · 로컬 저장소 구축 · 실습
createrepo_c 로 저장소 만들기
목표
rpm 을 모아 createrepo_c 로 저장소를 만들고, .repo 파일로 등록해 그 저장소만으로 설치합니다.
왜 중요한가
폐쇄망 최다 신고인 "저장소에 넣었는데 안 보인다" 의 원인 1위가 createrepo_c --update 누락입니다. 파일은 눈에 보이는데 dnf 는 모릅니다. 두 번째가 클라이언트 캐시입니다. 이 둘의 순서를 몸에 익히면 그 신고의 90% 가 몇 분 안에 끝납니다.
그리고 repomd.xml 의 구조를 알면 무엇이 저장소에 있고 없는지 판단할 수 있습니다 — 예를 들어 updateinfo 가 없으면 dnf update --security 가 조용히 아무것도 하지 않습니다.
단계
1. /root/repo/pool 디렉터리를 만들고, tree 패키지와 그 의존성을 설치하지 않고 그 디렉터리로 내려받으세요. .rpm 이 1개 이상 있어야 합니다.
2. createrepo_c 로 /root/repo/pool 에 메타데이터를 만드세요. repodata/repomd.xml 이 생겨야 합니다.
3. /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 을 포함해야 합니다.
4. 캐시를 갱신하고 저장소 목록을 /root/repo/repolist.txt 로 저장하세요. labhub-local 이 보여야 합니다.
5. 다른 저장소를 모두 끄고 labhub-local 만 켠 상태로 tree 를 재설치하고, 그 명령의 출력을 /root/repo/install.txt 로 저장하세요.
6. nano 패키지를 pool 에 추가로 내려받은 뒤 메타데이터를 증분 갱신하고, 갱신 후 labhub-local 저장소의 패키지 수를 숫자 한 줄로 /root/repo/pkgcount.txt 에 적으세요.
7. repomd.xml 에서 메타데이터 종류 이름만 뽑아 한 줄에 하나씩 /root/repo/mdtypes.txt 에 적으세요. primary, filelists, other 가 모두 있어야 합니다.
8. /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://다음에 절대 경로가 오므로 슬래시가 셋입니다.
단계 8개
- rpm 모으기
- 메타데이터 생성
- 저장소 정의 작성
- 캐시 갱신과 확인
- 그 저장소만으로 설치
- 패키지 추가 후 갱신
- repomd.xml 구조 확인
- 저장소 보고서