[Linux] Repository 구성

김봉남·2024년 2월 28일
0

Linux

목록 보기
34/36
post-thumbnail

이직해서 먼저 했던 작업들 중 하나가 repository 서버 구성하는 거였다. 별도의 repository 구성되지 않아 패키지를 다운 받고 한대 한대씩 업로드를 하여 설치하였다. 당시 서버 대수가 약 600대 였으며 단순 패키지 설치에 들어가야 될 시간이 어마어마하였다.
그리고 꼭 필요한 또다른 이유는 설치해야 될 패키지가 검증되지 않았거나, 악성 코드라도 들어가 있으면 "아....."

이러한 작업을 효율적으로 하기 위해 내부 repository를 구성하게 되었다.

Repository를 구성하면 커맨드 "yum" 한줄로 다수의 서버에 쉽게 설치를 할 수 있고 Redhat 검증된 Official한 패키지를 설치하기 때문에 보안상 취약하지 않고 손쉽게 삭제도 할 수 있다. 그 외로 버그 패치나, 운영상 설치해야 될 패키지들 또한 필요한 패키지를 RPM으로 만들어서 쉽게 설치를 할 수 있는 장점이 있다.

repository

  • 소프트웨어를 설치하고 관리하는데 사용되는 중앙 저장소
  • ftp, file, cd, http 등을 이용하여 구성할 수 있음
  • 패키지를 RPM으로 구성할 수 있음

RHEL8 ISO Repository 구성

[root@test]# mount -t iso9660 /dev/cdrom /mnt

[root@test]# vi /etc/yum.repos.d/iso.repo
[RHEL8DVD_BaseOS]
name=RHEL8DVD_BaseOS
baseurl=file:///mnt/BaseOS/
enabled=1
gpgcheck=0

[RHEL8DVD_AppStream]
name=RHEL8DVD_AppStream
baseurl=file:///mnt/AppStream/
enabled=1
gpgcheck=0

cd나 file로 할 경우 baseurl에 "///"로 명시해야 적용된다. 먼저 기본 패키지를 설치하기 위해서 ISO로 마운트한 뒤 패키지를 설치할 수 있게 repository를 구성 한다.

repository를 구성하기 위해 createrepo 패키지를 설치해야 된다.

[root@test]# yum install createrepo
>
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

RHEL8.5 AppStream                                                                                                                                                                  74 MB/s | 7.2 MB     00:00    
RHEL8.5 BaseOS                                                                                                                                                                     49 MB/s | 2.4 MB     00:00    
Dependencies resolved.
==================================================================================================================================================================================================================
 Package                                                Architecture                                Version                                           Repository                                             Size
==================================================================================================================================================================================================================
Installing:
 createrepo_c                                           x86_64                                      0.17.2-3.el8                                      RHEL8.5AppStream                                       89 k
Installing dependencies:
 createrepo_c-libs                                      x86_64                                      0.17.2-3.el8                                      RHEL8.5AppStream                                      115 k
 drpm                                                   x86_64                                      0.4.1-3.el8                                       RHEL8.5AppStream                                       68 k

Transaction Summary
==================================================================================================================================================================================================================
Install  3 Packages

Total download size: 271 k
Installed size: 575 k
Is this ok [y/N]: y
Downloading Packages:
(1/3): createrepo_c-0.17.2-3.el8.x86_64.rpm                                                                                                                                       6.1 MB/s |  89 kB     00:00    
(2/3): drpm-0.4.1-3.el8.x86_64.rpm                                                                                                                                                4.0 MB/s |  68 kB     00:00    
(3/3): createrepo_c-libs-0.17.2-3.el8.x86_64.rpm                                                                                                                                  5.7 MB/s | 115 kB     00:00    
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                                              11 MB/s | 271 kB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                                                          1/1 
  Installing       : drpm-0.4.1-3.el8.x86_64                                                                                                                                                                  1/3 
  Installing       : createrepo_c-libs-0.17.2-3.el8.x86_64                                                                                                                                                    2/3 
  Installing       : createrepo_c-0.17.2-3.el8.x86_64                                                                                                                                                         3/3 
  Running scriptlet: createrepo_c-0.17.2-3.el8.x86_64                                                                                                                                                         3/3 
  Verifying        : createrepo_c-0.17.2-3.el8.x86_64                                                                                                                                                         1/3 
  Verifying        : createrepo_c-libs-0.17.2-3.el8.x86_64                                                                                                                                                    2/3 
  Verifying        : drpm-0.4.1-3.el8.x86_64                                                                                                                                                                  3/3 
