소프트웨어 패키지 및 배포
RPM 패키지 관리 시스템을 사용하여 소프트웨어 패키징
초록
Red Hat 문서에 관한 피드백 제공 링크 복사링크가 클립보드에 복사되었습니다!
문서 개선을 위한 의견에 감사드립니다. 어떻게 개선할 수 있는지 알려주십시오.
Jira를 통해 피드백 제출 (계정 필요)
- Jira 웹 사이트에 로그인합니다.
- 상단 탐색 바에서 생성을 클릭합니다.
- 요약 필드에 설명 제목을 입력합니다.
- 설명 필드에 개선을 위한 제안을 입력합니다. 문서의 관련 부분에 대한 링크를 포함합니다.
- 대화 상자 하단에서 생성 을 클릭합니다.
1장. RPM 소개 링크 복사링크가 클립보드에 복사되었습니다!
RPM(RPM)은 RHEL(Red Hat Enterprise Linux), CentOS 및 Fedora에서 실행되는 패키지 관리 시스템입니다. RPM을 사용하여 이러한 운영 체제에 대해 생성하는 소프트웨어를 배포, 관리 및 업데이트할 수 있습니다.
RPM 패키지 관리 시스템은 기존 아카이브 파일에 소프트웨어를 배포하는 것보다 다음과 같은 이점이 있습니다.
- RPM은 서로 독립적으로 설치, 업데이트 또는 제거할 수 있는 패키지 형태로 소프트웨어를 관리하므로 운영 체제를 보다 쉽게 유지 관리할 수 있습니다.
- RPM 패키지는 압축된 아카이브와 유사하게 독립 실행형 바이너리 파일이므로 RPM을 단순화합니다. 이러한 패키지는 특정 운영 체제 및 하드웨어 아키텍처를 위해 빌드됩니다. RPM에는 패키지가 설치될 때 파일 시스템의 적절한 경로에 배치되는 컴파일된 실행 파일 및 라이브러리와 같은 파일이 포함되어 있습니다.
RPM을 사용하면 다음 작업을 수행할 수 있습니다.
- 패키지 소프트웨어를 설치, 업그레이드 및 제거합니다.
- 패키지 소프트웨어에 대한 자세한 정보를 쿼리합니다.
- 패키지 소프트웨어의 무결성을 확인합니다.
- 소프트웨어 소스에서 자체 패키지를 빌드하고 빌드 지침을 완료합니다.
- GPG(GNU Privacy Guard) 유틸리티를 사용하여 패키지에 디지털 서명합니다.
- DNF 리포지토리에 패키지를 게시합니다.
Red Hat Enterprise Linux에서 RPM은 DNF 또는 PackageKit과 같은 고급 패키지 관리 소프트웨어에 완전히 통합되어 있습니다. RPM은 자체 명령줄 인터페이스를 제공하지만 대부분의 사용자는 이 소프트웨어를 통해서만 RPM과 상호 작용해야 합니다. 그러나 RPM 패키지를 빌드할 때는 rpmbuild(8) 와 같은 RPM 유틸리티를 사용해야 합니다.
1.1. RPM 패키지 링크 복사링크가 클립보드에 복사되었습니다!
RPM 패키지는 이러한 파일을 설치 및 삭제하는 데 사용되는 파일 및 메타데이터의 아카이브로 구성됩니다. 특히 RPM 패키지에는 다음 부분이 포함되어 있습니다.
GPG 서명
GPG 서명은 패키지의 무결성을 확인하는 데 사용됩니다.
헤더(패키지 메타데이터)
RPM 패키지 관리자는 이 메타데이터를 사용하여 패키지 종속성, 파일 설치 위치 및 기타 정보를 확인합니다.
페이로드
페이로드는 시스템에 설치할 파일이 포함된
cpio아카이브입니다.
RPM 패키지에는 다음 두 가지 유형이 있습니다. 두 유형 모두 파일 형식과 툴링을 공유하지만 콘텐츠가 다르며 다른 용도로 사용됩니다.
소스 RPM(SRPM)
SRPM에는 소스 코드와
사양파일이 포함되어 있으며, 바이너리 RPM에 소스 코드를 빌드하는 방법을 설명합니다. 선택적으로 SRPM은 소스 코드에 대한 패치를 포함할 수 있습니다.바이너리 RPM
바이너리 RPM에는 소스 및 패치에서 빌드된 바이너리가 포함되어 있습니다.
1.2. RPM 패키징 유틸리티 나열 링크 복사링크가 클립보드에 복사되었습니다!
RPM은 패키지 빌드를 위한 rpmbuild(8) 프로그램 외에도 다른 유틸리티를 제공하여 패키지 생성 프로세스를 보다 쉽게 수행할 수 있도록 합니다. 이러한 프로그램은 rpmdevtools 패키지에서 찾을 수 있습니다.
사전 요구 사항
rpmdevtools패키지가 설치되었습니다.dnf install rpmdevtools
# dnf install rpmdevtoolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
다음 방법 중 하나를 사용하여 RPM 패키징 유틸리티를 나열합니다.
rpmdevtools패키지에서 제공하는 특정 유틸리티와 짧은 설명을 나열하려면 다음을 입력합니다.rpm -qi rpmdevtools
$ rpm -qi rpmdevtoolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 유틸리티를 나열하려면 다음을 입력합니다.
rpm -ql rpmdevtools | grep ^/usr/bin
$ rpm -ql rpmdevtools | grep ^/usr/binCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2장. RPM 패키징 소프트웨어 생성 링크 복사링크가 클립보드에 복사되었습니다!
RPM 패키징용 소프트웨어를 준비하려면 소스 코드가 무엇이며 소프트웨어 생성 방법을 이해해야 합니다.
2.1. 소스 코드란 링크 복사링크가 클립보드에 복사되었습니다!
소스 코드는 계산을 수행하는 방법을 설명하는 컴퓨터에 대해 사람이 읽을 수 있는 명령입니다. 소스 코드는 프로그래밍 언어를 사용하여 표현됩니다.
세 가지 프로그래밍 언어로 작성된 Hello World 프로그램의 다음 버전은 주요 RPM 패키지 관리자 사용 사례를 다룹니다.
bash로 작성된 hello worldbello 프로젝트는 Bash에서
Hello World를 구현합니다. 구현에는bello쉘 스크립트만 포함됩니다. 이 프로그램의 목적은 명령줄에서Hello World를 출력하는 것입니다.벨로
파일에는다음 내용이 있습니다.#!/bin/bash printf "Hello World\n"
#!/bin/bash printf "Hello World\n"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Hello World는 Python으로 작성됩니다.pello 프로젝트는 Python에서
Hello World를 구현합니다. 구현에는pello.py프로그램만 포함됩니다. 프로그램의 목적은 명령줄에서Hello World를 출력하는 것입니다.pello.py파일에는 다음과 같은 내용이 있습니다.#!/usr/bin/python3 print("Hello World")#!/usr/bin/python3 print("Hello World")Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Hello World에서 C로 작성됩니다.cello 프로젝트는
Hello Worldin C를 구현합니다. 구현에는cello.c및Makefile파일만 포함됩니다. 따라서 생성된tar.gz아카이브에는LICENSE파일 외에 두 개의 파일이 있습니다. 프로그램의 목적은 명령줄에서Hello World를 출력하는 것입니다.cello.c파일에는 다음과 같은 내용이 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
패키징 프로세스는 Hello World 프로그램의 각 버전에 따라 다릅니다.
2.2. 소프트웨어 생성 방법 링크 복사링크가 클립보드에 복사되었습니다!
다음 방법 중 하나를 사용하여 사람이 읽을 수 있는 소스 코드를 머신 코드로 변환할 수 있습니다.
- 기본적으로 소프트웨어를 컴파일합니다.
- 언어 인터프리터 또는 언어 가상 머신을 사용하여 소프트웨어를 해석합니다. raw-interpret 또는 byte-compile 소프트웨어 중 하나를 사용할 수 있습니다.
2.2.1. 기본적으로 컴파일된 소프트웨어 링크 복사링크가 클립보드에 복사되었습니다!
고유하게 컴파일된 소프트웨어는 결과 바이너리 실행 파일을 사용하여 머신 코드로 컴파일되는 프로그래밍 언어로 작성된 소프트웨어입니다. 기본적으로 컴파일된 소프트웨어는 독립 실행형 소프트웨어입니다.
기본적으로 컴파일된 RPM 패키지는 아키텍처에 따라 다릅니다.
64비트(x86_64) AMD 또는 Intel 프로세서를 사용하는 컴퓨터에서 이러한 소프트웨어를 컴파일하면 32비트(x86) AMD 또는 Intel 프로세서에서 실행되지 않습니다. 결과 패키지에는 이름에 지정된 아키텍처가 있습니다.
2.2.2. 해석된 소프트웨어 링크 복사링크가 클립보드에 복사되었습니다!
Bash 또는 Python과 같은 일부 프로그래밍 언어는 머신 코드로 컴파일되지 않습니다. 대신 언어 인터프리터 또는 언어 가상 머신은 사전 변환 없이 프로그램의 소스 코드를 단계별로 실행합니다.
완전히 해석된 프로그래밍 언어로 작성된 소프트웨어는 아키텍처에 한정되지 않습니다. 따라서 결과 RPM 패키지에는 이름에 noarch 문자열이 있습니다.
해석된 언어로 작성된 raw-interpret 또는 byte-compile 소프트웨어 중 하나를 사용할 수 있습니다.
원시 중단 소프트웨어
이러한 유형의 소프트웨어를 컴파일할 필요는 없습니다. 원시 해석 소프트웨어는 인터프리터에 의해 직접 실행됩니다.
바이트로 컴파일된 소프트웨어
먼저 이 유형의 소프트웨어를 바이트 코드로 컴파일해야 하며, 그런 다음 언어 가상 머신에서 실행해야 합니다.
참고일부 바이트로 컴파일된 언어는 원시 해석 또는 바이트 컴파일될 수 있습니다.
RPM을 사용하여 소프트웨어를 빌드하고 패키지하는 방법은 두 가지 소프트웨어 유형에 따라 다릅니다.
2.3. 소스에서 소프트웨어 빌드 링크 복사링크가 클립보드에 복사되었습니다!
소프트웨어 빌드 프로세스 중에 소스 코드는 RPM을 사용하여 패키징할 수 있는 소프트웨어 아티팩트로 변환됩니다.
2.3.1. 기본적으로 컴파일된 코드에서 소프트웨어 빌드 링크 복사링크가 클립보드에 복사되었습니다!
다음 방법 중 하나를 사용하여 컴파일된 언어로 작성된 소프트웨어를 실행 파일로 빌드할 수 있습니다.
- 수동 빌드
- 자동화된 빌드
2.3.1.1. 수동으로 샘플 C 프로그램 빌드 링크 복사링크가 클립보드에 복사되었습니다!
수동 빌드를 사용하여 컴파일된 언어로 작성된 소프트웨어를 빌드할 수 있습니다.
C (cello.c)로 작성된 샘플 Hello World 프로그램에는 다음과 같은 내용이 있습니다.
프로세스
GNU Compiler Collection에서 C 컴파일러를 호출하여 소스 코드를 바이너리로 컴파일합니다.
gcc -g -o cello cello.c
$ gcc -g -o cello cello.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow 결과 바이너리 셀로를 실행합니다.
./cello Hello World
$ ./cello Hello WorldCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.1.2. 샘플 C 프로그램에 대한 자동화된 빌드 설정 링크 복사링크가 클립보드에 복사되었습니다!
대규모 소프트웨어는 일반적으로 자동화된 빌드를 사용합니다. Makefile 파일을 만든 다음 GNU make 유틸리티를 실행하여 자동화된 빌드를 설정할 수 있습니다.
프로세스
cello.c와 동일한 디렉토리에 다음 콘텐츠를 사용하여Makefile파일을 만듭니다.cello: gcc -g -o cello cello.c clean: rm cello
cello: gcc -g -o cello cello.c clean: rm celloCopy to Clipboard Copied! Toggle word wrap Toggle overflow cello:및clean아래의 줄은 탭 문자(tab)로 시작해야 합니다.소프트웨어를 빌드합니다.
make make: 'cello' is up to date.
$ make make: 'cello' is up to date.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 빌드는 현재 디렉터리에서 이미 사용할 수 있으므로
make clean명령을 입력한 다음make명령을 다시 입력합니다.make clean rm cello make gcc -g -o cello cello.c
$ make clean rm cello $ make gcc -g -o cello cello.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 시점에서 프로그램을 다시 빌드하려는 경우 GNU
make시스템이 기존 바이너리를 감지하므로 영향을 미치지 않습니다.make make: 'cello' is up to date.
$ make make: 'cello' is up to date.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 프로그램을 실행합니다.
./cello Hello World
$ ./cello Hello WorldCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.2. 소스 코드 해석 링크 복사링크가 클립보드에 복사되었습니다!
해석된 프로그래밍 언어로 작성된 소스 코드를 다음 방법 중 하나를 사용하여 머신 코드로 변환할 수 있습니다.
바이트 컴파일
바이트 컴파일 소프트웨어의 절차는 다음 요인에 따라 다릅니다.
- 프로그래밍 언어
- 언어의 가상 머신
해당 언어와 함께 사용되는 툴 및 프로세스
참고예를 들어 Python에서 작성된 소프트웨어를 바이트화할 수 있습니다. 배포를 위해 설계된 Python 소프트웨어는 종종 바이트로 컴파일되지만 이 문서에서 설명하는 방식에는 포함되지 않습니다. 설명된 절차는 커뮤니티 표준을 준수하는 것이 아니라 간단하게 하는 것을 목표로 합니다. 실제 Python 지침의 경우 소프트웨어 패키징 및 배포를 참조하십시오.
또한 원시 해석 Python 소스 코드도 사용할 수 있습니다. 그러나 바이트로 컴파일된 버전이 더 빠릅니다. 따라서 RPM 패키지는 최종 사용자에게 배포하기 위해 바이트로 컴파일된 버전을 패키징하는 것을 선호합니다.
Raw-interpreting
Bash와 같은 쉘 스크립팅 언어로 작성된 소프트웨어는 항상 원시 해석에 의해 실행됩니다.
2.3.2.1. 샘플 Python 프로그램 바이트 컴파일 링크 복사링크가 클립보드에 복사되었습니다!
Python 소스 코드의 원시 해석을 통해 바이트 컴파일을 선택하면 더 빠른 소프트웨어를 만들 수 있습니다.
Python 프로그래밍 언어(pello.py)로 작성된 샘플 Hello World 프로그램에는 다음과 같은 내용이 있습니다.
print("Hello World")
print("Hello World")
프로세스
pello.py파일을 byte-compile합니다.python -m compileall pello.py
$ python -m compileall pello.pyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 바이트로 컴파일된 파일 버전이 생성되었는지 확인합니다.
ls __pycache__ pello.cpython-311.pyc
$ ls __pycache__ pello.cpython-311.pycCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력의 패키지 버전은 설치된 Python 버전에 따라 다를 수 있습니다.
pello.py에서 프로그램을 실행합니다.python pello.py Hello World
$ python pello.py Hello WorldCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.2.2. 샘플 Bash 프로그램 원시 해석 링크 복사링크가 클립보드에 복사되었습니다!
Bash 쉘로 내장된 언어(llo)로 작성된 샘플 .
Hello World 프로그램에는 다음과 같은 내용이 있습니다
#!/bin/bash printf "Hello World\n"
#!/bin/bash
printf "Hello World\n"
벨로 파일의 상단에 있는 shebang (#!)기호는 프로그래밍 언어 소스 코드의 일부가 아닙니다.
shebang 을 사용하여 텍스트 파일을 실행 파일로 전환합니다. 시스템 프로그램 로더는 shebang 이 포함된 행을 구문 분석하여 바이너리 실행 파일의 경로를 가져온 다음 프로그래밍 언어 인터프리터로 사용됩니다.
프로세스
소스 코드로 파일을 실행 가능하게 만듭니다.
chmod +x bello
$ chmod +x belloCopy to Clipboard Copied! Toggle word wrap Toggle overflow 생성된 파일을 실행합니다.
./bello Hello World
$ ./bello Hello WorldCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3장. RPM 패키지용 소프트웨어 준비 링크 복사링크가 클립보드에 복사되었습니다!
RPM을 사용하여 패키징할 소프트웨어를 준비하려면 먼저 소프트웨어를 패치하고 LICENSE 파일을 만들고 tarball로 보관하면 됩니다.
3.1. 소프트웨어 패치 링크 복사링크가 클립보드에 복사되었습니다!
소프트웨어를 패키징할 때는 버그 수정 또는 구성 파일 변경과 같은 원래 소스 코드를 변경해야 할 수 있습니다. RPM 패키징에서는 원래 소스 코드를 그대로 두고 패치를 적용할 수 있습니다.
패치는 소스 코드 파일을 업데이트하는 텍스트입니다. 패치는 두 버전의 텍스트의 차이를 나타내기 때문에 diff 형식이 있습니다. diff 유틸리티를 사용하여 패치를 생성한 다음 patch 유틸리티를 사용하여 소스 코드에 패치를 적용할 수 있습니다.
소프트웨어 개발자는 종종 Git과 같은 버전 제어 시스템을 사용하여 코드 기반을 관리합니다. 이러한 도구는 diffs 또는 Patch 소프트웨어를 만드는 자체 방법을 제공합니다.
3.1.1. 샘플 C 프로그램에 대한 패치 파일 생성 링크 복사링크가 클립보드에 복사되었습니다!
diff 유틸리티를 사용하여 원래 소스 코드에서 패치를 생성할 수 있습니다. 예를 들어 C (cello.c)로 작성된 Hello world 프로그램을 패치하려면 다음 단계를 완료합니다.
사전 요구 사항
시스템에
diff유틸리티를 설치했습니다.dnf install diffutils
# dnf install diffutilsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
원래 소스 코드를 백업합니다.
cp -p cello.c cello.c.orig
$ cp -p cello.c cello.c.origCopy to Clipboard Copied! Toggle word wrap Toggle overflow p옵션은 모드, 소유권 및 타임스탬프를 유지합니다.필요에 따라
cello.c를 수정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 패치를 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow +로 시작하는 줄은-로 시작하는 행을 바꿉니다.참고대부분의 사용 사례에 적합하므로
diff명령과 함께 nur옵션을 사용하는 것이 좋습니다.-n (--new-file)N옵션은 없는 파일을 빈 파일로 처리합니다.-a(--text)a옵션은 모든 파일을 텍스트로 처리합니다. 결과적으로diff유틸리티는 바이너리로 분류된 파일을 무시하지 않습니다.-u(-U NUM또는--unified[=NUM])-u옵션은 통합 컨텍스트의 출력 NUM(기본값 3) 줄로 출력을 반환합니다. 이는 패치 파일에서 일반적으로 사용되는 컴팩트하고 쉽게 읽을 수 있는 형식입니다.-r(--recursive)r옵션은diff유틸리티에서 발견된 하위 디렉토리를 재귀적으로 비교합니다.
그러나 이 특별한 경우에는
-u옵션만 필요합니다.패치를 파일에 저장합니다.
diff -Naur cello.c.orig cello.c > cello.patch
$ diff -Naur cello.c.orig cello.c > cello.patchCopy to Clipboard Copied! Toggle word wrap Toggle overflow 원래
cello.c를 복원하십시오.mv cello.c.orig cello.c
$ mv cello.c.orig cello.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow 중요RPM 패키지를 빌드할 때 RPM 패키지 관리자가 수정된 파일이 아닌 원본 파일을 사용하므로 원래
cello.c를 유지해야 합니다. 자세한 내용은 사양 파일 작업을 참조하십시오.
3.1.2. 샘플 C 프로그램 패치 링크 복사링크가 클립보드에 복사되었습니다!
소프트웨어에 코드 패치를 적용하려면 patch 유틸리티를 사용할 수 있습니다.
사전 요구 사항
시스템에
패치유틸리티를 설치했습니다.dnf install patch
# dnf install patchCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 원본 소스 코드에서 패치를 생성했습니다. 자세한 내용은 샘플 C 프로그램에 대한 패치 파일 생성을 참조하십시오.
프로세스
다음 단계는 cello.c 파일에 이전에 생성된 cello.patch 파일을 적용합니다.
패치 파일을
패치명령으로 리디렉션합니다.patch < cello.patch patching file cello.c
$ patch < cello.patch patching file cello.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow cello.c의 내용이 이제 원하는 변경 사항을 반영하는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
패치된
cello.c프로그램을 빌드합니다.make gcc -g -o cello cello.c
$ make gcc -g -o cello cello.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow 빌드된
cello.c프로그램을 실행합니다../cello Hello World from my very first patch!
$ ./cello Hello World from my very first patch!Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2. LICENSE 파일 만들기 링크 복사링크가 클립보드에 복사되었습니다!
소프트웨어 라이센스와 함께 소프트웨어를 배포하는 것이 좋습니다.
소프트웨어 라이센스 파일은 사용자에게 소스 코드로 수행할 수 있는 작업을 사용자에게 알립니다. 소스 코드에 대한 라이센스가 없으면 이 코드에 대한 모든 권한을 보유하고 소스 코드에서 파생 작업을 재현, 배포 또는 생성할 수 없습니다.
프로세스
필요한 라이센스 문을 사용하여
LICENSE파일을 생성합니다.vim LICENSE
$ vim LICENSECopy to Clipboard Copied! Toggle word wrap Toggle overflow 예 3.1. GPLv3
LICENSE파일 텍스트 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. 배포를 위한 소스 코드 아카이브 생성 링크 복사링크가 클립보드에 복사되었습니다!
아카이브 파일은 .tar.gz 또는 .tgz 접미사가 있는 파일입니다. 소스 코드를 아카이브에 배치하는 것은 나중에 배포를 위해 패키징할 소프트웨어를 릴리스하는 일반적인 방법입니다.
3.3.1. 샘플 Bash 프로그램의 소스 코드 아카이브 생성 링크 복사링크가 클립보드에 복사되었습니다!
벨로 프로젝트는 Bash의 Hello World 파일입니다.
다음 예제에는 bello 쉘 스크립트만 포함되어 있습니다. 따라서 생성된 tar.gz 아카이브에는 LICENSE 파일 외에 하나의 파일만 있습니다.
패치 파일은 프로그램과 함께 아카이브에 배포되지 않습니다. RPM 패키지 관리자는 RPM을 빌드할 때 패치를 적용합니다. 패치는 tar.gz 아카이브와 함께 ~/rpmbuild/SOURCES/ 디렉터리에 배치됩니다.
사전 요구 사항
-
bello프로그램의0.1버전이 사용된다고 가정합니다. -
LICENSE파일을 생성하셨습니다. 자세한 내용은 LICENSE 파일 만들기를 참조하십시오.
프로세스
필요한 모든 파일을 단일 디렉터리로 이동합니다.
mkdir bello-0.1 mv ~/bello bello-0.1/ mv LICENSE bello-0.1/
$ mkdir bello-0.1 $ mv ~/bello bello-0.1/ $ mv LICENSE bello-0.1/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 배포를 위한 아카이브를 생성합니다.
tar -cvzf bello-0.1.tar.gz bello-0.1 bello-0.1/ bello-0.1/LICENSE bello-0.1/bello
$ tar -cvzf bello-0.1.tar.gz bello-0.1 bello-0.1/ bello-0.1/LICENSE bello-0.1/belloCopy to Clipboard Copied! Toggle word wrap Toggle overflow 생성된 아카이브를
~/rpmbuild/SOURCES/디렉터리로 이동합니다. 이 디렉터리는rpmbuild명령이 패키지 빌드용 파일을 저장하는 기본 디렉터리입니다.mv bello-0.1.tar.gz ~/rpmbuild/SOURCES/
$ mv bello-0.1.tar.gz ~/rpmbuild/SOURCES/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.2. 샘플 Python 프로그램에 대한 소스 코드 아카이브 생성 링크 복사링크가 클립보드에 복사되었습니다!
pello 프로젝트는 Python의 Hello World 파일입니다.
다음 예제는 pello.py 프로그램만 포함합니다. 따라서 생성된 tar.gz 아카이브에는 LICENSE 파일 외에 하나의 파일만 있습니다.
패치 파일은 프로그램과 함께 아카이브에 배포되지 않습니다. RPM 패키지 관리자는 RPM을 빌드할 때 패치를 적용합니다. 패치는 tar.gz 아카이브와 함께 ~/rpmbuild/SOURCES/ 디렉터리에 배치됩니다.
사전 요구 사항
-
pello프로그램의0.1.1버전이 사용되었다고 가정합니다. -
LICENSE파일을 생성하셨습니다. 자세한 내용은 LICENSE 파일 만들기를 참조하십시오.
프로세스
필요한 모든 파일을 단일 디렉터리로 이동합니다.
mkdir pello-0.1.1 mv pello.py pello-0.1.1/ mv LICENSE pello-0.1.1/
$ mkdir pello-0.1.1 $ mv pello.py pello-0.1.1/ $ mv LICENSE pello-0.1.1/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 배포를 위한 아카이브를 생성합니다.
tar -cvzf pello-0.1.1.tar.gz pello-0.1.1 pello-0.1.1/ pello-0.1.1/LICENSE pello-0.1.1/pello.py
$ tar -cvzf pello-0.1.1.tar.gz pello-0.1.1 pello-0.1.1/ pello-0.1.1/LICENSE pello-0.1.1/pello.pyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 생성된 아카이브를
~/rpmbuild/SOURCES/디렉터리로 이동합니다. 이 디렉터리는rpmbuild명령이 패키지 빌드용 파일을 저장하는 기본 디렉터리입니다.mv pello-0.1.1.tar.gz ~/rpmbuild/SOURCES/
$ mv pello-0.1.1.tar.gz ~/rpmbuild/SOURCES/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.3. 샘플 C 프로그램에 대한 소스 코드 아카이브 생성 링크 복사링크가 클립보드에 복사되었습니다!
cello 프로젝트는 C의 Hello World 파일입니다.
다음 예제에는 cello.c 및 Makefile 파일만 포함되어 있습니다. 따라서 생성된 tar.gz 아카이브에는 LICENSE 파일 외에도 두 개의 파일이 있습니다.
패치 파일은 프로그램과 함께 아카이브에 배포되지 않습니다. RPM 패키지 관리자는 RPM을 빌드할 때 패치를 적용합니다. 패치는 tar.gz 아카이브와 함께 ~/rpmbuild/SOURCES/ 디렉터리에 배치됩니다.
사전 요구 사항
-
cello프로그램의1.0버전이 사용되었다고 가정합니다. -
LICENSE파일을 생성하셨습니다. 자세한 내용은 LICENSE 파일 만들기를 참조하십시오.
프로세스
필요한 모든 파일을 단일 디렉터리로 이동합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 배포를 위한 아카이브를 생성합니다.
tar -cvzf cello-1.0.tar.gz cello-1.0 cello-1.0/ cello-1.0/Makefile cello-1.0/cello.c cello-1.0/LICENSE
$ tar -cvzf cello-1.0.tar.gz cello-1.0 cello-1.0/ cello-1.0/Makefile cello-1.0/cello.c cello-1.0/LICENSECopy to Clipboard Copied! Toggle word wrap Toggle overflow 생성된 아카이브를
~/rpmbuild/SOURCES/디렉터리로 이동합니다. 이 디렉터리는rpmbuild명령이 패키지 빌드용 파일을 저장하는 기본 디렉터리입니다.mv cello-1.0.tar.gz ~/rpmbuild/SOURCES/
$ mv cello-1.0.tar.gz ~/rpmbuild/SOURCES/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4장. 소프트웨어 패키지 링크 복사링크가 클립보드에 복사되었습니다!
다음 섹션에서는 RPM 패키지 관리자를 사용하여 패키징 프로세스의 기본 사항을 알아봅니다.
4.1. RPM 패키지 작업 공간 설정 링크 복사링크가 클립보드에 복사되었습니다!
RPM 패키지를 빌드하려면 먼저 다른 패키징 목적으로 사용되는 디렉터리로 구성된 특수 작업 공간을 생성해야 합니다.
4.1.1. RPM 패키지 작업 공간 구성 링크 복사링크가 클립보드에 복사되었습니다!
RPM 패키징 작업 공간을 구성하려면 rpmdev-setuptree 유틸리티를 사용하여 디렉터리 레이아웃을 설정할 수 있습니다.
사전 요구 사항
RPM 패키징 유틸리티를 제공하는
rpmdevtools패키지가 설치되어 있습니다.dnf install rpmdevtools
# dnf install rpmdevtoolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
rpmdev-setuptree유틸리티를 실행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.2. RPM 패키징 작업 공간 디렉터리 링크 복사링크가 클립보드에 복사되었습니다!
다음은 rpmdev-setuptree 유틸리티를 사용하여 생성된 RPM 패키징 작업 공간 디렉터리입니다.
| 디렉터리 | 목적 |
|---|---|
|
|
|
|
|
바이너리 RPM은 다양한 아키텍처의 하위 디렉토리에 있는 |
|
|
압축된 소스 코드 아카이브 및 패치를 포함합니다. 그런 다음 |
|
|
패키지 관리자에서 생성한 |
|
|
|
4.2. 사양 파일 정보 링크 복사링크가 클립보드에 복사되었습니다!
사양 파일은 rpmbuild 유틸리티에서 RPM 패키지를 빌드하는 데 사용하는 지침이 포함된 파일입니다. 이 파일은 일련의 섹션에 지침을 정의하여 빌드 시스템에 필요한 정보를 제공합니다. 이러한 섹션은 Preamble 및 spec 파일의 Body 부분에 정의되어 있습니다.
- Preamble 섹션에는 본문 섹션에서 사용되는 일련의 메타데이터 항목이 포함되어 있습니다.
- Body 섹션은 지침의 주요 부분을 나타냅니다.
4.2.1. Preamble 항목 링크 복사링크가 클립보드에 복사되었습니다!
다음은 RPM 사양 파일의 Preamble 섹션에서 사용할 수 있는 몇 가지 지시문입니다.
| 지시문 | 정의 |
|---|---|
|
|
|
|
| 소프트웨어의 업스트림 버전 번호입니다. |
|
| 패키지 버전이 릴리스된 횟수입니다.
초기 값을 |
|
| 패키지에 대한 간단한 한 줄 요약입니다. |
|
| 패키지되는 소프트웨어의 라이센스입니다.
|
|
| 소프트웨어에 대한 자세한 내용은 전체 URL(예: 패키징 중인 소프트웨어에 대한 업스트림 프로젝트 웹 사이트)입니다. |
|
| 패치되지 않은 업스트림 소스 코드의 압축된 아카이브의 경로 또는 URL입니다. 이 링크는 아카이브의 액세스 가능하고 안정적인 스토리지(예: 패키지 관리자의 로컬 스토리지)가 아닌 업스트림 페이지(예: 업스트림 페이지)를 가리켜야 합니다.
지시문 이름 끝에 숫자 또는 숫자 없이 |
|
| 필요한 경우 소스 코드에 적용할 첫 번째 패치의 이름입니다.
지시문 이름 끝에 숫자 또는 숫자 없이
|
|
| 소프트웨어가 빌드될 아키텍처입니다.
예를 들어 소프트웨어를 해석된 프로그래밍 언어로 완전히 작성한 경우 해당 값을 |
|
|
컴파일된 언어로 작성된 프로그램을 빌드하는 데 필요한 쉼표 또는 공백으로 구분된 패키지 목록입니다. |
|
|
설치된 소프트웨어를 실행하는 데 필요한 쉼표 또는 공백으로 구분된 패키지 목록입니다. |
|
|
특정 프로세서 아키텍처에서 소프트웨어를 작동할 수 없는 경우 |
|
|
설치된 경우 소프트웨어가 제대로 작동하려면 시스템에 설치해서는 안 되는 쉼표 또는 공백으로 구분된 패키지 목록입니다. |
|
|
|
|
|
패키지에 |
이름,버전 및 릴리스 (NVR) 지시문은 name-version-release 형식으로 RPM 패키지의 파일 이름을 구성합니다.
rpm 명령을 사용하여 RPM 데이터베이스를 쿼리하여 특정 패키지에 대한 NVR 정보를 표시할 수 있습니다. 예를 들면 다음과 같습니다.
rpm -q bash bash-4.4.19-7.el8.x86_64
# 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 사양 파일의 Body 섹션에 사용된 항목입니다.
| 지시문 | 정의 |
|---|---|
|
| RPM에 패키지된 소프트웨어에 대한 전체 설명입니다. 이 설명은 여러 줄에 걸쳐 있을 수 있으며 단락으로 나눌 수 있습니다. |
|
|
빌드하기 위해 소프트웨어를 준비하는 명령 또는 일련의 명령(예: |
|
| 소프트웨어를 머신 코드(컴파일된 언어의 경우) 또는 바이트 코드(일부 해석 언어의 경우)로 빌드하는 명령 또는 일련의 명령입니다. |
|
|
소프트웨어를 빌드한 후
|
|
| 소프트웨어를 테스트하는 명령 또는 일련의 명령(예: 단위 테스트)입니다. |
|
| RPM 패키지에서 제공하는 파일 목록(사용자 시스템 및 시스템의 전체 경로 위치)을 설치합니다.
빌드 중에
|
|
|
다른 |
4.2.3. 고급 항목 링크 복사링크가 클립보드에 복사되었습니다!
사양 파일은 Scriptlets 또는 Trigger와 같은 고급 항목을 포함할 수 있습니다. 스크립트릿 및 트리거는 빌드 프로세스가 아닌 최종 사용자의 시스템에서 설치 프로세스 중에 다른 지점에서 적용됩니다.
4.3. BuildRoots 링크 복사링크가 클립보드에 복사되었습니다!
RPM 패키징 컨텍스트에서 buildroot 는 chroot 환경입니다. 빌드 아티팩트는 최종 사용자 시스템에서 향후 계층 구조와 동일한 파일 시스템 계층 구조를 사용하고 buildroot 는 루트 디렉터리 역할을 합니다. 빌드 아티팩트 배치는 최종 사용자 시스템의 파일 시스템 계층 구조 표준을 준수해야 합니다.
buildroot 의 파일은 나중에 RPM의 주요 부분이 되는 cpio 아카이브에 배치됩니다. RPM이 최종 사용자의 시스템에 설치되면 이러한 파일이 루트 디렉터리에 추출되어 올바른 계층 구조를 유지합니다.
rpmbuild 프로그램에는 자체 기본값이 있습니다. 이러한 기본값을 재정의하면 특정 문제가 발생할 수 있습니다. 따라서 buildroot 매크로의 고유한 값을 정의하지 마십시오. 대신 기본 %{buildroot} 매크로를 사용합니다.
4.4. RPM 매크로 링크 복사링크가 클립보드에 복사되었습니다!
rpm 매크로 는 특정 기본 제공 기능이 사용될 때 문의 선택적 평가를 기반으로 조건부로 할당할 수 있는 간단한 텍스트 대체입니다. 따라서 RPM은 텍스트 대체를 수행할 수 있습니다.
예를 들어 패키지된 소프트웨어 의 버전은 %{version} 매크로에서 한 번만 정의하고 사양 파일 전체에서 이 매크로를 사용할 수 있습니다. 모든 발생은 매크로에서 정의한 Version 으로 자동 대체됩니다.
익숙하지 않은 매크로가 표시되면 다음 명령으로 평가할 수 있습니다.
rpm --eval %{MACRO}
$ rpm --eval %{MACRO}
예를 들어 %{_bindir} 및 %{_libexecdir} 매크로를 평가하려면 다음을 입력합니다.
rpm --eval %{_bindir}
/usr/bin
rpm --eval %{_libexecdir}
/usr/libexec
$ rpm --eval %{_bindir}
/usr/bin
$ rpm --eval %{_libexecdir}
/usr/libexec
4.5. 사양 파일 작업 링크 복사링크가 클립보드에 복사되었습니다!
새 소프트웨어를 패키징하려면 사양 파일을 생성해야 합니다. 다음 방법 중 하나를 사양 파일을 생성할 수 있습니다.
-
새
사양파일을 처음부터 수동으로 작성합니다. -
rpmdev-newspec유틸리티를 사용합니다. 이 유틸리티는 필요한 지시문 및 필드를 채우는 채워지지 않은사양파일을 생성합니다.
일부 자격증에 중점을 둔 텍스트 편집기는 자체 사양 템플릿으로 새 사양 파일을 미리 채웁니다. rpmdev-newspec 유틸리티는 편집기와 무관한 방법을 제공합니다.
4.5.1. 샘플 Bash, Python 및 C 프로그램에 대한 새 사양 파일 생성 링크 복사링크가 클립보드에 복사되었습니다!
rpmdev-new 유틸리티를 사용하여 spec Hello World! 프로그램의 세 가지 구현 각각에 대해 사양 파일을 생성할 수 있습니다.
사전 요구 사항
다음
Hello World!프로그램 구현은~/rpmbuild/SOURCES디렉터리에 배치되었습니다.
프로세스
~/rpmbuild/SPECS디렉터리로 이동합니다.cd ~/rpmbuild/SPECS
$ cd ~/rpmbuild/SPECSCopy to Clipboard Copied! Toggle word wrap Toggle overflow Hello World!프로그램의 세 가지 구현 각각에 대한사양파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~/rpmbuild/SPECS/디렉터리에는 이제bello.,speccello.spec,pello.spec이라는 세 개의 사양 파일이 포함되어 있습니다.생성된 파일을 검사합니다.
파일의 지시문은 사양 파일 정보를 나타냅니다. 다음 섹션에서는
rpmdev-newspec의 출력 파일에 특정 섹션을 채웁니다.
4.5.2. 원래 사양 파일 수정 링크 복사링크가 클립보드에 복사되었습니다!
rpmdev-new 유틸리티로 생성된 원본 출력 사양 파일은 spec rpmbuild 유틸리티에 필요한 지침을 제공하기 위해 수정해야 하는 템플릿을 나타냅니다. 그런 다음 rpmbuild 는 이러한 지침을 사용하여 RPM 패키지를 빌드합니다.
사전 요구 사항
-
rpm파일이 생성되었습니다. 자세한 내용은 샘플 Bash, Python 및 C 프로그램에 대한 새 사양 파일 생성 을 참조하십시오.dev-newspec 사양spec유틸리티를 사용하여 채워지지 않은 ~/rpmbuild/SPECS/<name>.
프로세스
-
파일을 엽니다.rpmdev-newspec유틸리티에서 제공하는 ~/rpmbuild/SPECS/<name>.spec spec파일 Preamble 섹션의 다음 지시문을 채웁니다.이름-
name이 이미rpmdev-newspec에 인수로 지정되었습니다. 버전-
소스 코드의 업스트림 릴리스 버전과 일치하도록
Version을 설정합니다. 릴리스-
릴리스는 자동으로1%{?dist}로 설정되며 처음1입니다. 요약- 패키지에 대한 한 줄 설명을 입력합니다.
라이센스- 소스 코드와 관련된 소프트웨어 라이센스를 입력합니다.
URL-
업스트림 소프트웨어 웹 사이트의 URL을 입력합니다. 일관성을 위해
%{name}RPM 매크로 변수를 사용하고https://example.com/%{name}형식을 사용합니다. 소스업스트림 소프트웨어 소스 코드에 대한 URL을 입력합니다. 패키지되는 소프트웨어 버전에 직접 연결합니다.
참고이 문서의 예제 URL에는 향후 변경될 수 있는 하드 코드된 값이 포함되어 있습니다. 마찬가지로 릴리스 버전도 변경될 수 있습니다. 이러한 잠재적인 변경 사항을 단순화하려면
%{name}및%{version}매크로를 사용합니다. 이러한 매크로를 사용하면사양파일에서 하나의 필드만 업데이트해야 합니다.BuildRequires- 패키지에 대한 빌드 시간 종속 항목을 지정합니다.
필요- 패키지에 대한 런타임 종속 항목을 지정합니다.
BuildArch- 소프트웨어 아키텍처를 지정합니다.
spec파일 Body 섹션의 다음 지시문을 채웁니다. 이러한 지시문은 여러 줄, 다중 설명 또는 스크립팅된 작업을 정의할 수 있으므로 이러한 지시문을 섹션 제목으로 간주할 수 있습니다.%Description- 소프트웨어에 대한 전체 설명을 입력합니다.
%Prep- 빌드용 소프트웨어를 준비하려면 명령 또는 일련의 명령을 입력합니다.
%build- 소프트웨어 빌드를 위한 명령 또는 일련의 명령을 입력합니다.
%install-
rpmbuild명령에 소프트웨어를BUILDROOT디렉터리에 설치하는 방법에 대한 명령 또는 일련의 명령을 입력합니다. %files- RPM 패키지에서 제공하는 파일 목록을 시스템에 설치합니다.
%changelog패키지의 각
Version-Release에 대한 datestamped 항목 목록을 입력합니다.별표(
*) 문자 뒤에 Day-of-Week Day Name Surname <email> - Version-Release를 사용하여%changelog섹션의 첫 번째 행을 시작합니다.실제 변경 항목은 다음 규칙을 따릅니다.
- 각 변경 항목에는 각 변경 사항에 대해 하나씩 여러 항목이 포함될 수 있습니다.
- 각 항목은 새 줄에서 시작됩니다.
-
각 항목은 하이픈(
-) 문자로 시작합니다.
이제 필요한 프로그램에 대한 전체 사양 파일을 작성했습니다.
4.5.3. 샘플 Bash 프로그램의 사양 파일 예 링크 복사링크가 클립보드에 복사되었습니다!
참조를 위해 bash 로 작성된 벨로 프로그램에 다음 예제 사양 파일을 사용할 수 있습니다.
bash로 작성된 bello 프로그램의 사양 파일 예
-
llo에 대한 빌드 시간 종속 항목을 지정하는BuildRequires지시문이 삭제되었습니다. Bash는 원시 해석 프로그래밍 언어이며 파일은 시스템의 위치에 설치됩니다. -
패키지에 대한 런타임 종속성을 지정하는
Requires지시문에는bello스크립트를 실행하기 위해bash쉘 환경만 필요하므로bash만 포함됩니다. -
bash스크립트를 빌드할 필요가 없기 때문에 소프트웨어 빌드 방법을 지정하는%build섹션은 비어 있습니다.
벨로를 설치하려면 대상 디렉터리를 생성하고 실행 가능한 bash 스크립트 파일을 설치해야 합니다. 따라서 %install 섹션에서 install 명령을 사용할 수 있습니다. RPM 매크로를 사용하여 하드 코딩 경로 없이 이 작업을 수행할 수 있습니다.
4.5.4. 샘플 Python 프로그램에 대한 사양 파일의 예 링크 복사링크가 클립보드에 복사되었습니다!
참조용으로 Python 프로그래밍 언어로 작성된 pello 프로그램에 다음 예제 사양 파일을 사용할 수 있습니다.
Python으로 작성된 pello 프로그램의 사양 파일 예
패키지에 대한 런타임 종속성을 지정하는
Requires지시문에는 다음 두 가지 패키지가 포함됩니다.-
python패키지는 런타임 시 바이트로 컴파일된 코드를 실행하는 데 필요합니다. -
small entry-point 스크립트를 실행하는 데 필요한
bash패키지입니다.
-
-
패키지의 build-time 종속 항목을 지정하는
BuildRequires지시문에는python패키지만 포함됩니다.pello프로그램을 사용하려면python이 바이트 컴파일 빌드 프로세스를 수행해야 합니다. -
소프트웨어를 빌드하는 방법을 지정하는
%build섹션은 바이트로 컴파일된 버전의 스크립트를 생성합니다. 실제 패키지에서는 일반적으로 사용되는 배포에 따라 자동으로 수행됩니다. -
%install섹션은 바이트로 컴파일된 파일을 시스템의 라이브러리 디렉터리에 설치해야 하므로 액세스할 수 있습니다.
spec 파일에 래퍼 스크립트를 인라인으로 생성하는 예에서는 사양 파일 자체를 스크립팅할 수 있음을 보여줍니다. 이 래퍼 스크립트는 여기 문서를 사용하여 Python 바이트로 컴파일된 코드를 실행합니다.
4.5.5. 샘플 C 프로그램에 대한 사양 파일 예 링크 복사링크가 클립보드에 복사되었습니다!
참조용으로 C 프로그래밍 언어로 작성된 cello 프로그램에 다음 예제 사양 파일을 사용할 수 있습니다.
C로 작성된 셀오 프로그램에 대한 사양 파일의 예
패키지에 대한 빌드 시간 종속성을 지정하는
BuildRequires지시문에는 컴파일 빌드 프로세스를 수행하는 데 필요한 다음 패키지가 포함됩니다.-
gcc -
make
-
-
이 예제에서는 패키지에 대한 런타임 종속 항목을 지정하는
Requires지시문을 생략합니다. 모든 런타임 요구 사항은rpmbuild에서 처리하며,cello프로그램에는 코어 C 표준 라이브러리 이외의 항목이 필요하지 않습니다. -
%build섹션은 이 예에서 cello 프로그램의Makefile파일이 작성되었다는 사실을 반영합니다. 따라서 GNU make 명령을 사용할 수 있습니다. 그러나 구성 스크립트를 제공하지 않았기 때문에%configure에 대한 호출을 제거해야 합니다.
%make_install 매크로를 사용하여 cello 프로그램을 설치할 수 있습니다. 이는 cello 프로그램에 대한 Makefile 파일을 사용할 수 있기 때문에 가능합니다.
4.6. RPM 빌드 링크 복사링크가 클립보드에 복사되었습니다!
rpmbuild 명령을 사용하여 RPM 패키지를 빌드할 수 있습니다. 이 명령을 사용하는 경우 rpmdev-setuptree 유틸리티에서 설정한 구조와 동일한 특정 디렉터리 및 파일 구조가 예상됩니다.
다양한 사용 사례와 원하는 결과에는 rpmbuild 명령에 서로 다른 인수 조합이 필요합니다. 다음은 주요 사용 사례입니다.
- 소스 RPM 빌드.
바이너리 RPM 빌드:
- 소스 RPM에서 바이너리 RPM 다시 빌드.
-
사양파일에서 바이너리 RPM 빌드.
4.6.1. 소스 RPM 빌드 링크 복사링크가 클립보드에 복사되었습니다!
SRPM(Source RPM)을 구축하면 다음과 같은 이점이 있습니다.
-
환경에 배포된 RPM 파일의 특정
Name-Version-Release의 정확한 소스를 유지할 수 있습니다. 여기에는 정확한사양파일, 소스 코드 및 모든 관련 패치가 포함됩니다. 이는 추적 및 디버깅 목적에 유용합니다. - 다른 하드웨어 플랫폼 또는 아키텍처에 바이너리 RPM을 빌드할 수 있습니다.
사전 요구 사항
시스템에
rpmbuild유틸리티를 설치했습니다.dnf install rpm-build
# dnf install rpm-buildCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음
Hello World!구현은~/rpmbuild/SOURCES/디렉터리에 배치되었습니다.-
패키징하려는 프로그램의
사양파일이 있습니다.
프로세스
생성된
사양파일이 포함된~/rpmbuild/SPECS/지시문으로 이동합니다.cd ~/rpmbuild/SPECS/
$ cd ~/rpmbuild/SPECS/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 지정된
사양파일을 사용하여rpmbuild명령을 입력하여 source RPM을 빌드합니다.rpmbuild -bs <specfile>
$ rpmbuild -bs <specfile>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -bs옵션은 빌드 소스 를 나타냅니다.예를 들어 벨로 ,
pello및cello프로그램에 대한 소스 RPM을 빌드하려면 다음을 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
-
rpmbuild/SRPMS디렉터리에 결과 소스 RPM이 포함되어 있는지 확인합니다. 디렉터리는rpmbuild에서 예상되는 구조의 일부입니다.
4.6.2. 소스 RPM에서 바이너리 RPM 다시 빌드 링크 복사링크가 클립보드에 복사되었습니다!
소스 RPM(SRPM)에서 바이너리 RPM을 다시 빌드하려면 --rebuild 옵션과 함께 rpmbuild 명령을 사용합니다.
바이너리 RPM을 생성할 때 생성되는 출력은 상세화되어 디버깅에 유용합니다. 출력은 다양한 예에 따라 다르며 사양 파일에 해당합니다.
생성된 바이너리 RPM은 다음 디렉토리 중 하나에 있습니다.
-
~/rpmbuild/RPMS/YOURARCH.여기서ARCH는 아키텍처입니다. -
패키지가 아키텍처에 한정되지 않은 경우
~/rpmbuild/RPMS/noarch/.
사전 요구 사항
시스템에
rpmbuild유틸리티를 설치했습니다.dnf install rpm-build
# dnf install rpm-buildCopy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
SRPM이 포함된
~/rpmbuild/SRPMS/지시문으로 이동합니다.cd ~/rpmbuild/SRPMS/
$ cd ~/rpmbuild/SRPMS/Copy to Clipboard Copied! Toggle word wrap Toggle overflow SRPM에서 바이너리 RPM을 다시 빌드합니다.
rpmbuild --rebuild <srpm>
$ rpmbuild --rebuild <srpm>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어 SRPM에서 p
ello,pello,cello를 다시 빌드하려면 다음을 입력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
rpmbuild --rebuild 를 호출하려면 다음 프로세스가 포함됩니다.
-
SRPM의 콘텐츠(
spec파일 및 소스 코드)를~/rpmbuild/디렉터리에 설치합니다. - 설치된 콘텐츠를 사용하여 RPM 빌드.
-
사양파일 및 소스 코드 제거
다음 방법 중 하나를 빌드한 후 사양 파일 및 소스 코드를 유지할 수 있습니다.
-
RPM을 빌드할 때
--rebuild옵션 대신--recompile옵션과 함께rpmbuild명령을 사용합니다. 벨로 ,
pello, 셀오 용 SRPM설치:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.3. 사양 파일에서 바이너리 RPM 빌드 링크 복사링크가 클립보드에 복사되었습니다!
사양 파일에서 바이너리 RPM을 빌드하려면 rpmbuild 명령을 -bb 옵션과 함께 사용합니다.
사전 요구 사항
시스템에
rpmbuild유틸리티를 설치했습니다.dnf install rpm-build
# dnf install rpm-buildCopy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
사양파일이 포함된~/rpmbuild/SPECS/지시문으로 이동합니다.cd ~/rpmbuild/SPECS/
$ cd ~/rpmbuild/SPECS/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사양에서 바이너리 RPM을 빌드합니다.
rpmbuild -bb <spec_file>
$ rpmbuild -bb <spec_file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예를 들어
사양파일에서벨로,pello및cello바이너리 RPM을 빌드하려면 다음을 입력합니다.rpmbuild -bb bello.spec rpmbuild -bb pello.spec rpmbuild -bb cello.spec
$ rpmbuild -bb bello.spec $ rpmbuild -bb pello.spec $ rpmbuild -bb cello.specCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7. syslog에 RPM 활동 로깅 링크 복사링크가 클립보드에 복사되었습니다!
syslog(System Logging Protocol)를 사용하여 RPM 활동 또는 트랜잭션을 기록할 수 있습니다.
사전 요구 사항
syslog플러그인은 시스템에 설치됩니다.dnf install rpm-plugin-syslog
# dnf install rpm-plugin-syslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고syslog메시지의 기본 위치는/var/log/messages파일입니다. 그러나 다른 위치를 사용하여 메시지를 저장하도록syslog를 구성할 수 있습니다.
프로세스
syslog메시지를 저장하도록 구성한 파일을 엽니다.또는 기본
syslog구성을 사용하는 경우/var/log/messages파일을 엽니다.-
[RPM]문자열을 포함하여 새 행을 검색합니다.
4.8. RPM 콘텐츠 추출 링크 복사링크가 클립보드에 복사되었습니다!
예를 들어 RPM에 필요한 패키지가 손상된 경우 패키지의 내용을 추출해야 할 수 있습니다. 이러한 경우 RPM 설치가 손상에도 불구하고 여전히 작동하는 경우 rpm2archive 유틸리티를 사용하여 .rpm 파일을 tar 아카이브로 변환하여 패키지 내용을 사용할 수 있습니다.
RPM 설치가 심각한 경우 rpm2cpio 유틸리티를 사용하여 RPM 패키지 파일을 cpio 아카이브로 변환할 수 있습니다.
프로세스
RPM 파일을 tar 아카이브로 변환합니다.
rpm2archive <filename>.rpm
$ rpm2archive <filename>.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 결과 파일에는
.tgz접미사가 있습니다. 예를 들어bash패키지에서 아카이브를 생성하려면 다음을 입력합니다.rpm2archive bash-4.4.19-6.el8.x86_64.rpm ls bash-4.4.19-6.el8.x86_64.rpm.tgz bash-4.4.19-6.el8.x86_64.rpm.tgz
$ rpm2archive bash-4.4.19-6.el8.x86_64.rpm $ ls bash-4.4.19-6.el8.x86_64.rpm.tgz bash-4.4.19-6.el8.x86_64.rpm.tgzCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.9. RPM 패키지에 서명 링크 복사링크가 클립보드에 복사되었습니다!
다음 소프트웨어 중 하나를 사용하여 타사에서 콘텐츠를 변경할 수 없도록 RPM 패키지에 서명할 수 있습니다.
- Sequoia PGP는 OpenPGP 표준을 지원합니다. RPM은 Sequoia PGP를 사용하여 소프트웨어 서명을 확인합니다.
- GNU Privacy Guard(GnuPG)는 이전 OpenPGP 표준 버전을 지원하므로 GnuPG가 RHEL 9 및 이전 버전과 보다 호환됩니다.
새로운 알고리즘과 서명이 이전 RHEL 버전과 호환되지 않을 수 있습니다.
4.9.1. GnuPG를 사용하여 RPM 패키지에 서명 링크 복사링크가 클립보드에 복사되었습니다!
GNU Privacy Guard(GnuPG) 소프트웨어를 사용하여 RPM 패키지에 서명할 수 있습니다.
4.9.1.1. GnuPG를 사용하여 패키지에 서명하기 위한 OpenPGP 키 생성 링크 복사링크가 클립보드에 복사되었습니다!
GNU Privacy Guard(GnuPG) 소프트웨어를 사용하여 RPM 패키지에 서명하려면 먼저 OpenPGP 키를 생성해야 합니다.
사전 요구 사항
-
rpm-sign및pinentry패키지가 시스템에 설치되어 있습니다.
프로세스
OpenPGP 키 쌍을 생성합니다.
gpg --gen-key
$ gpg --gen-keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 생성된 키 쌍을 확인합니다.
gpg --list-keys
$ gpg --list-keysCopy to Clipboard Copied! Toggle word wrap Toggle overflow 공개 키를 내보냅니다.
gpg --export -a '<public_key_name>' > RPM-GPG-KEY-pmanager
$ gpg --export -a '<public_key_name>' > RPM-GPG-KEY-pmanagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.9.1.2. GnuPG로 패키지에 서명하도록 RPM 구성 링크 복사링크가 클립보드에 복사되었습니다!
GNU Privacy Guard(GnuPG) 소프트웨어를 사용하여 RPM 패키지에 서명하려면 %_gpg_name RPM 매크로를 지정하여 RPM을 구성해야 합니다.
사전 요구 사항
- GnuPG에 대한 OpenPGP 키를 생성했습니다. 자세한 내용은 GnuPG를 사용하여 패키지 서명에 대한 OpenPGP 키 생성을 참조하십시오.
프로세스
$HOME/.rpmmacros디렉토리에%_gpg_name매크로를 정의합니다.%_gpg_name <key-ID>
%_gpg_name <key-ID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow GnuPG의 유효한 키 ID 값은 키를 생성할 때 제공한 키 지문, 전체 이름 또는 이메일 주소일 수 있습니다.
4.9.1.3. RPM 패키지에 서명 추가 링크 복사링크가 클립보드에 복사되었습니다!
패키지는 일반적으로 서명 없이 빌드됩니다. 패키지가 릴리스되기 전에 서명을 추가할 수 있습니다.
사전 요구 사항
- GnuPG에 대한 OpenPGP 키를 생성했습니다. 자세한 내용은 GnuPG를 사용하여 패키지 서명에 대한 OpenPGP 키 생성을 참조하십시오.
- 패키지에 서명하기 위해 RPM을 구성했습니다. 자세한 내용은 GnuPG를 사용하여 패키지에 서명하도록 RPM 구성을 참조하십시오.
-
rpm-sign패키지가 시스템에 설치되어 있습니다.
프로세스
패키지에 서명을 추가합니다.
rpmsign --addsign <package-name>.rpm
$ rpmsign --addsign <package-name>.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
내보낸 OpenPGP 공개 키를 RPM 인증 키로 가져옵니다.
rpmkeys --import RPM-GPG-KEY-pmanager
# rpmkeys --import RPM-GPG-KEY-pmanagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow GnuPG를 사용하여 키 ID를 표시합니다.
gpg --list-keys [...] pub rsa3072 2025-05-13 [SC] [expires: 2028-05-12] A8AF1C39AC67A1501450734F6DE8FC866DE0394D [...]$ gpg --list-keys [...] pub rsa3072 2025-05-13 [SC] [expires: 2028-05-12] A8AF1C39AC67A1501450734F6DE8FC866DE0394D [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 키 ID는 명령 출력의 40자 문자열입니다(예:
A8AF1C39AC67A1501450734F6DE8FC866DE0394D).RPM 파일에 해당 서명이 있는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서명 키 ID는 OpenPGP 키 ID의 마지막 부분과 일치합니다.
4.9.2. Sequoia PGP를 사용하여 RPM 패키지에 서명 링크 복사링크가 클립보드에 복사되었습니다!
Sequoia PGP를 사용하여 RPM 패키지에 서명하고 타사가 콘텐츠를 변경할 수 없도록 할 수 있습니다.
4.9.2.1. Sequoia PGP를 사용하여 패키지에 서명하기 위한 OpenPGP 키 생성 링크 복사링크가 클립보드에 복사되었습니다!
Sequoia PGP 소프트웨어를 사용하여 패키지에 서명하려면 먼저 OpenPGP 키를 생성해야 합니다.
프로세스
Sequoia PGP 도구를 설치합니다.
dnf install sequoia-sq
# dnf install sequoia-sqCopy to Clipboard Copied! Toggle word wrap Toggle overflow OpenPGP 키 쌍을 생성합니다.
sq key generate --own-key --userid <key_name>
$ sq key generate --own-key --userid <key_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 생성된 키 쌍을 확인합니다.
sq key list
$ sq key listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 공개 키를 내보냅니다.
sq cert export --cert-userid '<key_name>' > RPM-PGP-KEY-pmanager
$ sq cert export --cert-userid '<key_name>' > RPM-PGP-KEY-pmanagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.9.2.2. Sequoia PGP로 패키지에 서명하도록 RPM 구성 링크 복사링크가 클립보드에 복사되었습니다!
Sequoia PGP 소프트웨어를 사용하여 RPM 패키지에 서명하려면 Sequoia PGP를 사용하고 %_gpg_name 매크로를 지정하도록 RPM을 구성해야 합니다.
사전 요구 사항
-
rpm-sign패키지가 시스템에 설치되어 있습니다.
프로세스
macros.rpmsign-sequoia파일을/etc/rpm디렉터리에 복사합니다.cp /usr/share/doc/rpm/macros.rpmsign-sequoia /etc/rpm/
# cp /usr/share/doc/rpm/macros.rpmsign-sequoia /etc/rpm/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 키 목록 출력에서 유효한 OpenPGP 키 지문 값을 가져옵니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 키 지문은 출력의 첫 번째 줄에 있는 40자 문자열입니다(예:
7E4B52101EB3DB08967A1E595D12FDA65BA50).다음과 같이
$HOME/.rpmmacros파일에%_gpg_name매크로를 정의합니다.%_gpg_name <key_fingerprint>
%_gpg_name <key_fingerprint>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 지문 대신 전체 키 ID를 사용할 수도 있습니다.
참고GnuPG와 달리 Sequoia PGP는 전체 키 ID 또는 지문만 허용합니다.
4.9.2.3. RPM 패키지에 서명 추가 링크 복사링크가 클립보드에 복사되었습니다!
패키지는 일반적으로 서명 없이 빌드됩니다. 패키지가 릴리스되기 전에 서명을 추가할 수 있습니다.
사전 요구 사항
- OpenPGP 키를 생성했습니다. 자세한 내용은 Sequoia PGP를 사용하여 패키지에 서명하기 위한 OpenPGP 키 생성 을 참조하십시오.
- 패키지에 서명하기 위해 RPM을 구성했습니다. 자세한 내용은 Sequoia PGP 로 패키지에 서명하도록 RPM 구성을 참조하십시오.
-
rpm-sign패키지가 시스템에 설치되어 있습니다.
프로세스
패키지에 서명을 추가합니다.
rpmsign --addsign <package-name>.rpm
$ rpmsign --addsign <package-name>.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
내보낸 OpenPGP 공개 키를 RPM 인증 키로 가져옵니다.
rpmkeys --import RPM-PGP-KEY-pmanager
# rpmkeys --import RPM-PGP-KEY-pmanagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 서명 키의 키 지문을 표시합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 키 지문은 일반적으로
sq 키 목록 --cert-userid < key_name> 명령 출력의 서명 하위 키입니다(예:E0BD231AB350AD6802D44C0A270E79FFC3B25).RPM 파일에 해당 서명이 있는지 확인합니다. 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 서명 키 ID는 키 지문의 마지막 부분과 일치합니다.
5장. Python 3 RPM 패키징 링크 복사링크가 클립보드에 복사되었습니다!
DNF 패키지 관리자를 사용하여 시스템에 Python 패키지를 설치할 수 있습니다. DNF 는 소프트웨어에 대한 다운스트림 제어를 제공하는 RPM 패키지 형식을 사용합니다.
Python 프로젝트를 RPM 패키지로 패키징하면 기본 Python 패키지와 비교하여 다음과 같은 이점이 있습니다.
- Python 및 Python이 아닌 패키지에 대한 종속성은 DNF 패키지 관리자에 의해 엄격하게 적용됩니다.
- 패키지에 암호화 방식으로 서명할 수 있습니다. 암호화 서명을 사용하면 RPM 패키지의 내용을 다른 운영 체제와 검증, 통합 및 테스트할 수 있습니다.
- 빌드 프로세스 중에 테스트를 실행할 수 있습니다.
네이티브 Python 패키지의 패키징 형식은 PyPA(Python Packaging Authority) 사양으로 정의됩니다. 지금까지 대부분의 Python 프로젝트는 setup.py 파일에서 패키지 정보를 패키징하고 정의하는 데 distutils 또는 setuptools 유틸리티를 사용했습니다. 그러나 기본 Python 패키지를 생성할 가능성은 시간이 지남에 따라 진화했습니다.
-
setup.py파일을 사용하는 Python 소프트웨어를 패키징하려면 이 문서를 따르십시오. -
pyproject.toml파일로 최신 패키지를 패키징하려면 pyproject-rpm-macros 의README파일을 참조하십시오.pyproject-rpm-macros는 지원되지 않는 패키지가 포함된 CRB(CodeReady Linux Builder) 리포지토리에 포함되어 있으며 시간이 지남에 따라 최신 Python 패키징 표준을 지원할 수 있습니다.
5.1. 예제 Python 패키지에 대한 사양 파일 설명 링크 복사링크가 클립보드에 복사되었습니다!
Python 프로젝트의 RPM 사양 파일에는 Python이 아닌 RPM 사양 파일과 비교하여 몇 가지 특정 사항이 있습니다.
python3- 접두사를 포함하려면 Python 라이브러리의 모든 RPM 패키지 이름에 사용하는 것이 좋습니다.
python3-pello 패키지의 다음 예제에서 Python RPM 사양 파일 관련 노트를 참조하십시오.
Python으로 작성된 pello 프로그램의 SPEC 파일의 예
- 1
python3_pkgversion매크로를 정의하면 이 패키지가 빌드될 Python 버전을 설정합니다. 기본 Python 버전3.12에 대해 빌드하려면 행을 제거합니다.- 2
- Python 프로젝트를 RPM에 패키징할 때 항상
python-접두사를 프로젝트의 원래 이름에 추가합니다. 여기에 프로젝트 이름은Pello이며, 따라서 소스 RPM(SRPM)의 이름은python-pello입니다. - 3
BuildRequires는 이 패키지를 빌드하고 테스트하는 데 필요한 패키지를 지정합니다.BuildRequires에서 항상 Python 패키지를 빌드하는 데 필요한 도구를 제공하는 항목을 포함합니다.python3-devel과 사용자가 패키징하는 특정 소프트웨어에 필요한 관련 프로젝트(예:python3-setuptools또는%check섹션에서 테스트를 실행하는 데 필요한 런타임 및 테스트 종속 항목)를 포함합니다.- 4
- 바이너리 RPM의 이름(사용자가 설치할 수 있는 패키지)을 선택할 때 버전이 지정된 Python 접두사를 추가합니다. 기본 Python 3.12에
python3-접두사를 사용합니다. 예를 들어 이후 버전의 Python을 사용할 수 있는 경우와 같이 기본 Python 버전3.12의 경우3으로 평가되는%{python3_pkgversion}매크로를 사용할 수 있습니다. - 5
%py3_build및%py3_install매크로는 설치 위치, 사용할 인터프리터 및 기타 세부 정보를 지정하는 추가 인수와 함께setup.py build및setup.py install명령을 각각 실행합니다.참고setuptools패키지의setup.py build및setup.py install명령을 사용하는 것은 더 이상 사용되지 않으며 향후 주요 RHEL 릴리스에서 제거됩니다. 대신 pyproject-rpm-macros 를 사용할 수 있습니다.- 6
%check섹션은 패키지된 프로젝트의 테스트를 실행합니다. 정확한 명령은 프로젝트 자체에 따라 다르지만%pytest매크로를 사용하여 RPM 친화적인 방식으로pytest명령을 실행할 수 있습니다.
5.2. Python 3 RPM의 일반적인 매크로 링크 복사링크가 클립보드에 복사되었습니다!
Python RPM 사양 파일에서는 항상 값을 하드 코딩하지 않고 Python 3 RPM용 매크로를 사용합니다.
사양 파일 상단에 python3_pkgversion 매크로를 정의하여 이러한 매크로에서 사용되는 Python 3 버전이 무엇입니까. 자세한 내용은 예제 Python 패키지에 대한 사양 파일 설명을 참조하십시오. python3_pkgversion 매크로를 정의하면 다음 표에 설명된 매크로 값이 지정된 Python 3 버전을 반영합니다.
| macro | 일반 정의 | 설명 |
|---|---|---|
| %{python3_pkgversion} | 3 | 다른 모든 매크로에서 사용하는 Python 버전입니다. 추가될 모든 Python 버전에 대해 다시 정의할 수 있습니다. |
| %{python3} | /usr/bin/python3 | Python 3 인터프리터 |
| %{python3_version} | 3.12 | Python 3 인터프리터의 major.minor 버전입니다. |
| %{python3_sitelib} | /usr/lib/python3.12/site-packages | pure-Python 모듈이 설치된 위치입니다. |
| %{python3_sitearch} | /usr/lib64/python3.12/site-packages | 아키텍처별 확장 모듈을 포함하는 모듈이 설치된 위치입니다. |
| %py3_build |
RPM 패키지에 적합한 인수를 사용하여 | |
| %py3_install |
RPM 패키지에 적합한 인수를 사용하여 | |
| %{py3_shebang_flags} | sP |
Python 인터프리터 지시문 매크로의 기본 플래그 세트인 |
| %py3_shebang_fix |
Python 인터프리터 지시문을 |
5.3. Python RPM에 자동으로 생성된 종속 항목 사용 링크 복사링크가 클립보드에 복사되었습니다!
업스트림 제공 메타데이터를 사용하여 Python RPM에 대한 종속성을 자동으로 생성할 수 있습니다.
사전 요구 사항
-
RPM의
사양파일이 있습니다. 자세한 내용은 예제 Python 패키지에 대한 사양 파일 설명을 참조하십시오.
프로세스
결과 RPM에 다음 디렉토리 중 하나를 포함합니다.
-
.dist-info .egg-infoRPM 빌드 프로세스는 이러한 디렉터리에서 제공하는 가상
pythonX.Ydist를 자동으로 생성합니다. 예를 들면 다음과 같습니다.python3.12dist(pello)
python3.12dist(pello)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 그런 다음 Python 종속성 생성기는 업스트림 메타데이터를 읽고 생성된
pythonX.Ydist가상 제공 기능을 사용하여 각 RPM 패키지에 대한 런타임 요구 사항을 생성합니다. 생성된 요구 사항 태그의 예:Requires: python3.12dist(requests)
Requires: python3.12dist(requests)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
-
생성된
요구사항을 검사합니다. -
생성된 일부
요구사항을 제거하려면사양파일의%prep섹션에서 업스트림 제공 메타데이터를 수정합니다. -
자동 요구 사항 생성기를 비활성화하려면 기본 패키지의
%description선언 위에%{?python_disable_dependency_generator}매크로를 포함합니다.
6장. Python 스크립트에서 인터프리터 지시문 수정 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux 10에서 실행 가능한 Python 스크립트는 주요 Python 버전을 명시적으로 지정하는 hashbangs 또는 shebangs라고도 하는 인터프리터 지시문을 사용할 것으로 예상됩니다. 예를 들면 다음과 같습니다.
#!/usr/bin/python3 #!/usr/bin/python3.12
#!/usr/bin/python3
#!/usr/bin/python3.12
RPM 패키지를 빌드할 때 정책) 스크립트가 자동으로 실행되며 모든 실행 파일에서 인터프리터 지시문을 수정하려고 합니다. BRP 스크립트는 모호한 인터프리터 지시문과 함께 Python 스크립트가 발생할 때 오류를 생성합니다(예: /usr/lib/rpm/redhat/brp-mangle-shebangs BRP(Buildroot#!/usr/bin/python 또는 #!/usr/bin/env python ).
RPM 빌드 시 빌드 오류가 발생하지 않도록 Python 스크립트의 인터프리터 지시문을 수정할 수 있습니다.
사전 요구 사항
- Python 스크립트의 일부 인터프리터 지시문으로 인해 빌드 오류가 발생합니다.
프로세스
시나리오에 따라 다음 단계 중 하나를 수행하여 인터프리터 지시문을 수정합니다.
사양파일의%prep섹션에서 다음 매크로를 사용합니다.%py3_shebang_fix <SCRIPTNAME> …
%py3_shebang_fix <SCRIPTNAME> …Copy to Clipboard Copied! Toggle word wrap Toggle overflow SCRIPTNAME 은 파일, 디렉토리 또는 파일 및 디렉터리 목록일 수 있습니다.
결과적으로 나열된 디렉터리에 있는 모든 나열된 파일과
.py파일에는%{python3}을 가리키도록 인터프리터 지시문이 수정되었습니다. 원래 인터프리터 지시문의 기존 플래그는 보존되며%{py3_shebang_flags}매크로에 정의된 추가 플래그가 추가됩니다.사양파일에서%{py3_shebang_flags}매크로를 추가하여 추가할 플래그를 변경할 수 있습니다.- 패키지 Python 스크립트가 예상 형식을 준수하도록 수정합니다.
7장. Ruby gems 패키징 링크 복사링크가 클립보드에 복사되었습니다!
Ruby는 동적이고 해석되고, 반영적이며, 개체 지향적이며 범용 프로그래밍 언어입니다.
Ruby로 작성된 프로그램은 일반적으로 특정 Ruby 패키징 형식을 제공하는 RubyGems 소프트웨어를 사용하여 패키징됩니다.
RubyGems에서 생성한 패키지를 gems라고 하며 RPM 패키지로 다시 패키징할 수 있습니다.
이 문서는 gem 접두사와 함께 RubyGems 개념과 관련된 용어를 나타냅니다. 예를 들어 .gemspec 은 gem 사양에 사용되며 RPM과 관련된 용어는 정규화되지 않습니다.
7.1. RubyGems가 RPM과 관련된 방법 링크 복사링크가 클립보드에 복사되었습니다!
RubyGems는 Ruby의 자체 패키징 형식을 나타냅니다. 그러나 RubyGems에는 RPM에 필요한 메타데이터와 유사한 메타데이터가 포함되어 있습니다. 이 메타데이터는 패키징 gem을 RPM으로 간소화합니다. RPM은 나머지 배포에 적합한 gems에서 다시 패키징됩니다. 최종 사용자는 적절한 RPM 패키지 gem 및 기타 시스템 라이브러리를 설치하여 gem의 종속성을 충족할 수도 있습니다.
RubyGems는 사양 파일, 패키지 이름, 종속성 및 기타 항목과 같은 RPM 패키지와 유사한 용어를 사용합니다.
나머지 RHEL RPM 배포를 준수하기 위해 RubyGems에서 생성한 패키지는 다음 규칙을 준수해야 합니다.
-
패키지 이름을 지정할 때
rubygem-%{gem_name}패턴을 따릅니다. -
#!/usr/bin/ruby문자열을 인터프리터 지시문으로 사용합니다.
7.2. RubyGems 사양 파일 규칙 링크 복사링크가 클립보드에 복사되었습니다!
RubyGems 사양 파일은 다음 규칙을 충족해야 합니다.
-
파일에는 gem의 사양의 이름인
%{gem_name}의 정의가 포함되어 있습니다. - 패키지의 소스는 릴리스된 gem 아카이브의 전체 URL이어야 합니다.
- 패키지 버전은 gem의 버전이어야 합니다.
파일에는 다음
BuildRequires지시문이 포함되어 있습니다.BuildRequires: rubygems-devel
BuildRequires: rubygems-develCopy to Clipboard Copied! Toggle word wrap Toggle overflow rubygems-devel패키지에는 빌드에 필요한 매크로가 포함되어 있습니다.-
이러한 지시문은 gem 메타데이터에서 자동으로 생성되므로 파일에 추가
rubygem(foo)Requires또는Provides지시문이 포함되어 있지 않습니다.
7.2.1. RubyGems 사양 파일 예 링크 복사링크가 클립보드에 복사되었습니다!
다음은 gem을 빌드하기 위한 예제 사양 파일의 RubyGems 특정 부분입니다. 사양 파일의 나머지 부분은 일반 지침을 따릅니다.
예제 사양 파일의 RubyGems 특정 부분
7.2.2. RubyGems 사양 파일 지시문 링크 복사링크가 클립보드에 복사되었습니다!
다음은 spec 파일의 RubyGems 특정 부분에 있는 특정 항목의 세부 사항입니다.
| 지시문 | RubyGems 세부 사항 |
|---|---|
|
|
RPM은 gem 아카이브의 압축을 직접 해제할 수 있습니다.
|
|
|
이 섹션에는 소프트웨어를 머신 코드로 빌드하는 명령이 포함되어 있습니다. |
|
|
설치는 |
7.3. RubyGems 매크로 링크 복사링크가 클립보드에 복사되었습니다!
다음은 RubyGems에서 만든 패키지에 유용한 매크로입니다. 이러한 매크로는 rubygems-devel 패키지에서 제공합니다.
| 매크로 이름 | 확장 경로 | 사용법 |
|---|---|---|
|
|
| gem 구조의 최상위 디렉터리입니다. |
|
|
| gem의 실제 콘텐츠가 있는 디렉터리입니다. |
|
|
| gem의 라이브러리 디렉터리입니다. |
|
|
| 캐시된 gem입니다. |
|
|
| gem 사양 파일입니다. |
|
|
| gem에 대한 RDoc 문서입니다. |
|
|
| gem 확장을 위한 디렉터리입니다. |
7.4. gem2rpm을 사용하여 사양 파일을 생성 링크 복사링크가 클립보드에 복사되었습니다!
gem2rpm 유틸리티를 사용하여 RPM 사양 파일을 만들 수 있습니다.
7.4.1. Ruby gem에 대한 RPM 사양 파일 생성 링크 복사링크가 클립보드에 복사되었습니다!
gem2rpm 유틸리티를 사용하여 RubyGems 패키지에 대한 RPM 사양 파일을 생성할 수 있습니다.
사전 요구 사항
gem2rpm유틸리티가 시스템에 설치되어 있습니다.gem install gem2rpm
$ gem install gem2rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
최신 버전에서 gem을 다운로드하고 이 gem에 대한 RPM
사양파일을 생성합니다.gem2rpm --fetch <gem_name> > <gem_name>.spec
$ gem2rpm --fetch <gem_name> > <gem_name>.specCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
생성된
사양파일을 편집하여 라이센스 및 변경 로그와 같은 누락된 정보를 추가합니다.
7.4.2. 사용자 지정 gem2rpm 템플릿을 사용하여 사양 파일을 생성 링크 복사링크가 클립보드에 복사되었습니다!
gem2rpm 템플릿은 RPM 사양 파일을 생성할 수 있는 표준 ERP (ERB) 파일입니다. 생성된 사양 파일을 편집하는 대신 RPM 사양 파일이 생성되는 템플릿을 편집할 수 있습니다.
사전 요구 사항
gem2rpm유틸리티가 시스템에 설치되어 있습니다.gem install gem2rpm
$ gem install gem2rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
모든
gem2rpm기본 제공 템플릿을 표시합니다.gem2rpm --templates
$ gem2rpm --templatesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 기본 제공 템플릿 중 하나를 선택하여 사용자 지정 템플릿으로 저장합니다.
gem2rpm -t <template> -T > rubygem-<gem_name>.spec.template
$ gem2rpm -t <template> -T > rubygem-<gem_name>.spec.templateCopy to Clipboard Copied! Toggle word wrap Toggle overflow RHEL 10 베타에서는
fedora-27-rawhide템플릿이 권장됩니다.- 필요에 따라 템플릿을 편집합니다. 자세한 내용은 gem2rpm 템플릿 변수를 참조하십시오.
편집된 템플릿을 사용하여
사양파일을 생성합니다.gem2rpm -t rubygem-<gem_name>.spec.template <gem_name>-<latest_version>.gem > <gem_name>-GEM.spec
$ gem2rpm -t rubygem-<gem_name>.spec.template <gem_name>-<latest_version>.gem > <gem_name>-GEM.specCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4.3. gem2rpm 템플릿 변수 링크 복사링크가 클립보드에 복사되었습니다!
다음은 RPM 사양 파일 생성용 gem2rpm 템플릿에 포함된 변수입니다.
| Variable | 설명 |
|---|---|
|
|
gem에 대한 |
|
|
gem에 대한 |
|
|
|
|
|
패키지 런타임 종속 항목 목록을 제공하는 |
|
|
패키지 개발 종속 항목 목록을 제공하는 |
|
|
실행을 허용하는 테스트 프레임워크 목록을 제공하는 |
|
|
패키지에 필터링되지 않은 파일 목록을 제공하는 |
|
|
기본 패키지에 적합한 파일 목록을 제공하는 |
|
|
|