LabHub
배우기 러닝패스 코스

RHEL-Family Administration

createrepo_c and repodata

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

한 줄 요약

createrepo_c 는 rpm 디렉터리를 훑어 repodata/ 를 만든다. 그 안의 repomd.xml 이 다른 메타데이터 파일들을 가리키는 목차다.

Concept map: repodata/ 를 만든다. · 모든 파일 · 중간 프록시나 CDN 이 오래된 사본을 돌려주는 사고를 막는다. · 기본 sha256

왜 이게 필요했나

디렉터리에 RPM 파일을 복사하는 것만으로 dnf 저장소가 되지는 않는다. dnf는 매번 모든 패키지를 열어 보지 않고 repodata의 버전·의존성·파일 목록을 조회한다. 따라서 패키지를 추가하고도 메타데이터를 갱신하지 않으면 서버 파일과 클라이언트가 보는 목록이 달라진다. 이 차이를 알면 캐시·권한 문제와 저장소 생성 누락을 구분할 수 있다.

어떻게 동작하나

dnf install -y createrepo_c
createrepo_c /srv/repo/labhub

ls -1 /srv/repo/labhub/repodata/
# repomd.xml
# <checksum>-primary.xml.gz
# <checksum>-filelists.xml.gz
# <checksum>-other.xml.gz
파일 내용
repomd.xml 목차. 각 메타데이터의 위치·체크섬·시각
primary 이름, 버전, 의존성, 요약
filelists 패키지가 담은 모든 파일 목록
other changelog

dnf provides '*/nginx.conf' 같은 파일 기반 검색이 되는 이유가 filelists 다.

파일 이름 앞의 체크섬 접두는 --unique-md-filenames(기본값)의 결과다. 중간 프록시나 CDN 이 오래된 사본을 돌려주는 사고를 막는다. 파일 이름이 내용에 따라 바뀌므로 캐시가 헷갈릴 수 없다.

주요 옵션

옵션 문서상 동작
--update "파일 크기와 mtime 기준으로 변경되지 않은 rpm 의 기존 메타데이터를 재사용"
--workers N rpm 을 읽을 워커 수
-g, --groupfile comps 그룹 파일 포함
-s, --checksum repomd 와 패키지 체크섬 종류. 기본 sha256
--compress-type bz2, gz, zck, zstd, xz
-i, --pkglist 포함할 패키지 목록 파일
--retain-old-md N 옛 repodata 보존 개수
-x, --excludes 제외 패턴

-d/--database(sqlite 생성)는 deprecated 다. 오래된 절차서에서 이 옵션을 보면 지워도 된다.

--pkglist 를 매니페스트와 연결하는 것이 좋은 관행이다. 반입 매니페스트를 그대로 pkglist 로 쓰면 목록과 실제 저장소가 어긋나는 사고를 구조적으로 막는다.

갱신

패키지를 추가한 뒤에는 반드시 메타데이터를 다시 만든다.

createrepo_c --update /srv/repo/labhub
dnf clean expire-cache
dnf repolist

--update 를 빼먹는 것이 폐쇄망 최다 신고의 원인 1위다. 파일은 눈에 보이는데 dnf 는 모른다.

repo 파일과 검증

[labhub-local]
name=LabHub local (snapshot 2026-08-20)
baseurl=file:///srv/repo/labhub
enabled=1
gpgcheck=0
metadata_expire=-1

동작 확인 3종.

dnf repolist -v
dnf repoclosure --repo=labhub-local
dnf install --assumeno <패키지>

dnf repoclosure저장소 안에서 해결되지 않는 의존성을 가진 패키지를 나열한다. 반입 전 게이트로 쓰기에 가장 좋은 도구다.

createrepo_c /srv/bundle/rpms
dnf repoclosure --repofrompath=bundle,/srv/bundle/rpms --repo=bundle

--repofrompath.repo 파일을 만들지 않고 임시로 저장소를 지정한다. 검증 스크립트에서 유용하다.

오래된 패키지 정리

dnf repomanage --old --keep 2 /srv/repo/labhub
dnf repomanage --old --keep 2 /srv/repo/labhub | xargs -r rm -v
createrepo_c --update /srv/repo/labhub

몇 개를 남길지가 곧 롤백 가능 범위다. 반입 주기가 월 1회이고 3개를 남기면 약 3개월치 롤백이 가능하다.

현장에서 만나는 모습

저장소 표시 이름에 스냅샷 날짜. name=... (snapshot 2026-08-20) 처럼 적어 두면 6개월 뒤 dnf repolist -v 한 줄로 시점을 특정할 수 있다.

다음 실습에서 할 것

rpm 을 모아 createrepo_c 로 저장소를 만들고, .repo 파일을 작성하고, 그 저장소만 활성화해 설치하고, 패키지를 추가한 뒤 --update 로 갱신한다.