Installed products updated.

Installed:
  createrepo_c-0.17.2-3.el8.x86_64                                       createrepo_c-libs-0.17.2-3.el8.x86_64                                       drpm-0.4.1-3.el8.x86_64                                      

Complete!

내부 repo 구성 절차

[root@test]# mkdir -p /home/repo/test.repo   ## test.repo, repodata 권한 확인을 잘해야 됨

#### YUM Repository 추가
[RHEL8DVD_BaseOS]
name=RHEL8DVD_BaseOS
baseurl=file:///home/repo/BaseOS/
enabled=1
gpgcheck=0

[RHEL8DVD_AppStream]
name=RHEL8DVD_AppStream
baseurl=file:///home/repo/AppStream/
enabled=1
gpgcheck=0

- Repodata 생성
[root@test home]# createrepo /home/repo
Directory walk started
Directory walk done - 7928 packages
Temporary output repo path: /home/repo/.repodata/
Preparing sqlite DBs
Pool started (with 5 workers)
Pool finished

- YUM Repository 조회
[root@test]# yum repolist
서브스크립션 관리 레포지터리를 업데이트하고 있습니다.
소비자 ID를 읽을 수 없습니다

이 시스템은 Red Hat 관리서버에 등록되어 있지 않습니다. subscription-manager를 사용하여 등록 할 수 있습니다.

레포지터리 ID                                                                                            레포지터리 이름
RHEL8DVD_AppStream                                                                                       RHEL8DVD_AppStream
RHEL8DVD_BaseOS                                                                                          RHEL8DVD_BaseOS

- YUM 패키지(telnet) 설치
[root@test ~]# yum install telnet
서브스크립션 관리 레포지터리를 업데이트하고 있습니다.
소비자 ID를 읽을 수 없습니다

이 시스템은 Red Hat 관리서버에 등록되어 있지 않습니다. subscription-manager를 사용하여 등록 할 수 있습니다.

RHEL8DVD_BaseOS                                                                 >                                                                                                   30 MB/s | 2.4 MB     00:00    
RHEL8DVD_AppStream                                                             >                                                                                                    45 MB/s | 7.2 MB     00:00    
마지막 메타자료 만료확인 0:00:01 이전인: 2024년 03월 13일 (수) 오전 10시 39분 02초.
종속성이 해결되었습니다.
==================================================================================================================================================================================================================
 꾸러미                                        구조                                          버전                                                 레포지터리                                                 크기
==================================================================================================================================================================================================================
설치 중:
 telnet                                        x86_64                                        1:0.17-76.el8                                        RHEL8DVD_AppStream                                         72 k

연결 요약
==================================================================================================================================================================================================================
설치  1 꾸러미

전체 크기: 72 k
설치된 크기 : 119 k
진행 할 까요? [y/N]: y
꾸러미 내려받기중:
연결 확인 실행 중
연결 확인에 성공했습니다.
연결 시험 실행 중
연결 시험에 성공했습니다.
연결 실행 중
준비 중           :                                                             >                                                                                                                            1/1 
  설치 중           : telnet-1:0.17-76.el8.x86_64                                                                                                                                                             1/1 
  스크립트릿 실행 중: telnet-1:0.17-76.el8.x86_64                                                                                                                                                             1/1 
  확인 중           : telnet-1:0.17-76.el8.x86_64                                                                                                                                                             1/1 
설치된 제품이 업데이트되었습니다.

설치되었습니다:
  telnet-1:0.17-76.el8.x86_64                                                   

완료되었습니다!

HTTP로 repo 구성

Apache 설치

[root@test sbin]# systemctl start httpd
[root@test sbin]# ps -ef |grep httpd
root 499984 1 1 10:58 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 499985 499984 0 10:58 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 499986 499984 0 10:58 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 499987 499984 0 10:58 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 499988 499984 0 10:58 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 500201 498333 0 10:58 pts/0 00:00:00 grep --color=auto httpd

