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 명령어로 설치도 가능한 점은 알고 계셔야 합니다~