Oracle Linux 7에서 Oracle Yum Server를 Local에 Mirror 구성하는 방법을 기술한다

1. Yum Repository Mirror 구성

1.1 remote Repository 설정

 1) 사전 패키지 설치

  (1) createrepo 설치

[root@SA-OLVM1:/etc/yum.repos.d:#] yum install -y createrepo
============================================================================================================
Package                    Arch                  Version                     Repository                Size
============================================================================================================
Installing:
createrepo                 noarch                0.9.9-28.el7                 ol7_latest               93 k
Installing for dependencies:
deltarpm                   x86_64                3.6-3.el7                    ol7_latest               81 k
python-deltarpm            x86_64                3.6-3.el7                    ol7_latest               30 k

Transaction Summary
============================================================================================================

  (2) HTTP 서비스 설치

[root@SA-OLKH1:~:#] yum install -y httpd
============================================================================================================
Package                    Arch                  Version                       Repository              Size
============================================================================================================
Installing:
httpd                      x86_64                2.4.6-95.0.1.el7              ol7_latest             1.2 M
Installing for dependencies:
apr                        x86_64                1.4.8-7.el7                   ol7_latest             103 k
apr-util                   x86_64                1.5.2-6.0.1.el7               ol7_latest              91 k
httpd-tools                x86_64                2.4.6-95.0.1.el7              ol7_latest              92 k
mailcap                    noarch                2.1.41-2.el7                  ol7_latest              30 k

Transaction Summary
============================================================================================================

 2) remote Repository 구성

   http://yum.oracle.com/oracle-linux-7.html 에서 구성하고자 하는 Repository를 등록

[root@SA-OLVM1:~:#] vi /etc/yum.repos.d/ol7.7-yum.repo
[ol7_latest]
name=Oracle Linux $releasever Latest ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL7/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

[ol7_UEKR5]
name=Latest Unbreakable Enterprise Kernel for Oracle Linux $releasever ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL7/UEKR5/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

[ol7_gluster6]
name=Oracle Linux $releasever Gluster 6 Packages ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL7/gluster6/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

[ol7_kvm_utils]
name=Oracle Linux $releasever KVM Utilities ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL7/kvm/utils/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

[ol7_optional_latest]
name=Oracle Linux $releasever Optional Latest ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL7/optional/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

[ovirt-4.3]
name=Latest oVirt 4.3 Release ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL7/ovirt43/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

[ovirt-4.3-extra]
name=oVirt 4.3 Extra ($basearch)
baseurl=https://yum$ociregion.oracle.com/repo/OracleLinux/OL7/ovirt43/extras/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

 3) remote Repository 구성 확인

[root@SA-OLVM1:/etc/yum.repos.d:#] yum repolist
Loaded plugins: ulninfo
repo id                    repo name                                                                         status
ol7.7_http_local           Oracle Linux 7.7 Http Local                                                        5210
ol7_UEKR5/x86_64           Latest Unbreakable Enterprise Kernel Release 5 for Oracle Linux 7Server (x86_64)    280
ol7_gluster6/x86_64        Oracle Linux 7Server Gluster 6 Packages (x86_64)                                     61
ol7_kvm_utils/x86_64       Oracle Linux 7Server KVM Utilities (x86_64)                                         542
ol7_latest/x86_64          Oracle Linux 7Server Latest (x86_64)                                              19415
ol7_optional_latest/x86_64 Oracle Linux 7Server Optional Latest (x86_64)                                     14167
ovirt-4.3/x86_64           Latest oVirt 4.3 Release (x86_64)                                                   217
ovirt-4.3-extra/x86_64     oVirt 4.3 Extra (x86_64)                                                            160
repolist: 40052

1.2 Local Repository 구성

 1) Linux 7 Repository sync script 생성

[root@SA-OLVM1:~:#] mkdir -p /opt/repo/ol7

[root@SA-OLVM1:~:#] mkdir -p /opt/repo/logs

[root@SA-OLVM1:~:#] mkdir -p /opt/repo/scripts

[root@SA-OLVM1:~:#] vi /opt/repo/scripts/repo_sync.sh
#!/bin/bash

# Create log files
LOG_FILE=/opt/repo/logs/repo_sync_$(date +%Y.%m.%d).
log

# Remove old log files
find /opt/repo/logs/repo_sync* -mtime +7 -delete; >>
$LOG_FILE 2>&1

# Reposync
/usr/bin/reposync --newest-only --repoid=ol7_latest -p /opt/repo/ol7 >>
$LOG_FILE 2>&1
/usr/bin/reposync --newest-only --repoid=ol7_UEKR5 -p /opt/repo/ol7 >>
$LOG_FILE 2>&1
/usr/bin/reposync --newest-only --repoid=ol7_gluster6 -p /opt/repo/ol7 >>
$LOG_FILE 2>&1
/usr/bin/reposync --newest-only --repoid=ol7_kvm_utils -p /opt/repo/ol7 >>
$LOG_FILE 2>&1
/usr/bin/reposync --newest-only --repoid=ol7_optional_latest -p /opt/repo/ol7 >>
$LOG_FILE 2>&1
/usr/bin/reposync --newest-only --repoid=ovirt-4.3 -p /opt/repo/ol7 >>
$LOG_FILE 2>&1
/usr/bin/reposync --newest-only --repoid=ovirt-4.3-extra -p /opt/repo/ol7 >>
$LOG_FILE 2>&1

# Createrepo
/usr/bin/createrepo /opt/repo/ol7/ol7_latest/getPackage/ >>
$LOG_FILE 2>&1
/usr/bin/createrepo /opt/repo/ol7/ol7_UEKR5/getPackage/ >>
$LOG_FILE 2>&1
/usr/bin/createrepo /opt/repo/ol7/ol7_gluster6/getPackage/ >>
$LOG_FILE 2>&1
/usr/bin/createrepo /opt/repo/ol7/ol7_kvm_utils/getPackage/ >>
$LOG_FILE 2>&1
/usr/bin/createrepo /opt/repo/ol7/ol7_optional_latest/getPackage/ >>
$LOG_FILE 2>&1
/usr/bin/createrepo /opt/repo/ol7/ovirt-4.3/getPackage/ >>
$LOG_FILE 2>&1
/usr/bin/createrepo /opt/repo/ol7/ovirt-4.3-extra/getPackage/ >>
$LOG_FILE 2>&1

[root@SA-OLVM1:~:#] chmod 740 /opt/repo/scripts/repo_sync.sh

 2) script 실행

[root@SA-OLVM1:~:#] /opt/repo/scripts/repo_sync.sh

 Option-3) crontab 등록

 새로운 패키지 등록 시 동기화 되도록 crontab에 등록한다

[root@SA-OLVM1:~:#] crontab -e -u root
1 0 * * * /opt/repo/scripts/repo_sync.sh > /dev/null 2>&1

[root@SA-OLVM1:~:#] systemctl restart crond

Option-1.3 Repository HTTP 서버 구성

 1) HTTP 방화벽 허용

[root@SA-OLVM1:~:#] firewall-cmd --permanent --zone=public --add-port=80/tcp
[root@SA-OLVM1:~:#] firewall-cmd --reload

 2) HTTP Conext root 설정

[root@SA-OLVM1:~:#] vi /opt/repo/scripts/repo_http.sh
#!/bin/bash

/usr/bin/mkdir -p /var/www/html/repo
/usr/bin/ln -s /opt/repo/ol7 /var/www/html/repo/ol7

cd /var/www/html/repo/ol7

### symbolic link loop
for DIR in `ls -l | grep ^d | awk '{print $9}'`; do
   
cd $DIR ; /usr/bin/ln -s ./getPackage ./x86_64 ; cd ..
done

cp /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle /var/www/html/RPM-GPG-KEY-oracle-ol7

[root@SA-OLVM1:~:#] sh /opt/repo/scripts/repo_http.sh

Option-1.4 외부서버에서 참조 가능한지 확인

 1) yum repository 설정

[root@SA-OLKH1:~:#] rm -f /etc/yum.repos.d/ol7.7-yum.repo
[root@SA-OLKH1:~:#] vi /etc/yum.repos.d/ol7-SA-OLVM1-http.repo
[ol7_latest]
name=Oracle Linux $releasever Latest ($basearch)
baseurl=http://SA-OLVM1/repo/ol7/ol7_latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

[ol7_UEKR5]
name=Latest Unbreakable Enterprise Kernel for Oracle Linux $releasever ($basearch)
baseurl=http://SA-OLVM1/repo/ol7/ol7_UEKR5/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

[ol7_gluster6]
name=Oracle Linux $releasever Gluster 6 Packages ($basearch)
baseurl=http://SA-OLVM1/repo/ol7/ol7_gluster6/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

[ol7_kvm_utils]
name=Oracle Linux $releasever KVM Utilities ($basearch)
baseurl=http://SA-OLVM1/repo/ol7/ol7_kvm_utils/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

[ol7_optional_latest]
name=Oracle Linux $releasever Optional Latest ($basearch)
baseurl=http://SA-OLVM1/repo/ol7/ol7_optional_latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

[ovirt-4.3]
name=Latest oVirt 4.3 Release ($basearch)
baseurl=http://SA-OLVM1/repo/ol7/ovirt-4.3/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

[ovirt-4.3-extra]
name=oVirt 4.3 Extra ($basearch)
baseurl=http://SA-OLVM1/repo/ol7/ovirt-4.3-extra/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=0
enabled=1

 2) 구성 확인

[root@SA-OLKH1:~:#] yum repolist
Loaded plugins: ulninfo, versionlock
repo id                         repo name                                                                status
ol7_UEKR5/x86_64           Latest Unbreakable Enterprise Kernel for Oracle Linux 7Server (x86_64)         82
ol7_gluster6/x86_64        Oracle Linux 7Server Gluster 6 Packages (x86_64)                               33
ol7_kvm_utils/x86_64       Oracle Linux 7Server KVM Utilities (x86_64)                                    52
ol7_latest/x86_64          Oracle Linux 7Server Latest (x86_64)                                         5422
ol7_optional_latest/x86_64 Oracle Linux 7Server Optional Latest (x86_64)                                5190
ovirt-4.3/x86_64           Latest oVirt 4.3 Release (x86_64)                                             138
ovirt-4.3-extra/x86_64     oVirt 4.3 Extra (x86_64)                                                      116
repolist: 11033