在某个时候,我的一台服务器停止写入其网络附加存储设备(我推测),导致一周或更长时间的软件包最终处于“半安装”状态。
奇怪的是,apt-get
没有报告任何问题,并且我能够按预期安装最新的更新。
当我查看日志(dpkg.log*
)时才发现有更多包处于这种状态。
我需要一种方法来遍历 apt-get 或 dpkg 中的所有包,并执行操作apt-get install <packagename> --reinstall
。
除非有其他办法来收拾这个烂摊子。
有人知道我该怎么做吗?或者有人对如何解决此问题有其他想法吗?
答案1
尝试一下sudo dpkg --configure -a
。这应该会自动修复这些包。
如果不起作用,请尝试运行sudo apt-get install -f
然后sudo dpkg --configure -a
再次运行
如果你真的 想要检查每个包并重新安装,
请记住,这绝对不是理想的解决方案。
仅当 sudo dpkg --configure -a
命令不起作用。
这将花费很长很长时间,因为它必须再次下载所有软件包并安装它们:
for pkg in `dpkg --get-selections | awk '{print $1}' | egrep -v '(dpkg|apt|mysql|mythtv)'` ; do apt-get -y --force-yes install --reinstall $pkg ; done
答案2
到普拉纳夫·马拉特回答:
--force-yes
Force yes; this is a dangerous option that will cause apt to
continue without prompting if it is doing something potentially
harmful. It should not be used except in very special situations.
Using force-yes can potentially destroy your system! Configuration
Item: APT::Get::force-yes. This is deprecated and replaced by
--allow-downgrades, --allow-remove-essential,
--allow-change-held-packages in 1.1.
-y, --yes, --assume-yes
Automatic yes to prompts; assume "yes" as answer
to all prompts and run non-interactively.
If an undesirable situation, such as changing a held package,
trying to install a unauthenticated package
or removing an essential package occurs then apt-get will abort.
Configuration Item: APT::Get::Assume-Yes.
答案3
我在 Linux Mint 上安装 Opera 网络浏览器后遇到了这个问题。说真的,千万别这么做。我不确定让当前的 Opera 软件包进入存储库的人在耍什么花招,但显然他们在这样做之前没有针对较旧但仍有效的 LTS(长期支持)版本的“受支持”的基于 Debian 的操作系统进行测试。
如果您负责的系统发生这种情况 - 更新尝试返回“错误代码 1”且由于垃圾损坏而未进行任何更改 - 这是一个有效的简单修复方法。打开终端并执行以下操作:
cd /var/lib/dpkg/信息/
这将带您进入 dpkg 存储与已安装软件相关的配置文件的目录。然后执行以下操作:
ls | grep -i opera
(将“opera”替换为破坏包管理器的任何包)
此命令列出了名称中带有“Opera”或等的每个文件。查看它们:是否列出了任何与 Opera(或其他)不相关的内容?如果是,请注意并一次只删除一个“有问题”的软件包的文件(使用它们的全名),以避免破坏具有类似名称的其他东西。但是,如果您搜索到的所有结果显然都属于 borken 软件包,请执行以下操作:
苏多尔姆歌剧
...用任何垃圾替换“opera”以禁用您的包管理器。
结果:半安装的损坏软件包将“永远”留在您的硬盘上,这是对所有美好和神圣事物的极大侮辱 - 但除了浪费几 MB 的驱动器空间外,不会造成任何实际损害。除非您进入 /bin 目录并手动删除它们。无论哪种方式,您现在都可以正常更新已安装的软件、安装新软件包等,因为您的软件包管理器不再知道失败的软件包及其损坏的部分曾经存在过。
答案4
sudo dpkg --configure -a
对我来说似乎工作正常,但sudo apt-get install -f
随后遇到与其他所有问题相同的 [apt] 问题,即 plymouth-theme-ubuntustudio 将被删除,grub 开始更新,然后出现错误或太多错误。它停止了,系统自“?”以来一直这样。
这些错误包括:
cfg 文件的第 266 行有语法错误,我无法确定我认为是该文件的“###”是否是注释标记,这意味着它肯定不是该文件,
plymouth-theme-ubuntustudio 似乎只安装了一半,并且存在一些我无法彻底解决的 efi 问题……
我正在考虑重新安装作为解决这个问题的最简单方法,但更愿意找到一个更简单的撤消方法,希望只要你知道发生了什么事情,这是一件容易的事,如果可以避免的话,不要经历一个更长的过程。
当前除了更新之外没有其他 apt-get 功能。