如何删除 debian 上的一堆旧包?

如何删除 debian 上的一堆旧包?

我正在运行 sid,并在尝试的过程中跨年级我的系统从 i386 到 amd64 我遇到了一些无法删除的古老软件包。一些背景:我从土豆开始,或者更早的时候就已经有了这个系统。

大约有一百个这样的包,所以我想要一个通用的或可编写脚本的答案。这是一个例子:

bminton:/var/cache/apt/archives# dpkg --purge libstdc++2.10-dev
(Reading database ... 1352516 files and directories currently installed.)
Removing libstdc++2.10-dev (1:2.95.4-27) ...
install-info: No dir file specified; try --help for more information.
dpkg: error processing package libstdc++2.10-dev (--purge):
 subprocess installed pre-removal script returned error exit status 1
Errors were encountered while processing:
 libstdc++2.10-dev

prerm 脚本 `/var/lib/dpkg/info/libstdc++2.10-dev.prerm 脚本包含以下内容:

#! /bin/sh -e



install-info --quiet --remove iostream-2.95

手动运行install-info --quiet --remove iostream-2.95出现如下错误:

install-info: No dir file specified; try --help for more information.

答案1

dpkg曾经有自己的install-info脚本来代替 GNU 脚本。一个有关更改的电子邮件给出了软件包的建议(已添加格式):

这些包应该将其信息文件放入 中/usr/share/info,并调用update-info-dir脚本(如果存在)(postinst 和 prerm)。他们可以建议/推荐信息包。

所以,我建议你做的是编辑(是的,编辑)/var/lib/dpkg/info/libstdc++2.10-dev.prerm并注释掉该install-info ...行。对出现该故障的其他包执行相同的操作。清除软件包后,手动运行update-info-dir.

顺便说一句:将来,升级后,您应该检查系统上过时/本地软件包的列表,如果不需要则清除它们。否则,您最终会得到非常过时的维护者脚本。

答案2

我通过制作自己的install-info命令并将其放在之前/usr/bin解决了这个问题$PATH。剧本是

#!/bin/sh
/usr/bin/install-info "$@" || true

答案3

我是 Linux 新手,所以这可能是一个糟糕的建议,但在尝试更安全的解决方案(更改 $PATH 等)之后,唯一对我有用的就是“删除”旧的安装信息(重命名它)。

> which install-info
/usr/bin/install-info
> mv /usr/bin/install-info install-info.bak

我想这迫使他使用新的。

此后升级非常顺利。

相关内容