21.3. RPM에 대한 주요 변경 사항


Red Hat Enterprise Linux 10은 RPM 버전 4.19와 함께 배포됩니다. 이 버전에서는 이전 버전에 비해 많은 개선 사항이 도입되었습니다.

21.3.1. 사용자 경험 및 보안 개선

Sequoia를 기반으로 하는 새로운 OpenPGP 백엔드

RPM은 이제 레거시 OpenPGP 구문 분석기를 대체하는 패키지 서명 확인에 Sequoia PGP를 사용합니다. Sequoia PGP는 안전성과 견고성에 중점을 둔 OpenPGP 표준의 최신 Rust 기반 구현입니다.

새로운 rpmlua 명령줄 툴

이 툴은 Lua 포틀릿 및 매크로의 개발 및 테스트에 사용할 수 있는 독립형 방식으로 RPM Lua 인터프리터를 실행합니다. 자세한 내용은 시스템의 rpmlua(8) 도움말 페이지를 참조하십시오.

새로운 rpmsort 명령줄 도구

이 툴을 사용하면 sort(1) 와 유사하지만 RPM 버전 관리 체계에 대한 인식과 함께 표준 입력에서 전달된 RPM 버전을 정렬할 수 있습니다. 자세한 내용은 시스템의 rpmsort(8) 도움말 페이지를 참조하십시오.

새로운 dbus-announce 플러그인

이 플러그인은 RPM 트랜잭션에 대한 기본 정보를 시스템 D-Bus(예: 패키지를 설치 또는 제거)에 씁니다. 다른 프로그램은 이러한 신호를 구독하여 이러한 이벤트에 대한 알림을 받을 수 있습니다.

--freshen 모드에서 다운그레이드 지원

이전에는 --freshen 옵션을 사용하여 이미 설치된 패키지를 업그레이드하고 설치되지 않은 패키지를 건너뛸 수 있었습니다. 이번 개선된 기능을 통해 이 작업을 사용하여 이러한 패키지를 다운그레이드할 수도 있습니다. 이렇게 하려면 --freshen (f ) 옵션과 --oldpackage 옵션을 결합합니다.

21.3.2. 패키징 환경 개선

동적 사양 생성 지원

이제 사양 부분이 포함된 파일을 사전 정의된 위치에 배치하여 빌드 프로세스 중에 하위 패키지를 추가할 수 있습니다. 자세한 내용은 Dynamic Spec Generation 을 참조하십시오.

rpmspec 명령줄 툴의 새로운 --shell 옵션

이 옵션은 사양 파일의 컨텍스트 또는 외부에서 RPM 매크로의 개발 및 테스트에 사용할 수 있는 대화형 RPM 매크로 인터프리터를 실행합니다. 자세한 내용은 시스템의 rpmspec(8) 도움말 페이지를 참조하십시오.

%autopatch에서 개별 패치 적용 지원

특정 패치 번호를 위치 인수(예: %autopatch 1 4 6)로 나열하여 패치 번호 1, 4 및 6을 적용할 수 있습니다.

%files 섹션의 적절한 쉘(예: 글러빙 및 이스케이프)

파일 이름에서 백슬래시 및 따옴표와 같은 와일드카드 패턴 및 이스케이프 문자는 이제 Bash와 같은 쉘 인터프리터의 동작을 미러링하여 보다 일반적인 방식으로 해석됩니다. 이전에는 이러한 규칙에 대한 문서화되지 않은 제한 사항 및 예외에 예기치 않은 결과가 있을 수 있었으며 사양 파일의 %files 섹션에서 더 복잡한 패턴을 사용하지 못할 수 있었습니다.

spec 파일의 구문 분석 및 확장 콘텐츠가 포함된 소스 RPM 패키지의 새 태그

패키지 문제 분석을 지원하기 위해 새로운 RPMTAG_SPEC 태그가 소스 RPM 패키지에 추가되었습니다. 이 태그에는 빌드 중에 사용된 양식에 확장된 사양 파일의 내용이 포함됩니다. rpm --qf '%{spec}' -q /path/to/my/src.rpm 명령을 실행하여 이 태그를 볼 수 있습니다.

빌드 병렬 처리에서는 시스템 리소스 고려

