[Redhat] 다운 받은 패키지 YUM REPOSITORY 구성

 

RPM 패키지를 다운로드한 후 yum localinstall 명령을 사용하여 설치할 수 있지만, YUM REPOSITORY를 구성하면 의존성 문제를 더 쉽게 해결할 수 있으며 여러 시스템에 빠르게 배포할 수 있습니다. YUM REPOSITORY를 구성하면 시스템이 자동으로 필요한 의존성을 해결하고 설치할 수 있어, 더 간편하고 안정적인 업데이트가 가능합니다. 아래에서는 보안 취약점 조치에 필요한 패키지를 대상으로 로컬 YUM 레포지토리를 구성하고 이를 통해 패키지를 설치하고 업데이트하는 방법을 설명합니다.

 

아래 내용은 보안 취약점 조치를 위해 다운로드 받은 특정 몇개의 패키지를 REPOSITORY로 구성하는 방법을 설명합니다. 만약 CD 이미지를 local repo로 구성하는 방법을 원하시면 LOCAL REPO를 참조하실 수 있습니다.

YUM REPOSITORY 생성

 

1. 패키지 파일 준비

먼저 설치하고자 하는 RPM 패키지를 특정 디렉터리에 모읍니다. 여기서는 /root/cve-2024-1086 디렉터리에 패키지를 준비했습니다.

[root@rhel8 cve-2024-1086]# pwd
/root/cve-2024-1086

[root@rhel8 cve-2024-1086]# ls
bpftool-4.18.0-513.24.1.el8_9.x86_64.rpm
bpftool-debuginfo-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-abi-stablelists-4.18.0-513.24.1.el8_9.noarch.rpm
kernel-core-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-cross-headers-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-devel-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-doc-4.18.0-513.24.1.el8_9.noarch.rpm
kernel-headers-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-modules-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-modules-extra-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-tools-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-tools-debuginfo-4.18.0-513.24.1.el8_9.x86_64.rpm
kernel-tools-libs-4.18.0-513.24.1.el8_9.x86_64.rpm
perf-4.18.0-513.24.1.el8_9.x86_64.rpm
perf-debuginfo-4.18.0-513.24.1.el8_9.x86_64.rpm
python3-perf-4.18.0-513.24.1.el8_9.x86_64.rpm
python3-perf-debuginfo-4.18.0-513.24.1.el8_9.x86_64.rpm

총 18개의 패키지를 준비했습니다. 이 패키지들은 전부 cve-2024-1086 보안 취약점 패치를 위해 준비한 패키지들입니다.

 

2. YUM REPOSITORY 메타데이터 생성

2.1 createrepo 패키지 설치

로컬 레포지토리를 생성하려면 createrepo 패키지가 필요합니다. 아래 명령어를 사용하여 설치합니다.

[root@rhel8 cve-2024-1086]# yum install createrepo -y
...

Installed:
  createrepo_c-0.17.7-6.el8.x86_64        createrepo_c-libs-0.17.7-6.el8.x86_64
  drpm-0.4.1-3.el8.x86_64

Complete!

2.2 메타데이터 생성

패키지가 준비된 디렉터리에서 createrepo 명령어를 사용하여 메타데이터를 생성합니다.

[root@rhel8 cve-2024-1086]# createrepo /root/cve-2024-1086
Directory walk started
Directory walk done - 18 packages
Temporary output repo path: /root/cve-2024-1086/.repodata/
Preparing sqlite DBs
Pool started (with 5 workers)
Pool finished

2.3 생성된 메타데이터 확인

tree 명령을 이용해 디렉터리 구조를 살펴보면 repodata라는 디렉터리가 생성되었습니다.

