Rpm

創建 RPM 時在 /usr/bin 中創建符號連結

  • March 24, 2021

我正在為一個還沒有 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執行(即使版本相同)。

引用自:https://serverfault.com/questions/82193