본문 바로가기

기술 이야기/Linux

YUM Repository Build - YUM 리포지토리 만들기

본 문서의 목적은 Amazon 클라우드 상의 소프트웨어 배포를 위한 YUM Repository를 구축하는 방법을 설명합니다. Yum은 레드햇 계열의 리눅스에서 소프트웨어를 배포하기 위한 방법으로 rpmbuild를 활용하여 구축을 할 경우 손쉽게 대상 서버들로 배포하는 것이 가능합니다.


1.1 YUM repository 구축을 위한 createrepo 패키지 설치


Repository 구축은 createrepo 명령을 활용하여 만들 수 있습니다. 일반적으로 설치된 패키지에는 createrepo 패키지가 설치되어 있지 않으므로 해당 패키지를 설치 후 시스템을 구축해야 합니다.


아래의 명령어를 활용하여 createrepo.noarch 패키지를 설치합니다.

[root@ip-10-100-0-10 ~]# yum install createrepo.noarch


설치 화면은 아래와 같은 결과를 보입니다.

[root@ip-10-100-0-10 ~]# yum install createrepo.noarch
Loaded plugins: priorities, security, update-motd, upgrade-helper
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package createrepo.noarch 0:0.9.9-11.2.amzn1 will be installed
--> Processing Dependency: python-deltarpm for package: createrepo-0.9.9-11.2.amzn1.noarch
--> Processing Dependency: deltarpm for package: createrepo-0.9.9-11.2.amzn1.noarch
--> Processing Dependency: pyliblzma for package: createrepo-0.9.9-11.2.amzn1.noarch
--> Processing Dependency: libxml2-python for package: createrepo-0.9.9-11.2.amzn1.noarch
--> Running transaction check
---> Package deltarpm.x86_64 0:3.5-0.5.20090913git.4.amzn1 will be installed
---> Package libxml2-python.x86_64 0:2.7.8-10.26.amzn1 will be installed
---> Package pyliblzma.x86_64 0:0.5.3-3.4.amzn1 will be installed
---> Package python-deltarpm.x86_64 0:3.5-0.5.20090913git.4.amzn1 will be installed
--> Finished Dependency Resolution
Dependencies Resolved

=============================================================================================================
 Package                           Arch                     Version                                         Repository                      Size
=============================================================================================================
Installing:
 createrepo                        noarch                   0.9.9-11.2.amzn1                                amzn-main                      106 k
Installing for dependencies:
 deltarpm                          x86_64                   3.5-0.5.20090913git.4.amzn1                     amzn-main                      100 k
 libxml2-python                    x86_64                   2.7.8-10.26.amzn1                               amzn-updates                   417 k
 pyliblzma                         x86_64                   0.5.3-3.4.amzn1                                 amzn-main                       49 k
 python-deltarpm                   x86_64                   3.5-0.5.20090913git.4.amzn1                     amzn-main                       24 k

Transaction Summary
=============================================================================================================
Install       5 Package(s)

Total download size: 696 k
Installed size: 2.6 M
Is this ok [y/N]: y
Downloading Packages:
(1/5): createrepo-0.9.9-11.2.amzn1.noarch.rpm                                                                             | 106 kB     00:00
(2/5): deltarpm-3.5-0.5.20090913git.4.amzn1.x86_64.rpm                                                                    | 100 kB     00:00
(3/5): libxml2-python-2.7.8-10.26.amzn1.x86_64.rpm                                                                        | 417 kB     00:00
(4/5): pyliblzma-0.5.3-3.4.amzn1.x86_64.rpm                                                                               |  49 kB     00:00
(5/5): python-deltarpm-3.5-0.5.20090913git.4.amzn1.x86_64.rpm                                                             |  24 kB     00:00
-------------------------------------------------------------------------------------------------------------
Total                                                                                                            131 kB/s | 696 kB     00:05
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : deltarpm-3.5-0.5.20090913git.4.amzn1.x86_64                                                                                   1/5
  Installing : python-deltarpm-3.5-0.5.20090913git.4.amzn1.x86_64                                                                            2/5
  Installing : libxml2-python-2.7.8-10.26.amzn1.x86_64                                                                                       3/5
  Installing : pyliblzma-0.5.3-3.4.amzn1.x86_64                                                                                              4/5
  Installing : createrepo-0.9.9-11.2.amzn1.noarch                                                                                            5/5
  Verifying  : pyliblzma-0.5.3-3.4.amzn1.x86_64                                                                                              1/5
  Verifying  : deltarpm-3.5-0.5.20090913git.4.amzn1.x86_64                                                                                   2/5
  Verifying  : python-deltarpm-3.5-0.5.20090913git.4.amzn1.x86_64                                                                            3/5
  Verifying  : createrepo-0.9.9-11.2.amzn1.noarch                                                                                            4/5
  Verifying  : libxml2-python-2.7.8-10.26.amzn1.x86_64                                                                                       5/5