[root@rhel8 cve-2024-1086]# tree
.
├── bpftool-4.18.0-513.24.1.el8_9.x86_64.rpm
├── bpftool-debuginfo-4.18.0-513.24.1.el8_9.x86_64.rpm
├── kernel-4.18.0-513.24.1.el8_9.x86_64.rpm
├── kernel-abi-stablelists-4.18.0-513.24.1.el8_9.noarch.rpm
├── kernel-core-4.18.0-513.24.1.el8_9.x86_64.rpm
├── kernel-cross-headers-4.18.0-513.24.1.el8_9.x86_64.rpm
├── kernel-devel-4.18.0-513.24.1.el8_9.x86_64.rpm
├── kernel-doc-4.18.0-513.24.1.el8_9.noarch.rpm
├── kernel-headers-4.18.0-513.24.1.el8_9.x86_64.rpm
├── kernel-modules-4.18.0-513.24.1.el8_9.x86_64.rpm
├── kernel-modules-extra-4.18.0-513.24.1.el8_9.x86_64.rpm
├── kernel-tools-4.18.0-513.24.1.el8_9.x86_64.rpm
├── kernel-tools-debuginfo-4.18.0-513.24.1.el8_9.x86_64.rpm
├── kernel-tools-libs-4.18.0-513.24.1.el8_9.x86_64.rpm
├── perf-4.18.0-513.24.1.el8_9.x86_64.rpm
├── perf-debuginfo-4.18.0-513.24.1.el8_9.x86_64.rpm
├── python3-perf-4.18.0-513.24.1.el8_9.x86_64.rpm
├── python3-perf-debuginfo-4.18.0-513.24.1.el8_9.x86_64.rpm
└── repodata
    ├── 788d5db18f3d135b023071e10e5f3e6fa7a60ecbc284c4de54b0764f1b6fa878-primary.sqlite.bz2
    ├── a84c3d792399056c5530f29240ce29e813a0aa990351865397e4428ac59503cf-other.xml.gz
    ├── ae68e553964a2a388daf483f582a265dc78469698d7ac70184c1aa3cb3dc7bc0-filelists.xml.gz
    ├── ce8c41910479d5326bd38c50c6d684131199ff463901ec09396ab244406bf370-primary.xml.gz
    ├── d00a4bcc53f246cddc73d31b44d8d1ceb91534c398666789e98f19dff7eaf22b-filelists.sqlite.bz2
    ├── f07daedaf8a444b2d245c3fcbe263b497777731c62e50ed924b14f3281e7a1d7-other.sqlite.bz2
    └── repomd.xml

1 directory, 25 files

repodata에는 YUM과 같은 패키지 관리 도구가 패키지 정보를 검색하고, 의존성을 해결하는 등 패키지를 관리할 수 있는 정보들이 포함되어 있습니다.

 

3. YUM 저장소 등록

레포지토리를 등록하기 전에 현재 등록된 레포지토리를 확인합니다.

[root@rhel8 yum.repos.d]# yum repolist
...
repo id                                                  repo name
AppStream                                                AppStream
BaseOS                                                   BaseOS
[root@rhel8 yum.repos.d]#

AppStream과 BaseOS 두 개의 레포지토리 저장소가 검색됩니다.

 

3.1 YUM REPOSITORY 저장소 등록 아래와 같이 /etc/yum.repos.d 디렉터리 아래 새로운 “.repo” 파일을 생성하여 레포지토리를 등록합니다.

[root@rhel8 cve-2024-1086]# vim /etc/yum.repos.d/cve-2014-1086.repo
[cve-2024-1086]
name=cve-2024-1086 repo
baseurl=file:///root/cve-2024-1086
enabled=1
gpgcheck=0

3.2 생성된 YUM REPOSITORY 확인

cve-2024-1086 ID를 가지는 저장소를 확인할 수 있습니다.

[root@rhel8 cve-2024-1086]# yum repolist
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.

repo id                                               repo name
AppStream                                             AppStream
BaseOS                                                BaseOS
cve-2024-1086                                         cve-2024-1086 repo

-v 옵션을 이용해 보면 총 18개의 패키지가 cve-2024-1086 레포에서 제공되는 걸 확인할 수 있는데 이는 /root/cve-2024-1086 디렉터리에서 제공하는 패키지 개수와 정확히 일치합니다.

