Rpm
創建 RPM 時在 /usr/bin 中創建符號連結
我正在為一個還沒有 RPM 的應用程序創建一個 RPM。我已經在
/opt
使用的目錄中建構和安裝了它$RPM_BUILD_ROOT
,但我還想在其中創建幾個符號連結,/usr/bin
以便應用程序在路徑上可用。我所做的所有嘗試都產生了“權限被拒絕”錯誤,因為我rpmbuild
以非 root 使用者身份執行,並且不允許在/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
ln -sf /opt/bupc2.8/bin/upcc ${RPM_BUILD_ROOT}/%{_bindir}
該連結需要在該
%build
部分中創建,並且還需要指向您安裝RPM 的位置。在創建連結之前,請確保目標目錄存在,即
${RPM_BUILD_ROOT}/%{_bindir}
. 您可以為此使用mkdir
或。install -d
macro %{__ln_s}
也不錯範例在安裝後添加符號連結:
%post %{__ln_s} -f %{_bindir}/exec %{_bindir}/exec2
範例刪除符號連結解除安裝:
%postun case "$1" in 0) # last one out put out the lights rm -f %{_bindir}/exec2 ;; esac
該
case
聲明確保文件僅在解除安裝時被刪除,而不是升級、降級或重新安裝。%postun
舊包的RPM在新包之後%post
執行(即使版本相同)。