LabHub
배우기 러닝패스 코스

RHEL-Family Administration

Building a Repository With createrepo_c

LabHub 에서 이어서 보기

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

목표

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>

참고

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>

패키지 수와 메타데이터 종류를 모으세요. 값은 실제 확인 결과여야 합니다.