CS/Linux

[Linux] 패키지 관리자

kyoulho 2024. 9. 22. 13:53

RPM


RPM은 리눅스에서 소프트웨어를 설치하고 관리하는 기본 도구다. 마치 Windows에서 프로그램을 설치할 때 사용하는 setup.exe 파일과 비슷한 역할을 한다. RPM 패키지는 .rpm 확장자를 가진 파일로, 특정 소프트웨어나 프로그램을 담고 있다. 이 파일을 설치하면 해당 프로그램이 시스템에 설치된다. RPM 패키지의 파일명은 다음과 같은 형식을 따른다.

패키지이름-버전-릴리즈번호.리눅스버전.아키텍처.rpm

예를 들어 nginx-1.18.0-1.el8.x86_64.rpm이라는 파일이 있다면, 이는 nginx라는 프로그램의 1.18.0 버전이며, RHEL 8용 64비트 시스템(x86_64)에서 사용된다는 뜻이다.

 

RPM 명령어

  • 패키지 설치: 터미널에서 다음 명령어를 입력한다.
    • -U: 설치 또는 업그레이드
    • -v: 자세한 정보를 출력
    • -h: 설치 진행 상황을 #로 표시
    • rpm -Uvh 패키지파일이름.rpm
  • 패키지 삭제:
    • 설치된 패키지를 시스템에서 제거한다.
    • rpm -e 패키지이름
  • 설치된 패키지 확인:
    • 특정 패키지가 설치되었는지 확인하려면:
      rpm -qa 패키지이름
    • 특정 파일이 어떤 패키지에 속해 있는지 알아보려면:
      rpm -qf /파일의/절대/경로

RPM의 한계점

하지만 RPM은 의존성 문제를 자동으로 해결해주지 못한다. 예를 들어, 프로그램 A를 설치하려는데 프로그램 B가 필요하다면, RPM은 프로그램 B를 자동으로 설치해주지 않는다. 사용자가 직접 필요한 패키지를 찾아 설치해야 하는 번거로움이 있다.

 

 

 

DNF


DNF는 RPM의 의존성 문제를 해결해 주는 고급 패키지 관리자다. DNF를 사용하면 필요한 패키지를 자동으로 찾아 설치해 주고, 의존성도 알아서 해결해 준다.

 

DNF의 주요 기능과 명령어

패키지 설치 및 삭제

  • 패키지 설치: dnf install 패키지이름
  • 패키지 삭제: dnf remove 패키지이름

패키지 업데이트 및 정보 확인

  • 업데이트 확인:
    • 시스템에 업데이트할 패키지가 있는지 확인한다.
    • dnf check-update
  • 패키지 업데이트:
    • 특정 패키지를 업데이트한다.
    • 모든 패키지를 업데이트하려면 dnf update만 입력하면 된다.
    • dnf update 패키지이름
  • 패키지 정보 확인:
    • 패키지의 상세 정보를 볼 수 있다.
    • dnf info 패키지이름

패키지 검색 및 파일 소속 패키지 확인

  • 패키지 검색:
    • 키워드와 관련된 패키지를 찾아준다.
    • dnf search 키워드
  • 특정 파일이 속한 패키지 확인:
    • 해당 파일이 어떤 패키지에 속해 있는지 알아볼 수 있다.
    • dnf provides /파일의/절대/경로

패키지 그룹 관리

패키지 그룹은 관련된 여러 패키지를 하나의 그룹으로 묶어 관리하는 기능이다. 예를 들어, 개발 도구에 필요한 여러 패키지를 한 번에 설치할 수 있다.

  • 패키지 그룹 리스트 확인:
    • 설치 가능한 패키지 그룹 목록을 보여준다.
    • dnf grouplist
    • 그룹에도 계층이 있다.
  • 패키지 그룹 설치:
    • 예를 들어, 개발 도구를 설치하려면 dnf groupinstall "Development Tools"를 입력하면 된다.
    • dnf groupinstall "그룹이름"

저장소 관리 및 GPG 키 검사 생략

  • GPG 키는 패키지의 출처와 무결성을 확인하기 위한 디지털 서명 도구이다.
  • 패키지를 배포하는 곳에서 GPG 키로 패키지에 서명하고, 사용자는 그 키로 패키지가 변조되지 않았는지 확인할 수 있다.
  • 이를 통해 악의적인 코드나 변조된 패키지가 설치되는 것을 방지할 수 있다.
  • GPG 키 검사 생략:
    • 패키지 설치 시 GPG 키 검사를 생략한다. 하지만 보안상의 이유로 GPG 키 검사는 하는 것이 좋다.
    • dnf install 패키지이름 --nogpgcheck
  • 기존 저장소 목록 지우기:
    • /etc/yum.repos.d/ 디렉토리에서 필요 없는 .repo 파일을 삭제하거나, 해당 파일에서 enabled=0으로 설정하면 저장소를 비활성화할 수 있다.

 

DNF의 설정 파일과 저장소 관리

/etc/yum.conf 파일

  • DNF의 기본 설정을 담고 있는 파일이다.
  • 캐시 디렉토리, 로그 파일 위치, GPG 체크 여부 등의 옵션을 설정할 수 있다.