Installed:
  createrepo.noarch 0:0.9.9-11.2.amzn1

Dependency Installed:
  deltarpm.x86_64 0:3.5-0.5.20090913git.4.amzn1            libxml2-python.x86_64 0:2.7.8-10.26.amzn1     pyliblzma.x86_64 0:0.5.3-3.4.amzn1
  python-deltarpm.x86_64 0:3.5-0.5.20090913git.4.amzn1

Complete!
[root@ip-10-100-0-10 ~]#

1.2 Repository 디렉토리 생성 및 아파치 구성

리포지토리로 사용될 디렉토리를 생성하고, 아파치를 구성하는 작업을 수해해야 합니다. 본 문서에서 생성되는 디렉토리를 /opt/repo 라는 디렉토리를 사용합니다. 웹 서버의 경우 아파치에 기본적으로 설치되는 패키지를 yum 명령어를 활용하여 설치합니다. 


1.2.1 Yum repository를 위한 디렉토리 생성

아래의 명령을 수행하여 디렉토리를 생성합니다.

[root@ip-10-100-0-10 opt]# mkdir -p /opt/repo


1.2.2 아파치 설치 및 디렉토리 연결

리포지토리를 HTTP로 사용하기 위한 다음의 명령어를 활용하여 아파치 패키지를 설치합니다.


[root@ip-10-100-0-10 repo]# yum -y install httpd


설치가 완료되면 위의 createrepo와 같은 진행이 이루어집니다. 설치가 완료되면 /etc/httpd에 설정 정보가 설치됩니다. 앞서 생성된 /opt/repo 디렉토리를 웹 서버 상의 디렉토리로 인식되도록 아래와 설정을 추가합니다.

[root@ip-10-100-0-10 ~]# vi /etc/httpd/conf.d/repo.conf

Alias /repo "/opt/repo"

이후 시스템 기동시 구동되도록 chkconfig를 활용하여 서비스를 on 상태로 변경합니다. 
[root@ip-10-100-0-10 repo]# chkconfig httpd on

변경 후 이제 서비스를 시작합니다. 
[root@ip-10-100-0-10 repo]# service httpd start

1.3 RPM 복사 및 Repository 생성

이제 생성된 RPM을 앞서 생성한 /opt/repo 디렉토리로 옮깁니다. 해당 디렉토리에 저장된 RPM들을 활용한 리포지토리 생성을 위하여 다음의 명령을 입력합니다. 
[root@ip-10-100-0-10 repo]# cd /opt/repo 
[root@ip-10-100-0-10 repo]# createrepo . 

위의 명령이 수행되면 /opt/repo 디렉토리 하위의 repodata 디렉토리가 생성됩니다. 해당 디렉토리에는 리포지토리에 대한 메타데이터 등이 포함되어 있습니다.

1.4 YUM 클라이언트 설정 및 테스트


이제 서버 측의 기본적인 설정 구성이 완료되었습니다. 이제 클라이언트의 입장이 되어 서버측의 yum repository에서 데이터를 가져오는 설정을 수행하도록 합니다. 

1.4.1 Yum config 추가

Yum 리포지토리에서 패키지를 다운로드 받기 위해서는 /etc/yum.repo.d 디렉토리에 확장자 .repo에 해당하는 파일을 작성하고 리포지토리 URL을 지칭하는 설정을 추가하면 됩니다. 


Vi를 활용하여 아래의 파일을 설정하도록 합니다. 

[root@ip-10-100-0-10 repo]# vi /etc/yum.repo.d/adhub-3.0.repo


아래의 내용을 편집기를 통해 복사, 붙여넣기 후 저장하도록 합니다.

[osc-repository]
name=Open Source Consulting YUM Repository
baseurl=http://10.100.0.10/repo/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-amazon-ga


gpgkey는 리눅스에서 제공하는 repository key로써 다른 설정 파일의 항목을 활용하였습니다.


이제 설정이 완료되었으면 테스트를 수행하면 됩니다. 

1.4.2 YUM 테스트
이제 위에서 설정된 파일을 이용하여 테스트를 수행하도록 합니다. 

[root@ip-10-100-0-10 repo]# yum clean all
[root@ip-10-100-0-10 repo]# yum repolist

Loaded plugins: priorities, security, update-motd, upgrade-helper
amzn-main                                                      | 2.1 kB     00:00
amzn-updates                                                   | 2.3 kB     00:00
repo id                              repo name                                  status
adhub3.0-repository                  ADHUB 3.0 YUM Repository                       1
amzn-main                            amzn-main-Base                             3,687
amzn-updates                         amzn-updates-Base                            705
repolist: 4,393
[root @ip-10-100-0-10 ~]$