RHEL/CentOS의 표준(공식) 리포지토리는 기본적인 패키지만 제공하기 때문에 항상 최신 버전의 프로그램을 포함하고 있지는 않습니다. 하지만 서드파티 공개 또는 비공개 리포지토리를 활용하면 Red Hat Enterprise Linux, CentOS, Oracle Linux, Scientific Linux에 다양한 프로그램을 설치할 수 있습니다. 그중에서도 Remi와 EPEL이 가장 널리 사용되는 대표적인 서드파티 리포지토리입니다. 이 글에서는 CentOS에서 yum(dnf) 패키지 관리자를 통해 추가 리포지토리를 설치하고, 관리하며, 활용하는 방법을 자세히 살펴보겠습니다.
리포지토리(repository)란 Linux용 RPM 소프트웨어 패키지가 저장되어 있고 지속적으로 업데이트되는 저장소를 의미합니다. 다양한 패키지 관리자는 이러한 네트워크 리포지토리를 사용해 프로그램을 설치하고 업데이트합니다.
CentOS에서 EPEL 및 Remi 리포지토리 활성화 방법
운영체제를 설치하면(이 글에서는 CentOS 7 기준) 기본 리포지토리들이 함께 설치됩니다. 설치된 리포지토리 목록은 아래 명령어로 확인할 수 있습니다.
yum repolist

스크린샷에서 확인할 수 있듯이 시스템에는 base, extras, updates 세 가지 리포지토리가 설치되어 있습니다. 기본 소프트웨어와 추가 리포지토리를 설치하는 데는 이 정도면 충분합니다.
그럼 CentOS에 추가 리포지토리를 설치하는 방법을 알아보겠습니다.
EPEL 리포지토리 설치
EPEL(Extra Packages for Enterprise Linux)은 Fedora 팀이 제공하는 오픈소스 무료 리포지토리 프로젝트로, Linux 배포판을 위한 고품질 추가 소프트웨어 패키지를 담고 있습니다. FTP 서버부터 PHP, 시스템 모니터링 도구까지 방대한 양의 패키지를 보유하고 있어 현재 가장 인기 있는 리포지토리로 꼽힙니다. 특히 EPEL 패키지는 CentOS/RHEL의 기본 패키지와 충돌하지 않으며 기존 패키지를 대체하지도 않는다는 점이 장점입니다.
CentOS 7에서는(CentOS 6과 달리) RPM 패키지 하나만으로 EPEL을 손쉽게 설치할 수 있습니다. 새 리포지토리를 추가하는 가장 간단한 방법이기도 합니다.
yum install epel-release

설치가 완료되면 별도의 작업 없이(yum 캐시를 비울 필요도 없이) 리포지토리 목록에 자동으로 추가됩니다.
Remi 리포지토리 설치
Remi 리포지토리를 CentOS에 설치하려면 다음 명령어를 실행합니다.
rpm -ivh https://rpms.famillecollet.com/enterprise/remi-release-7.rpm
Remi 역시 CentOS에서 인기 있는 리포지토리로, Remi Collet이 만든 프로젝트입니다. 최신 버전의 PHP와 MySQL을 제공하는 것이 특징이며, 이 리포지토리를 사용하려면 OS에 EPEL 리포지토리가 반드시 활성화되어 있어야 합니다. 단, 일부 패키지는 기본 리포지토리의 패키지와 충돌할 수 있으므로 주의가 필요합니다.
필요한 리포지토리의 RPM 패키지가 존재하지 않는 경우, /etc/yum.repos.d 디렉터리에 .repo 설정 파일을 직접 생성하여 추가할 수 있습니다(다음 섹션 참조).
설치된 패키지의 출처 리포지토리 확인
패키지가 어떤 리포지토리에서 설치되었는지 확인하려면 전체 패키지 목록을 출력하면 됩니다.
yum list installed
아래 스크린샷처럼 각 패키지마다 설치된 리포지토리 정보(base, update, epel, anaconda 등)가 함께 표시됩니다.

