Erstellen eines Symlinks in / usr / bin beim Erstellen eines RPM

13

Ich erstelle ein RPM für eine Anwendung, die noch keines hat. Ich habe es in Ordnung in dem /optVerzeichnis mit bauen und installieren lassen $RPM_BUILD_ROOT, aber ich möchte auch ein paar Symlinks erstellen, /usr/bindamit die Anwendung auf dem Pfad verfügbar ist. Alle meine Versuche, dies zu tun, haben zu Fehlern "Berechtigung verweigert" geführt, da ich rpmbuildals Benutzer ohne Rootberechtigung ausgeführt werde und keine Dateien in erstellen darf /usr/bin/.

Hier ist meine aktuelle .spec-Datei:

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
Edward Dale
quelle

Antworten:

6

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

Der Link muss in dem %buildAbschnitt erstellt werden und muss auch darauf verweisen, wo Sie das RPM installieren .

Stellen Sie vor dem Erstellen des Links sicher, dass das Zielverzeichnis vorhanden ist, d ${RPM_BUILD_ROOT}/%{_bindir}. H. Sie können mkdiroder install -ddafür verwenden.

Cristian Ciupitu
quelle
Ich habe meine .spec-Datei gemäß den von Ihnen vorgeschlagenen Angaben bearbeitet und erhalte den folgenden Fehler: + ln -sf /opt/bupc2.8/bin/upcc / home / eddale / src / rpm / tmp / berkeley_upc-root / usr / bin ln: Symbolische Verknüpfung /home/eddale/src/rpm/tmp/berkeley_upc-root/usr/bin' to erstellen /opt/bupc2.8/bin/upcc ': Keine solche Datei oder Verzeichnis
Edward Dale
Ich denke, dass Sie das Zielverzeichnis erstellen müssen, dh /home/.../usr/bin. So mache ich das: github.com/ciupicri/rpmbuild/blob/master/SPECS/… (Zeile 36).
Cristian Ciupitu
Das war das Problem. Ich habe die Frage so aktualisiert, dass sie die endgültige Arbeitsversion enthält. Vielen Dank!
Edward Dale
1

macro %{__ln_s} ist auch gut

Beispiel für das Hinzufügen eines symbolischen Links nach der Installation:

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

Beispiel Deinstallation von symbolischem Link entfernen:

%postun
rm -f %{_bindir}/exec2
tuxnux
quelle
1
Während eines Upgrades von rpm -U führt das alte rpm% postun aus und zerstört diese Datei. Die neue U / min wird keinen Link haben, Ihr Code ist schlecht.
LJDELIGHT