RPMを作成するときに/ usr / binにシンボリックリンクを作成する


13

まだ持っていないアプリケーション用のRPMを作成しています。を/opt使用してディレクトリに構築してインストールしましたが、パスでアプリケーションが利用できるように$RPM_BUILD_ROOTいくつかのシンボリックリンクを作成したいと思い/usr/binます。これを実行しようとすると、rpmbuildroot以外のユーザーとして実行しており、でファイルを作成することが許可されていないため、「許可が拒否されました」エラーが発生しました/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/bingithub.com/ciupicri/rpmbuild/blob/master/SPECS/…(36行目)で、その方法を説明します。
クリスチャン・シウピトゥ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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.