如何让rpmbuild下载特定.spec的所有源代码?

时间:2015-10-16 18:39:58

标签: rpm rpmbuild rpm-spec

我正在通过URL向现有的rpm .spec文件添加一些源,但尚未下载它们。有没有办法让rpmbuild下载源而不是手动执行?

4 个答案:

答案 0 :(得分:38)

spectool包中的rpmdevtools实用程序可以执行此操作。只需安装rpmdevtools并将spectools指向.spec,就像这样:

spectool -g -R SPECS/nginx.spec

它会将任何缺少的资源下载到rpm的%{_sourcedir}(通常是SOURCES)目录中。

答案 1 :(得分:18)

对于后代,还有另一种方法,它不需要任何额外的工具或下载:

browser.execute(() => {
            $('a.m_library').click();
        });

默认情况下禁止自动下载源,因为RPM缺少源存档的内置完整性检查。必须信任网络,并检查任何校验和和签名。这种限制对包维护者有意义,因为他们负责发送可信代码。

然而,当你知道自己在做什么并了解风险时,你可能会强行解除限制。

答案 2 :(得分:9)

在规范文件中,您可以将%undefine _disable_source_fetch放在源网址之前的任何位置。

出于安全考虑,您还应指定sha256sum,并在设置之前在%prep部分进行检查。

这是一个有效的例子:

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

...

积分

@YaroslavFedevych for undefine _disable_source_fetch。

答案 3 :(得分:1)

如果您是从(git)托管服务(例如github等)获取源代码,则当与_disable_source_fetch结合使用时,支持自动将其检出已内置...

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

例如,对于来自github的特定githash:

%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}