Cara memperbaiki dpkg yang rusak oleh driver deb Brother MFC-7340

9

Saya mendapatkan kesalahan apt-get yang mengatakan

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

Brmfc7340lpr adalah driver printer - ini adalah file deb lokal. Melakukan pembersihan dpkg atau apt-get tidak bekerja, begitu juga tidak apt-get install -f.

Bagaimana cara menginstal ulang paket dari file deb lokal?

Keluaran:

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% 
Roman A. Taycher
sumber
Anda mungkin ingin mengubah nama pertanyaan Anda. Itu membuat masalah Anda terdengar agak terlalu umum. Pertanyaan Anda sebenarnya bukan bagaimana menginstal ulang sembarang deb lokal, tetapi bagaimana menangani masalah yang sangat spesifik.
andrewsomething

Jawaban:

13

Anda selalu dapat (kembali) menginstal paket menggunakan dpkg:

dpkg --install local-file.deb

Untuk membuat instalasi "ruang bersih", Anda dapat membersihkan paket dan menginstalnya kembali:

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

Anda mungkin perlu menambahkan opsi --force-dependsselama pembersihan, jika beberapa paket lain tergantung brmfc7340lpr.

Pembaruan: Berdasarkan pada transkrip yang Anda poskan, tampaknya brmfc7340lprpaket itu tidak dapat diinstal ulang karena skrip pasca-penghapusannya tidak ada.

File-file tersebut disimpan dalam direktori /var/lib/dpkg/info; untuk setiap paket X, bisa ada salah satu dari skrip ini:

  • X.postinstjalankan setelah paket diinstal, misalnya, untuk memulai layanan yang disediakan oleh paket.

  • X.prermjalankan sebelum mengeluarkan / membersihkan paket, mis., untuk memastikan bahwa daemon yang disediakan oleh paket dihentikan.

  • X.postrmdijalankan setelah paket dihapus, mis., untuk memberi sinyal layanan apa pun secara opsional menggunakan paket yang tidak lagi tersedia. (Misalnya, paket driver printer mungkin ingin memberi sinyal cpus / lpr untuk menghapus printer tergantung pada driver spesifik itu.)

Sekarang, brmfc7340lprpaket ini tampaknya mencoba (memulai kembali) lpd daemon printer setelah dihapus, yang tidak akan berfungsi karena Ubuntu menggunakan CUPS sebagai gantinya: Anda harus mencari driver printer yang kompatibel dengan CUPS - lihat tautan dalam jawaban Jorge Castro. (Saya pikir ini adalah bug dalam paket, karena seharusnya tidak me-restart lpdlayanan tanpa syarat, tetapi hanya memuatnya kembali jika sudah berjalan .)

Pilihan terbaik untuk maju datang dari jawaban launchpad ini :

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

Ini akan secara efektif (kembali) memulai CUPS ketika lpdlayanan sebaliknya dicari.

Kalau tidak, saya hanya melihat dua opsi, keduanya agak tidak menyenangkan:

  1. Edit /var/lib/dpkg/info/brmfc7340lpr.postrmskrip, dan komentari baris yang meminta /etc/init.d/lpd start (atau restartatau stop), (mis. Ganti saja dengan /bin/true). Pilihan lain adalah hanya menempatkan exit 0sebagai baris non-komentar pertama dalam skrip. Ini akan menjadi favorit saya, tetapi membutuhkan sedikit kepercayaan diri dengan mengedit skrip shell.

  2. Instal lpr, bersihkan brmfc6340lprpaket, bersihkan lpr: ini memerlukan sedikit perhatian karena lprkonflik dengan sistem spooling printer default Ubuntu CUPS:

    Sebuah. sudo aptitude install lpr(ini akan menghapus cups-bsddan ubuntu-desktopsebagai efek samping)

    b. sudo aptitude purge brmfc7340lpr lpr(harus bekerja sekarang)

    c. sudo aptitude install cups-bsd ubuntu-desktop(mengembalikan sistem ke keadaan semula)

Riccardo Murri
sumber
dpkg --instal tidak berfungsi
Roman A. Taycher
1
@Roman Apa pesan kesalahan yang Anda dapatkan? Apakah --purgepertama dan kemudian --installbekerja?
Riccardo Murri
@Roman diperbarui dengan beberapa instruksi khusus yang mungkin membantu. Saya setuju dengan komentar andrewsomething bahwa ini tidak lagi terlihat sebagai pertanyaan umum dan harus diganti namanya.
Riccardo Murri
1
Saya akhirnya mengubah nama lpd menjadi nlpdn untuk sementara waktu untuk menginstalnya.
Roman A. Taycher
5

Solusi Riccardo harus berhasil, saya kira masalahnya ada di sini:

start: Unknown job: lpd

Tebak 1: Sepertinya deb mencoba untuk memulai kembali layanan yang tidak berjalan dan tidak berfungsi. Coba instal lprpaket dari repositori dan kemudian instal deb dan lihat apakah itu berhasil.

Tebak 2: Sepertinya Anda mencoba memasang deb dari situs web untuk printer saudara 7340: Halaman ini mungkin merupakan titik awal yang baik jika Anda ingin membaginya menjadi pertanyaan lain.

Jorge Castro
sumber
/etc/init.d/lpd mulai mulai: Pekerjaan tidak dikenal: lpd
Roman A. Taycher
3

Sebenarnya, saya mengalami masalah yang sama. Bergantian keluar Saya mengikuti beberapa informasi yang tidak relevan dan menciptakan /etc/init.d/lpdberkas sebagai softlink untuk /etc/init.d/cups The .postrmScript cek untuk lpd dan jika ada, mencoba untuk memulai layanan. Setelah saya menghapus file lpd softlink di direktori init.d, instalasi dan penghapusan paket kembali normal.

Mat
sumber
2

Masalahnya di sini tampaknya bahwa paket telah berhasil mendapatkan dirinya sendiri setengah terinstal, tetapi sekarang skrip pengelola semuanya adalah faililng (karena tidak dapat memulai layanan lpd).

Anda harus dapat menyelesaikan ini dengan mengedit /var/lib/dpkg/info/brmfc7340lpr.postrmfile dan mengomentari (dengan menambahkan #ke awal baris) baris yang mencoba memulai lpd (atau hanya berkomentar semuanya). Anda kemudian dapat menjalankan dpkg --configure -auntuk mendapatkan paket yang diinstal dengan benar sebelum Anda dapat menghapusnya.

Anda mungkin perlu mengedit lebih dari script paket maintainer untuk menghapus paket - mereka semua akan berada di /var/lib/dpkg/info/, dan mereka akan diberi nama sesuatu seperti brmfc7340lpr.Xmana Xdapat menjadi salah satu dari preinst, postinst, prerm, postrm.

Ini adalah contoh dari jenis kekacauan yang dapat ditimbulkan oleh paket yang ditulis dengan buruk.

RAOF
sumber