在连接 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
。
获取变量的值:
<PATH_TO_EBUILD>
- 组成如下:
<REPO_DIR>/<CATEGORY>/<PACKAGE_NAME>/<PACKAGE_NAME>-<VERSION>.ebuild
- https://wiki.gentoo.org/wiki/Repository_format
<REPO_DIR>
:portageq get_repo_path / gentoo
$DISTDIR
:portageq 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