lsblk 에서 USB 로 보이는 것이 실제 USB 가 아닐 수 있다. sr0 는 CD · DVD 자리이므로 iDRAC 가상 미디어로 ISO 를 물렸거나 ISO 를 구운 USB 일 가능성이 높다. 마운트 절차는 어느 쪽이든 같다.
lsblk
mkdir -p /mnt/iso
mount -o ro /dev/sr0 /mnt/iso
ls /mnt/iso
내용물 형태에 따라 이후가 갈린다.
| 보이는 내용 | 정체 | 할 일 |
|---|---|---|
BaseOS/, AppStream/ |
RHEL 8 설치 ISO | 그대로 repo 로 쓴다 |
repodata/ + *.rpm |
이미 repo 형태 | 복사만 하면 끝 |
*.rpm 만 잔뜩 |
메타데이터 없음 | createrepo 로 만든다 |
[local-baseos]
name=Local RHEL BaseOS
baseurl=file:///mnt/iso/BaseOS
enabled=1
gpgcheck=0
[local-appstream]
name=Local RHEL AppStream
baseurl=file:///mnt/iso/AppStream
enabled=1
gpgcheck=0
/etc/yum.repos.d/local-iso.repo 로 저장한다. loop 마운트는 재부팅하면 풀리므로 /etc/fstab 에 넣어 두거나 아래처럼 복사해서 쓴다.
dnf install -y createrepo_c
mkdir -p /repo/local
cp -rv /mnt/iso/*.rpm /repo/local/
createrepo /repo/local
RPM 을 추가한 뒤에는 createrepo --update /repo/local 로 메타데이터만 갱신한다.
폐쇄망 클러스터에서는 한 대를 repo 서버로 두고 나머지가 HTTP 로 받아 가는 구성이 편하다.
dnf install -y httpd
systemctl enable --now httpd
mkdir -p /var/www/html/rhel8
cp -rv /mnt/iso/* /var/www/html/rhel8/
restorecon -R /var/www/html/rhel8 # SELinux 가 켜져 있으면 필요하다
[local-baseos]
name=Local RHEL BaseOS
baseurl=http://<repo-host>/rhel8/BaseOS
enabled=1
gpgcheck=0
dnf clean all
dnf repolist
용량이 큰 파일을 담을 것이라면 /var/www/html 을 별도 볼륨(위 예의 lv_repo 같은) 에 마운트해 두고 복사한다. 루트 파일시스템이 차면 서비스가 같이 죽는다.