如何修复由Brother MFC-7340 deb驱动程序破坏的dpkg

我得到了一个apt-get错误

E: The package brmfc7340lpr needs to be reinstalled, but I can't find an archive for it.

brmfc7340lpr是一个打印机驱动程序 – 它是一个本地deb文件。 执行dpkg或apt-get清除不起作用, 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% 

您可以使用dpkg始终(重新)安装包:

 dpkg --install local-file.deb 

为了进行“洁净室”安装,您可以先清除包,然后再重新安装:

 dpkg --purge brmfc7340lpr dpkg --install brmfc7340lpr*.deb 

如果某些其他包依赖于brmfc7340lpr ,则可能需要在清除期间添加选项--force-depends

更新:根据您发布的脚本,似乎无法(重新)安装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。

否则,我只看到两个选项,两者都令人不愉快:

  1. 编辑/var/lib/dpkg/info/brmfc7340lpr.postrm脚本,并注释掉调用/etc/init.d/lpd start (或restartstop )的行(例如,只需用/bin/true替换它) /bin/true )。 另一种选择是将exit 0作为脚本中的第一个非注释行。 这将是我的最爱,但需要对编​​辑shell脚本有点信心。

  2. 安装lpr ,清除brmfc6340lpr软件包,清除lpr :这需要一点注意,因为lpr与默认的Ubuntu打印机假脱机系统CUPS冲突:

    一个。 sudo aptitude install lpr (这将删除cups-bsdubuntu-desktop作为副作用)

    sudo aptitude purge brmfc7340lpr lpr (现在应该工作)

    C。 sudo aptitude install cups-bsd ubuntu-desktop (将系统恢复到原始状态)

Riccardo的解决方案应该有效,我猜测问题在于:

start: Unknown job: lpd

猜猜1:看起来deb正试图重启一个没有运行且出错的服务。 尝试从存储库安装lpr软件包,然后安装deb,看看是否有效。

猜猜2:听起来你正试图从网站为兄弟7340打印机安装一个deb:如果你想将它分成另一个问题, 这个页面可能是一个很好的起点。

实际上,我遇到了同样的问题。 结果我跟踪了一些不相关的信息,并创建了一个/etc/init.d/lpd文件作为/etc/init.d/lpd的软链接.postrm脚本检查lpd,如果存在,尝试启动该服务。 删除init.d目录中的softlinked lpd文件后,软件包的安装和删除恢复正常。

这里的问题似乎是软件包已经设法让自己半安装,但现在它的维护者脚本都是faililng(由于无法启动lpd服务)。

您应该能够通过编辑/var/lib/dpkg/info/brmfc7340lpr.postrm文件并注释掉(通过在行的开头添加# )来尝试启动lpd(或只是注释掉)一切)。 然后,您应该能够运行dpkg --configure -a以正确安装软件包,然后才能将其删除。

您可能需要编辑更多的包维护者脚本以删除包 – 它们都将在/var/lib/dpkg/info/ ,并且它们的名称将类似于brmfc7340lpr.X ,其中X可以是一个of preinstpostinstprermpostrm

这是一个糟糕的书面包可能造成破坏的例子。