我收到一个 apt-get 错误,上面写着
E: The package brmfc7340lpr needs to be reinstalled, but I can't find an archive for it.
brmfc7340lpr 是一个打印机驱动程序——它是一个本地 deb 文件。执行 dpkg 或 apt-get purge 不起作用,也不起作用apt-get install -f
。
如何从本地 deb 文件重新安装包?
输出:
box-name% sudo apt-get upgrade
[sudo] password for username:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: The package brmfc7340lpr needs to be reinstalled, but I can't find an archive for it.
box-name% sudo apt-get purge brmfc7340lpr
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: The package brmfc7340lpr needs to be reinstalled, but I can't find an archive for it.
box-name% sudo dpkg --purge brmfc7340lpr
dpkg: error processing brmfc7340lpr (--purge):
Package is in a very bad inconsistent state - you should
reinstall it before attempting a removal.
Errors were encountered while processing:
brmfc7340lpr
box-name% sudo dpkg --install brmfc7340lpr-2.0.2-1.i386.deb
Selecting previously deselected package brmfc7340lpr.
(Reading database ... 725204 files and directories currently installed.)
Preparing to replace brmfc7340lpr 2.0.2-1 (using .../brmfc7340lpr-2.0.2-1.i386.deb) ...
Unpacking replacement brmfc7340lpr ...
start: Unknown job: lpd
dpkg: warning: subprocess old post-removal script returned error exit status 1
dpkg - trying script from the new package instead ...
start: Unknown job: lpd
dpkg: error processing brmfc7340lpr-2.0.2-1.i386.deb (--install):
subprocess new post-removal script returned error exit status 1
start: Unknown job: lpd
dpkg: error while cleaning up:
subprocess new post-removal script returned error exit status 1
Errors were encountered while processing:
brmfc7340lpr-2.0.2-1.i386.deb
box-name% sudo apt-get install -f
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: The package brmfc7340lpr needs to be reinstalled, but I can't find an archive for it.
box-name%
答案1
您可以随时使用以下命令(重新)安装软件包dpkg
:
dpkg --install local-file.deb
为了进行“洁净室”安装,您可以先清除包,然后再次安装:
dpkg --purge brmfc7340lpr
dpkg --install brmfc7340lpr*.deb
--force-depends
如果其他包依赖于brmfc7340lpr
,您可能需要在清除期间添加选项。
更新:根据您发布的记录,似乎
brmfc7340lpr
无法(重新)安装该软件包,因为其删除后脚本出现错误。
这些文件存储在目录中/var/lib/dpkg/info
;对于每个包X
,可以有以下任意一个脚本:
X.postinst
跑步后该包已安装,例如,启动该包提供的服务。X.prerm
跑步前删除/清除软件包,例如,确保软件包提供的守护进程已停止。X.postrm
跑步后软件包已被删除,例如,向任何可选使用该软件包的服务发出信号,告知该软件包不再可用。(例如,打印机驱动程序软件包可能需要向 cpus/lpr 发出信号,以删除依赖于该特定驱动程序的打印机。)
现在,这个brmfc7340lpr
软件包似乎试图lpd
在删除时(重新)启动打印机守护程序,但这并不奏效,因为 Ubuntu 使用的是 CUPS:您一定要寻找兼容 CUPS 的打印机驱动程序——请参阅 Jorge Castro 的答案中的链接。(我认为这是软件包中的一个错误,因为它不应该lpd
无条件地重新启动服务,而应该重新加载它如果它已经在运行。
前进的最佳选择来自这个启动板答案:
ln -s /etc/init.d/cpus /etc/init.d/lpd
lpd
当搜索该服务时,这将有效地(重新)启动 CUPS 。
否则,我只看到两个选择,而且都相当不愉快:
编辑
/var/lib/dpkg/info/brmfc7340lpr.postrm
脚本,注释掉调用的行/etc/init.d/lpd start
(或restart
或stop
),(例如,只需将其替换为/bin/true
)。另一个选择是将其exit 0
作为脚本中的第一个非注释行。这是我最喜欢的,但需要对编辑 shell 脚本有一点信心。安装
lpr
、清除brmfc6340lpr
包、清除lpr
:这需要一点注意,因为它lpr
与默认的 Ubuntu 打印机后台处理系统 CUPS 冲突:a.
sudo aptitude install lpr
(这将消除cups-bsd
和ubuntu-desktop
副作用)b.
sudo aptitude purge brmfc7340lpr lpr
(现在就可以工作了)c.
sudo aptitude install cups-bsd ubuntu-desktop
(将系统恢复到原始状态)
答案2
Riccardo 的解决方案应该有效,我猜问题出在这里:
start: Unknown job: lpd
猜测 1:看起来 deb 正在尝试重新启动未运行且出错的服务。尝试lpr
从存储库安装包,然后安装 deb,看看是否可行。
猜测 2:这听起来像您正在尝试从网站为兄弟 7340 打印机安装 deb:这一页如果你想把它分成另一个问题,这可能是一个很好的起点。
答案3
实际上,我也遇到了同样的问题。原来我遵循了一些不相关的信息,并创建了一个/etc/init.d/lpd
文件作为软链接。/etc/init.d/cups
脚本.postrm
检查 lpd,如果存在,则尝试启动该服务。在我删除 init.d 目录中的软链接 lpd 文件后,软件包的安装和删除恢复正常。
答案4
这里的问题似乎是该软件包已成功安装一半,但现在其维护脚本全部失败(由于无法启动 lpd 服务)。
您应该能够通过编辑文件/var/lib/dpkg/info/brmfc7340lpr.postrm
并注释掉(通过在行#
首添加)尝试启动 lpd 的行(或注释掉所有内容)来解决这个问题。然后您应该能够运行dpkg --configure -a
以正确安装软件包,然后才能将其删除。
您可能需要编辑更多的软件包维护者脚本才能删除该软件包 - 它们都将在 中/var/lib/dpkg/info/
,并且它们将被命名为其中brmfc7340lpr.X
可以X
是preinst
、、、postinst
之一。prerm
postrm
这是一个说明编写不当的软件包可能造成何种程度的破坏的例子。