如何修复由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。
否则,我只看到两个选项,两者都令人不愉快:
-
编辑
/var/lib/dpkg/info/brmfc7340lpr.postrm
脚本,并注释掉调用/etc/init.d/lpd start
(或restart
或stop
)的行(例如,只需用/bin/true
替换它)/bin/true
)。 另一种选择是将exit 0
作为脚本中的第一个非注释行。 这将是我的最爱,但需要对编辑shell脚本有点信心。 -
安装
lpr
,清除brmfc6340lpr
软件包,清除lpr
:这需要一点注意,因为lpr
与默认的Ubuntu打印机假脱机系统CUPS冲突:一个。
sudo aptitude install lpr
(这将删除cups-bsd
和ubuntu-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 preinst
, postinst
, prerm
, postrm
。
这是一个糟糕的书面包可能造成破坏的例子。