Web Root Directory 설정

[root@test]# vi /etc/httpd/conf/httpd.conf
 DocumentRoot “/home/repo”
 <Directory “/home/repo”>

[root@test]#  service httpd restart

/home/repo 디렉토리 이하에 index.html 파일을 만들어서 테스트 할수도 있다. 주소창에서 "http://서버IP/index.html"

YUM Repo 설정

[root@test]# vi /etc/yum.repos.d/test.repo
[RHEL8.5_App]
name=RHEL8.5 AppStream
baseurl=http://서버IP/AppStream
enabled=1
gpgcheck=0

[RHEL8.5_Base]
name=RHEL8.5 BaseOS
baseurl=http://서버IP/BaseOS
enabled=1
gpgcheck=0

Repository 서버의 repo 파일 설정도 동일하게 구성하고, Client 서버의 repo 파일도 동일하게 설정을 한다.
" http://서버IP/BaseOS "로 명시하는 이유는 Apache Home Directory를 설정할 때 "/home/repo" 라고 명시를 했기 때문에 그 이후 경로만 적으면 된다.

  • 간혹 아래와 같이 에러가 발생할 경우 확인 필요
서브스크립션 관리 레포지터리를 업데이트하고 있습니다.
소비자 ID를 읽을 수 없습니다

이 시스템은 Red Hat 관리서버에 등록되어 있지 않습니다. subscription-manager를 사용하여 등록 할 수 있습니다.

RHEL8DVD_BaseOS                                                        0.0  B/s |   0  B     00:00    
Errors during downloading metadata for repository 'RHEL8DVD_BaseOS':
  - Curl error (6): Couldn't resolve host name for http://home/repo/BaseOS/repodata/repomd.xml [Could not resolve host: home]
오류: repo 'RHEL8DVD_BaseOS': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried 를 위해 메타데이타 내려받기에 실패하였습니다

repo파일 설정의 "[RHEL8.5_App]", "name=RHEL8.5 AppStream", "baseurl=http://서버IP/AppStream" IP 명시가 잘 되었는지 확인 필요

repolist 출력

[root@test]#  yum repolist
서브스크립션 관리 레포지터리를 업데이트하고 있습니다.
소비자 ID를 읽을 수 없습니다

이 시스템은 Red Hat 관리서버에 등록되어 있지 않습니다. subscription-manager를 사용하여 등록 할 수 있습니다.

레포지터리 ID                                                                                            레포지터리 이름
RHEL8DVD_AppStream                                                                                       RHEL8DVD_AppStream
RHEL8DVD_BaseOS                                                                                          RHEL8DVD_BaseOS

Client 서버에서 Install

[root@test ~]# yum install sysstat
서브스크립션 관리 레포지터리를 업데이트하고 있습니다.
소비자 ID를 읽을 수 없습니다

이 시스템은 Red Hat 관리서버에 등록되어 있지 않습니다. subscription-manager를 사용하여 등록 할 수 있습니다.

마지막 메타자료 만료확인 0:16:29 이전인: 2024년 03월 14일 (목) 오후 03시 10분 16초.
종속성이 해결되었습니다.
==================================================================================================================================================================================================================
 꾸러미                                          구조                                   버전                                                             레포지터리                                          크기
==================================================================================================================================================================================================================
설치 중:
 sysstat                                         x86_64                                 11.7.3-6.el8                                                     RHEL8DVD_AppStream                                 425 k
종속 꾸러미 설치 중:
 lm_sensors-libs                                 x86_64                                 3.4.0-23.20180522git70f7e08.el8                                  RHEL8DVD_BaseOS                                     59 k

연결 요약
==================================================================================================================================================================================================================
설치  2 꾸러미

