我如何让 Portage 下载一个软件包而不做任何其他事情?

我如何让 Portage 下载一个软件包而不做任何其他事情?

在连接 TLS 服务器时遇到一些问题,然后发现已经app-misc/ca-certificates落后了一年零四个月后,我很好奇自 以来发生了什么变化20140927.3.17.2。我想我只需获取软件包的副本,从中提取所有内容,然后四处查看。浏览一下emerge手册页,出现了--fetchonly( -f):

不需要进行任何包构建,只需执行所有包的获取(根据 USE 设置从 SRC_URI 获取内容)。

听起来就像我想要的!我们走吧。

caramel:~ blackl% emerge --fetchonly '='app-misc/ca-certificates-20151214.3.21
emerge: portage group access is required

…呃?好吧……我不明白为什么不行。拥有 root 权限。

caramel:~ blackl% sudo emerge --fetchonly '='app-misc/ca-certificates-20151214.3.21
Calculating dependencies... done!
[ebuild     U ~] app-misc/ca-certificates-20151214.3.21 [20140927.3.17.2]

The following keyword changes are necessary to proceed:
 (see "package.accept_keywords" in the portage(5) man page for more details)
# required by =app-misc/ca-certificates-20151214.3.21 (argument)
=app-misc/ca-certificates-20151214.3.21 ~amd64

什么?不……我只想下载软件包;我不想真正安装它或对系统进行任何其他更改。

对手册页进行更彻底的搜索后,没有找到任何其他看起来相关的内容(除了--fetch-all-uri| -F,它给出了相同的结果)。为什么emerge在这里坚持特权访问和关键字更改?这会是什么真的除了下载 tarball、验证它并将它转储到工作目录或某个缓存中之外,您还能做什么?

答案1

问题可能更应该是:“我如何让 Portage 下载包源,不再做任何事情?”。它无法使用的原因emerge是因为 emerge 就是这样设计的。emerge 根本不是做这种工作的合适工具,希望永远不会是。要真正完成你想要的,你必须使用ebuild命令(man 1 ebuild),如下所示:

ebuild <PATH_TO_EBUILD> fetch

此命令将下载(并验证)其中的所有$SRC_URI内容$DISTDIR

获取变量的值:

要真正将源文件获取到您选择的目录,只需$DISTDIR像这样欺骗 var:

DISTDIR=<DIR> ebuild <PATH_TO_EBUILD> fetch

因此,如果您使用默认的 portage 路径并希望将源下载到您的主目录,请发出以下命令:

DISTDIR=~ ebuild /usr/portage/app-misc/ca-certificates/ca-certificates-20151214.3.21.ebuild fetch

相关内容