들어가며
Redhat 계열 Linux 7이하에서는 yum(패키지 관리자) 을 통해서 rpm을 설치할수 있습니다.(Linux 8부터는 dnf를 사용합니다). Public 인터넷으로 연결이 되지 않는 환경에서는 rpm설치를 수동을 할수 밖에 없습니다.
Local Yum Repository를 구성하여 설치할수 있는 방법에 대해서 정리하였습니다.
Local Yum Repository 설정방법
Yum Repository구성시 외부의 Yum repository를 전부를 가져와서 구성할수 있거나 특정 rpm이 있으면 해당 rpm만으로도 구성할수 있습니다.
- Yum Repository구성방법
- 1) 외부의 Yum Repository전부를 가져옵니다 or 2) 특정 RPM으로 설정합니다.
- Yum Repository설정방법
- 1) 로컬 파일로 설정합니다 or 2) HTTP서비스로 설정합니다.
Yum Repository를 HTTP서비스를 만들어서 제공하면 소프트웨어 패키지를 중앙에서 관리할수 있기 때문에 여러 서버에서 동일한 소프트웨어 버전 및 정책으로 관리할수 있습니다
본문에서는 Oracle Instance Client 19c rpm관련 yum repository를 구성하였습니다.
1. Yum Repository 디렉토리 생성
현재 Yum repository에 목록을 확인합니다.
yum repolist
아무런 목록이 없습니다.
$> yum repolist
No repositories available
YUM repository 설정을 위하여 디렉토리를 신규로 생성했습니다.
mkdir -p /var/www/html/local-repo
cd /var/www/html/local-repo
chmod -R ugo+rX /var/www/html/local-repo
2. Yum Repository에 RPM추가
위에서 언급하였듯이 외부의 Yum Repository를 통채로 가져와서 설정할수 있습니다.
cd /var/www/html/local-repo
wget --recursive --no-parent --no-host-directories https://yum.oracle.com/repo/OracleLinux/OL8/oracle/instantclient/x86_64/ -P /var/www/html/local-repo
아니면,
특정 RPM만 있다면 createrepo
명령어로 repository메타를 만들고 rpm을 넣어서 설정할수 있습니다.
createrepo 명령어를 통해서 Repository를 메타 정보를 생성합니다.
createrepo /var/www/html/local-repo
cp /path/oracle-instantclient19.22-basic-19.22.0.0.0-1.x86_64.rpm /var/www/html/local-repo
oracle-instantclient19.22-basic-19.22.0.0.0-1.x86_64.rpm 은 인터넷에서 미리 다운로드 받은 rpm파일 입니다.
Linux 7에서는
createrepo.rpm
이었지만 Linux 8부터는createrepo_c.rpm
으로 rpm명이 변경되었습니다. createrepo 명령어가 수행안되면 아래와 같이 설치할수 있습니다.yum install createrepo or wget https://yum.oracle.com/repo/OracleLinux/OL8/appstream/x86_64/getPackage/createrepo_c-libs-0.11.0-3.el8.x86_64.rpm wget https://yum.oracle.com/repo/OracleLinux/OL8/appstream/x86_64/getPackage/createrepo_c-libs-0.11.0-1.el8.x86_64.rpm wget https://yum.oracle.com/repo/OracleLinux/OL8/appstream/x86_64/getPackage/drpm-0.4.1-3.el8.x86_64.rpm rpm -ivh drpm-0.4.1-3.el8.x86_64.rpm rpm -ivh createrepo_c-libs-0.11.0-3.el8.x86_64.rpm rpm -ivh createrepo_c-0.11.0-3.el8.x86_64.rpm
Yum Repository 생성 로그입니다.
$> createrepo /var/www/html/local-repo
Directory walk started
Directory walk done - 7 packages
Temporary output repo path: /var/www/html/local-repo/.repodata/
Preparing sqlite DBs
Pool started (with 5 workers)
Pool finished
3. Yum Repository 설정
Yum Repository 접속을 위하여 config 파일을 생성합니다.
vi /etc/yum.repos.d/local-repo.repo
config 파일안에는 두개의 Repository를 설정하였습니다. 첫번째는 로컬 파일에 있는 RPM을 제공하는 Repository이고, 두번째는 HTTP서비스로 접속되는 Repository입니다.
[local-file-repo]
name=local-file-repo
baseurl=file:///var/www/html/local_repo
enabled=1
gpgcheck=0
[remote-http-repo]
name=remote-http-repo
baseurl=http://localhost:8900/repo/OracleLinux/OL8/oracle/instantclient/x86_64/
enabled=1
gpgcheck=0
HTTP서비스를 위하여 python으로 HTTP서버를 임시로 실행합니다. 만약 여러 서버에서 접속해서 사용해야되는 중앙화된 Repository로 관리하려면 좀더 다양한 기능을 가지고 있는 HTTP서비스를 설치하고 관리하는것을 권고드립니다. 본문에는 간단하게 테스트하기 위해서 Python으로 간단하게 HTTP 서비스를 기동했습니다.
cd /var/www/html/local-repo
python3 -m http.server 8900 &
4. Yum Repository 조회
Yum Repository를 조회합니다.
yum repolist
실행결과입니다. 이전에는 아무런 목록이 보이지 않았지만, 지금은 두개모두 확인됩니다.
$> yum repolist
repo id repo name
local-file-repo local-file-repo
remote-http-repo remote-http-repo
로컬 디렉토리에 있는 Yum Repository에 Oracle instance Client RPM을 옮겨놨었죠? Yum 명령어를 통해서 Oracle instance Client를 설치해보겠습니다.
Repository명에 local-file-repo로 보이는것을 확인할수 있습니다.
$> yum install oracle-instantclient19.10-basic.x86_64
Last metadata expiration check: 0:01:09 ago on Fri 16 Feb 2024 07:08:16 AM GMT.
Dependencies resolved.
===========================================================================================
Package Architecture Version Repository Size
===========================================================================================
Installing:
oracle-instantclient19.10-basic x86_64 19.10.0.0.0-1 local-file-repo 52 M
Transaction Summary
===========================================================================================
Install 1 Package
Total size: 52 M
Installed size: 227 M
Is this ok [y/N]: y
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : oracle-instantclient19.10-basic-19.10.0.0.0-1.x86_64 1/1
Running scriptlet: oracle-instantclient19.10-basic-19.10.0.0.0-1.x86_64 1/1
Verifying : oracle-instantclient19.10-basic-19.10.0.0.0-1.x86_64 1/1
Installed:
oracle-instantclient19.10-basic-19.10.0.0.0-1.x86_64
Complete!
마무리
Local Yum Repository 생성하여 실행되는 절차를 확인해보았습니다. RPM간에 의존성때문에 설치 및 버전 관리가 어렵습니다. 기업내에서는 중앙화된 private 저장소를 통해서 표준화된 패키지 관리를 할수 있습니다. 보안 취약점이 발견되면 영향도를 판단하고 정책을 만들어서 배포작업도 할수 있습니다.
클라우드환경에서는 중앙화된 Repository를 이용하여 RPM패키지들을 쉽게 관리할수 있는 도구혹은 서비스로 제공하고 있는데요, 내부적으로 저런게 구축하지 않았을까요?
참고문서
- Oracle Linux: Is createrepo RPM Available in Oracle Linux 8 (Doc ID 2849607.1)
댓글남기기