我如何让 rpmbuild 下载特定 .spec 的所有源代码?
How do I get rpmbuild to download all of the sources for a particular .spec?
我正在通过 URL 将一些源代码添加到现有的 rpm .spec
文件中,但尚未下载它们。有没有办法让 rpmbuild
下载源而不是手动下载?
spectool
utility from the rpmdevtools
包可以做到这一点。只需安装 rpmdevtools
并将 spectools
指向 .spec
,如下所示:
spectool -g -R SPECS/nginx.spec
它会将任何丢失的源下载到 rpm 的 %{_sourcedir}
(通常是 SOURCES
)目录中。
为了后代,还有另一种方法可以做到这一点,不需要任何额外的工具或下载:
rpmbuild --undefine=_disable_source_fetch -ba /path/to/your.spec
默认情况下禁止自动下载源代码,因为 RPM 缺少对源存档的内置完整性检查。网络必须是可信的,并且检查任何校验和和签名。此限制对包维护者有意义,因为他们负责运送受信任的代码。
不过,当你知道自己在做什么,明白其中的风险时,你可能会强行解除限制。
在规范文件中,您可以将 %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
...
学分
@YaroslavFedevych 取消定义 _disable_source_fetch。
如果您从 (git) 托管服务(github 等)获取资源,当与 _disable_source_fetch...
https://fedoraproject.org/wiki/Packaging:SourceURL
例如,对于来自 github 的特定 git 哈希:
%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}
我正在通过 URL 将一些源代码添加到现有的 rpm .spec
文件中,但尚未下载它们。有没有办法让 rpmbuild
下载源而不是手动下载?
spectool
utility from the rpmdevtools
包可以做到这一点。只需安装 rpmdevtools
并将 spectools
指向 .spec
,如下所示:
spectool -g -R SPECS/nginx.spec
它会将任何丢失的源下载到 rpm 的 %{_sourcedir}
(通常是 SOURCES
)目录中。
为了后代,还有另一种方法可以做到这一点,不需要任何额外的工具或下载:
rpmbuild --undefine=_disable_source_fetch -ba /path/to/your.spec
默认情况下禁止自动下载源代码,因为 RPM 缺少对源存档的内置完整性检查。网络必须是可信的,并且检查任何校验和和签名。此限制对包维护者有意义,因为他们负责运送受信任的代码。
不过,当你知道自己在做什么,明白其中的风险时,你可能会强行解除限制。
在规范文件中,您可以将 %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
...
学分
@YaroslavFedevych 取消定义 _disable_source_fetch。
如果您从 (git) 托管服务(github 等)获取资源,当与 _disable_source_fetch...
https://fedoraproject.org/wiki/Packaging:SourceURL
例如,对于来自 github 的特定 git 哈希:
%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}