RPM은 패키지를 빌드할 때 사용할 병렬 프로세스 및 스레드 수를 추정할 때 사용 가능한 물리적 메모리 및 주소 공간을 고려합니다. 이렇게 하면 CPU 수가 많지만 메모리 양이 제한된 시스템과 같이 제한된 리소스가 있는 시스템에서 성능 문제를 방지하거나 오류가 발생하지 않습니다.

각각 %_smp_tasksize_proc%_smp_tasksize_thread 매크로를 정의하여 빌드에 필요한 메모리 양을 지정하여 이러한 추정치를 조정할 수 있습니다. 두 매크로 모두 기본값 512MB입니다. 예를 들어 시스템에 성능 문제가 있는 경우 RPM에 이러한 값을 확장하여 빌드에 더 적은 수의 CPU를 할당할 수 있습니다. 마찬가지로 시스템이 활용도가 낮은 경우 RPM의 이러한 값을 줄여 더 많은 CPU를 할당할 수 있습니다.

자세한 내용은 빌드 병렬 처리를 제어하는 Macros 를 참조하십시오.

zstd 를 사용한 페이로드 압축에서 다중 스레딩 지원

zstdio 압축 방법은 빌드 중 페이로드를 압축할 때 사용할 스레드 수를 지정하는 선택적 T 매개변수를 허용합니다. 이렇게 하면 대규모 패키지의 빌드 시간을 줄일 수 있습니다. 이 기능을 활성화하려면 그에 따라 %_binary_payload%_source_payload 매크로를 설정합니다. 자세한 내용은 /usr/lib/rpm/macros 파일의 관련 주석 블록과 예상되는 형식 테이블을 참조하십시오.

새로운 선택적 %conf 사양 파일 섹션

이 섹션을 사용하여 사양 파일의 %prep 또는 %build 섹션에서 빌드하는 대신 압축 해제된 소스를 구성할 수 있습니다.

Lua-native 매크로 통합

내장된 Lua 인터프리터가 다음과 같은 향상된 기능을 포함하도록 업데이트되었습니다.

  • Lua 테이블을 통해 옵션 및 인수에 쉽게 액세스할 수 있습니다.

    이전에는 rpm.expand() 함수를 사용하여 parametric Lua 매크로의 옵션 및 인수에 액세스해야 했습니다. 이번 개선된 기능을 통해 이러한 매크로는 각각 optarg 로컬 테이블로 옵션과 인수를 수신합니다.

  • 글로벌 매크로 컨텍스트.

    이제 글로벌 Lua 환경의 매크로 테이블을 통해 매크로 에 액세스할 수 있습니다. 이 표는 모든 내장 매크로를 포함하여 parametric 매크로를 호출하는 데 사용할 수도 있습니다.

  • RPM 버전 오브젝트 및 I/O 스트림의 새 바인딩입니다.

    이제 새 rpm.ver() 함수를 사용하여 RPM 버전 문자열에서 오브젝트를 생성할 수 있습니다. 이러한 오브젝트를 사용하여 다음 작업을 수행할 수 있습니다.

    • e,vr 필드를 통해 각각 미리 작성 된 EVR 구성 요소를 가져옵니다.
    • RPM 버전 문자열을 서로 비교합니다.

    새로운 rpm.open() 함수를 사용하여 투명한 압축 및 압축 해제와 같은 RPM의 I/O 기능을 사용하는 파일 스트림을 열 수도 있습니다.

자세한 내용은 Lua in RPM 을 참조하십시오.

Lua에서 구현된 편리한 문자열 작업을 위한 새로운 매크로

이제 쉘 하위 프로세스를 실행하지 않고도 하위 문자열 추출 또는 길이 가져오기, RPM 매크로를 사용하여 직접 길이 가져오기와 같은 기본 문자열 작업을 수행할 수 있습니다. 자세한 내용은 문자열 작업을 참조하십시오.

기본 제공 및 사용자 정의 매크로에 대한 통합 호출 규칙

매크로 호출에 사용되는 %foo arg, %{ foo arg} 및 %{foo:arg} 표기법은 이제 동일합니다. 그러나 여전히 약간의 예외와 차이점이 있을 수 있습니다.

여러 개의 새로운 내장 매크로

