폐쇄망 리눅스 환경에서는 인터넷 통신을 할 수 없기 때문에 yum으로 외부 repository를 통해 패키지를 설치할 수 없다.
이런 환경에서 패키지를 설치해야 하면 좀 곤란하다. rpm 파일로 설치할 수도 있긴한데 리눅스 특성상 종속성 안 맞는 거 하나씩 나오기 시작하면 한도 끝도 없어서 짜증이 치솟는다.
이럴 때 사용할 수 있는 방법 중 하나가 같은 배포판의 iso 이미지 파일로 로컬 레포지토리 환경을 만드는 건데 이렇게 구성하면 인터넷 없이도 yum, dnf가 알아서 필요한 의존 패키지를 모두 설치해준다.
Rocky 8 Local Repository 잡기
iso 파일을 다운받는다. 검색하면 쉽게 찾을 수 있는데 여기서 다운받을 수 있다.
아무래도 용량은 제법된다. rocky 8.6 iso 파일은 10G 쯤 되는데 아마 다른 배포판도 비슷할 거 같다.
이걸 USB에 담아서 리눅스 장비에 마운트하거나, 리눅스에 iso 파일을 업로드한다.
가능하다면 직접 업로드를 하는 편이 좀 더 수월하다.
왜냐하면 USB로 담으면 파일시스템 호환이 문제가 될 수 있다. 모든 리눅스 환경이 그런 건 아닌데 exFat 이나 NTFS 파일시스템이 호환되지 않는 경우가 있다. 그러면 마운트가 불가능하다.
파일시스템 호환 문제를 해결하려면 패키지 설치가 필요한데 지금 이러고 있는 이유가 패키지 설치를 못하고 있어서이기 때문에 결국 도돌이표다.
대부분의 USB에서 쓰는 파일시스템이 exFat 아니면 NTFS이기 때문에 USB로 할 거면 리눅스 프롬프트에
cat /proc/filesystems
입력해보고 목록에 exFat이나 NTFS가 있는지 부터 확인해야 한다. 참고로 vFat(Fat32)은 대부분의 리눅스에서 호환되긴 하는데 해당 파일시스템은 단일 파일 최대 업로드 용량이 4G로 제한된다.
vFat으로 분할 압축해서 10G를 나눠서 업로드하는 방법도 있긴한데 일단 그 방법은 제쳐두기로 하자.
쓰다보니 다른 설명이 좀 길어졌는데 그래도 막상 닥치면 중요한 문제긴 하다.
1. USB로 연결한 경우
다시 돌아와서 만약 USB나 CD로 장비에 연결했다면
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 10.5G 0 rom /run/media/roo/Rocky-8-6-x86_64-dvd
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─rl-root 253:0 0 17G 0 lvm /
└─rl-swap 253:1 0 2G 0 lvm [SWAP]
lsblk 명령어를 입력하면 연결된 디스크가 확인된다.
내 경우엔 VM에서 iso를 연결했기 때문에 rom으로 잡히고 있다.
sr0 11:0 1 10.5G 0 rom /run/media/roo/Rocky-8-6-x86_64-dvd
sr0를 마운트할 디렉터리를 하나 만든다.
mkdir /mnt/iso
이 경로에 sr0을 마운트한다.
[root@localhost iso]# mount /dev/sr0 /mnt/iso
mount: /mnt/iso: WARNING: device write-protected, mounted read-only.
경로에 가보면 파일들이 확인된다.
[root@localhost iso]# ls /mnt/iso
AppStream BaseOS EFI images isolinux LICENSE media.repo TRANS.TBL
이 파일들을 리눅스로 옮기기 위해 디렉터리를 원하는 위치에 생성한다.
[root@localhost rockyiso]# mkdir /tmp/rockyiso
파일을 모두 복사 한다. 이 과정은 경우에 따라 몇 분 가량 걸릴 수도 있다.
[root@localhost iso]# cp -a /mnt/iso/ /tmp/rockyiso/
기존 레포지토리를 백업한다.
[root@localhost yum]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir repobak
[root@localhost yum.repos.d]# mv * repobak
로컬 레포지토리 파일을 만들어 저장한다.
[root@localhost yum.repos.d]# vim local.repo
[ISO_AppStream]
name=Rocky8.6_AppStream
baseurl=file:///tmp/rockyiso/AppStream/
enabled=1
gpgcheck=0
[ISO_BaseOS]
name=Rocky8.6_BaseOS
baseurl=file:///tmp/rockyiso/BaseOS/
enabled=1
gpgcheck=0
레포지토리의 메타데이터를 캐싱한다.
[root@localhost yum.repos.d]# dnf makecache
이제 yum이나 dnf를 쓰면 로컬에 있는 패키지를 보고 설치한다.
2. iso 파일을 업로드한 경우
마운트 하는 명령어만 조금 달라진다.
mount -o loop Rocky-8.6-x86_64-dvd1.iso /mnt/iso
마운트 이후의 진행은 똑같이 하면 된다.