创建RPM时在/ usr / bin中创建符号链接


13

我正在为尚未安装的应用程序创建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

Answers:


6

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

该链接需要在该%build部分中创建,并且还需要指向您要安装 RPM的位置。

创建链接之前,请确保目标目录存在,即${RPM_BUILD_ROOT}/%{_bindir}。您可以使用mkdirinstall -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':没有这样的文件或目录
爱德华戴尔

我认为您需要创建目标目录,即/home/.../usr/bin。这是我的操作方法:github.com/ciupicri/rpmbuild/blob/master/SPECS/…(第36行)。
Cristian Ciupitu 09年

那就是问题所在。我已经更新了问题,以包含最终的工作版本。谢谢!
爱德华·戴尔2009年

1

macro %{__ln_s} 也很好

示例在安装后添加符号链接:

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

示例删除符号链接卸载:

%postun
rm -f %{_bindir}/exec2

1
在rpm -U升级期间,旧的rpm将执行%postun并销毁该文件。新的rpm将没有链接,您的代码不正确。
ljdelight '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.