我正在运行 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
我想这迫使他使用新的。
此后升级非常顺利。