Wie verwenden Sie rpmbuild, um ein RPM-Paket zu erstellen, wenn die Datei nicht gefunden wird oder Berechtigungsfehler vorliegen?

Wie verwenden Sie rpmbuild, um ein RPM-Paket zu erstellen, wenn die Datei nicht gefunden wird oder Berechtigungsfehler vorliegen?

Ich versuche, eine RPM-Datei für das Dienstprogramm wget zu erstellen. Beide meiner Versuche (mit und ohne sudo), den Befehl rpmbuild zu verwenden, schlagen beim Erstellen einer RPM-Datei fehl.

Ich führe den Befehl „sudo rpmbuild“ aus, um eine Spezifikationsdatei zu verwenden. Aber ich erhalte diese Fehlermeldungen:

Fehler: Datei nicht gefunden: /root/rpmbuild/BUILDROOT/wget-1.19-1.x86_64/usr/local/bin/wget Fehler: Datei nicht gefunden: /root/rpmbuild/BUILDROOT/wget-1.19-1.x86_64/usr/local/share/man/man1/wget.1

Wenn ich die Verzeichnispfade manuell erstelle und die Dateien manuell kopiere, stoße ich später auf andere Probleme. Ich denke, etwas stimmt nicht, wenn der Befehl rpmbuild erwartet, dass sich Schlüsseldateien an den oben genannten Speicherorten befinden.

Ich habe gelesen, dass empfohlen wird, sudo nicht zu verwenden. Wenn ich sudo nicht verwende, rpmbuild -v -bb --clean SPECS/wget.speczeigt der rpmbuild-Befehl ( ) Folgendes an:

Ausführen (%prep): /bin/sh -e /var/tmp/rpm-tmp.NiuIFV + umask 022 + cd /home/ec2-user/mywget/BUILD + cd /home/ec2-user/mywget/BUILD + rm -rf wget-1.19 rm: „wget-1.19/po/“ kann nicht entfernt werden.[email geschützt]': Berechtigung verweigert rm: „wget-1.19/po/zh_CN.po“ kann nicht entfernt werden: Berechtigung verweigert rm: „wget-1.19/po/id.gmo“ kann nicht entfernt werden: Berechtigung verweigert rm: „wget-1.19/po/gl.gmo“ kann nicht entfernt werden: Berechtigung verweigert …

Ich sehe weitere Zeilen mit der Meldung „rm kann nicht entfernen ... Zugriff verweigert“. Ich hatte erwartet, dass der Befehl rpmbuild funktioniert. Ich habe die Berechtigungen des Ordners wget-1.19 auf 777 geändert (über sudo chmod), wobei Eigentümer und Gruppe mit denen des Benutzers identisch sind, der den Befehl rpmbuild ausführt. Das Problem besteht immer noch.

Was kann ich tun, um ein RPM-Paket des Dienstprogramms wget zu erstellen?

# This is a sample spec file for wget

%define _topdir     /home/ec2-user/mywget
%define name            wget 
%define release     1
%define version     1.19
%define buildroot %{_topdir}/%{name}-%{version}-root

BuildRoot:  %{buildroot}
Summary:        GNU wget
License:        GPL
Name:           %{name}
Version:        %{version}
Release:        %{release}
Source:         %{name}-%{version}.tar.gz
Prefix:         /usr
Group:          Development/Tools

%description
The GNU wget program downloads files from the Internet using the command-line.

%prep
%setup -q

%build
./configure
make

%install
make install prefix=$RPM_BUILD_ROOT/usr

%files
%defattr(-,root,root)
/usr/local/bin/wget

%doc %attr(0444,root,root) /usr/local/share/man/man1/wget.1

Das Obige wurde modifiziert, basiert aber stark auf dem hier gezeigten Beispiel aus der Spezifikationsdatei:https://www.ibm.com/developerworks/library/l-rpm1/index.html

Antwort1

Dieser Fehler:

Fehler: Datei nicht gefunden: /root/rpmbuild/BUILDROOT/wget-1.19-1.x86_64/usr/local/bin/wget

bedeutet, dass Sie diese Datei im Abschnitt %files angegeben haben:

%files
/usr/local/bin/wget

rpmbuild erwartet diese Datei also im Pfad $RPM_BUILD_ROOT/usr/local/bin/wget, aber sie ist nicht da. Daher dieser Fehler. Umgekehrt gilt das Gleiche für die Manpage.

Sie können es ausführen rpmbuild -bi, wodurch es direkt nach %installder Phase angehalten wird, und Sie können den Inhalt von /root/rpmbuild/BUILDROOT/wget-1.19-1.x86_64/ überprüfen, wo die make installDateien tatsächlich abgelegt werden.

ICHerratendass entweder

%install
make install prefix=$RPM_BUILD_ROOT/usr/local

oder

%files
%defattr(-,root,root)
/usr/bin/wget
%doc %attr(0444,root,root) /usr/share/man/man1/wget.1

wird Ihren Fehler beheben. (nur eines davon!)

verwandte Informationen