[Linux] CentOS8에서 웹 서버를 활용한 개인 Yum Repository 서버 구축하기
blog post
이번 포스트에서는 CentOS8 에서 Yum 레포지토리를 구축하고 아파치 웹 서버를 통해 다른 장치에서도 해당 레포지토리에 접근할 수 있도록 구성해 보겠습니다.
우선 서버 구축에 필요한 도구들을 설치합니다.
[root@server ~]# yum install httpd createrepo yum-utils
RPM 패키지를 저장하고 관리할 레포지토리용 디렉토리를 생성합니다.
[root@server /]# mkdir /var/www/html/repo
reposync 명령은 RHEL 계열에서 사용되는 RPM 패키지를 내려받을 수 있도록 개발된 도구입니다. 이 툴을 사용하여 RHEL 계열 yum 레포지토리에서 가장 기본인 BaseOS 레포지토리를 로컬에 구축해 보겠습니다.
reposync를 사용하여 아래와 같이 RPM 패키지들을 전부 /var/www/html/repo/에 저장합니다. 물론 레포지토리 디렉토리 위치는 수정되어도 무관합니다.
[root@server html]# reposync -m --repoid=BaseOS --newest-only --download-metadata -p /var/www/html/repo/
CentOS-8 - Base 3.7 kB/s | 3.8 kB 00:01
CentOS-8 - Base 5.5 MB/s | 11 MB 00:01
저장소에 대한 comps.xml BaseOS 저장된
(1/1666): ModemManager-glib-1.10.4-1.el8.i686.rpm 2.0 MB/s | 270 kB 00:00
(2/1666): ModemManager-glib-1.10.4-1.el8.x86_64.rpm 1.5 MB/s | 264 kB 00:00
(3/1666): NetworkManager-adsl-1.20.0-5.el8_1.x86_64.rpm 1.8 MB/s | 130 kB 00:00
(4/1666): NetworkManager-bluetooth-1.20.0-5.el8_1.x86_64.rpm 1.9 MB/s | 153 kB 00:00
현재 포스트 작성 시점으로 1666개의 패키지를 내려받는 것을 볼 수 있습니다.
다운로드를 마치면 createrepo 명령을 사용하여 /repo 디렉토리를 yum 레포지토리로 지정합니다. (정확히는 yum 레포지토리 구성에 필요한 메타데이터 정보를 생성한다고 볼 수 있습니다)
[root@server ~]# createrepo -g comps.xml /var/www/html/repo/BaseOS/
Directory walk started
Directory walk done - 1666 packages
Temporary output repo path: /var/www/html/repo/BaseOS/.repodata/
Preparing sqlite DBs
Pool started (with 5 workers)
Pool finished
[root@server ~]#
이제 앞서 생성한 레포지토리를 실제로 yum 명령으로 사용할 수 있도록 아래와 같이 /etc/yum.repos.d/에 repo 파일을 생성합니다.
[root@server repo]# touch /etc/yum.repos.d/myrepo.repo
생성된 myrepo.repo 파일에 레포지토리 관련 내용을 작성합니다. 이때 baseurl에 방금 만든 /repo/var/www/html/repo/BaseOS/ 디렉토리로 지정합니다.
[root@server repo]# vim /etc/yum.repos.d/myrepo.repo
[myrepo]
name=Local Repository
baseurl=file:///var/www/html/repo/BaseOS/
enabled=1
gpgcheck=0
이제 시스템에 등록된 yum 레포지토리 리스트를 갱신해 줍니다.
[root@server repo]# yum clean all
[root@server repo]# yum repolist
CentOS-8 - AppStream 3.8 MB/s|6.6 MB 00:01
CentOS-8 - Base 3.0 MB/s|5.0 MB 00:01
CentOS-8 - Extras 4.9 kB/s|4.9 kB 00:01
Extra Packages for Enterprise Linux Modular 8 - x86_64 10 kB/s |116 kB 00:11
Extra Packages for Enterprise Linux 8 - x86_64 181 kB/s|6.2 MB 00:35
Local Repository 13 MB/s | 13 kB 00:00
repo id repo name status
AppStream CentOS-8 - AppStream 5,124
BaseOS CentOS-8 - Base 2,126
*epel Extra Packages for Enterprise Linux 8 - x86_64 5,219
*epel-modular Extra Packages for Enterprise Linux Modular 8 - x86_64 0
extras CentOS-8 - Extras 12
myrepo Local Repository 1,664
정상적으로 myrepo가 레포지토리 리스트에 등록된 것을 확인할 수 있습니다.
잘 동작하는지 간단하게 테스트해 보기위해 "tmux" 설치를 시도해 보겠습니다.
[root@server repo]# yum install tmux
마지막 메타 데이터 만료 확인 : 0:01:39 전에 2020년 04월 09일 (목) 오후 04시 33분 12초.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
tmux x86_64 2.7-1.el8 BaseOS 317 k
Transaction Summary
================================================================================
설치 1 Package
Total download size: 317 k
Installed size: 781 k
Is this ok [y/N]:
보시다시피 방금 우리가 생성한 myrepo를 통해서 설치되지 않고, 여전히 BaseOS 레포지토리를 통해 받아오기를 시도하고 있는 것을 볼 수 있습니다. 왜냐하면 기존 CentOS-BaseOS 레포지토리를 통해서도 여전히 tmux를 받아올 수 있기 때문이죠.
따라서 잠시 기존 CentOS-Base.repo의 BaseOS 레포지토리를 비활성화 해놓고 다시 시도해 보겠습니다. 아래와 같이 enabled를 0으로 변경해 주면 됩니다.
[root@server repo]# vim /etc/yum.repos.d/CentOS-Base.repo
[BaseOS]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
#enabled를 0으로 변경해줍니다.
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
다시 다운로드를 시도해보면 myrepo를 통해서 받아오기를 시도하는 것을 볼 수 있습니다.
[root@server yum.repos.d]# yum install tmux
마지막 메타 데이터 만료 확인 : 0:00:31 전에 2020년 04월 09일 (목) 오후 08시 22분 01초.
Dependencies resolved.
============================================================================
Package Architecture Version Repository Size
============================================================================
Installing:
tmux x86_64 2.7-1.el8 myrepo 317 k
Transaction Summary
============================================================================
설치 1 Package
Total size: 317 k
Installed size: 781 k
Is this ok [y/N]:
앞서 myrepo 설치 테스트까지는 아직 로컬 환경입니다. 이제 다른 리눅스 서버에서도 우리가 구축한 yum 레포지토리에 접근할 수 있도록 웹 서버를 연동해 보겠습니다.
앞서 이미 httpd는 설치했으므로 넘어가고, vim으로 /etc/httpd/conf/httpd.conf 를 열어보겠습니다.
아래와 같이 <Directory "/repo"> ... </Directory> 를 추가 후, httpd 서비스를 재시작 합니다.
[root@server ~]# vim /etc/httpd/conf/httpd.conf
...생략...
<Directory "/repo">
Options All Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
...생략...
[root@localhost ~]# systemctl restart httpd
물론 위 설정은 /var/www/html/에 repo 디렉토리를 추가했다는 전제 하에 설정입니다. 따라서 레포지토리 디렉토리 구조를 다르게 하실 경우, 위의 설정도 변경되어야 합니다. http 웹 서버 설정에 대한 방법까지 설명하기 시작하면 글이 길어지고 주제에도 맞지 않으므로 자세한 설명은 생략하고 넘어가도록 하겠습니다.
보안 설정은 외부에서 접근할 때 내부 보안 정책에 의해 차단되는 것을 방지하기 위한 부분입니다.
selinux에 의해 내부 레포지토리 접근이 차단될 수 있습니다. 가장 편한 방법은 disabled 하는 것이지만, 추천드리고 싶진 않습니다. disabled 하실 경우 아래와 같이 설정하신 후에 재부팅하셔야 합니다. (이미 disabled 되어있는 경우에는 그냥 넘어가시면 됩니다.
[root@server ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@localhost ~]# shutdown -r now
만약 아래와 같이 selinux를 활성화 하신 경우,
[root@server ~]# getenforce
Enforcing
아래와 같이 repo 디렉토리 전체를 80포트가 접근할 수 있도록 적용해 줍니다.
[root@server ~]# chcon -Rt httpd_sys_content_t /var/www/html/repo/
또 아래와 같이 방화벽도 허용해 줘야 합니다. (selinux 상관없이)
[root@server ~]# firewall-cmd --add-service={http,https} --permanent
success
[root@server ~]# firewall-cmd --reload
success
웹 서버 때문에 방화벽 서비스 자체를 내리는 것은 추천드리고 싶지 않네요.
여기까지 정상적으로 진행되었다면 yum 레포지토리 구축은 모두 마쳤습니다.
이제 외부에서 방금 구축을 완료한 레포지토리에 접근하고 정상적으로 사용할 수 있는지 확인해 보겠습니다.
테스트용 리눅스 pc에서 아래와 같이 yum 레포지토리 서버(192.168.0.19)에 접근할 수 있는지 확인해 봅니다.
[root@testpc ~]# ping 192.168.0.19
PING 192.168.0.19 (192.168.0.19) 56(84) bytes of data.
64 bytes from 192.168.0.19: icmp_seq=1 ttl=64 time=0.988 ms
64 bytes from 192.168.0.19: icmp_seq=2 ttl=64 time=0.428 ms
64 bytes from 192.168.0.19: icmp_seq=3 ttl=64 time=0.609 ms
다음으로 yum 레포지토리를 설정해야 하는데, 여기에서는 위에서의 로컬테스트 처럼 새로 레포 파일을 만들지 않고, 기존 CentOS-Base.repo 파일을 살짝만 바꿔서 yum 레포지토리 서버로 연결되도록 변경해 보겠습니다.
아래와 같이 기존 mirror, baseurl은 주석처리하고 [레포명], baseurl을 변경해 줍니다. (gpgcheck는 일단 신경쓰지 않아도 됩니다)
[root@testpc ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[myrepo]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
baseurl=http://192.168.0.19/repo/BaseOS
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
그리고 yum install로 tmux를 설치해 봅니다. 아래와 같이 myrepo로 연결하여 설치까지 정상적으로 진행되는 것을 볼 수 있습니다.
[root@testpc ~]# yum install tmux
Failed to set locale, defaulting to C.UTF-8
CentOS-8 - Base 37 MB/s | 2.2 MB 00:00
Last metadata expiration check: 0:00:01 ago on Thu Apr 9 07:35:18 2020.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
tmux x86_64 2.7-1.el8 myrepo 317 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 317 k
Installed size: 781 k
Is this ok [y/N]: y
Downloading Packages:
tmux-2.7-1.el8.x86_64.rpm 22 MB/s | 317 kB 00:00
--------------------------------------------------------------------------------
Total 19 MB/s | 317 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : tmux-2.7-1.el8.x86_64 1/1
Running scriptlet: tmux-2.7-1.el8.x86_64 1/1
Verifying : tmux-2.7-1.el8.x86_64 1/1
Installed:
tmux-2.7-1.el8.x86_64
Complete!
만약 위 과정에서 레포지토리를 찾지 못하면? lynx를 통해 해당 레포지토리 페이지에 연결이 되는 상황인지 확인해 봅니다. 아래와 같이 나오면 연결에는 문제가 없는 상황입니다.
[root@testpc ~]# lynx http://192.168.0.19/repo/BaseOS
*참고: lynx 설치 경로가 바뀌었네요. 기존 CentOS7까지는 BaseOS를 통해서 받아왔는데, 8부터는 PowerTools라는 레포지토리를 통해서 진행되네요. 이 레포지토리는 CentOS에서 기본 설정이 비활성입니다. 따라서 아래와 같이 활성화 해줘야 합니다. (enabled=1)
[root@testpc ~]# vim /etc/yum.repos.d/CentOS-PowerTools.repo
[PowerTools]
name=CentOS-$releasever - PowerTools
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=PowerTools&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/PowerTools/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[root@testpc ~]# yum install lynx
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 0:04:55 ago on Thu Apr 9 08:49:01 2020.
Dependencies resolved.
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
lynx x86_64 2.8.9-2.el8 PowerTools 1.6 M
Installing dependencies:
centos-indexhtml noarch 8.0-0.el8 AppStream 246 k
Transaction Summary
=============================================================================
Install 2 Packages
Total download size: 1.8 M
Installed size: 6.5 M
Is this ok [y/N]:
'Linux > Linux Operation' 카테고리의 다른 글
CentOS7에서 GlusterFS 클러스터 노드 추가하기 (0) | 2020.10.18 |
---|---|
CentOS7에서 GlusterFS(GFS)를 활용하여 파일 시스템 마운트 하기 (0) | 2020.10.03 |
CentOS7에서 NTP 서버 구축으로 시간 동기화 하기 (0) | 2020.09.30 |
[RHCSA 준비] SELinux 개념과 유용한 명령어 (0) | 2017.02.27 |
[RHCSA 준비] FreeIPA 서버 구축하기 (0) | 2017.02.26 |
[RHCSA 준비] 아파치 서버 구성하기 (0) | 2017.02.26 |
[RHCSA 준비] 킥스타트 서버 구성하기 (0) | 2017.02.26 |