저는 회사 내부에서 사용되는 작은 프로그램을 위해 rpm을 만들고 있습니다. rpm 프로세스의 % 빌드 섹션이 작동합니다. 설치 섹션에 문제가 있습니다. this article response을 참조했으며 % {_ buildroot}와 관련하여 대상 위치를 제대로 참조하고 있다고 생각합니다.rpm 빌드 빌드 루트 디렉토리를 만들 수 없습니다.
내가 만들고있는 프로그램이 시스템 서비스로 설치됩니다. rpm이 실제로이 단계를 위해 생성 된 후 init.d 위치에 설치된 스크립트를 포함하고 설치를 실행하는 설치 프로세스에서 다음 단계를 추가해야합니다. 한 번에 한 걸음.
빌드 오류는 다음과 같이 (% 설치를 제외한 모든 것을 생략)은 다음과 같습니다
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.eUDaCK
+ umask 022
+ cd /home/packager/rpmbuild/BUILD
+ '[' /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64 '!='/']'
+ rm -rf /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
++ dirname /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
+ mkdir -p /home/packager/rpmbuild/BUILDROOT
+ mkdir /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
+ cd o2arbitord-1.0
+ LANG=C
+ export LANG
+ unset DISPLAY
+ install -m 555 /home/packager/rpmbuild/BUILD/o2arbitord-1.0/o2arbitord /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64/usr/sbin
install: cannot create regular file `/home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64/usr/sbin': No such file or directory
error: Bad exit status from /var/tmp/rpm-tmp.eUDaCK (%install)
지금, 내 rpmbuild 디렉토리는 디렉토리
/home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64/usr/sbin
이 없습니다. 문제의 일부인 것을 알고 있지만 rpmbuild 프로세스는 디렉토리를
/home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
으로 만들지 않습니다. 내가 그것에 대해 이해하지 못하는 것은 : 왜? 위 스크립트 출력을 보면 다음 줄을 명확하게 볼 수 있습니다 :
mkdir /home/packager/rpmbuild/BUILDROOT/o2arbitord-1.0-1.el6.x86_64
. 그래서, 왜 디렉토리가 만들어지지 않았습니까?
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
은 % {_ buildroot}의 정의와 어떤 관계가 있습니까? 나는 이것이 그 정의라고 생각했지만, 그것은 다른 것으로 보인다. 참고로
, 당신은 (아직) 존재하지 않는 디렉토리에 파일을 설치하려고
Name: o2arbitord
Version: 1.0
Release: 1%{?dist}
Summary: a daemon
Group: Applications/System
License: GPL
URL: http://My.site
Source0: %{name}-%{version}.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildArch: x86_64
BuildRequires: libusb1-devel
#Requires:
%description
%prep
%setup -q
%build
make -f o2arbitord.mk
%install
install -m 555 %{_builddir}/%{name}-%{version}/%{name} %{buildroot}%{_sbindir}
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
/usr/sbin/o2arbitord
%changelog
당신은 당신이 그것으로 파일을 설치하기 전에 디렉토리를 작성해야
. '% {__ mkdir_p} % {buildroot} % {_ sbindir}'또는'% {__ install} -d % {buildroot} % {_ sbindir}' –@EtanReisner 감사합니다. 나는이 두 매크로에 대해 몰랐다. % prep 섹션에서 디렉토리를 만들려고했지만 실패했습니다. 귀하의 두 가지 제안 중 첫 번째를 % install에 넣었고 물론 작동했습니다. 나도 대답으로 의견을 수락 할 수 없다. –