[Linux] RHEL Local YUM Repository 구성

RHEL(Redhat Enterprise Linux)에 Local YUM Repository 구성하는 방법에 대하여 설명합니다. 레드햇 리눅스 같은 경우 기업환경의 인터넷이 되지 않는 환경에서 사용되는 경우가 많은데 Local YUM Repository를 구성하여 패키지를 쉽게 설치할 수 있습니다.

 

테스트 환경

• Red Hat Enterprise Linux (RHEL)

 

Local YUM Repository 구성 목적

Local YUM Repository를 구성하는 방법에 여러 가지가 있지만 가장 간단한 방법인 설치 CD를 이용해 구성하는 방법에 대해 소개합니다. 주로 이 방법은 OS 엔지니어가 RHEL을 설치 후 사용하며, local repo를 서버에 구성한 뒤 철수합니다. 그러면 애플리케이션 측에서 추가 패키지를 요청하여도 서버 관리자분들이 yum 명령어를 사용하여 쉽게 서버에 설치할 수 있습니다.

 

Local YUM Repository 설정

레드햇 설치 CD에는 기본 RHEL 서브스크립션에서 제공하는 RPM 패키지들이 모두 포함되어 있습니다. 따라서 RHEL을 설치한 버전과 동일한 ISO 파일이 준비되어 있어야 하며, 이를 통해 로컬 저장소를 구성할 수 있습니다.

레드햇 이미지

 

VMware Workstation을 기준으로 설명하자면, RHEL ISO 파일을 가상 머신에 마운트하면 됩니다. ISO 파일이 마운트되면 시스템은 자동으로 /dev/sr0 장치를 생성하게 되며, 이는 udev에 의해 처리됩니다.



 

CD가 삽입되면 시스템에서는 /dev/sr0 장치를 자동으로 생성합니다. 이 장치는 **광학 디스크 장치(CD/DVD)**로 인식되며, 이를 확인하는 가장 쉬운 방법은 lsblk 명령어를 사용하는 것입니다.

# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINTS
sda             8:0    0    2G  0 disk
└─mpatha      253:2    0    2G  0 mpath
sr0            11:0    1  12G  0 rom   /iso
여기서 sr0는 CD-ROM 장치를 의미하며, 실제 ISO 파일이 마운트된 장치입니다. 더 고급 방식으로는 udevadm monitor 명령을 통해 이벤트를 모니터링할 수도 있지만, 기본적인 장치 확인은 lsblk로 충분합니다.

장치가 인식되었다면, /media 디렉터리에 임시로 마운트하여 내용을 확인할 수 있습니다.

# mount -o loop /dev/sr0 /media

# df -h /media
Filesystem      Size  Used Avail Use% Mounted on
/dev/sr0         12G   12G     0 100% /media

 

CD 없이도 레포지터리가 작동하도록 하기 위해, /iso 디렉터리를 생성하고, CD의 모든 파일을 해당 디렉터리로 복사합니다.

# mkdir /iso
# cp -a /media/* /iso/

 /etc/yum.repos.d/ 디렉터리 아래에 로컬 저장소용 .repo 파일을 생성합니다. 파일 이름은 자유롭게 정할 수 있지만, 반드시 .repo 확장자로 끝나야 합니다.


        1) RHEL 8 이상 REPO 설정:

RHEL 8부터는 패키지가 BaseOSAppStream으로 분리되어 있으므로, 각각을 별도의 레포로 등록해야 합니다.

# cat /etc/yum.repos.d/local.repo
[BaseOS]
name=BaseOS repo
baseurl=file:///iso/BaseOS
gpgcheck=0
enabled=1

[AppStream]
name=AppStream repo
baseurl=file:///iso/AppStream
gpgcheck=0
enabled=1

        2) RHEL7 이하 REPO 설정:

RHEL 7 이전 버전에서는 패키지가 BaseOSAppStream으로 분리되어 있지 않기 때문에 하나의 저장소만 지정하면 됩니다.

# cat /etc/yum.repos.d/local.repo
[local]
name=localrepo
baseurl=file:///iso
gpgcheck=0
enabled=1

 

확인

  • RHEL8

아래와 같이 AppStream과 BaseOS 두 개의 레포가 정상적으로 출력되는지 확인합니다.

# dnf repolist -v
...
BaseOS repo       59 MB/s | 2.4 MB     00:00
AppStream repo    83 MB/s | 7.8 MB     00:00
Repo-id            : AppStream
Repo-name          : AppStream repo
Repo-revision      : 1665640599
Repo-updated       : Thu 13 Oct 2022 02:56:41 PM KST
Repo-pkgs          : 6,786
Repo-available-pkgs: 5,446
Repo-size          : 9.2 G
Repo-baseurl       : file:///iso/AppStream
Repo-expire        : 172,800 second(s)
Repo-filename      : /etc/yum.repos.d/local.repo

Repo-id            : BaseOS
Repo-name          : BaseOS repo
Repo-revision      : 1665640687
Repo-updated       : Thu 13 Oct 2022 02:58:08 PM KST
Repo-pkgs          : 1,720
Repo-available-pkgs: 1,718
Repo-size          : 1.3 G
Repo-baseurl       : file:///iso/BaseOS
Repo-expire        : 172,800 second(s)
Repo-filename      : /etc/yum.repos.d/local.repo
Total packages: 8,506

 

  • RHEL7 이하

RHEL7 이하의 경우는 다음과 같이 하나의 REPO만 확인하면 됩니다.

# yum repolist -v
...
Config time: 0.223
Yum version: 3.4.3
Setting up Package Sacks
pkgsack time: 0.003
Repo-id      : local
Repo-name    : localrepo
Repo-revision: 1582647003
Repo-updated : Wed Feb 26 01:10:03 2020
Repo-pkgs    : 5,231
Repo-size    : 3.6 G
Repo-baseurl : file:///iso
Repo-expire  : 21,600 second(s)
Repo-filename: /etc/yum.repos.d/local.repo

 

DNF 와 YUM 명령어

RHEL 8부터는 yum 명령어 대신 dnf 명령어가 기본으로 사용됩니다. 실제로 RHEL 8에서는 /usr/bin/yumdnf-3을 가리키는 심볼릭 링크로 되어 있으며, 기존 yum 명령어와 호환되므로 별도의 학습 없이 그대로 사용할 수 있습니다.

# which yum
/usr/bin/yum

# ls -al /usr/bin/yum
lrwxrwxrwx. 1 root root 5 Mar  9  2021 /usr/bin/yum -> dnf-3

 

마치며

Local YUM Repository 설정은 인터넷이 연결되지 않은 운영 환경뿐 아니라 테스트 환경에서도 매우 유용하게 사용됩니다. 단, 설치 CD/DVD 기반의 저장소는 최신 버전의 패키지를 포함하지 않는다는 한계가 있습니다. 최신 패키지 설치가 필요한 경우에는 Red Hat 서브스크립션을 등록하거나, 최신 패키지를 다운로드하여 HTTP 기반의 YUM 저장소를 별도로 구성하는 방법을 고려해야 합니다.

 

Reference

https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/6/html/installation_guide/sn-switching-to-gui-login

댓글

이 블로그의 인기 게시물

[Linux Command] sudo command 설명

[Ansible Modules] Fetch module 설명 및 활용