웹사이트 검색

Fedora에서 GNU Hello World RPM 패키지를 만드는 방법


RPM(RPM Package Manager의 재귀적 약어)은 Linux용 무료 오픈 소스 패키지 관리 시스템입니다. 원래는 Red Hat Linux에서 사용하기 위해 만들어졌지만 현재는 CentOS, Fedora와 같은 많은 Linux 배포판에서 사용됩니다. >오픈수세. 중요한 것은 RPM이라는 이름은 패키지 관리자 프로그램을 나타내고 .rpm은 파일 형식이라는 것입니다.

이 기사에서는 RPM 파일 작성에 대해 설명하고 Fedora LinuxGNU “Hello World” RPM 패키지와 같은 간단한 소스 및 바이너리 소프트웨어 패키지를 쉽게 만드는 방법을 보여줍니다. 강하다 > 분포. 우리는 귀하가 사전 제작된 RPM 패키지와 무료 오픈 소스 소프트웨어 구축 프로세스에 대한 기본적인 이해를 가지고 있다고 가정합니다.

Fedora에 개발 도구 설치

RPM 구축에 필요한 도구를 설치하려면 다음 명령을 실행하여 Fedora Linux에서 개발 환경을 설정하는 것부터 시작하겠습니다.

sudo dnf install fedora-packager @development-tools

다음으로, 다음과 같이 권한이 없는 계정을 '모의' 그룹에 추가합니다(tecmint를 실제 사용자 이름으로 교체). 이를 통해 깨끗한 chroot에서 빌드 절차를 테스트할 수 있습니다.

sudo usermod -a -G mock tecmint

이제 ~/rpmbuild 디렉터리에 RPM 빌드를 생성하고 다음 명령을 사용하여 빌드를 확인합니다. 프로젝트 소스 코드, RPM 구성 파일 및 바이너리 패키지가 포함된 하위 디렉터리 목록이 표시됩니다.

rpmdev-setuptree
tree ~/rpmbuild/

각 디렉토리의 의미는 다음과 같습니다.

  1. BUILD – 패키지가 빌드될 때 다양한 %buildroot 디렉터리를 저장합니다.
  2. RPMS – 아키텍처의 하위 디렉터리에 바이너리 RPM이 포함됩니다.
  3. 소스 – 압축된 소스 아카이브와 패치를 저장하며, rpmbuild 명령이 이를 찾는 곳입니다.
  4. SPECS – SPEC 파일을 저장합니다.
  5. SRPMS – 바이너리 RPM 대신 소스 RPM을 저장합니다.

"Hello World" RPM 구축

이 단계에서는 우리가 패키징하고 있는 Hello World 프로젝트의 소스 코드(“업스트림” 소스라고도 함)를 ~/rpmbuild/SOURCE 에 다운로드해야 합니다. 다음 wget 명령을 사용하여 디렉터리를 삭제합니다.

cd ~/rpmbuild/SOURCES
wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz -P ~/rpmbuild/SOURCES

다음으로, ~/rpmbuild/SPECS.spec 파일(이 경우 이름은 hello.spec)을 사용하여 RPM 패키지를 구성해 보겠습니다. > 디렉토리, rpmdev-newspec 프로그램 사용.

cd ~/rpmbuild/SPECS
rpmdev-newspec hello
ls

그런 다음 원하는 편집기를 사용하여 hello.spec 파일을 엽니다.

vim hello.spec

기본 템플릿은 다음과 같아야 합니다.

Name:           hello
Version:
Release:        1%{?dist}
Summary:

License:
URL:
Source0:

BuildRequires:
Requires:

%description

%prep
%autosetup

%build
%configure
%make_build

%install
rm -rf $RPM_BUILD_ROOT
%make_install

%files
%license add-license-file-here
%doc add-docs-here

%changelog
* Tue May 28 2019 Aaron Kili

