昨天我尝试安装apt-get
最初使用的 Imagemagick,结果返回错误。我已经尝试安装 ImageMagick 几个小时了,所以我不耐烦了。 stackoverflow 上的一篇文章说,如果apt-get
不起作用,我可以尝试使用aptitude
.所以我做了。就在那时,一切开始崩溃。 Aptitude 开始删除一大堆模块。我认为这是这个过程的一部分。所以现在:
- apache2 没有启动
- nginx 不运行,我无法运行 plesk
- 我的邮件服务器不再工作了,因为 plesk 也不再工作
有什么办法可以回滚这个吗?以后有什么办法可以避免这种情况吗?我期望 aptitude 的行为与 apt-get 相同。
答案1
和apt-get
都是底层命令(Debian 软件包系统)aptitude
的便捷前端。dpkg
它们(预)处理依赖关系、冲突解决和包下载等内容,然后dpkg
使用明确的指令进行调用以安装下载的 *.deb 文件,或者删除包及其依赖关系,或者自动(取消)配置它们,或者执行其他操作...
您可能要求aptitude
强制安装某个软件包。它的冲突解决方案启动并强制完全删除冲突的包,破坏其他包。据推测,依赖项解析发现某些依赖项必须安装在特定版本或体系结构中,这些依赖项不能与已安装的依赖项共存。某些事情根本行不通,但是既然您要求强制安装......那么,您得到了您所要求的。
您可以在这里找到有关软件包历史记录和系统状态的有用信息。使用less <log-file>
(或zless <compressed-log-file>
) 读取这些文件。
- 您可以在其中
/var/log/apt/history.log*
看到命令历史记录apt-get
以及它为您的请求/命令提出的解决方案。 - 您可以在其中
/var/log/apt/term.log*
看到所述请求/命令的输出。 - 您将在其中
/var/log/aptitude*
看到一些能力活动。 - 您可以在其中
/var/log/dpkg.log*
看到各个软件包状态虎钳发生了什么。
dpkg -l
将列出系统上的所有软件包及其状态,包括以前安装的软件包(即“已删除”软件包)的状态。列表标题(或man dpkg
)将告诉您第一列中字母的含义。第一封信将告诉您您/apt-get/aptitude 请求的软件包的状态。第二个字母将告诉软件包当前所处的状态。如果有第三个字母R
,则该软件包需要重新安装。dpkg -l | grep -v "^ii"
将列出相同的软件包,不包括“当前按要求安装的”软件包,这可能有助于缩小“已删除”或“半配置”或“半安装”软件包的范围。如果添加| less
到任一命令管道,则可以滚动输出。
您现在要做的是找出哪些软件包已被删除以及原因。 “为什么”部分大概如上所述,并且不能轻易解决。因此,您可能想首先删除/清除您的 imagemagick (执行apt-get remove <the-offending-package>
,然后继续apt-get autoremove
或apt-get remove <other-packages>
删除不再需要的依赖项;--purge
如果您还想删除配置文件,请小心附加到任一命令)。
然后您可以重新安装丢失的软件包。或者更确切地说,您想要强制重新安装您感兴趣的主要损坏的软件包,并像往常一样让 apt-get/aptitude 自动安装旧的依赖项。这样,琐碎的 lib* 依赖项就不会被标记为“手动安装”,这将阻止将来在必要时自动删除。
要重新安装软件包:apt-get install <package>
,如有必要,可以选择附加--reinstall
到显式重新解压软件包。
此外,您还可以查看man apt-get
并man aptitude
了解他们的选择。
祝你好运!