我正在尝试ack
通过安装apt
,但似乎它在存储库中不再可用。两者:
sudo apt install ack
sudo apt install ack-grep
出现以下错误:
E: Package 'ack-grep' has no installation candidate
它在 17.10 存储库中不再可用吗?
答案1
Ack 有一个Ubuntu 17.10 Artful 中的测试失败,并且已被排除在 Ubuntu 之外直到通过。Perl 在 Artful 上升级,旧的 ack 版本不受新 Perl 支持。新版本没有通过所有测试。测试失败是由于在 Ubuntu 下运行的测试框架存在问题(即使在 Debian 中运行良好)。 经过审核的新版本将很快发布。
与此同时,一个解决方法是通过 CPAN 安装它,如确认主页。如果您尚未安装 CPAN,则需要先安装它:
sudo apt install cpanminus
然后你可以使用它来安装ack:
sudo cpanm install App::Ack
它将构建并测试它,因此大约需要 2 分钟,但完成后它将位于您的路径中/usr/local/bin/ack
。
我喜欢这个安装选项,因为它使用标准的 apt 和 cpan 存储库。它使用 Perl 库,这些库将通过自动化工具进行升级。它可以在 Ansible 等自动化工具中轻松实现。
答案2
悲哀的是ack
17.10 存储库中没有。解决方法是手动安装按照网站上的说明。
这是我所做的:
$ sudo su
# curl https://beyondgrep.com/ack-2.18-single-file > /usr/local/bin/ack && chmod 0755 /usr/local/bin/ack
答案3
失败的软件包Ubuntu 的自动安装包测试未包含在发布版本中,至少未包含在 Universe 档案(定期从 Debian Unstable 中自动导入)中的版本中。
由于 Ubuntu 17.10 Artful 发布周期内发生变更,导致出现问题Ubuntu 中的 ack 的 autopkgtest因此阻止了 ack 被包含在 Ubuntu 版本中。您甚至无法在当前开发快照中找到它,但如果您在 中bionic
添加一行,则可以安装它。bionic-proposed
sources.list
目前还不清楚,这种变化究竟是什么,原因是什么(可能是 Ubuntu 的 autopkgtest 基础架构中的一个错误)以及触发因素是什么。(也许切换到 Perl 5.26 会导致 Ubuntu 的 autopkgtest 基础架构出现问题。)
但很明显的是,这个问题是 ubuntu 独有的,因为Debian 中的 ack 的 autopkgtest顺利通过。并且在 Ubuntu 18.04 Bionic 的开发快照上本地运行 autopkgtest 不会出现这些测试失败也一样。(而且它似乎是在 Ubuntu 上构建的。而且在构建时也会运行相同的测试套件,如果没有通过,则包将无法构建,这被认为是一个更严重的问题。)
另一个暗示是,问题隐藏在 Ubuntu 的 autopkgtest 基础设施的某个地方,大多数测试失败都将其输入突然视为 STDIN,而不是预期的文件。
任何关于这些奇怪的 ubuntu-autopkgtest 特定测试失败的根本原因的提示都非常感谢根据启动板错误报告或根据上游错误报告。
答案4
我可以在我的 Ubuntu 17.10 盒子上安装 Ubuntu 18.04 软件包:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=17.10
DISTRIB_CODENAME=artful
DISTRIB_DESCRIPTION="Ubuntu 17.10"
$ sudo apt install libfile-next-perl
...snip...
$ wget https://launchpad.net/ubuntu/+archive/primary/+files/ack_2.18-2_all.deb
...snip...
$ sudo dpkg -i ack_2.18-2_all.deb
...snip...
$ ack --version
ack 2.18
Running under Perl 5.26.0 at /usr/bin/perl
Copyright 2005-2017 Andy Lester.
This program is free software. You may modify or distribute it
under the terms of the Artistic License v2.0.
如果dpkg
命令失败,可能是因为您缺少一些我已经拥有的依赖项。尝试找到apt install
任何缺少的依赖项,然后dpkg
再次运行该行。
与使用 CPAN 相比,我更喜欢这种方法,因为 APT/dpkg 仍然可以看到该包已安装,并且一旦 Ubuntu 理清其构建情况,就能够稍后升级它。
(感谢 Axel Beckert 发布 Launchpad 错误报告的链接,我从中得到了这个想法。)