从apt-get切换到aptitude会引起问题吗?


8

我一直在考虑切换到aptitude,但是我听说有人说:“如果您已经在使用apt-get,则应该等到下一个安装切换。” 人们为什么这么说?这会导致什么问题(如果有)?

Answers:


8

apt-get和aptitude是不同的UI,它们是同一软件包管理系统APT(高级包装工具)的一部分。例如,两者都使用进行配置/etc/apt/apt.conf,都使用相同的文件空间和格式来表示软件包状态,并且使用相同的文件空间来存储下载的.debs。

它们的不同之处在于它们的内部规则系统,它们表示包之间的潜在冲突,如何解决它们(例如apt-get dist-upgradevs. 期间aptitude full-upgrade)以及与用户进行交互时如何表达它们。一般而言,在棘手的情况下,两者都可能做错事,但是apt-get可能比聪明的人更容易出错。


2
一个很好的清晰答案。另外一个细节是它们如何/何时删除自动安装的依赖项。aptitude会立即删除它们,但apt-get只会提示您通过输入命令删除它们apt-get autoremove。通常,他们将要删除相同的项目。但是,对于一个复杂的案例,请参阅此链接,在该案例中他们对此表示不同意见:forums.debian.net/viewtopic.php?f=
Telemachus

5

这里已经有很多好的建议,但让我补充一件事,没有人提及。如果您决定切换,则可能要运行此命令,具体取决于您的工作情况apt-get

aptitude keep-all

该命令重置aptitude了什么包是孤立包的意义,应该将其删除。

这是有时有用的原因:在一段时间内,两者apt-getaptitude都会跟踪作为其他依赖项而自动安装的软件包。因此,例如,如果您安装mpd,则可能会lib-so-and-so成为依赖项。他们这样做是为了让以后再删除mpd时也lib-so-and-so可以删除。但是aptitude,以apt-get不同的方式处理此清理。aptitude立即尝试删除所有孤立的依赖项;但apt-get仅建议您运行apt-get autoremove清理。(后面这一切的逻辑是,你只得到了图书馆,因为mpd需要它。如果你不坚持mpd,你不应该需要的库中的任何更长的时间。如果另一包还是要看它,那么这两个aptitudeapt-get 会知道这一点,而不是尝试删除该库。)

我有什么意思 好吧,如果您一直在运行微调,然后apt-get autoremove切换到aptitude,那么您第一次尝试安装某些组件时可能会感到震惊。aptitude将立即尝试删除所有这些孤儿。通常,这很好(毕竟他们是孤儿,不是必需的),但是有一个复杂的情况。桌面元包都包含一个复杂的依赖链,其中每个程序都作为虚拟包包装程序的依赖被拉入。例如,如果由于安装了gnome软件包而安装了Gnome ,则所有常规桌面程序都将作为依赖项安装。如果您已经卸载了其中一个程序(例如Ekiga或Gedit),那么在您看来aptitude您桌面的其余部分也应删除。请注意,aptitude 总是在删除内容前先进行询问,但是人们经常输入“ Y”而不阅读。以我的经验,这是刚接触Debian的人们最常见的抱怨/困惑。

两条一般建议:

  1. 对任何事情说“是”之前,请务必仔细阅读aptitude或的输出apt-get
  2. 请记住,您始终可以使用aptitude -s safe-upgrade或进行试运行aptitude -s install foo。该-s|--simulate标志是你的朋友。

4

几年前,在Debian邮件列表中有人说,从apt-get转换为aptitude是冒险的。这是两个Debian版本(例如10年)。所有这些问题现在似乎都已经解决了,当然我在Debian或Ubuntu上都没有遇到问题。


1
您是否有指向邮件列表帖子的链接?
马修2010年

Matthew,您是否认为我在这里保存了整个debian-user邮件列表的索引完全正确的存档?从上面可以清楚地看出,我什至不记得年份吗?
CarlF 2010年

@Matthew:前一段时间(Sarge或Etch早期),很多人担心从切换apt-getaptitude。那时,他们处理许多基本功能的方式非常不同。随着时间的流逝,它们变得越来越相似,并且aptitude已经成熟了许多。现在,对于90%的情况,如果您进行切换,应该没有问题。见我的帖子一个边缘案例。
Telemachus

2

我也要说继续使用aptitude
Aptitudeapt-get。具有更好的依赖管理。这将有助于保持孤立软件包的数量少。
我前一阵子看过,aptitude与相比,它具有更好的dist升级算法apt-get。但这并不是一个杀手级功能,因为它在系统的生命周期中并不经常使用。

另外,您将把更多的东西组合到一个工具中。而不是记住何时调用apt-getapt-cachedpkg和与交换机我只是用能力和获得做得最多的事情。

至于“中间”切换时的复杂性:我不记得自己做过任何事情。


1

它们不只是同一个后端的不同接口吗?


2
aptitude是一个更具特色的界面...
quack quixote 2010年

可能是这样。但是具有更多功能的接口并不一定意味着不同的后端。
Svish 2010年

2
不,您是对的,两者都是的前端dpkg。但dpkg只安装软件包;它是负责搜索,依赖项解析和下载的前端。
quack quixote 2010年

但是搜索,下载和依赖性解析不会破坏任何内容。或如果这样做的话,我认为这很奇怪……
Svish 2010年

2
刚刚注意到您的最后评论。请记住,决定安装什么的是前端;dpkg只是进行安装。如果出现问题,通常是因为依赖关系解析失败,或者是因为用户关闭了依赖关系解析(例如,使用--force选项)。
quack quixote 2010年

1

根据我的经验,他们有不同的固定软件包版本的方式。就我而言,我告诉aptitude锁定某些软件包,假设我将来可以安全地进行更新。我错了; cron计划的更新管理器(使用apt-get)将其升级到令人沮丧的地步。

德拉特斯(Drats),当我写这篇文章时,我在Google上搜索了一下,发现该错误(#557580 aptitude不遵守preferences.d / *中的图钉)已被修复!


-1

我同时使用apt-get和aptitude都没问题:我有一个相同的问题...为什么人们这么说?:D

继续,不用担心:aptitude只是apt-get的文本GUI,您甚至可以将其用作命令行应用程序,例如apt-get install fooaptitude install foo

问候


我不相信他们是一样的。除非情况有所变化,否则aptitude会执行更多的依赖项跟踪并删除它已自动安装的所有软件包,而apt-get不会。也就是说,如果foo取决于bar,并且您使用apt-get安装和删除foo,bar将保留在您的系统上。如果您用智能做同样的事情,那就不会。
William Pursell '02

您是对的:请参阅下面的〜quack评论。
dag729'2

@ William,@ dag729:当前版本apt-get还提供仅作为依赖项安装的软件包的自动删除。在这方面,剩下的区别是aptitude立即删除了依赖项(视情况而定),但是apt-get仅促使您运行命令apt-get autoremove。但是它们现在都以相同的方式跟踪依赖关系。但是,它们在处理复杂的依赖项和边缘情况(非常复杂的安装或删除)方面仍然有所不同,但是对于大多数人和大多数情况而言,它们现在的工作原理相同。
Telemachus
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.