Linux - offline(CentOS 7)/Local YUM Repository

[CentOS] local YUM Repository 만들기 - CentOS Repository

기억력이 점점 나빠진다 2020. 9. 2. 14:54
반응형

 

 

특정 패키지들을 설치할때 인터넷이 되는 Online 환경에서 

YUM명령어를 통해 쉽고 빠르게 설치를 한다

 

그러나 Offline 인터넷이 안되는 환경에서는 YUM명령어를 사용하여 패키지를 다운받은 후 설치할 수가 없고, 

특정 RPM 패키지를 설치하려면 외부에서 다운받아와서 설치해야하는데, 의존성 때문에 패키지 설치가 쉽지 않다

필자도 그동안 수없이 삽질을 해왔던터라

언제부턴가 서버 로컬에 Repository를 구성하여 되도록 YUM 명령어를 통해 패키지들을 설치하게 되었다

 

YUM Repository를 구성할때 저장소 폴더를 나눠서 각각 설치할 프로그램이나 패키지를 나눠 구성할 수 있는데

일단 CentOS Repository를 생성하는걸로 글을 작성했다

 

1. CentOS Full 버전 ISO파일 다운로드

 

먼저 CentOS홈페이지에서 Full 버전의 iso파일을 다운로드 받자

반응형

https://www.centos.org/download/

 

Download

As you download and use CentOS Linux, the CentOS Project invites you to be a part of the community as a contributor. There are many ways to contribute to the project, from documentation, QA, and testing to coding changes for SIGs, providing mirroring or ho

www.centos.org

필자는 CentOS 7버전을 활용할거고 64bit환경이니 아래 그림의 링크를 들어가 아무 mirror 사이트를 클릭해

CentOS-7-x86_64-Everything-2003.iso 파일을 다운 받았다

용량이 꽤 크다...

 

현재 서버 OS는 CentOS 7버전이고, CentOS 7의 모든 패키지를 가지고 있는 EveryThing iso파일을 활용하였다

전체 패키지를 가지고 있는 iso파일 이름은 버전마다 다르니 용량이 제일 큰걸로 받으면 된다

(6, 8 버전은 DVD라고 써있고, 7버전은 EveryThing이라고 써있는 iso파일을 받으면 된다)

OS를 설치할때는 어떤 iso든 상관없지만 YUM Repository를 구성할땐 되도록 Full버전의 iso파일을 활용하자

 

다운로드한 iso파일을 Repository를 구성할 서버의 /root 경로로 복사하였다

경로는 용량이 큰 곳 아무대나 복사해도 된다

 

local YUM Repository를 구성할때 rpm파일만 복사해와서 구성해도 되는데

윈도우 환경에서 iso파일을 압축을 풀어서 패키지를 가져왔더니

패키지 이름이 길어 확장자가 잘리는 경우가 발생해

iso파일을 CentOS서버로 옮겨와 마운트하고 패키지를 복사하는 방식으로 진행했다

아래와 같은 경우를 얘기하는 건데

예전에 eclipse의 플러그인 이름이 경로가 길어 잘리는 경우가 발생할때

반디집이나 7z로 압축해제하면 해결됐는데 이것도 해결될지는 모르겠다

 

암튼 다른 패키지를 local YUM Repository를 구성할때는 모르겠으나

CentOS 패키지는 용량도 크고 파일도 많으니 iso파일을 일단 이용하자

 

 

2. CentOS 패키지 파일 복사

 

복사한 CentOS iso 파일에서 패키지 파일을 복사해 오자

 

일단 iso 파일이 있는 곳으로 이동하여 마운트해보자

마운트할 폴더는 /mnt인데 임의로 폴더를 만들어 사용해도 상관없다

 

 

# mount -o loop /root/CentOS-7-x86_64-Everything-1708.iso /mnt

 

/mnt 폴더를 확인해보니 잘 마운트 되었다

우리가 활용할 패키지는 Packages 폴더에 있다

마운트된 폴더를 Yum Repository로 지정하여 사용하는 사람들도 있는데 

필자는 Packages 폴더에 있는 패키지만 복사해와서 로컬 저장소를 생성할 것이다

