在Ubuntu 17.10存储库中找不到ack


14

我正在尝试通过安装ackapt但似乎在回购中不再可用。都:

sudo apt install ack
sudo apt install ack-grep

给出以下错误:

E: Package 'ack-grep' has no installation candidate

在17.10存储库中不再可用吗?


首先,尝试sudo apt update
arupgsh

1
@muru谢谢,但是您的链接显示该链接不可用,因为artful未列出,对吗?packages.ubuntu.com/search?suite=artful&keywords=ack


3
嗨,ack的创建者在这里。我知道这种情况,但我不知道我个人对此有何应对措施。这是带有更多信息的ack错误跟踪器中的一张票:github.com/beyondgrep/ack2/issues/652
Andy Lester

Answers:


12

Ack 在Ubuntu 17.10 Artful中测试失败,并且直到通过后才从Ubuntu中排除。Perl已在Artful上升级,而新的Perl不支持旧的ack版本。新版本未通过所有测试。测试失败是由于在Ubuntu下运行的测试框架存在问题引起的(即使在Debian中运行正常也是如此) 。即将通过的新版本将发布

同时,一种解决方法是按照ack主页上的建议通过CPAN安装它。如果尚未安装CPAN,则需要先安装它:

sudo apt install cpanminus

然后,您可以使用它来安装ack:

sudo cpanm install App::Ack

它将构建并测试它,因此大约需要2分钟,但是完成后,它将位于您的位置/usr/local/bin/ack

我喜欢此安装选项,因为它使用标准的apt和cpan存储库。它使用Perl库,该库将通过自动化工具进行升级。它可以在自动化工具(例如Ansible)中轻松实现。


2
大概如果您要安装cpanminus,则实际上要使用它进行安装:sudo cpanm App::Ack
乔尔·伯杰

3
实际上,就目前而言,Perl或Ack 并不是问题(在几乎完全相同的Debian构建系统中,测试通过了相同的版本)。目前,它被认为是Ubuntu构建系统中的错误。
mniess '17

6

遗憾的ack是不在17.10存储库中。一种解决方法是按照其网站上的说明手动安装它。

这是我所做的:

$ sudo su
# curl https://beyondgrep.com/ack-2.18-single-file > /usr/local/bin/ack && chmod 0755 /usr/local/bin/ack

2
尽管从随机网站安装软件看起来有些可取,但beyondgrep.com是官方的ack网站。
Stephen Ostermiller '17

1
ack的单个文件版本使用其自己的必需库副本,如果发现其中存在安全漏洞,它们将不会自动更新。它使用的是ack生成时的库版本,即使在安装时,它也可能不是最新版本。如果使用此解决方案,则应注意单文件安装还存在其他安全问题。
Stephen Ostermiller '17

一个班轮而不是使用sudo suack="/usr/local/bin/ack" && curl -s https://beyondgrep.com/ack-2.18-single-file | sudo tee "$ack" > /dev/null && sudo chmod 0755 "$ack"
Stephen Ostermiller

请不要。而是使用另一个Ubuntu版本(甚至Debian)中的ack .deb软件包。因此,您至少可以获得所有已使用库的安全更新。
阿克塞尔·贝克特

这是唯一对我有用的方法。
西奥多·R·史密斯,

4

未通过Ubuntu自动安装软件包测试软件包不包含在发行版中,至少不是那些不是来自Universe归档文件的软件包(该软件包是定期导入的,并从Debian Unstable自动获得)。

由于在Ubuntu 17.10 Artful Release周期中进行了更改,因此某些问题打破了ack在ubuntu中的autopkgtest,从而使ack不再包含在Ubuntu版本中。你甚至不能找到它在目前的发展快照bionic,但如果添加一条线,你可以安装bionic-proposed到你的sources.list

目前还不清楚,到底是什么变化,分别是什么原因(可能是Ubuntu的autopkgtest基础设施中的错误)以及触发的原因。(也许切换到Perl 5.26在Ubuntu的autopkgtest基础结构中出现了问题。)

但是很明显,这个问题是特定于ubuntu的,因为在Debian中ack的autopkgtest顺利通过了,没有任何问题。而在Ubuntu 18.04的开发快照仿生没有表现出这些测试失败本地运行autopkgtest无论是。(它似乎是在Ubuntu上构建的。同样的测试套件也在构建时运行,并且如果未通过,则该软件包将无法构建,这被认为是更为严重的问题。)

另一个提示该问题隐藏在Ubuntu的autopkgtest基础结构中的某个地方的事实是,大多数测试失败突然将其输入视为STDIN而不是预期的文件

相应的启动板错误报告相应的上游错误报告中,非常感谢有关这些奇怪的ubuntu-autopkgtest特定测试失败的根本原因的暗示。


2

正如@muru在上面的注释中指出的那样,该软件包已在17.10中被破坏,因此已被删除,所以是的,暂时ack在17.10存储库中没有。

猜猜我应该留意https://packages.ubuntu.com/search?suite=artful&keywords=ack,以了解何时可以再次使用它。


1
可能不会。尚未通过回传端口提供尚未在回购中的软件包的情况极为罕见。您可以随时注意launchpad.net/ubuntu/bionic/+source/ack,看看它是否达到了18.04的标准(因为这是一个lts,可能会付出更多的努力才能使其正常工作)
muru

据我所知,导致此问题的“中断”是一个拼写错误,使Debian的包装更加混乱。
安迪·莱斯特

1
@AndyLester:不,该拼写错误与它无关。Debian Perl团队甚至通过Lintian Override将其标记为误报。
阿克塞尔·贝克特

“损坏”(Cc @muru)表示在这种情况下自动完成的程序包测试失败(简称:autopkgtest)。需要关注的相关页面是autopkgtest.ubuntu.com/packages/ack及其子页面。当ack通过Debian的autopkgtest时,这显然是Ubuntu特有的问题。
阿克塞尔·贝克特

@AxelBeckert我知道。我们已经在票证页面上对此进行了讨论。我六个星期前写了这个拼写评论。
安迪·莱斯特

1

我能够在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发布​​了指向启动板错误报告的链接,这是我得到这个想法的地方。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.