이제 여러 개의 새로운 내장 매크로를 사용할 수 있으며, 특히 다음과 같습니다.

  • %{rpmversion} 을(를) 시스템에 설치된 RPM 버전을 가져옵니다.
  • %{exists:…​} 파일의 존재를 테스트합니다.
  • %{shescape:…​} 단일 인수가 필요한 쉘 명령에서 사용할 문자열을 작은따옴표('')로 포함합니다.

새로운 %preuntrans%postuntrans scriptlets

%preuntrans%postuntrans uninstall-time 스크립트릿은 기존 설치 시간 %pretrans%posttrans scriptlets를 보완합니다.

  • %preuntrans scriptlets는 이 트랜잭션이 제거할 패키지의 트랜잭션 전에 실행됩니다.
  • %postuntrans scriptlets는 이 트랜잭션이 제거된 패키지의 트랜잭션 후 실행됩니다.

Sequoia PGP를 사용하여 패키지 서명 지원은 기술 프리뷰로 제공됩니다.

패키지 서명에 GnuPG 대신 Sequoia PGP를 사용하도록 RPM을 구성하는 macros.rpmsign-sequoia 매크로 파일을 기술 프리뷰로 사용할 수 있습니다. 사용량을 활성화하려면 다음 단계를 수행합니다.

  1. 다음 패키지를 설치합니다.

    # dnf install rpm-sign sequoia-sq
    Copy to Clipboard Toggle word wrap
  2. macros.rpmsign-sequoia 파일을 /etc/rpm/ 디렉터리에 복사합니다.

    $ cp /usr/share/doc/rpm/macros.rpmsign-sequoia /etc/rpm/
    Copy to Clipboard Toggle word wrap

21.3.3. 기타 주요 변경 사항

사용자 및 그룹 이름 확인은 이제 엄격하게 로컬입니다.

패키지를 설치할 때 RPM은 NSS(이름 서비스 스위치)를 사용하는 것과 달리 각각 로컬 시스템의 passwd(5)group(5) 파일에서 사용자와 그룹에 대한 정보를 가져옵니다.

패키지를 빌드할 때 %defattr 지시문은 이제 디스크의 실제 소유권에 대한 정보를 얻는 대신 사용자 및 그룹 속성의 대시(-) 자리 표시자를 root 로 해석합니다. 마찬가지로 사양 파일, 소스 아카이브 또는 패치 파일과 같은 소스 RPM 패키지의 파일은 디스크에 대한 소유권에 관계없이 항상 root 사용자 및 그룹이 소유합니다.

빌드 트리(%_builddir)가 빌드에 성공한 후 기본적으로 제거됨

이전 버전에서는 rpmbuild(8)-bb 와 같이 더 일반적으로 사용되는 모드가 아닌 --rebuild 모드에서 빌드 디렉터리만 정리했습니다. 결과적으로 여러 패키지가 빌드되어 시간이 지남에 따라 불필요한 파일 누적이 발생했습니다. 이번 개선된 기능을 통해 빌드 트리를 항상 유지하여 치명적이 아닌 빌드 문제를 조사하려면 --noclean 옵션을 사용할 수 있습니다.

이제 %patch 지시문에서 적용할 패치 번호를 명시적으로 지정해야 합니다.

다음 방법 중 하나로 패치 번호를 지정할 수 있습니다.

  • P 옵션(예: %patch -P 1 -P2)을 사용하여 패치 번호 1과 2 를 적용합니다.
  • 패치 번호를 위치 인수로 전달하여(예: %patch 1 2) 패치 번호 1과 2 를 적용합니다.
중요

여기서 N 은 적용할 패치 번호인 %patchN 구문이 더 이상 사용되지 않습니다.

참고

%patch 지시문으로 명시적 패치 번호를 지정하지 않으면 빌드가 오류와 함께 종료됩니다.

참고

%patch 지시문을 사용하여 개별 패치를 수동으로 적용하는 대신 가능한 경우 %autosetup 매크로를 사용하는 것이 좋습니다. %autosetup 을 사용하면 패치 번호가 식별된 순서대로 패치가 자동으로 적용됩니다. 결과적으로 사양 파일을 읽고 유지보수하는 것이 더 쉬워집니다. 자세한 내용은 패치 애플리케이션 자동화를 참조하십시오.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat