이직해서 먼저 했던 작업들 중 하나가 repository 서버 구성하는 거였다. 별도의 repository 구성되지 않아 패키지를 다운 받고 한대 한대씩 업로드를 하여 설치하였다. 당시 서버 대수가 약 600대 였으며 단순 패키지 설치에 들어가야 될 시간이 어마어마하였다.
그리고 꼭 필요한 또다른 이유는 설치해야 될 패키지가 검증되지 않았거나, 악성 코드라도 들어가 있으면 "아....."
이러한 작업을 효율적으로 하기 위해 내부 repository를 구성하게 되었다.
Repository를 구성하면 커맨드 "yum" 한줄로 다수의 서버에 쉽게 설치를 할 수 있고 Redhat 검증된 Official한 패키지를 설치하기 때문에 보안상 취약하지 않고 손쉽게 삭제도 할 수 있다. 그 외로 버그 패치나, 운영상 설치해야 될 패키지들 또한 필요한 패키지를 RPM으로 만들어서 쉽게 설치를 할 수 있는 장점이 있다.
- 소프트웨어를 설치하고 관리하는데 사용되는 중앙 저장소
- ftp, file, cd, http 등을 이용하여 구성할 수 있음
- 패키지를 RPM으로 구성할 수 있음
[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를 구성 한다.
[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!
[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 완료되었습니다!
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 httpdWeb 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을 이용하여 패키지를 설치할 경우 손쉽게 설치를 할 수 있으나 계획대로 진행되지 못할 경우 계획된 작업 시간이 연기가 되곤 한다. 작업을 하기 전에 다양한 방법도 사전에 고려를 해야 계획딘 작업 스케줄로 진행될 수 있다.
Download할 경우 서버에 설치되지 않고 디펜던시 패키지와 설치되어야 될 프로그램 패키지가 다운만 된다. 필요에 따라 원격 서버로 복사한 뒤에 설치를 하면 된다.
서브스크립션 관리 레포지터리를 업데이트하고 있습니다. 소비자 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 > > 완료되었습니다!
[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은 Red Hat Enterprise Linux (RHEL) 운영 체제에서 사용되는 패키지 형식
- 패키지명-버전.릴리즈.벤더.아키텍처 형식.확장자
RPM 패키지를 만들기 위해서는 "rpm-build" 라는 패키지가 설치되어 있어야 된다.
[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 파일은 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
[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