it-swarm.com.de

Wie kann ich rpmbuild dazu bringen, alle Quellen für eine bestimmte .spec-Datei herunterzuladen?

Ich füge einer vorhandenen rpm .spec-Datei einige Quellen nach URL hinzu und habe sie noch nicht heruntergeladen. Gibt es eine Möglichkeit, rpmbuild die Quellen herunterzuladen, anstatt sie manuell durchzuführen?

20
joeforker

Das Dienstprogramm spectool aus dem Paket rpmdevtools kann dies tun. Installieren Sie einfach rpmdevtools und zeigen Sie spectools auf den .spec wie folgt:

spectool -g -R SPECS/nginx.spec

Es werden alle fehlenden Quellen in das Verzeichnis %{_sourcedir} (normalerweise SOURCES) von rpm heruntergeladen.

34
joeforker

Für die Nachwelt gibt es eine andere Möglichkeit, die keine zusätzlichen Tools oder Downloads erfordert:

rpmbuild --undefine=_disable_source_fetch -ba /path/to/your.spec

Das automatische Herunterladen von Quellen ist standardmäßig verboten, da RPM keine integrierten Integritätsprüfungen für die Quellarchive vorhanden sind. Das Netzwerk muss vertrauenswürdig sein und alle Prüfsummen und Signaturen müssen überprüft werden. Diese Einschränkung ist für Paketbetreuer sinnvoll, da sie für den Versand von vertrauenswürdigem Code verantwortlich sind.

Wenn Sie jedoch wissen, was Sie tun und die Risiken verstehen, können Sie die Einschränkung einfach aufheben.

14

In der Spezifikationsdatei können Sie %undefine _disable_source_fetch an einer beliebigen Stelle vor der Quell-URL einfügen.

Aus Sicherheitsgründen sollten Sie auch die sha256sum angeben und diese vor dem Setup im Abschnitt %prep überprüfen.

Hier ist ein Arbeitsbeispiel:

Name:       monit
Version:    5.25.1
Release:    1%{?dist}
Summary:    Monitoring utility for unix systems

Group:      Applications/System
License:    GNU AFFERO GENERAL PUBLIC LICENSE version 3
URL:        https://mmonit.com/monit/
%undefine _disable_source_fetch
Source0:    https://mmonit.com/monit/dist/%name-%version.tar.gz
%define     SHA256SUM0 4b5c25ceb10825f1e5404f1d8a7b21507716b82bc20c3586f86603691c3b81bc

%define debug_package %nil

BuildRequires:  coreutils

%description
Monit is a small Open Source utility for managing and monitoring Unix systems. Monit conducts automatic maintenance
and repair and can execute meaningful causal actions in error situations.

%prep
echo "%SHA256SUM0 %SOURCE0" | sha256sum -c -
%setup -q

...

Credits

@YaroslavFedevych für undefiniere _disable_source_fetch.

7
Matt

Wenn Sie Quellen von einem (git) -Hosting-Service (github usw.) erhalten, wird das automatische Auschecken bereits integriert, wenn Sie mit _disable_source_fetch kombiniert werden.

https://fedoraproject.org/wiki/Packaging:SourceURL

Zum Beispiel für ein bestimmtes githash von github:

%global commit 40-CHARACTER-HASH-VALUE
%global shortcommit %(c=%{commit}; echo ${c:0:7})
Source0:  https://github.com/OWNER/PROJECT/archive/%{commit}/%{name}-%{shortcommit}.tar.gz
...
%prep
%autosetup -n PROJECT-%{commit}
0
tesch1