5.4. 사양 파일 작업
새 소프트웨어를 패키징하려면 사양 파일을 생성해야 합니다. 다음 방법 중 하나를 사양 파일을 생성할 수 있습니다.
-
새
사양파일을 처음부터 수동으로 작성합니다. -
rpmdev-newspec유틸리티를 사용합니다. 이 유틸리티는 필요한 지시문 및 필드를 채우는 채워지지 않은사양파일을 생성합니다.
일부 자격증에 중점을 둔 텍스트 편집기는 자체 사양 템플릿으로 새 사양 파일을 미리 채웁니다. rpmdev-newspec 유틸리티는 텍스트 편집기에 의존하지 않는 방법을 제공합니다.
5.4.1. 샘플 Bash, Python 및 C 프로그램에 대한 새 사양 파일 생성 링크 복사링크가 클립보드에 복사되었습니다!
rpmdev-new 유틸리티를 사용하여 spec Hello World! 프로그램의 세 가지 구현 각각에 대해 사양 파일을 생성할 수 있습니다.
사전 요구 사항
다음
Hello World!프로그램 구현은~/rpmbuild/SOURCES디렉터리에 배치되었습니다.
절차
~/rpmbuild/SPECS디렉터리로 이동합니다.$ cd ~/rpmbuild/SPECSHello World!프로그램의 세 가지 구현 각각에 대한사양파일을 생성합니다.$ rpmdev-newspec bello bello.spec created; type minimal, rpm version >= 4.11. $ rpmdev-newspec cello cello.spec created; type minimal, rpm version >= 4.11. $ rpmdev-newspec python-pello python-pello.spec created; type minimal, rpm version >= 4.11.중요Python 프로젝트를 RPM에 패키징할 때 항상 프로젝트의 원래 이름에
python-접두사를 추가합니다. 여기에 프로젝트 이름은Pello이고, 따라서spec의 이름은python-pello입니다.~/rpmbuild/SPECS/디렉터리에는 이제bello.,speccello.spec,python-pello.spec이라는 세 개의 사양 파일이 포함되어 있습니다.생성된 파일을 검사합니다.
파일의 지시문은 사양 파일 정보를 나타냅니다. 다음 섹션에서는
rpmdev-newspec의 출력 파일에 특정 섹션을 채웁니다.
5.4.2. 원래 사양 파일 수정 링크 복사링크가 클립보드에 복사되었습니다!
rpmdev-new 유틸리티로 생성된 원본 출력 사양 파일은 spec rpmbuild utility. 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섹션의 첫 번째 행을 시작합니다.실제 변경 항목은 다음 규칙을 따릅니다.
- 각 변경 항목에는 각 변경 사항에 대해 하나씩 여러 항목이 포함될 수 있습니다.
- 각 항목은 새 줄에서 시작됩니다.
-
각 항목은 하이픈(
-) 문자로 시작합니다.
이제 필요한 프로그램에 대한 전체 사양 파일을 작성했습니다.
5.4.3. 샘플 Bash 프로그램의 사양 파일 예 링크 복사링크가 클립보드에 복사되었습니다!
참조를 위해 bash 로 작성된 벨로 프로그램에 다음 예제 사양 파일을 사용할 수 있습니다.
bash로 작성된 프로그램의 사양 파일 예
Name: bello
Version: 0.1
Release: 1%{?dist}
Summary: Hello World example implemented in bash script
License: GPLv3+
URL: https://www.example.com/%{name}
Source0: https://www.example.com/%{name}/releases/%{name}-%{version}.tar.gz
Requires: bash
BuildArch: noarch
%description
The long-tail description for our Hello World Example implemented in
bash script.
%prep
%autosetup
%build
%install
mkdir -p %{buildroot}/%{_bindir}
install -m 0755 %{name} %{buildroot}/%{_bindir}/%{name}
%files
%license LICENSE
%{_bindir}/%{name}
%changelog
* Tue May 31 2016 Adam Miller <maxamillion@fedoraproject.org> - 0.1-1
- First bello package
- Example second item in the changelog for version-release 0.1-1
-
패키지에 대한 빌드 시간 종속성을 지정하는
BuildRequires지시문이bello빌드 단계가 없기 때문에 삭제되었습니다. Bash는 원시 해석된 프로그래밍 언어이며 파일은 시스템의 위치에만 설치됩니다. -
패키지에 대한 런타임 종속성을 지정하는
Requires지시문에는bello스크립트를 실행하기 위해bash쉘 환경만 필요하므로bash만 포함됩니다. -
%autosetup매크로는Source0지시문에서 참조하는 소스 아카이브의 압축을 풀고 변경합니다. -
bash스크립트를 빌드할 필요가 없기 때문에 소프트웨어 빌드 방법을 지정하는%build섹션은 비어 있습니다.
벨로를 설치하려면 대상 디렉터리를 생성하고 실행 가능한 bash 스크립트 파일을 설치해야 합니다. 따라서 %install 섹션에서 install 명령을 사용할 수 있습니다. RPM 매크로를 사용하여 하드 코딩 경로 없이 이 작업을 수행할 수 있습니다.
5.4.4. Python으로 작성된 프로그램의 사양 파일 예 링크 복사링크가 클립보드에 복사되었습니다!
참조용으로 Python 프로그래밍 언어로 작성된 pello 프로그램에 다음 예제 사양 파일을 사용할 수 있습니다.
Python으로 작성된 프로그램에 대한 사양 파일의 예
%global python3_pkgversion 3.12
Name: python-pello
Version: 1.0.2
Release: 1%{?dist}
Summary: Example Python library
License: MIT
URL: https://github.com/fedora-python/Pello
Source: %{url}/archive/v%{version}/Pello-%{version}.tar.gz
BuildArch: noarch
BuildRequires: python%{python3_pkgversion}-devel
# Build dependencies needed to be specified manually
BuildRequires: python%{python3_pkgversion}-setuptools
# Test dependencies needed to be specified manually
# Also runtime dependencies need to be BuildRequired manually to run tests during build
BuildRequires: python%{python3_pkgversion}-pytest >= 3
%global _description %{expand:
Pello is an example package with an executable that prints Hello World! on the command line.}
%description %_description
%package -n python%{python3_pkgversion}-pello
Summary: %{summary}
%description -n python%{python3_pkgversion}-pello %_description
%prep
%autosetup -p1 -n Pello-%{version}
%build
# The macro only supported projects with setup.py
%py3_build
%install
# The macro only supported projects with setup.py
%py3_install
%check
%{pytest}
# Note that there is no %%files section for the unversioned python module
%files -n python%{python3_pkgversion}-pello
%doc README.md
%license LICENSE.txt
%{_bindir}/pello_greeting
# The library files needed to be listed manually
%{python3_sitelib}/pello/
# The metadata files needed to be listed manually
%{python3_sitelib}/Pello-*.egg-info/
%changelog
* Tue May 31 2016 Adam Miller <maxamillion@fedoraproject.org> - 1.0.2-1
- First pello package
- 1
python3_pkgversion매크로를 정의하면 이 패키지가 빌드할 Python 버전을 설정합니다. 기본 Python 버전 3.9를 빌드하려면 매크로를 기본값3으로 설정하거나 행을 완전히 제거합니다.- 2
- Python 프로젝트를 RPM에 패키징할 때 항상 프로젝트의 원래 이름에
python-접두사를 추가합니다. 원래 이름은pello이므로 소스 RPM(SRPM)의 이름은python-pello입니다. - 3
BuildRequires지시문은 이 패키지를 빌드하고 테스트하는 데 필요한 패키지를 지정합니다.BuildRequires에서 항상 Python 패키지를 빌드하는 데 필요한 도구를 제공하는 항목이 포함되어 있습니다.python3-devel(또는python3.11-devel또는python3.12-devel)과 같은 특정 소프트웨어에 필요한 관련 패키지 (예:python3-setuptools또는) 또는python3.11-setuptools%check섹션에서 테스트를 실행하는 데 필요한 런타임 및 테스트 종속 항목을 포함합니다.- 4
- 바이너리 RPM의 이름(사용자가 설치할 수 있는 패키지)을 선택할 때 버전 지정된 Python 접두사를 추가합니다. 기본 Python 3.9, Python 3.11용
python3.11-접두사 또는 Python 3.12용python3.12-접두사에python3-접두사를 사용합니다. 명시적 버전으로 설정하지 않는 한 기본 Python 버전 3.9에 대해3으로 평가되는%{python3_pkgversion}매크로를 사용할 수 있습니다(예:3.11참조). - 5
%py3_build및%py3_install매크로는 설치 위치, 사용할 인터프리터 및 기타 세부 정보를 지정하는 추가 인수와 함께setup.py build및setup.py install명령을 각각 실행합니다.- 6
%check섹션은 패키지된 프로젝트의 테스트를 실행해야 합니다. 정확한 명령은 프로젝트 자체에 따라 다르지만%pytest매크로를 사용하여 RPM에 친숙한 방식으로pytest명령을 실행할 수 있습니다.
5.4.5. 샘플 C 프로그램에 대한 사양 파일 예 링크 복사링크가 클립보드에 복사되었습니다!
참조용으로 C 프로그래밍 언어로 작성된 cello 프로그램에 다음 예제 사양 파일을 사용할 수 있습니다.
C로 작성된 프로그램에 대한 사양 파일의 예
Name: cello
Version: 1.0
Release: 1%{?dist}
Summary: Hello World example implemented in C
License: GPLv3+
URL: https://www.example.com/%{name}
Source0: https://www.example.com/%{name}/releases/%{name}-%{version}.tar.gz
Patch0: cello.patch
BuildRequires: gcc
BuildRequires: make
%description
The long-tail description for our Hello World Example implemented in
C.
%prep
%autosetup
%patch0
%build
make %{?_smp_mflags}
%install
%make_install
%files
%license LICENSE
%{_bindir}/%{name}
%changelog
* Tue May 31 2016 Adam Miller <maxamillion@fedoraproject.org> - 1.0-1
- First cello package
패키지에 대한 빌드 시간 종속성을 지정하는
BuildRequires지시문에는 컴파일 빌드 프로세스를 수행하는 데 필요한 다음 패키지가 포함됩니다.-
gcc -
make
-
-
패키지에 대한 런타임 종속성을 지정하는
Requires지시문은 이 예에서 생략됩니다. 모든 런타임 요구 사항은rpmbuild에 의해 처리되며cello프로그램에는 코어 C 표준 라이브러리 외부에 아무것도 필요하지 않습니다. -
%autosetup매크로는Source0지시문에서 참조하는 소스 아카이브의 압축을 풀고 변경합니다. -
%build섹션은 이 예제에서 cello 프로그램의Makefile파일이 작성되었음을 반영합니다. 따라서 GNU make 명령을 사용할 수 있습니다. 그러나 구성 스크립트를 제공하지 않았기 때문에%configure에 대한 호출을 제거해야 합니다.
%make_install 매크로를 사용하여 cello 프로그램을 설치할 수 있습니다. 이는 cello 프로그램에 대한 Makefile 파일을 사용할 수 있기 때문에 가능합니다.