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

joe*_*ker 26 rpm rpmbuild rpm-spec

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

joe*_*ker 40

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

spectool -g -R SPECS/nginx.spec
Run Code Online (Sandbox Code Playgroud)

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

  • 正如@Richlv 指出的那样,“spectool”将文件下载到“%{_sourcedir}”目录中。如果您想知道它在您自己的系统上的位置,可以使用 `rpm --eval "%{_sourcedir}"` 对其进行评估。我最近碰巧用它来做各种各样的事情,发现分享它非常有用。 (3认同)
  • 因为我想知道标志的含义:" - g, - gf, - get-files获取带有URL列出的源/补丁; -R, - sourcedir下载到rpm的%{_ sourcedir}" (2认同)

小智 23

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

rpmbuild --undefine=_disable_source_fetch -ba /path/to/your.spec
Run Code Online (Sandbox Code Playgroud)

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

但是,当您知道自己在做什么并了解风险时,您可能会强行解除限制.

  • `rpmbuild --undefine=_disable_source_fetch --define '_sourcedir 。' -ba *.spec` 最后。 (2认同)

Mat*_*att 11

在spec文件中,您可以放置%undefine _disable_source_fetch在源URL之前的任何位置.

出于安全考虑,您还应指定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

...
Run Code Online (Sandbox Code Playgroud)

积分

@YaroslavFedevych for undefine _disable_source_fetch.