.spec 파일의 기본 매개변수를 간략하게 설명하겠습니다.

  • 이름 – 패키지 이름을 설정하는 데 사용됩니다.
  • 버전 – 업스트림을 미러링해야 합니다.
  • 릴리스 – Fedora 내에서 작업하는 번호입니다.
  • 요약 – 패키지에 대한 간략한 한 줄 설명입니다. rpmlint 불만을 피하기 위해 첫 글자는 대문자여야 합니다.
  • 라이센스 – 소스 파일 및/또는 해당 LICENSE 파일을 검사하거나 작성자와 대화하여 소프트웨어의 라이센스 상태를 확인하세요.
  • URL – 소프트웨어 패키지의 홈 페이지를 지정합니다.
  • Source0 – 소스 파일을 지정합니다. 이는 직접 URL이거나 소프트웨어의 압축된 소스 코드 경로일 수 있습니다.
  • BuildRequires – 소프트웨어를 빌드하는 데 필요한 종속성을 지정합니다.
  • 필요 – 소프트웨어를 실행하는 데 필요한 종속성을 지정합니다.
  • %prep – rpm 패키지를 빌드하기 위한 환경을 만드는 데 사용됩니다.
  • %build – 소스 코드를 컴파일하고 빌드하는 데 사용됩니다.
  • %install – 프로그램을 설치하는 데 사용됩니다. 여기에는 빌드 프로세스의 결과 파일을 BUILDROOT 디렉터리로 복사하는 데 필요한 명령이 나열되어 있습니다.
  • %files – 이 섹션에는 시스템에 설치될 패키지에서 제공하는 파일이 나열됩니다.
  • %changelog – 특히 기본 업스트림 소스 위에 보안 및 버그 패치가 포함된 경우 RPM 준비 작업을 저장해야 합니다. hello.spec 파일을 생성하는 동안 자동으로 생성됩니다. 변경 로그 데이터는 일반적으로 rpm --changelog -q <패키지 이름>으로 표시됩니다.

이제 .spec 파일을 편집하고 표시된 대로 변경하세요.

Name:           hello
Version:        2.10
Release:        1%{?dist}
Summary:        The "Hello World" program from GNU

License:        GPLv3+
URL:            http://ftp.gnu.org/gnu/%{name}
Source0:        http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz

BuildRequires: gettext
      
Requires(post): info
Requires(preun): info

%description 
The "Hello World" program package 

%prep
%autosetup

%build
%configure
make %{make_build}

%install
%make_install
%find_lang %{name}
rm -f %{buildroot}/%{_infodir}/dir

%post
/sbin/install-info %{_infodir}/%{name}.info %{_infodir}/dir || :

%preun
if [ $1 = 0 ] ; then
/sbin/install-info --delete %{_infodir}/%{name}.info %{_infodir}/dir || :
fi

%files -f %{name}.lang
%{_mandir}/man1/hello.1.*
%{_infodir}/hello.info.*
%{_bindir}/hello

%doc AUTHORS ChangeLog NEWS README THANKS TODO
%license COPYING

%changelog
* Tue May 28 2019 Aaron Kili

위 파일에서는 설명되지 않은 몇 가지 새로운 매개변수를 사용했음을 알 수 있습니다. 이를 매크로라고 하며, 패키지 설치 경로를 설정하기 위해 RPM에서 정의한 시스템 호출을 빌드하는 데 사용됩니다. 따라서 일반적으로 사양 파일에 이러한 경로를 하드 코딩하지 않고 일관성을 위해 동일한 매크로를 사용하는 것이 좋습니다.

다음은 정의 및 기본값과 함께 RPM 빌드 및 디렉터리 매크로입니다.

  • %{make_build} – 사양 파일의 %build 섹션에서 사용되며 make 명령을 실행합니다.
  • %{name} – 패키지 또는 디렉터리 이름을 정의합니다.
  • %{buildroot} – %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}, $BUILDROOT와 동일
  • %{_infodir} – %{_datarootdir}/info, 기본값: /usr/share/info
  • %{_mandir} – %{_datarootdir}/man, 기본값: /usr/share/man
  • %{_bindir} – %{_exec_prefix}/bin, 기본값: /usr/bin

/usr/lib/rpm/platform/*/macros에서 이러한 매크로의 값을 찾거나 패키징 지침:RPM 매크로를 참조할 수 있습니다.

RPM 패키지 구축

소스, 바이너리 및 디버깅 패키지를 빌드하려면 다음 rpmbuild 명령을 실행하세요.

rpmbuild -ba hello.spec

빌드 프로세스가 끝나면 소스 RPM과 바이너리 RPM이 각각 ../SRPMS/../RPMS/ 디렉터리에 생성됩니다. rpmlint 프로그램을 사용하여 생성된 사양 파일과 RPM 파일이 RPM 설계 규칙을 준수하는지 확인하고 확인할 수 있습니다.

rpmlint hello.spec ../SRPMS/hello* ../RPMS/*/hello*

위 스크린샷과 같이 오류가 있는 경우 수정한 후 계속 진행하세요.

마지막으로 모의 프로그램을 사용하여 Fedora 제한된 빌드 환경에서 패키지 빌드가 성공하는지 확인하세요.

mock --verbose ../SRPMS/hello-2.10-1.fc29.src.rpm

자세한 내용은 Fedora 설명서: RPM 패키지 생성을 참조하세요.

그게 다야! 이 기사에서는 Fedora 시스템을 강화하여 간단한 소스 및 바이너리 소프트웨어 패키지를 만드는 방법을 설명했습니다. 또한 GUN Hello Word RPM 패키지를 만드는 방법도 보여주었습니다. 질문이나 의견이 있는 경우 아래 피드백 양식을 사용하여 당사에 문의하십시오.