본문 바로가기

리눅스

CentOS Yum Repository 서버를 구축하는 방법

728x90

CentOS Yum Repository 서버를 구축하는 방법

CentOS Yum Repository 서버를 구축하는 것은 패키지 관리와 시스템 업데이트를 위해 중요한 작업입니다.

웹 서버 설치 (Apache HTTPD 예시)

Yum Repository를 호스팅하기 위해 웹 서버를 설치합니다. 아파치 웹 서버를 설치하는 방법은 다음과 같습니다.

repository 구축을 위한 필수 패키지 다운로드

createrepo 설치

yum install -y createrepo yum-utils

Yum Repository 디렉터리 구조 설계

cd /app/repo_root/reop
$ tree -L 5
.
└── repo
    ├── centos
    │   ├── 7 -> 7.9.2009
    │   ├── 7.9.2009
    │   │   ├── extras
    │   │   │   └── x86_64
    │   │   ├── isos
    │   │   │   └── x86_64
    │   │   ├── os
    │   │   │   └── x86_64
    │   │   └── updates
    │   │       └── x86_64
    │   ├── 8 -> 8.3.2011
    │   └── 8.3.2011
    │       ├── isos
    │       │   └── x86_64
    │       └── os
    │           └── x86_64
    └── epel
        ├── 7
        │   └── x86_64
        │       ├── Packages
        │       ├── debug
        │       ├── drpms
        │       └── repodata
        └── 8
            └── Everything
                └── x86_64

Yum Repository 디렉터리 구조 생성

  • CentOS 7
mkdir -p repo/centos/7.9.2009/{centosplus,extras,isos,os,updates}/x86_64
  • CentOS 8
mkdir -p repo/centos/8.3.2011/{isos,os}/x86_64
  • Yum Repository 생성
    • Yum Repository 메타데이터를 생성합니다.
createrepo repo

패키지 업데이트 스크립트(mirror synchronization)

  • centos8_mirror.sh 스크립트 편집
vim centos8_mirror.sh
#!/bin/bash

ContentDir="centos"
ReleaseVer="8"
BaseList="BaseOS AppStream extras"
#BaseList="BaseOS"
BaseArch="x86_64"
LocalDirectory=/app/repo_root/repo

for REPO in ${BaseList[@]}
do
  #reposync -p /app/repo_root/repo/centos/8 --repoid=BaseOS --download-metadata --newest-only
  #reposync -p /app/repo_root/repo/centos/8 --repoid=AppStream --download-metadata --newest-only
  reposync -p ${LocalDirectory}/${ContentDir}/${ReleaseVer} --repoid=${REPO} --download-metadata --newest-only
done
  • centos_mirror.sh 스크립트 편집
vim centos_mirror.sh
#!/bin/bash

ContentDir="centos"
ReleaseVer="7"
#BaseList="os updates extras centosplus virt"
BaseList="os updates extras"
BaseArch="x86_64"
LocalDirectory=/app/repo_root/repo/centos

RSYNC="/usr/bin/rsync -aqHz --delete"
MirrorUrl="rsync://ftp.kaist.ac.kr/CentOS"

for ver in $ReleaseVer
do
  for arch in $BaseArch
  do
    for base in $BaseList
    do
      ${RSYNC} ${MirrorUrl}/${ver}/${base}/${arch} ${LocalDirectory}/${ver}/${base}/
    done
  done
done
728x90
  • epel8_mirror.sh 스크립트 편집
vim epel8_mirror.sh
#!/bin/bash 

ContentDir="epel"
ReleaseVer="8"
BaseList="Everything"
BaseArch="x86_64"
LocalDirectory="/app/repo_root/repo"

RSYNC="/usr/bin/rsync -aqHz --delete"
MirrorUrl="dl.fedoraproject.org::fedora-epel"

for ver in ${ReleaseVer}
do
  for arch in ${BaseArch}
  do
    ${RSYNC} ${MirrorUrl}/${ver}/${BaseList}/${arch}/ ${LocalDirectory}/${ContentDir}/${ver}/${BaseList}/${BaseArch}
  done
done
  • epel_mirror.sh 스크립트 편집
vim epel_mirror.sh
#!/bin/bash 

ContentDir="epel"
ReleaseVer="7"
BaseList=""
BaseArch="x86_64"
LocalDirectory="/app/repo_root/repo"

RSYNC="/usr/bin/rsync -aqHz --delete"
MirrorUrl="dl.fedoraproject.org::fedora-epel"

for ver in $ReleaseVer
do
  for arch in $BaseArch
  do
    ${RSYNC} ${MirrorUrl}/${ver}/${arch}/ ${LocalDirectory}/${ContentDir}/${ver}/${arch}
    createrepo ${LocalDirectory}/${ContentDir}/${ver}/${arch}/
  done
done

웹 서버 구성

  • Apache 웹 서버 설정
    • Yum Repository에 대한 Apache 웹 서버 설정을 추가합니다. /etc/httpd/conf.d/yumrepo.conf와 같은 파일을 생성하고 다음과 같은 내용을 추가합니다.
Alias /centos/7/updates/x86_64 /var/www/html/centos/7/updates/x86_64
<Directory /var/www/html/centos/7/updates/x86_64>
    Options +Indexes
</Directory>
  • Apache 웹 서버 시작 및 활성화
    • 웹 서버를 시작하고 부팅 시에 자동으로 시작하도록 활성화합니다.
sudo systemctl start httpd
sudo systemctl enable httpd

클라이언트 설정

repo 파일 다운로드

### CentOS7
curl -Ssf http://pkg.sangchul.kr/dl/CentOS7-Base.repo -o /etc/yum.repos.d/CentOS-Base.repo
curl -Ssf http://pkg.sangchul.kr/dl/epel7.repo -o /etc/yum.repos.d/epel.repo

### CentOS8
curl -Ssf http://pkg.sangchul.kr/dl/CentOS8-Base.repo -o /etc/yum.repos.d/CentOS-Base.repo
curl -Ssf http://pkg.sangchul.kr/dl/epel8.repo -o /etc/yum.repos.d/epel.repo

repo 파일

  • CentOS7-Base.repo
vim CentOS-Base.repo
# CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://pkg.sangchul.kr/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates 
[updates]
name=CentOS-$releasever - Updates
baseurl=http://pkg.sangchul.kr/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://pkg.sangchul.kr/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://pkg.sangchul.kr/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  • CentOS8-Base.repo
vim CentOS-Base.repo
# CentOS-Base.repo
[BaseOS]
name=CentOS-$releasever - Base
baseurl=http://pkg.sangchul.kr/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
  • epel7.repo
vim epel7.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://pkg.sangchul.kr/pub/epel/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://pkg.sangchul.kr/pub/epel/7/$basearch/debug
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://pkg.sangchul.kr/pub/epel/7/SRPMS
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
  • epel8.repo
vim epel8.repo
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=http://pkg.sangchul.kr/pub/epel/$releasever/Everything/$basearch
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8

[epel-debuginfo]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug
baseurl=http://pkg.sangchul.kr/pub/epel/$releasever/Everything/$basearch/debug
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8

[epel-source]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Source
baseurl=http://pkg.sangchul.kr/pub/epel/$releasever/Everything/SRPMS
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8

 

참고 사항

1. Yum Repository 서버를 구축하기 위해서는 CentOS 또는 Red Hat Enterprise Linux (RHEL)과 같은 Linux 배포판이 필요합니다.

2. 공용 네트워크에서 사용하려면 적절한 보안 조치를 취해야 합니다.

 

728x90