[root@rhel8 cve-2024-1086]# yum repolist -v cve-2024-1086
Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install, download, generate_completion_cache, groups-manager, kpatch, needs-restarting, playground, product-id, repoclosure, repodiff, repograph, repomanage, reposync, subscription-manager, system-upgrade, uploadprofile
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.

YUM version: 4.7.0
cachedir: /var/cache/dnf
Last metadata expiration check: 0:00:11 ago on Mon 17 Jun 2024 11:08:07 AM KST.
Repo-id            : cve-2024-1086
Repo-name          : cve-2024-1086 repo
Repo-status        : enabled
Repo-revision      : 1718589140
Repo-updated       : Mon 17 Jun 2024 10:52:20 AM KST
Repo-pkgs          : 18
Repo-available-pkgs: 18
Repo-size          : 291 M
Repo-baseurl       : file:///root/cve-2024-1086
Repo-expire        : 172,800 second(s) (last: Mon 17 Jun 2024 11:08:07 AM KST)
Repo-filename      : /etc/yum.repos.d/cve-2014-1086.repo
Total packages: 18

 

4. YUM을 이용한 패키지 업데이트

등록된 REPOSITORY를 통해 패키지를 업데이트합니다.

[root@rhel8 ~]# yum update "kernel-*" -y
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.

Last metadata expiration check: 0:02:21 ago on Mon 17 Jun 2024 11:16:25 AM KST.
Dependencies resolved.
=================================================================================================================
 Package                      Architecture      Version                           Repository                Size
=================================================================================================================
Upgrading:
 kernel-headers               x86_64            4.18.0-513.24.1.el8_9             cve-2024-1086             11 M
 kernel-tools                 x86_64            4.18.0-513.24.1.el8_9             cve-2024-1086             10 M
 kernel-tools-libs            x86_64            4.18.0-513.24.1.el8_9             cve-2024-1086             10 M
Installing dependencies:
 kernel-core                  x86_64            4.18.0-513.24.1.el8_9             cve-2024-1086             43 M
 kernel-modules               x86_64            4.18.0-513.24.1.el8_9             cve-2024-1086             36 M
Installing weak dependencies:
 kernel-devel                 x86_64            4.18.0-513.24.1.el8_9             cve-2024-1086             24 M

Transaction Summary
=================================================================================================================
...
Complete!

 

5. 업데이트 확인 및 시스템 재부팅

업데이트가 완료되면 부팅을 위한 initramfs와 vmlinuz 파일이 새로운 버전으로 생성되었는지 확인합니다.


[root@rhel8 ~]# ls /boot/ | grep 513
initramfs-4.18.0-513.24.1.el8_9.x86_64.img
vmlinuz-4.18.0-513.24.1.el8_9.x86_64
...

새로운 커널을 적용하기 위해 시스템을 재부팅 합니다.

[root@rhel8 ~]# reboot

재부팅 후 커널 버전을 확인하여 업데이트가 성공적으로 이루어졌는지 확인합니다.

[root@rhel8 ~]# uname -r
4.18.0-513.24.1.el8_9.x86_64

[root@rhel8 ~]# rpm -qa | grep kernel | grep 513
kernel-tools-libs-4.18.0-513.24.1.el8_9.x86_64
kernel-tools-4.18.0-513.24.1.el8_9.x86_64
kernel-modules-4.18.0-513.24.1.el8_9.x86_64
kernel-devel-4.18.0-513.24.1.el8_9.x86_64
kernel-headers-4.18.0-513.24.1.el8_9.x86_64
kernel-core-4.18.0-513.24.1.el8_9.x86_64

마치며

이로써 로컬 YUM 레포지토리를 이용한 패키지 업데이트가 완료되었습니다. 이 방법을 통해 보안 취약점이 발생했을 때 간편하게 패키지를 분리해서 보관했다 여러 시스템에 쉽게 적용할 수 있습니다. 다만 패키지 업데이트 방법은 꼭 레포지토리 구성 방법만 있는 것은 아닙니다. 패키지가 있는 디렉터리에서 REPO 구성 없이 yum localinstall 명령어로 설치도 가능한 점은 알고 계셔야 합니다~

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top