이런 이유는

iso파일의 용량이 커서 공간을 잡아먹는 것,

다른 서버에도 적용할때 패키지들만 아카이브 파일로 만들어 복사하려는 것,

다른 CentOS 패키지 외 다른 패키지를 구성할때 로컬 저장소를 한곳에 모아 각각 폴더로 구분하여 사용하려는 것

때문이다

 

그냥 마운트된 폴더를 활용하려는 사람은 바로 3번 과정으로 넘어가면 된다

 

그럼 해당 패키지들을 local Repository로 구성할 폴더에 복사를 해주자

필자는 /root/local-repo/CentOS-7 폴더에 구성하고자 한다

 

# mkdir /root/local-repo

# mkdir /root/local-repo/CentOS-7

# cp -rf /mnt/Packages /root/local-repo/CentOS-7/

 

패키지들이 많다 보니 시간이 좀 걸린다

복사된 것을 확인하고 마운트를 해제하고, 용량만 차지하는 iso파일은 삭제하자

 

# umount /mnt

# rm /root/CentOS-7-x86_64-Everything-1708.iso

 

 

3. local YUM Repository 설정

3.1 패키지 폴더 Repository 지정

CentOS 패키지 파일이 위치한 폴더를 Repository로 동작할 수 있도록 지정을 해주자

지금은 아래와 같이 복사해온 패키지 파일만 있을 것이다

필자는 Packages 폴더 자체를 복사해와 Packages 폴더 안에 패키지 파일이 있지만

Packages 폴더 없이 패키지 파일을 복사해 와도 무방하다

이제 해당 폴더를 YUM Repository로 작동하게끔 설정을 해주자

createrepo 명령어로 해당 폴더의 경로를 입력하면 아래와 같이 생성된다

 

# createrepo /root/local-repo/CentOS-7

패키지 파일이 많아 시간이 좀 걸린다

해당 저장소에 repodata라는 폴더가 생성이 됐다

안에 보면 Repository로 동작하게끔 해주는 설정파일들이 존재한다

 

3.2 Yum Repository 파일 설정

이제 복사해온 패키지 폴더를 local YUM Repository로 만들어 보자

YUM Repository에 대한 설정 파일은 /etc/yum.repo.d에 위치되어 있다

위 폴더로 이동해서 보면 아래와 같은 CentOS YUM Repository의 설정파일들이 기본으로 있다

인터넷이 연결된 상태에서 사용할 수 있는 것들이므로

해당 파일들을 삭제해주도록 하자, 또는 임의의 폴더에 옮겨주도록 하자

(위 이미지의 epel.repo파일은 필자가 epel 설치를 하면서 생성된 파일이다)

 

# rm /etc/yum.repos.d/CentOS*

 

이제 local YUM Repository 설정파일을 생성해 주도록 하자

파일이름은 local-CentOS-7.repo 로 하였다

 

# vi /etc/yum.repos.d/local-CentOS-7.repo

[CentOS7-local-repo]
name=CentOS Local Repository
baseurl=file:///root/local-repo/CentOS-7
gpgcheck=0
enabled=1

위와 같이 입력해주자

대괄호 안의 이름과 name은 아무렇게나 작성해도 무관하다

baseurl은 local YUM Repository로 구성할 폴더를 지정해 주면 된다

 

 

3.3 local YUM Repository 동작확인

이제 마지막이다

설정한 저장소가 YUM Repository로 동작하는지 확인해 보자

일단 3.2과정에서 기존 Repository 설정 파일을 삭제하고 추가도 하였으니 정리하고, 확인해보자

 

# yum clean all

# yum repolist

위처럼 나오면 정상이다

해당 CentOS local YUM Repository에 패키지가 9.591개가 있는 것을 알 수 있다

 

이제 yum 명령어를 통해 아무 패키지나 설치해보자

필자는 간단한 telnet을 설치해 보았다

의존성 체크도 하고 잘된다

telnet은 딱히 의존성이 있는 패키지가 없어 하나만 나오는데

다른 패키지를 설치하면 의존성 체크하여 다 설치해준다

 

 

반응형