CentOS 7 - RPM 패키지 생성 중 사양 파일 설정 문제

CentOS 7 - RPM 패키지 생성 중 사양 파일 설정 문제

내 목표는 CentOS Linux 7(Red Hat)에 설치하기 위해 Debian 패키지를 RPM 패키지로 변환하는 것입니다. 저는 Alien: 을 사용하여 이를 수행했습니다 alien --to-rpm --scripts --keep-version --generate debian_pkg.deb. --generate사양 파일에 런타임 종속성을 추가하고 싶기 때문에 이 플래그를 사용하여 패키지를 빌드하기 위한 디렉터리를 생성합니다. 이를 위해 다음 줄을 추가했습니다: Requires: nodejs tomcat8 java-1.8.0-openjdk java-1.8.0-openjdk-devel. 그런 다음 package: 를 생성하려고 시도했지만 rpmbuild -ba <package_name>.spec다음 오류와 함께 갑자기 종료됩니다.

Processing files: <package_name>
error: Directory not found: /root/rpmbuild/BUILDROOT/<package_name>/srv
error: Directory not found: /root/rpmbuild/BUILDROOT/<package_name>/srv/tmp
error: File not found: /root/rpmbuild/BUILDROOT/<package_name>/srv/tmp/file.tar.gz
error: File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/README.Debian
error: File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/changelog.Debian.gz
error: File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/copyright


RPM build errors:
    Directory not found: /root/rpmbuild/BUILDROOT/<package_name>/srv
    Directory not found: /root/rpmbuild/BUILDROOT/<package_name>/srv/tmp
    File not found: /root/rpmbuild/BUILDROOT/<package_name>/srv/tmp/file.tar.gz
    File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/README.Debian
    File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/changelog.Debian.gz
    File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/copyright

인터넷에서 검색해 보니 %install해당 섹션, 더 구체적으로는 과 연결되어 있는 것으로 나타났는데 %{buildroot}, 이 부분을 파악하고 수정할 수가 없습니다. 누구든지 나를 도와줄 수 있나요?

감사해요!

고쳐 쓰다

이것이 사양 문서의 핵심입니다.

Buildroot: /home/<package_dir>
Version: 1.0
Release: 849
Distribution: Debian
Group: Converted/misc
Requires: nodejs tomcat8 java-1.8.0-openjdk java-1.8.0-openjdk-devel

%define _rpmdir ../
%define _rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
%define _unpackaged_files_terminate_build 0

%pre
# some shell script

%post
# some shell script

%install
mkdir -p %{buildroot}/usr/share/doc/
mkdir -p %{buildroot}/usr/share/doc/frontend/

%files
%dir "/srv/"
%dir "/srv/tmp/"
"/srv/tmp/file.tar.gz"
%dir "/usr/"
%dir "/usr/share/"
%dir "/usr/share/doc/"
%dir "/usr/share/doc/frontend/"
"/usr/share/doc/frontend/README.Debian"
"/usr/share/doc/frontend/changelog.Debian.gz"
"/usr/share/doc/frontend/copyright"

답변1

고쳐 쓰다:당신이 겪고 있는 문제는 Buildroot:사양 파일의 태그에 있습니다.

최신 시스템(아마도 귀하의 시스템 포함)에서는 Buildroot:사양 파일이 더 이상 지원되지 않으며 이제 무시됩니다.

바라보다Linux 문제에 관한 이 기사그것에 대해:

Fedora(F-10으로 시작)는 사양에 BuildRoot 플래그가 있을 것을 요구하지 않으며 정의된 경우 무시됩니다.

rpmbuild에 인수를 전달하여 이 문제를 해결할 수 있습니다 --buildroot. /home/<package_dir>(이것은 빌드가 완료된 후 삭제하는 등 원치 않는 부작용이 있을 수 있으며 이는 현재 기본값이기도 합니다.)

실제로 rpmbuild 및 명시적 전달은 보시다시피 rpm 4.7.0이 이를 무시하기 시작한 이후 --buildroot수행된 작업입니다 .alienBuildroot:이번에 제출하세요.


사양 파일은 실제로 소스를 설치하거나 파일을 생성하지 않습니다.

이 섹션에서 일어나는 유일한 일은 %install(빈) 디렉토리를 생성하는 것입니다 /usr/share/doc/frontend/.

specfile은 지정으로 시작하므로 Buildroot: /home/<package_dir>rpmbuild 단계가 이미 거기에서 이미 준비된 내용을 가져와서 패키지할 수 있도록 해당 디렉터리가 이전에 채워질 것으로 예상합니다.

동일한 .deb에서 다시 실행 하면 alien(즉, 처음부터 다시 시작) /home/<package_dir>예를 들어 srv/tmp/file.tar.gz? 그렇다면 이 시점에서 rpmbuild를 실행하면 제대로 작동할 것입니다.

rpm을 빌드한 후 rpmbuild의 일부 매크로가 정리될 가능성이 있습니다 %{buildroot}(비록 일반적으로 사양 파일에 섹션을 포함해야 하기 때문에 이는 드문 일이라고 말하고 싶습니다 %clean.) 이것이 사실인지 확인하고, 그렇다면 첫 번째 이후 (성공) rpmbuild, 아래 파일이 /home/<package_dir>사라지고, 이 경우 설명대로 추가 rpmbuild 실행이 실패합니다...

관련 정보