총계 내려받기 크기: 484 k
설치된 크기 : 1.5 M
진행 할 까요? [y/N]: y
꾸러미 내려받기중:
(1/2): sysstat-11.7.3-6.el8.x86_64.rpm                                                                                                                                             18 MB/s | 425 kB     00:00    
(2/2): lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64.rpm                                                                                                                 1.7 MB/s |  59 kB     00:00    
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
합계                                                                                                                                                                               13 MB/s | 484 kB     00:00     
연결 확인 실행 중
연결 확인에 성공했습니다.
연결 시험 실행 중
연결 시험에 성공했습니다.
연결 실행 중
  준비 중           :                                                                                                                                                                                         1/1 
  설치 중           : lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64                                                                                                                                  1/2 
  스크립트릿 실행 중: lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64                                                                                                                                  1/2 
  설치 중           : sysstat-11.7.3-6.el8.x86_64                                                                                                                                                             2/2 
  스크립트릿 실행 중: sysstat-11.7.3-6.el8.x86_64                                                                                                                                                             2/2 
  확인 중           : lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64                                                                                                                                  1/2 
  확인 중           : sysstat-11.7.3-6.el8.x86_64                                                                                                                                                             2/2 
설치된 제품이 업데이트되었습니다.

설치되었습니다:
  lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64                                                                sysstat-11.7.3-6.el8.x86_64             >

완료되었습니다!

yum을 이용한 Package download

대부분 기업들의 네트워크는 폐쇄망일 경우가 많다. yum을 이용하여 패키지를 설치할 경우 손쉽게 설치를 할 수 있으나 계획대로 진행되지 못할 경우 계획된 작업 시간이 연기가 되곤 한다. 작업을 하기 전에 다양한 방법도 사전에 고려를 해야 계획딘 작업 스케줄로 진행될 수 있다.

폐쇄망일 경우 사전에 패키지+디펜던시를 전체 Download를 하여 패키지를 가지고 가거나 외부 인터넷과 연결된 서버를 찾아 Download 받아서 설치를 진행해야 된다.

Download할 경우 서버에 설치되지 않고 디펜던시 패키지와 설치되어야 될 프로그램 패키지가 다운만 된다. 필요에 따라 원격 서버로 복사한 뒤에 설치를 하면 된다.

yum을 통해 Download할 경우 사전에 "yum-utils" 라는 패키지가 설치되어 있어야 된다.

서브스크립션 관리 레포지터리를 업데이트하고 있습니다.
소비자 ID를 읽을 수 없습니다

이 시스템은 Red Hat 관리서버에 등록되어 있지 않습니다. subscription-manager를 사용하여 등록 할 수 있습니다.

마지막 메타자료 만료확인 0:04:31 이전인: 2024년 03월 15일 (금) 오전 09시 26분 25초.
종속성이 해결되었습니다.
==================================================================================================================================================================================================================
 꾸러미                                            구조                                           버전                                                 레포지터리                                            크기
==================================================================================================================================================================================================================
설치 중:
 yum-utils                                         noarch                                         4.0.21-3.el8                                         RHEL8.5_Base                                          72 k

연결 요약
==================================================================================================================================================================================================================
설치  1 꾸러미

총계 내려받기 크기: 72 k
설치된 크기 : 22 k
진행 할 까요? [y/N]: y
꾸러미 내려받기중:
yum-utils-4.0.21-3.el8.noarch.rpm                                                                                                                                                 8.0 MB/s |  72 kB     00:00    
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
합계                                                                                                                                                                              6.4 MB/s |  72 kB     00:00     
연결 확인 실행 중
연결 확인에 성공했습니다.
연결 시험 실행 중
연결 시험에 성공했습니다.
연결 실행 중
  준비 중           :                                                                                                                                                                                         1/1 
  설치 중           : yum-utils-4.0.21-3.el8.noarch                                                                                                                                                           1/1 
  스크립트릿 실행 중: yum-utils-4.0.21-3.el8.noarch                                                                                                                                                           1/1 
  확인 중           : yum-utils-4.0.21-3.el8.noarch                                                                                                                                                           1/1 
설치된 제품이 업데이트되었습니다.

설치되었습니다:
  yum-utils-4.0.21-3.el8.noarch                                                   >                                                                               >
완료되었습니다!

yum download

[root@hhilwsdlty8 RPM]# yumdownloader --downloadonly expect
서브스크립션 관리 레포지터리를 업데이트하고 있습니다.
소비자 ID를 읽을 수 없습니다

이 시스템은 Red Hat 관리서버에 등록되어 있지 않습니다. subscription-manager를 사용하여 등록 할 수 있습니다.

마지막 메타자료 만료확인 0:06:24 이전인: 2024년 03월 15일 (금) 오전 09시 26분 25초.
expect-5.45.4-5.el8.x86_64.rpm                                                                                                                                                    6.7 MB/s | 267 kB     00:00    