특정 리포지토리에서 설치 가능한 패키지 목록만 보고 싶다면 다음 명령어를 사용합니다.
yum repo-pkgs epel list
리포지토리 설정 파일(*.repo) 이해하기
모든 리포지토리 설정 파일은 /etc/yum.repos.d/ 디렉터리에 위치하며 *.repo 확장자를 가집니다. 일반적인 설정 파일은 다음과 같은 파라미터로 구성됩니다.
- name — 리포지토리 이름
- baseurl — 리포지토리 주소(ftp://address, https://address, https://address 또는 로컬 리포지토리의 경우 file://address)
- enabled — 해당 리포지토리 사용 여부(1: 활성화, 0: 비활성화)
- async — 패키지 병렬 다운로드 사용 여부(auto/on/off)
- gpgcheck — GPG 서명 검사 수행 여부(1: 검사 활성화)
- gpgkey — GPG 키 주소
- exclude — 제외할 패키지 목록
- includepkgs — 포함할 패키지 목록
- mirrorlist — 리포지토리 미러 목록
가장 간단한 형태의 리포 파일은 다음과 같습니다.
[rep_name] name=rep_name baseurl=rep_url
예를 들어 REMI 리포지토리를 설치하면 리포지토리 디렉터리에 여러 개의 Remi(remi-*.repo) 설정 파일이 생성됩니다.

보시다시피 Remi는 PHP 버전별로 별도의 설정 파일을 제공합니다. 원하는 PHP 버전은 설정 파일을 통해 직접 활성화해야 합니다. 예를 들어 서버에 PHP 7.3을 설치하려는 경우 remi-php73.repo 파일에서 enabled=1로 지정하여 해당 리포지토리를 활성화하면 됩니다.

리포지토리 수동 연결하기
리포지토리는 수동으로도 연결할 수 있습니다. /etc/yum.repos.d/ 디렉터리에 리포지토리 설정 파일을 생성하면 됩니다. 여기서는 MariaDB 리포지토리를 추가해 보겠습니다.
nano /etc/yum.repos.d/mariadb.repo
MariaDB 개발사가 제공하는 정보를 파일에 입력합니다.
[mariadb] name = MariaDB baseurl = https://yum.mariadb.org/10.4/centos73-amd64/ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
CentOS에서 리포지토리 비활성화 방법
설치된 리포지토리 중 하나를 비활성화하려면 해당 설정 파일에서 enabled=0으로 지정하기만 하면 됩니다.

이후 yum 캐시를 정리합니다.
yum clean all
그리고 캐시를 다시 생성합니다.
yum makecache
이후 패키지를 설치하거나 업데이트할 때 remi-php73 리포지토리는 더 이상 사용되지 않습니다.
일회성 리포지토리 비활성화
현재 실행하는 패키지 설치/업데이트 명령에 한해서만 특정 리포지토리를 사용하지 않으려면 yum 명령어에서 직접 비활성화할 수 있습니다.
yum update --disablerepo=epel
위 예제에서는 EPEL을 비활성화한 상태로 설치된 패키지를 업데이트했습니다.
필요 없는 리포지토리를 임시로 모두 비활성화하는 것도 가능합니다. 예를 들어 MariaDB 리포지토리의 패키지만 업데이트하려면 다음 명령어를 실행합니다.
yum update --disablerepo "*" --enablerepo=mariadb
yum-config-manager 활용
리포지토리를 비활성화하거나 삭제할 때는 yum-utils 도구에 포함된 yum-config-manager를 사용하는 것이 편리합니다.
먼저 yum-utils를 설치합니다.
yum -y install yum-utils
예를 들어 remi 리포지토리를 비활성화하려면:
yum-config-manager --disable remi
리포지토리를 완전히 제거하려면 해당 설정 파일을 삭제한 후 yum 캐시를 업데이트해야 합니다.
특정 리포지토리의 업데이트 가능한 패키지 확인 방법
특정 리포지토리에서 업데이트 가능한 패키지가 있는지 확인할 수 있습니다.
yum check-update --disablerepo "*" --enablerepo=mariadb

이처럼 서버에 연결된 리포지토리를 자유롭게 관리할 수 있습니다. 단, 서로 다른 리포지토리에 동일한 패키지가 존재할 경우 업데이트 과정에서 버전 충돌이 발생할 수 있으므로, 실제로 사용하는 리포지토리만 활성화해 두는 것이 좋습니다.
CentOS/RHEL용 인기 서드파티 리포지토리
MariaDB 리포지토리
MariaDB 리포지토리는 이름 그대로 MariaDB 패키지를 제공합니다. MariaDB 개발팀이 직접 운영하며 지속적으로 지원·업데이트되고 있습니다.
이 리포지토리를 시스템에 추가하려면 다음 내용으로 .repo 파일을 생성합니다.
[mariadb] name = MariaDB baseurl = https://yum.mariadb.org/10.4/centos73-amd64/ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Nginx 리포지토리
Nginx 리포지토리 역시 앞선 리포지토리와 마찬가지로 nginx HTTP 서버 관련 패키지를 제공합니다.
nginx 리포지토리를 설치하려면 .repo 파일을 생성하고 다음 내용을 추가합니다.
[nginx-stable] name=nginx stable repo baseurl=https://nginx.org/packages/CentOS/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key
위 리포지토리 목록만으로 nginx를 프런트엔드 서버로 사용하는 소위 LAMP 스택 환경을 구축하기에 충분합니다.
Webtatic 리포지토리
Webtatic은 소수의 전문가, 주로 Andy Thompson이 유지 관리하는 리포지토리입니다. PHP 관련 패키지를 제공하지만, 이 글 작성 시점 기준 최신 PHP 버전이 7.2에 머물러 있어 Remi만큼 인기 있지는 않습니다.
yum repo-pkgs webtatic list | grep php7
mod_php71w.x86_64 7.1.31-1.w7 webtatic mod_php72w.x86_64 7.2.21-1.w7 webtatic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ php72w-tidy.x86_64 7.2.21-1.w7 webtatic php72w-xml.x86_64 7.2.21-1.w7 webtatic php72w-xmlrpc.x86_64 7.2.21-1.w7 webtatic
이 리포지토리를 활성화하려면 다음 RPM 패키지를 설치합니다.
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
MySQL 리포지토리
MySQL 리포지토리도 언급할 만합니다. MySQL이 데이터베이스 서버로서 입지를 잃었고 대부분의 서버에서 MariaDB로 대체되는 추세라 인기 리포지토리 목록에는 넣지 않았지만, 굳이 MySQL을 설치하고 싶다면 이 리포지토리를 활성화하면 됩니다. 예를 들어 MySQL 5.7을 설치하려는 경우:
먼저 패키지를 다운로드합니다.
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
그리고 설치합니다.
rpm -Uvh mysql57-community-release-el7-9.noarch.rpm
설치 후 MySQL을 설치할 수 있습니다.

이 글에서는 CentOS에서 리포지토리를 관리하는 다양한 방법과 실무에 유용한 여러 리포지토리를 살펴보았습니다. EPEL과 Remi 같은 신뢰할 수 있는 서드파티 리포지토리를 적절히 활용하면 기본 리포지토리에서 제공하지 않는 최신 소프트웨어도 안전하게 설치하고 운영할 수 있습니다.