CentOS 7 Local Repository 만드는 방법 (인터넷 없이 yum 사용)

yum은 기본적으로 인터넷과 연결된 저장소(repository)를 바라보고 작업을 수행합니다. 저장소에 업로드되어 있는 패키지들을 인터넷을 통해 접근하고, 찾아서 내 리눅스에 받아오는 식입니다. 그 말은 인터넷에 연결할 수 없는 내부망 서버에선 사용이 불가하다는 의미입니다.

 

현업에선 보안상의 이유로 내부망에 서버를 구축하는 경우가 많습니다. 이처럼 인터넷이 없는 환경에서도 로컬에 repository를 만들어주면 yum을 이용할 수 있습니다. 이를 흔히 "로컬에 레포를 잡는다"고 말합니다.

로컬에 yum repository 만드는 방법

이 글은 CentOS 7을 기준으로 방법을 설명드립니다. 그러나 다른 배포판도 원리는 비슷하기 때문에 읽어보시면 패키지 관리 도구의 작동 방식을 이해하시는데 도움이 되실거에요.

1. CentOS iso 파일 준비

준비물은 CentOS iso 파일입니다. 저는 VMWARE PLAYER에 CentOS 7을 생성할 때 사용한 CentOS-7-x86_64-DVD-2009.iso 파일을 그대로 사용하겠습니다. iso 파일은 CentOS 홈페이지에서 다운받으실 수 있습니다.

 

http://isoredirect.centos.org/centos/7/isos/x86_64/

 

CentOS Mirrors List

 

isoredirect.centos.org

2. iso 파일 업로드

iso를 마운트 할 디렉토리를 만들고 해당 위치에 iso 파일을 업로드합니다. 저는 /home에 local_repo라는 경로를 만들겠습니다.

[root@localhost home]# mkdir local_repo
[root@localhost local_repo]# ls
CentOS-7-x86_64-DVD-2009.iso

3. iso 파일 마운트

아래의 명령어를 참고해 iso 파일을 마운트 합니다.

[root@localhost local_repo]# mount -o loop CentOS-7-x86_64-DVD-2009.iso /home/local_repo

여기서 사용한 -o loop {파일명.iso} 형태는 이미지 파일을 하나의 가상 장치처럼 사용할 수 있도록 하는 마운트 옵션입니다. CentOS-7-x86_64-DVD-2009.iso을 DVD로 인식하고 마운트 하라는 명령으로 이해하시면 됩니다.

 

iso 마운트

 

/dev/loop0이라는 파일시스템으로 /home/local_repo 디렉토리가 정상적으로 마운트 된 것이 확인됩니다.

 

[root@localhost local_repo]# ls
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA             isolinux  repodata  TRANS.TBL

이제 local_repo 디렉토리를 조회하면 iso 파일에 있는 내용이 풀려서 보입니다. 여기에 있는 Packages가 rpm 파일들이 저장되어 있는 경로입니다.

4. local repo 파일 생성

기본적으로 CentOS 7은 /etc/yum.repos.d 경로에 있는 .repo 확장자 파일들을 참조합니다. 여기에 설정된 값을 기준으로 인터넷 저장소를 찾아갑니다.

[root@localhost yum.repos.d]# ls
CentOS-Debuginfo.repo  CentOS-Sources.repo        
CentOS-Base.repo  CentOS-fasttrack.repo  CentOS-Vault.repo          MariaDB.rep
CentOS-CR.repo    CentOS-Media.repo      CentOS-x86_64-kernel.repo

 

여기 있는 repo 파일들은 모두 다른 경로로 옮겨줍니다. 저는 bak이라는 경로를 만들고 옮기겠습니다.

[root@localhost yum.repos.d]# mkdir bak
[root@localhost yum.repos.d]# mv *.* bak

 

이제 local.repo 파일을 아래와 같이 생성합니다.

[root@localhost yum.repos.d]# vi local.repo
[local-repo]
name=localRepository
baseurl=file:///home/local_repo
enabled=1
gpgcheck=0

5. 로컬 레포지토리 확인

clean all 명령어로 yum의 캐시를 삭제합니다.

[root@localhost yum.repos.d]# yum clean all

 

yum이 바라보고 있는 repolist를 확인합니다. 생성한 local-repo가 확인됩니다.

[root@localhost yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id                           repo name                               status
local-repo                        localRepository                         4,070
repolist: 4,070

 

search로 마리아db 패키지가 있는지 확인해 봅니다. 정상적으로 조회됩니다. 이제 install도 이용할 수 있습니다.

[root@localhost yum.repos.d]# yum search mariadb
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
============================= N/S matched: mariadb =============================
mariadb-bench.x86_64 : MariaDB benchmark scripts and data
mariadb-devel.x86_64 : Files for development of MariaDB/MySQL applications
mariadb-libs.x86_64 : The shared libraries required for MariaDB/MySQL clients
mariadb-server.x86_64 : The MariaDB server and related files
mariadb.x86_64 : A community developed branch of MySQL
mariadb-test.x86_64 : The test suite distributed with MariaD

참고 사항

1. Packages 용량

참고로 rpm 파일이 있는 Packages는 4GB가량됩니다. 전체 용량 중 대부분을 차지합니다.

[root@localhost local_repo]# du -ch
2.5M    ./EFI/BOOT/fonts
8.4M    ./EFI/BOOT
8.4M    ./EFI
60M     ./images/pxeboot
68M     ./images
60M     ./isolinux
498M    ./LiveOS
3.9G    ./Packages
15M     ./repodata
4.5G    .
4.5G    total

 

2. 마운트 된 iso 파일 마운트 해제

마운트 해제 명령어는 아래와 같습니다.

umount /home/local_repo

 

만약 target is busy라는 에러가 발생하면 아래와 같이 조치 후 다시 umount를 시도합니다.

fuser -ck /home/local_repo
반응형

댓글

Designed by JB FACTORY