4.2. SPEC 파일이란 무엇입니까?

SPEC 파일은 rpmbuild 유틸리티에서 RPM을 빌드하는 데 사용하는 레시피로 이해할 수 있습니다. SPEC 파일은 일련의 섹션에서 지침을 정의하여 빌드 시스템에 필요한 정보를 제공합니다. 섹션은 Preamblebody 부분에 정의되어 있습니다. Preamble 부분에는 body 부분에서 사용되는 일련의 메타데이터 항목이 포함되어 있습니다. body 부분은 지침의 주요 부분을 나타냅니다.

다음 섹션에서는 SPEC 파일의 각 섹션에 대해 설명합니다.

4.2.1. 사전 항목

아래 표는 RPM SPEC 파일의 Preamble 섹션에서 자주 사용되는 몇 가지 지시문을 제공합니다.

표 4.1. RPM SPEC 파일의 Preamble 섹션에 사용된 항목

SPEC 조건정의

이름

SPEC 파일 이름과 일치해야 하는 패키지의 기본 이름입니다.

버전

소프트웨어의 업스트림 버전 번호입니다.

릴리스 버전

이 버전의 소프트웨어가 릴리스된 횟수입니다. 일반적으로 초기 값을 1%{?dist}로 설정하고 패키지의 새 릴리스마다 증가시킵니다. 새 버전 의 소프트웨어가 빌드되면 1로 재설정합니다.

요약

패키지에 대한 간략한 요약입니다.

라이센스

패키지하는 소프트웨어의 라이센스입니다.

URL

프로그램에 대한 자세한 내용은 전체 URL입니다. 대부분의 경우 이것은 패키지하는 소프트웨어의 업스트림 프로젝트 웹 사이트입니다.

Source0

업스트림 소스 코드의 압축 아카이브 경로 또는 URL(패치되지 않은 패치는 다른 위치에서 처리됩니다). 이는 아카이브의 액세스 가능하고 안정적인 스토리지(예: 패키지 관리자의 로컬 스토리지가 아닌 업스트림 페이지)를 가리켜야 합니다. 필요한 경우 더 많은 SourceX 지시문을 추가하여 매번 숫자를 늘릴 수 있습니다. 예를 들면 다음과 같습니다. Source1, Source2, Source3 등이 있습니다.

패치

필요한 경우 소스 코드에 적용할 첫 번째 패치의 이름입니다.

지시문은 두 가지 방법으로 적용할 수 있습니다. 패치 종료 시 또는 번호 없이 사용할 수 있습니다.

숫자를 지정하지 않으면 내부적으로 해당 항목에 할당됩니다. Patch0, Patch1, Patch2, Patch3 등을 사용하여 명시적으로 숫자를 지정할 수도 있습니다.

이러한 패치는 %patch0, %patch1, %patch2 매크로 등을 사용하여 하나씩 적용할 수 있습니다. 매크로는 RPM SPEC 파일의 body 섹션에 있는 %prep 지시문 내에 적용됩니다. 또는 %autopatch 매크로를 사용하면 SPEC 파일에 지정된 순서에 따라 모든 패치를 자동으로 적용할 수 있습니다.

BuildArch

패키지가 아키텍처에 의존하지 않는 경우 예를 들어 해석된 프로그래밍 언어로 전적으로 작성된 경우 이를 BuildArch: noarch 로 설정합니다. 설정되지 않은 경우 패키지는 빌드되는 시스템의 아키텍처(예: x86_64 )를 자동으로 상속합니다.

BuildRequires

컴파일된 언어로 작성된 프로그램을 빌드하는 데 필요한 쉼표 또는 공백으로 구분된 패키지 목록입니다. BuildRequires 의 여러 항목이 있을 수 있으며, 각 항목은 SPEC 파일의 자체 행에 있습니다.

필수 항목

소프트웨어를 설치한 후 실행하는 데 필요한 쉼표 또는 공백으로 구분된 패키지 목록입니다. SPEC 파일의 자체 행에는 여러 개의 Requires 항목이 있을 수 있습니다.

ExcludeArch

특정 프로세서 아키텍처에서 소프트웨어가 작동할 수 없는 경우 여기에서 해당 아키텍처를 제외할 수 있습니다.

충돌

