Вопрос: Создание символической ссылки в / 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

11
2017-11-06 14:13


Источник




Ответы:


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

Ссылка должна быть создана там, где вы здание RPM, и он также должен указать, где вы находитесь установка RPM.

Перед созданием ссылки убедитесь, что каталог назначения существует, т. Е. ${RPM_BUILD_ROOT}/%{_bindir}, Вы можете использовать mkdir или install -d для этого.


4
2017-11-06 14:50



Я отредактировал свой файл .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 ': нет такого файла или каталога - scompt.com
Я думаю, что вам нужно создать целевой каталог, т. Е. /home/.../usr/bin, Вот как я это делаю: github.com/ciupicri/rpmbuild/blob/master/SPECS/... (строка 36). - Cristian Ciupitu
Это была проблема. Я обновил вопрос, чтобы содержать окончательную рабочую версию. Благодаря! - scompt.com


macro %{__ln_s} хорошо и

пример добавить символическую ссылку post install:

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

пример удаления удаления символической ссылки:

%postun
rm -f %{_bindir}/exec2

-1
2017-09-03 12:33



Во время обновления rpm -U старый rpm будет выполнять% postun и уничтожить этот файл. Новый rpm не будет иметь ссылку, ваш код плохой. - ljdelight