본문 바로가기
Linux/Linux

Linux) Local YUM Repository 구성 - RHEL, CentOS

by LILO 2021. 5. 2.
반응형

Local YUM Repository 구성하는 이유?

 

Local YUM Repository란?   말 그대로 Local(해당 지역) 내에서만 돌아가는 YUM 저장소입니다. YUM 저장소 안에 구성된 파일은 RPM이라는 확장자를 가지고 있는 패키지입니다. 

흔히들 이것을 Local Repo(로컬 레포)라고 부릅니다. 

필드에서 누군가가 "레포 잡아주세요"라고 하면 대부분이 Local Repo를 잡아주는 것입니다.

 

 

일반적으로 운영중인 서버는 외부 통신이 되지 않는 폐쇄망에서 운영되기 때문에 Local Repository를 구성합니다.

왜 서버를 폐쇄망에 구축하는 것일까요? 하루에 수백번 아니 수천번씩 해커들이 서버에 진입하려고 시도를 합니다. 그런데 외부 통신을 허용했다가 악성을 가진 경로 혹은 파일에 접근하면 그 서버는 뚫리게됩니다.
결국엔 보안때문입니다.

 

YUM(Yellowdog Updater Modified)이란? 레드햇 계열에서 사용되는 명령어로 RPM 패키지를 관리하는 도구입니다.

RPM(Redhat Package Manager)이란?  RPM은 레드햇 계열에서 사용되는 패키지로 Windows의 Setup 파일과 비슷하다고 생각하면 좋을 것 같습니다.

 

 

 

 

YUM 명령어

 

YUM은 크게 패키지관련 설치, 제거, 저장소 업데이트, 원복 등의 작업을 할 때 많이들 사용합니다. 물론 추가적으로 더 들어가면 빠른 이용을 위한 캐시 저장 및 설치할 패키지들 다운로드 등도 있기는 합니다.

RHEL 8버전 이상은 yum 대신 dnf 명령어를 이용하면 됩니다.

 

이 파트에서 사용할 명령어는 아래와 같습니다.

# yum clean all            (YUM Repository 관련 정보를 전부 지움.)
# yum repolist             ("/etc/yum.repos.d/" 경로에 있는 "~~~.repo"의 확장자의 파일을 읽어서 Repo에 저장)
# yum install               (패키지 설치)

 

추가적으로 명령어가 궁금하신 분들은 "man yum"을 쳐서 확인 하거나 애매하다 싶은 부분은 구글링을 통해 테스트하면 좋을 것 같습니다.

 

 

 

Local YUM Repository 구성 - LAB

 

YUM Repository를 설정하는 경로는 "/etc/yum.repos.d"입니다. 해당 경로에 "~~.repo"와 같이 repo라는 확장자를 가진 파일을 만들어줍니다.  

 

CentOS나 RHEL을 설치하면 기본으로 Repo가 잡혀있는 것들이 있습니다. RHEL의 경우는 Subscription-manager 명령을 통해 해당 Repo를 enable 시켜줘야 Repo 파일 안에 내용이 채워집니다.

하지만, CentOS는 오픈소스이기 때문에 기존 파일에 Repository에 대한 주소가 잡혀져있습니다. 우리는 지금 인터넷이 되지 않는 환경이니까 당연히 오류가 뜨겠죠? 

 

 

"Could not resolve host http://mirrorlist.centos.org~~~" 라는 현재 mirrorlist.centos.org라는 호스트를 찾아낼 수 없다는 에러가 출력됩니다.

이 에러가 출력되는 원인은 외부와 통신되지 않거나 외부와 통신되는 nameserver가 설정되어 있지 않기 때문입니다.

해당 주소에서 Repo를 가져오려면 외부와 통신되는 DNS 및 네트워크가 필요합니다.

 

이 글에서는 외부 통신을 사용하지 않을 것이기 때문에 다음으로 CentOS-7이라는 이름을 가진 Repo 파일을 전부 삭제해주는 작업을 합니다.

# ll /etc/yum.repos.d/                              (Repo 파일 확인)
# rm -rf /etc/yum.repos.d/CentOS-*            (CentOS로 시작하는 파일들 모두 삭제)

정상적으로 삭제됐는지 확인합니다. 

 

주의할 점이 있습니다. 실무에서는 너무 파일이 많지 않는 이상 "-f" 옵션을 사용하지 않는 것을 추천드립니다. 

"-f" 옵션은 지금 하고 있는 행동을 강제로 진행하겠다는 말입니다. (rm -rf)

 

Repository를 잡기 위해서 iso 파일을 서버가 인식하게 해줍니다. 

방법은 CD, USB, iso 파일을 서버에 SCP로 전송 등의 방법이 있습니다. VM 기준으로는 그냥 CD를 삽입해주는 것이 가장 간편하고 빠른 방법입니다.

 

iso 파일을 삽입했으면 임시 디렉토리에 mount 시켜서 repo 디렉토리에 내용을 복사하는 과정이 필요하기 때문에 2개의 디렉토리를 만들어줍니다.

# mkdir /root/tmp            (마운트 할 임시 디렉토리 생성)
# mkdir /root/repo           (Repo의 안에 구성될 패키지들이 들어갈 파일들)

 

이제 임시 디렉토리에 마운트하는 작업을 진행합니다.

# mount -o loop /dev/sr0  /root/tmp
# ll /root/tmp

 

정상적으로 마운트가 됐습니다. 

iso 파일을 가져오라는 말만 해서 가져오긴 했는데 왜 가져 오나요?  iso 파일 안에는 Packages라는 디렉토리가 있습니다. 이 안에는 서버를 운영하는데 필요한 가장 기본적인 RPM들이 모여있습니다. 그래서 iso 파일을 가져오는 것입니다.

 

이제 파일들을 실제로 Repository 구성할 때 땡겨올 경로에 복사를 해줍니다.

 

# cp -rfvp /root/tmp  /root/repo
# ll /root/repo
왜 "-v" 옵션을 쓸까요? v는 verbose의 약자입니다. 현재 진행되고 있는 작업을 눈으로 볼 수 있습니다. 현재 작업에서는 내 파일들이 정상적으로 잘 복사되고 있는지를 확인하기 위해 사용합니다  (v 옵션은 필수가 아닙니다.)

 

정상적으로 복사가 되었습니다. 이제 임시 디렉토리에 마운트 걸어놓은 것을 마운트 해제하고 VirtualBox에 삽입한 CD도 빼줍니다.

정상적으로 마운트가 해제된 것을 확인합니다.

# umount /root/tmp
# ll /root/tmp

 

이제  Repo 파일을 작성합니다.

# vi /etc/yum.repos.d/local.repo

[local]                                                     
name=CentOS-7.9-Basic
baseurl=file:///root/repo
enabled=1
gpgcheck=0

 

 

위와 같이 작성하고 repo를 불러오는 작업을 합니다.

# yum repolist

 

 

<Repo 파일 내용 형식>

[repo id]
name= repo name
baseurl= package와 repodata가 있는 위치
gpgcheck: 0(GPG 서명 사용 안함), 1(GPG 서명 사용함
enabled: 1(Repo 활성화), 0(Repo 비활성화)

 

이상으로 Local Yum Repository 작업을 마치겠습니다.

반응형