[root@test RPM]# ls -l
합계 268
-rw------- 1 root root 273060  3월 15 09:32 expect-5.45.4-5.el8.x86_64.rpm

RPM(RedHat Package Manager)

  • RPM은 Red Hat Enterprise Linux (RHEL) 운영 체제에서 사용되는 패키지 형식
  • 패키지명-버전.릴리즈.벤더.아키텍처 형식.확장자

RPM 구성 방법

RPM 패키지를 만들기 위해서는 "rpm-build" 라는 패키지가 설치되어 있어야 된다.

RPM 패키지 설치 확인

[root@test]# rpm -qa | grep rpm-build
rpm-build-4.14.3-19.el8.x86_64
rpm-build-libs-4.14.3-19.el8.x86_64

### 없을 경우
[root@test]# yum install rpm-build

### Build 작업에 필요한 소스 파일 생성 및 압축

[root@test]# cd ~/home/RPM/
-rwxrwxrwx 1 ABC ABC 1799171313 12월 18 16:49 AcronisCyberProtect_15_64-bit_Build_35681.x86_64

[root@test RPM]# tar cvzf AcronisCyberProject_15_64-1.0.0.tar.gz AcronisCyberProtect_15_64-bit_Build_35681.x86_64

[root@test RPM]# ll
합계 3509784
-rwxrwxrwx 1 ABC ABC 1799171313 12월 18 16:49 AcronisCyberProtect_15_64-bit_Build_35681.x86_64
-rw------- 1 root   root   1794843380  3월 15 09:43 AcronisCyberProject_15_64-1.0.0.tar.gz

### Directory 생성
[root@test]# mkdir -p /home/RPM/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
- BUILD : 빌드가 이루어지는 디렉토리
- RPMS : RPM이 생성될 디렉토리
- SOURCES : 소스 디렉토리
- SPECS : Spec 파일 디렉토리
- SRPMS : SRPM 디렉토리

[root@test RPM]# ls -l
합계 3509784
-rwxrwxrwx 1 ABC ABC 1799171313 12월 18 16:49 AcronisCyberProtect_15_64-bit_Build_35681.x86_64
-rw------- 1 root   root   1794843380  3월 15 09:43 AcronisCyberProject_15_64-1.0.0.tar.gz
drwx------ 2 root   root            6  3월 15 09:54 BUILD
drwx------ 2 root   root            6  3월 15 09:54 RPMS
drwx------ 2 root   root            6  3월 15 09:54 SOURCES
drwx------ 2 root   root            6  3월 15 09:54 SPECS
drwx------ 2 root   root            6  3월 15 09:54 SRPMS

[root@test RPM]# mv AcronisCyberProject_15_64-1.0.0.tar.gz SOURCES
[root@test RPM]# cd SOURCES/
[root@test SOURCES]# ls -l
합계 1752780
-rw------- 1 root root 1794843380  3월 15 09:43 AcronisCyberProject_15_64-1.0.0.tar.gz

SPEC 파일 작성

spec 파일은 RPM (Red Hat Package Manager) 패키지를 빌드하는 데 사용되는 스크립트 및 지침을 포함하는 텍스트 파일입니다. 이 파일은 패키지의 빌드 및 설치에 대한 모든 세부 정보를 정의

[root@test]# vi ~/home/RPM/SPECS/acronis-1.0.0.spec

정의

%define version 1.0.0
%define name hello
%define release 1

Summary: Acronis Packages Test
Name: %{name}
Version: %{version}
Release: %{release}%{?dist}
Group: Shells
License: GPL
Source: %{name}-%{version}.tar.gz
URL: http://www.test.co.kr

BuildRequires: /bin/rm,/bin/mkdir,/bin/cp
Requires: /bin/bash

%description
RPM Build Test Description.
Make Date February 28, 2024

Build 명령

[root@test]# rpmbuild -ba acronis-1.0.0.spec

[root@test]# rpm -ivh ~/home/RPM/RPMS/x86_64/acronis-1.0.0-1.el6.x86_64.rpm
[root@test]# rpm -qa | grep acronis
acronis-1.0.0-1.el6.x86_64

profile
남자다

0개의 댓글