Как исправить dpkg, сломанный драйвером Brother MFC-7340 deb

9

Я получаю 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% 
Роман А. Тайчер
источник
Вы можете переименовать свой вопрос. Это делает вашу проблему слишком общей. Ваш реальный вопрос не в том, как переустановить какой-либо локальный deb, а в том, как решить очень специфическую проблему.
Andrewsomething

Ответы:

13

Вы всегда можете (пере) установить пакет, используя 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-совместимый драйвер принтера - см. Ссылку в ответе Хорхе Кастро. (Я думаю, что это ошибка в пакете, поскольку она не должна lpdбезоговорочно перезапускать службу, а просто перезагрузить ее, если она уже запущена .)

Наилучший вариант продвижения вперед - это ответ на панели запуска :

ln -s /etc/init.d/cpus /etc/init.d/lpd

Это будет эффективно (повторно) запускать CUPS, когда lpdвместо этого будет выполняться поиск службы.

В остальном я вижу только два варианта, оба довольно неприятные:

  1. Отредактируйте /var/lib/dpkg/info/brmfc7340lpr.postrmсценарий и закомментируйте вызывающую строку /etc/init.d/lpd start (или restartили stop) (например, просто замените ее на /bin/true). Другой вариант - просто поместить exit 0первую строку без комментариев в скрипт. Это было бы моим любимым, но требует немного уверенности в редактировании сценариев оболочки.

  2. Установка lpr, очистка brmfc6340lprпакета, очистка lpr: это требует некоторого внимания, поскольку lprконфликтует с системой спулинга принтера Ubuntu по умолчанию CUPS:

    а. sudo aptitude install lpr(это удалит cups-bsdи ubuntu-desktopкак побочный эффект)

    б. sudo aptitude purge brmfc7340lpr lpr(должно работать сейчас)

    с. sudo aptitude install cups-bsd ubuntu-desktop(восстановить систему в исходное состояние)

Риккардо Мурри
источник
dpkg - установка не работает
Роман А. Тайчер
1
@Roman Какое сообщение об ошибке вы получаете? Имеет ли --purgeпервый и потом --installработать?
Риккардо Мурри
@Roman обновлен некоторыми конкретными инструкциями, которые могут помочь. Я согласен с комментарием Andrewsomething, что этот вопрос больше не выглядит общим и должен быть переименован.
Риккардо Мурри
1
В итоге я временно переименовал lpd в nlpdn, чтобы установить его.
Роман А. Тайчер
5

Решение Риккардо должно работать, я полагаю, что проблема заключается в следующем:

start: Unknown job: lpd

Угадайте 1: похоже, что deb пытается перезапустить сервис, который не работает и выдает ошибку. Попробуйте установить lprпакет из репозиториев, а затем установить deb и посмотреть, работает ли он.

Угадайте 2: Похоже, вы пытаетесь установить deb с веб-сайта для принтера Brother 7340: эта страница может быть хорошей отправной точкой, если вы хотите разделить ее на другой вопрос.

Хорхе Кастро
источник
/etc/init.d/lpd начало запуска: неизвестная работа: lpd
Роман А. Тайчер
3

Собственно, я столкнулся с той же проблемой. Оказывается, я следовал за некоторой не относящейся к делу информацией и создал /etc/init.d/lpdфайл как мягкую ссылку /etc/init.d/cups . .postrmСценарий проверяет lpd и, если он существует, пытается запустить службу. После того, как я удалил файл lpd с мягкой ссылкой в ​​каталоге init.d, установка и удаление пакета вернулись к нормальному состоянию.

Matt
источник
2

Проблема здесь заключается в том, что пакету удалось наполовину установить себя, но теперь все его сценарии сопровождающего не работают (из-за невозможности запустить службу lpd).

Вы должны решить эту проблему, отредактировав /var/lib/dpkg/info/brmfc7340lpr.postrmфайл и закомментировав (добавив #в начало строки) строку, которая пытается запустить lpd (или просто закомментировать все). После этого вы сможете запустить, dpkg --configure -aчтобы правильно установить пакет, прежде чем сможете его удалить.

Вы , возможно , потребуется отредактировать несколько сценариев пакетов сопровождающего для того , чтобы удалить пакет - все они будут находиться /var/lib/dpkg/info/, и они будут называться что - то вроде , brmfc7340lpr.Xгде Xможет быть один из preinst, postinst, prerm, postrm.

Это пример хаоса, который может нанести плохо написанный пакет.

RAOF
источник