web-dev-qa-db-fra.com

Comment faire en sorte que rpmbuild télécharge toutes les sources d'un fichier .spec particulier?

J'ajoute certaines sources à un fichier rpm .spec par URL et je ne les ai pas encore téléchargées. Existe-t-il un moyen d'obtenir que rpmbuild télécharge les sources plutôt que de le faire manuellement?

20
joeforker

L'utilitaire spectool du package rpmdevtools peut le faire. Installez simplement rpmdevtools et pointez spectools sur le .spec comme ceci:

spectool -g -R SPECS/nginx.spec

Il téléchargera toutes les sources manquantes dans le répertoire %{_sourcedir} (généralement SOURCES) de rpm.

34
joeforker

Pour la postérité, il existe un autre moyen de le faire, qui ne nécessite aucun outil ni téléchargement supplémentaire:

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

Le téléchargement automatique de sources est interdit par défaut, car RPM ne dispose pas de contrôles d’intégrité intégrés pour les archives sources. Il faut faire confiance au réseau et vérifier les totaux de contrôle et les signatures. Cette restriction est logique pour les responsables de package, car ils sont responsables de l'envoi du code approuvé.

Cependant, lorsque vous savez ce que vous faites et comprenez les risques, vous pouvez simplement lever de force la restriction.

14
Yaroslav Fedevych

Dans le fichier de spécifications, vous pouvez placer %undefine _disable_source_fetch n'importe où avant l'URL source.

Pour des raisons de sécurité, vous devez également spécifier la somme sha256 et la vérifier dans la section %prep avant la configuration.

Voici un exemple de travail:

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

...

Crédits

@YaroslavFedevych pour indéfinir _disable_source_fetch.

7
Matt

Si vous obtenez des sources d’un service d’hébergement (git) (github, etc.), il est possible de vérifier automatiquement si le contenu est déjà intégré, lorsque combiné avec _disable_source_fetch ...

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

Par exemple, pour un githash spécifique à partir de 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