4.2. 매크로에 대한 추가 정보
이 섹션에서는 선택한 내장 RPM 매크로에 대해 설명합니다. 이러한 매크로의 전체 목록은 RPM 문서를 참조하십시오.
4.2.1. 사용자 고유의 매크로 정의
다음 섹션에서는 사용자 지정 매크로를 만드는 방법을 설명합니다.
절차
RPM SPEC 파일에 다음 행을 추가합니다.
%global <name>[(opts)] <body>
\
에 대한 모든 공백이 제거됩니다. name은 영숫자 문자 및 문자 _
로 구성될 수 있으며 길이가 3자 이상이어야 합니다. (opts)
필드의 포함은 선택 사항입니다.
-
간단한
매크로에는(opts)
필드가 포함되어 있지 않습니다. 이 경우 재귀 매크로 확장만 수행됩니다. -
매개 변수가 있는 매크로
에는(opts)
필드가 포함되어 있습니다. macro 호출 시작 시argc/argv
처리를 위해getopt(3)
간opts
문자열이 전달됩니다.
이전 RPM SPEC 파일은 %define <name> <body>
매크로 패턴을 대신 사용합니다. %define
과 %global
매크로의 차이점은 다음과 같습니다.
-
%define
에는 로컬 범위가 있습니다. 이는 SPEC 파일의 특정 부분에 적용됩니다.%define
매크로의 본문이 사용될 때 확장됩니다. -
%global
에는 글로벌 범위가 있습니다. 이는 전체 SPEC 파일에 적용됩니다.%global
매크로의 본문은 정의 시간에 확장됩니다.
매크로는 주석 처리되거나 매크로의 이름이 SPEC 파일의 %changelog
섹션에 제공되더라도 평가됩니다. 매크로를 주석으로 처리하려면 %%
를 사용합니다. 예: %%global
.
추가 리소스
매크로 기능에 대한 포괄적인 정보는 RPM 문서를 참조하십시오.
4.2.2. %setup 매크로 사용
이 섹션에서는 %setup
매크로의 다양한 변형을 사용하여 소스 코드 tarballs로 패키지를 빌드하는 방법을 설명합니다. 매크로 변형을 결합할 수 있습니다. rpmbuild
출력은 %setup
매크로의 표준 동작을 보여줍니다. 각 단계의 시작 부분에서 매크로는 아래 예제와 같이 Executing(%…)
을 출력합니다.
예 4.1. %setup
매크로 출력 예
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.DhddsG
쉘 출력은 set -x
가 활성화된 상태로 설정됩니다. /var/tmp/rpm-tmp.DhddsG
의 내용을 보려면 rpmbuild
가 빌드 후 임시 파일을 삭제하므로 --debug
옵션을 사용합니다. 그러면 환경 변수 설정이 표시되고 그 뒤에 예를 들면 다음과 같습니다.
cd '/builddir/build/BUILD' rm -rf 'cello-1.0' /usr/bin/gzip -dc '/builddir/build/SOURCES/cello-1.0.tar.gz' | /usr/bin/tar -xof - STATUS=$? if [ $STATUS -ne 0 ]; then exit $STATUS fi cd 'cello-1.0' /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
%setup
매크로:
- 올바른 디렉터리에서 작업하고 있는지 확인합니다.
- 이전 빌드의 남은 항목을 제거합니다.
- 소스 tarball의 압축을 풉니다.
- 일부 기본 권한을 설정합니다.
4.2.2.1. %setup -q 매크로 사용
-q
옵션은 %setup
매크로의 상세 정보를 제한합니다.
대신 tar -xvof만 실행됩니다. 첫 번째 옵션으로 이 옵션을 사용합니다.
tar -xvvof
4.2.2.2. %setup -n 매크로 사용
n
옵션은 확장된 tarball의 디렉터리 이름을 지정하는 데 사용됩니다.
이는 확장 tarball의 디렉터리에 예상되는 이름과 다른 이름(%{name}-%{version}
)이 있는 경우, %setup
매크로 오류가 발생할 수 있습니다.
예를 들어 패키지 이름이 cello
이지만 소스 코드가 hello-1.0.tgz
에 보관되고 hello/
디렉터리가 포함된 경우 SPEC 파일 콘텐츠는 다음과 같아야 합니다.
Name: cello
Source0: https://example.com/%{name}/release/hello-%{version}.tar.gz
…
%prep
%setup -n hello
4.2.2.3. %setup -c 매크로 사용
소스 코드 tarball에 하위 디렉터리가 포함되어 있지 않은 경우 -c
옵션이 사용되며 압축을 푼 후 아카이브의 파일이 현재 디렉터리를 채웁니다.
그런 다음 -c
옵션은 아래와 같이 아카이브 확장에 디렉토리와 단계를 생성합니다.
/usr/bin/mkdir -p cello-1.0 cd 'cello-1.0'
아카이브 확장 후에는 디렉터리가 변경되지 않습니다.
4.2.2.4. %setup -D 및 %setup -T 매크로 사용
-D
옵션은 소스 코드 디렉터리 삭제를 비활성화하고 %setup
매크로가 여러 번 사용되는 경우 특히 유용합니다. -D
옵션을 사용하면 다음 행이 사용되지 않습니다.
rm -rf 'cello-1.0'
-T
옵션은 스크립트에서 다음 행을 제거하여 소스 코드 tarball의 확장을 비활성화합니다.
/usr/bin/gzip -dc '/builddir/build/SOURCES/cello-1.0.tar.gz' | /usr/bin/tar -xvvof -
4.2.2.5. %setup -a 및 %setup -b 매크로 사용
-a
및 -b
옵션은 특정 소스를 확장합니다.
-b
옵션은 이전을 나타내며 작업 디렉터리를 입력하기 전에 특정 소스를 확장합니다.
a
옵션은 후를 나타내며 입력 후
해당 소스를 확장합니다. 해당 인수는 SPEC 파일 preamble의 소스 번호입니다.
다음 예에서 cello-1.0.tar.gz
아카이브에는 빈 examples
디렉터리가 포함되어 있습니다. 예제는 별도의 examples.tar.gz
tarball에 포함되어 있으며 동일한 이름의 디렉터리로 확장됩니다. 이 경우 작업 디렉터리를 입력한 후 Source1
을 확장하려면 -a 1
을 사용합니다.
Source0: https://example.com/%{name}/release/%{name}-%{version}.tar.gz
Source1: examples.tar.gz
…
%prep
%setup -a 1
다음 예에서는 cello-1.0/examples
로 확장되는 별도의 cello-1.0-examples.tar.gz
tarball로 예제를 제공합니다. 이 경우 작업 디렉터리를 입력하기 전에 -b 1
, 를 사용하여 Source1
을 확장합니다.
Source0: https://example.com/%{name}/release/%{name}-%{version}.tar.gz
Source1: %{name}-%{version}-examples.tar.gz
…
%prep
%setup -b 1
4.2.3. %files 섹션의 일반적인 RPM 매크로
이 섹션에는 SPEC 파일의 %files
섹션에 필요한 고급 RPM 매크로가 나열되어 있습니다.
Macro | 정의 |
---|---|
%license |
매크로는 LICENSE 파일로 나열된 파일을 식별하며 RPM과 같이 설치되고 레이블이 지정됩니다. 예: |
%doc |
매크로는 문서로 나열된 파일을 식별하며 RPM과 같이 설치되고 레이블이 지정됩니다. 매크로는 패키지 소프트웨어에 대한 문서와 코드 예제 및 다양한 관련 항목에 대해 사용됩니다. 이벤트 코드 예제가 포함된 경우 파일에서 실행 모드를 제거하려면 주의해야 합니다. 예: |
%dir |
매크로를 사용하면 경로가 이 RPM이 소유한 디렉터리임을 확인할 수 있습니다. RPM 파일 매니페스트가 제거 시 정리할 디렉토리를 정확하게 알고 있도록 하는 것이 중요합니다. 예: |
%config(noreplace) |
매크로는 다음 파일이 구성 파일이므로 원래 설치 체크섬에서 파일이 수정된 경우 패키지 설치 또는 업데이트에서 덮어쓰거나 교체해서는 안 됩니다. 변경이 있는 경우 대상 시스템의 기존 또는 수정된 파일이 변경되지 않도록 업그레이드 또는 설치 시 파일 이름 끝에 |
4.2.4. 기본 제공 매크로 표시
여러 기본 제공되는 RPM 매크로를 제공합니다.
절차
기본 제공 RPM 매크로를 모두 표시하려면 다음을 실행합니다.
rpm --showrc
참고출력은 크기가 매우 적습니다. 결과를 좁히려면 위의 명령을
grep
명령과 함께 사용합니다.시스템 버전의 RPM에 대한 RPM에 대한 정보를 찾으려면 다음을 실행합니다.
rpm -ql rpm
참고RPM 매크로는 출력 디렉터리 구조에서
매크로
라는 파일입니다.
4.2.5. RPM 배포 매크로
다른 배포는 패키지화된 소프트웨어의 언어 구현 또는 배포의 특정 지침에 따라 다양한 권장 RPM 매크로 세트를 제공합니다.
권장되는 RPM 매크로 세트는 종종 RPM 패키지로 제공되며 yum
패키지 관리자를 사용하여 설치할 준비가 되어 있습니다.
설치가 완료되면 /usr/lib/rpm/macros.d/
디렉터리에 매크로 파일을 찾을 수 있습니다.
원시 RPM 매크로 정의를 표시하려면 다음을 실행합니다.
rpm --showrc
위의 출력에는 원시 RPM 매크로 정의가 표시됩니다.
매크로의 기능과 RPM을 패키징할 때 유용할 수 있는 방법을 확인하려면 인수로 사용되는 매크로의 이름으로 rpm --eval
명령을 실행합니다.
rpm --eval %{_MACRO}
자세한 내용은 rpm
man 페이지를 참조하십시오.
4.2.5.1. 사용자 정의 매크로 생성
사용자 지정 매크로를 사용하여 ~/.rpmmacros
파일에서 배포 매크로를 덮어쓸 수 있습니다. 변경한 모든 변경 사항은 머신의 모든 빌드에 영향을 미칩니다.
~/.rpmmacros
파일에 새 매크로를 정의하는 것은 권장되지 않습니다. 이러한 매크로는 다른 시스템에는 존재하지 않으며 사용자가 패키지를 다시 빌드하려고 할 수 있습니다.
매크로를 재정의하려면 다음을 실행합니다.
%_topdir /opt/some/working/directory/rpmbuild
rpmdev-setuptree
유틸리티를 통한 모든 하위 디렉토리를 포함하여 위의 예제에서 디렉토리를 만들 수 있습니다. 이 매크로의 값은 기본적으로 ~/rpmbuild
입니다.
%_smp_mflags -l3
위의 매크로는 종종 Makefile에 전달하는 데 사용됩니다(예: %{?_smp_mflags}
) 빌드 단계에서 여러 동시 프로세스를 설정합니다. 기본적으로 -jX
로 설정됩니다. 여기서 X
는 코어 수입니다. 코어 수를 변경하면 패키지 빌드의 속도를 높이거나 느려질 수 있습니다.