conflicts are inverse to Requires. conflicts 와 일치하는 패키지가 있는 경우 Conflict 태그가 이미 설치되어 있거나 설치할 패키지에 있는지 여부에 따라 패키지를 독립적으로 설치할 수 없습니다.

사용되지 않음

이 지시문은 rpm 명령이 명령줄에서 직접 사용되는지 또는 업데이트 또는 종속성 솔루션을 통해 수행하는지 여부에 따라 업데이트되는 방식을 변경합니다. 명령줄에서 사용하는 경우 RPM은 설치되지 않는 패키지의 오래된 패키지와 일치하는 모든 패키지를 제거합니다. 업데이트 또는 종속성 확인자를 사용하는 경우 일치하는 Obsoletes: 가 포함된 패키지가 업데이트로 추가되고 일치하는 패키지를 교체합니다.

제공

Provides 가 패키지에 추가되면 해당 이름이 아닌 종속성에서 패키지를 참조할 수 있습니다.If Provides is added to a package, the package can be referred to by dependencies other than its name.

Name,VersionRelease 지시문은 RPM 패키지의 파일 이름을 구성합니다. RPM 패키지 파일 이름에 NAME-VERSION-RELEASE 형식이 있기 때문에 RPM 패키지 관리자 및 시스템 관리자는 이러한 세 개의 지시문 N-V-R 또는 NVR 을 호출하는 경우가 많습니다.

다음 예제에서는 rpm 명령을 쿼리하여 특정 패키지에 대한 NVR 정보를 가져오는 방법을 보여줍니다.

예 4.1. bash 패키지에 대한 NVR 정보를 제공하기 위해 rpm 쿼리

# rpm -q bash
bash-4.4.19-7.el8.x86_64

bash 는 패키지 이름이고 4.4.19 는 버전이며 7.el8 은 릴리스입니다. 최종 마커는 아키텍처에 신호를 보내는 x86_64 입니다. NVR 과 달리 아키텍처 마커는 RPM 패키지러를 직접 제어할 수 없지만 rpmbuild 빌드 환경에 의해 정의됩니다. 이에 대한 예외는 아키텍처 독립적인 noarch 패키지입니다.

4.2.2. 본문 항목

다음은 RPM SPEC 파일의 Body 섹션에 사용된 항목입니다.

표 4.2. RPM SPEC 파일의 body 섹션에서 사용되는 항목

SPEC 조건정의

%Description

RPM에 패키지된 소프트웨어에 대한 전체 설명입니다. 이 설명은 여러 행에 걸쳐 있을 수 있으며 단락으로 나눌 수 있습니다.

%Prep

빌드할 소프트웨어를 준비하는 명령 또는 일련의 명령(예: Source0 에서 아카이브 압축을 풉니다. 이 지시문에는 쉘 스크립트가 포함될 수 있습니다.

%build

소프트웨어를 머신 코드(컴파일된 언어의 경우) 또는 바이트 코드(일부 해석 언어의 경우)로 빌드하는 명령 또는 일련의 명령입니다.

%install

%builddir 에서 원하는 빌드 아티팩트를 복사하는 명령 또는 일련의 명령(빌드가 발생하는 경우) %buildroot 디렉터리(패키지할 파일이 포함된 디렉터리 구조 포함)). 일반적으로 ~/rpmbuild/BUILD에서 ~/rpmbuild/BUILD ROOT 로 파일을 복사하고 ~/rpmbuild/BUILDROOT 에 필요한 디렉터리를 만듭니다. 이는 최종 사용자가 패키지를 설치하는 경우에는 패키지가 아닌 패키지를 생성할 때만 실행됩니다. 자세한 내용은 SPEC 파일 작업을 참조하십시오.

%check

소프트웨어를 테스트하기 위한 명령 또는 일련의 명령. 여기에는 일반적으로 단위 테스트와 같은 사항이 포함됩니다.

%files

최종 사용자의 시스템에 삽입될 파일 목록입니다.

%changelog

다른 버전 또는 릴리스 빌드 간 패키지에 발생한 변경 사항 레코드입니다.

4.2.3. 고급 항목

SPEC 파일에는 Scriptlets 또는 Trigger 와 같은 고급 항목도 포함될 수 있습니다.

이는 빌드 프로세스가 아닌 최종 사용자의 시스템에 설치 프로세스 중 다른 시점에서 적용됩니다.