/etc/yum.repos.d/ 디렉토리와 .repo 파일들

  • 이 디렉토리에는 사용 가능한 저장소의 설정 파일들이 있다.
  • .repo 파일은 하나 이상의 저장소를 정의한다.
.repo 파일의 구조
[저장소이름]
name=저장소 설명
baseurl=저장소 URL
enabled=활성화 여부
gpgcheck=GPG 키 검사 여부
gpgkey=GPG 키 파일 경로

# DVD, Network 사용 예제
[dvd-baseos]
name=Rocky Linux DVD BaseOS
baseurl=file:///media/cdrom/BaseOS/
gpgcheck=0

[dvd-appstream]
name=Rocky Linux DVD AppStream
baseurl=file:///media/cdrom/AppStream/
gpgcheck=0

[network-crb]
name=Rocky Linux Network CRB
baseurl=https://dl.rockylinux.org/vault/rocky/9.0/CRB/x86_64/os
gpgcheck=1

 

로컬 저장소 설정

createrepo 패키지 설치

sudo dnf install -y createrepo

createrepo는 RPM 패키지로 구성된 로컬 또는 원격 저장소의 메타데이터를 생성하고 관리하는 도구이다. 이 메타데이터는 패키지의 의존성, 버전 정보 등을 포함하며, 이를 통해 패키지 관리자가 효율적으로 패키지를 검색하고 설치할 수 있게 한다. 로컬 저장소를 설정할 때 createrepo를 사용하면 네트워크에 의존하지 않고도 패키지를 관리하고 배포할 수 있어 특히 오프라인 환경이나 내부 네트워크에서 유용하다.

리포지토리 메타데이터 생성

# 메타데이터 생성
sudo createrepo <rpm이 존재하는 디렉토리 경로>

createrepo를 실행하면 지정된 디렉토리 내에 repodata라는 하위 디렉토리가 생성되며, 이 안에 여러 메타데이터 파일들이 포함된다. 이 메타데이터 파일들은 패키지 관리자가 저장소를 효율적으로 탐색하고 패키지 설치를 원활하게 진행할 수 있도록 도와준다.

repodata 디렉토리 구조

createrepo를 실행하면 지정한 경로 하위에 repodata/ 디렉토리가 생성되고, 이 안에 다양한 XML 파일과 기타 데이터가 포함된다.

  1. repomd.xml: 다른 메타데이터 파일들의 위치와 상태를 설명하며, 패키지 관리자가 필요한 메타데이터를 효율적으로 찾을 수 있도록 돕는다.
  2. primary.xml.gz: 저장소에 포함된 모든 패키지의 기본 정보(예: 패키지 이름, 버전, 릴리즈, 아키텍처, 의존성 등)를 담고 있는 메타데이터 파일이다.
  3. filelists.xml.gz:  각 패키지에 포함된 파일 목록을 상세히 기록한 메타데이터이다. 이 정보는 특정 파일이 어느 패키지에 속하는지 확인하거나, 파일 기반 검색을 수행할 때 유용하다. 예를 들어, 특정 파일을 포함하는 패키지를 찾고자 할 때 이 메타데이터가 사용된다.
  4. other.xml.gz: 패키지의 스크립트 정보나 기타 추가적인 메타데이터를 포함한다. 이는 패키지 설치 및 제거 시 실행되는 스크립트에 대한 정보를 담고 있어, 패키지의 동작을 제어하고 관리하는 데 필요하다.
  5. filelists.sqlite, primary.sqlite, other.sqlite: 이들 .sqlite 파일들은 각각의 XML 메타데이터 파일에 대한 데이터베이스 버전다. SQLite 데이터베이스 형식으로 저장되어 있어, 패키지 관리자가 메타데이터를 더욱 빠르고 효율적으로 검색할 수 있게 한다.

리포지토리 구성 파일 생성

이제 YUM 또는 DNF가 로컬 저장소를 인식할 수 있도록 리포지토리 구성 파일을 생성해야 한다. /etc/yum.repos.d/local.repo 파일을 생성한다.

[LocalRepo]
name=Local Repository  # 저장소의 이름을 지정
baseurl=file:///os/localrepo/  # 저장소의 위치를 로컬 파일 시스템으로 설정
enabled=1  # 저장소를 활성화 (1은 활성화)
gpgcheck=0  # GPG 서명 검사를 비활성화 (0은 비활성화)
# 필요에 의해 선택적으로
module_hotfixes=1 # 모듈 핫픽스를 활성화하여 모듈 스트림의 수정 없이 핫픽스를 적용할 수 있다.

리포지토리 활성화 및 테스트

저장소 설정이 완료되었으면, YUM 또는 DNF 캐시를 정리하고 새로 추가된 저장소를 테스트한다.

sudo dnf clean all  # DNF 캐시를 정리
sudo dnf makecache  # 모든 활성화된 리포지토리의 메타데이터를 캐시에 생성
sudo dnf repolist  # 활성화된 저장소 목록을 확인
728x90

'CS > Linux' 카테고리의 다른 글

[Linux] 파일 위치 검색  (1) 2024.09.22
[Linux] 파일의 압축과 묶기  (1) 2024.09.22
[Linux] 하드 링크와 심볼릭 링크  (1) 2024.09.20
[Linux] 사용자와 그룹  (1) 2024.09.18
[Linux] 마운트  (0) 2024.09.18