RPM을 만들 때 / usr / bin에 심볼릭 링크 만들기


13

아직없는 응용 프로그램에 대한 RPM을 만들고 있습니다. 을 /opt사용 하여 디렉토리 에 빌드하고 설치하는 $RPM_BUILD_ROOT것이 좋지만 /usr/bin응용 프로그램을 경로에서 사용할 수 있도록 몇 개의 심볼릭 링크를 만들고 싶습니다 . rpmbuild루트가 아닌 사용자로 실행 중이고 에서 파일을 만들 수 없기 때문에이 작업을 모두 시도하면 "권한 거부"오류가 발생 했습니다 /usr/bin/.

내 현재 .spec 파일은 다음과 같습니다.

Summary: Berkeley UPC
Name: berkeley_upc
Version: 2.8.0
Release: 1
Source0: %{name}-%{version}.tar.gz
License: GPL
Group: Development/Tools
BuildRoot: %{_builddir}/%{name}-root
Prefix: /opt/bupc2.8
Prefix: /usr

%description
Berkeley UPC on the BASS for the comp633 class.

%prep
%setup -q

%build
./configure CC=gcc44 CXX=g++44 --disable-aligned-segments --prefix=/opt/bupc2.8
make %{_smp_mflags}

%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install

mkdir -p ${RPM_BUILD_ROOT}%{_bindir}
mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man1

ln -sf /opt/bupc2.8/bin/upcc          ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upcc_multi    ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upcc_multi.pl ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upcdecl       ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upcrun        ${RPM_BUILD_ROOT}%{_bindir}
ln -sf /opt/bupc2.8/bin/upc_trace     ${RPM_BUILD_ROOT}%{_bindir}

ln -sf /opt/bupc2.8/man/man1/upcc.1      ${RPM_BUILD_ROOT}%{_mandir}/man1
ln -sf /opt/bupc2.8/man/man1/upcdecl.1   ${RPM_BUILD_ROOT}%{_mandir}/man1
ln -sf /opt/bupc2.8/man/man1/upcrun.1    ${RPM_BUILD_ROOT}%{_mandir}/man1
ln -sf /opt/bupc2.8/man/man1/upc_trace.1 ${RPM_BUILD_ROOT}%{_mandir}/man1

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
/opt/bupc2.8
%config /opt/bupc2.8/etc
%config /opt/bupc2.8/opt/etc

%{_bindir}/upcc
%{_bindir}/upcc_multi
%{_bindir}/upcc_multi.pl
%{_bindir}/upcdecl
%{_bindir}/upcrun
%{_bindir}/upc_trace

%{_mandir}/man1/upcc.1.gz
%{_mandir}/man1/upcdecl.1.gz
%{_mandir}/man1/upcrun.1.gz
%{_mandir}/man1/upc_trace.1.gz

답변:


6

ln -sf /opt/bupc2.8/bin/upcc ${RPM_BUILD_ROOT}/%{_bindir}

링크는 %build섹션 에서 작성 해야 하며 RPM을 설치할 위치를 가리켜 야 합니다.

링크를 작성하기 전에 대상 디렉토리가 있는지 확인하십시오 (예 :) ${RPM_BUILD_ROOT}/%{_bindir}. mkdir또는 install -d이것을 사용할 수 있습니다 .


제안한 바에 따라 .spec 파일을 편집했는데 다음 오류가 발생합니다. + ln -sf /opt/bupc2.8/bin/upcc / home / eddale / src / rpm / tmp / berkeley_upc-root / usr / bin ln : 심볼릭 링크 만들기 /home/eddale/src/rpm/tmp/berkeley_upc-root/usr/bin' to /opt/bupc2.8/bin/upcc ': 해당 파일이나 디렉토리가 없음
Edward Dale

대상 디렉토리를 만들어야한다고 생각합니다 /home/.../usr/bin. 내가하는 방법은 다음과 같습니다 : github.com/ciupicri/rpmbuild/blob/master/SPECS/… (36 행).
Cristian Ciupitu

그게 문제였습니다. 최종 작업 버전을 포함하도록 질문을 업데이트했습니다. 감사!
Edward Dale

1

macro %{__ln_s} 또한 좋다

설치 후 기호 링크 추가 :

%post
%{__ln_s} -f %{_bindir}/exec %{_bindir}/exec2

예 : 심볼릭 링크 제거 제거 :

%postun
rm -f %{_bindir}/exec2

1
rpm -U 업그레이드 중에 기존 rpm은 % postun을 실행하고 해당 파일을 삭제합니다. 새로운 rpm에는 링크가 없습니다. 코드가 잘못되었습니다.
ljdelight
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.