Bagaimana cara menghapus / menginstal paket yang belum diinstal sepenuhnya?

62

Saya pergi untuk menginstal bsnes hari yang lalu dan untuk alasan apa pun instalasi gagal. Sekarang, saya tidak dapat memperbarui, menginstal paket baru, atau pada dasarnya melakukan perintah apt-get karena mereka semua mencoba untuk memproses paket yang rusak ini dan gagal. Mencoba untuk menginstal paket baru juga hanya akan merusak nasib yang sama. Kesalahan yang saya dapatkan adalah:

Setting up google-chrome-stable (33.0.1750.152-1) ...
/var/lib/dpkg/info/google-chrome-stable.postinst: 124: /var/lib/dpkg/info/google-chrome-stable.postinst: update-alternatives: not found
dpkg: error processing google-chrome-stable (--configure):
 subprocess installed post-installation script returned error exit status 127
Setting up bsnes (0.088-7) ...
/var/lib/dpkg/info/bsnes.postinst: 5: /var/lib/dpkg/info/bsnes.postinst: update-alternatives: not found
dpkg: error processing bsnes (--configure):
 subprocess installed post-installation script returned error exit status 127
Errors were encountered while processing:
 google-chrome-stable
 bsnes
E: Sub-process /usr/bin/dpkg returned an error code (1)

Saya telah mencari di Google dan di sini di Ask Ubuntu tetapi belum menemukan solusi yang berfungsi. Perbaikan yang disarankan adalah menjalankan yang berikut ini:

sudo apt-get clean && sudo apt-get autoremove
sudo apt-get -f install
sudo dpkg --configure -a

Namun ini tidak berhasil. Perintah apt-get semua gagal dengan kesalahan yang sama seperti di atas dan perintah dpkg tidak membantu. Hal lain yang sering mereka sarankan untuk membersihkannya melalui Synaptic atau baris perintah, yang juga gagal.

Terima kasih untuk bantuannya

Bijak
sumber

Jawaban:

60

Untuk pengguna tingkat lanjut, gunakan dengan risiko Anda sendiri.

Menurut pesan kesalahan berikut:

subprocess installed post-installation script returned error exit status 127

Anda mungkin ingin mengedit /var/lib/dpkg/info/[package_name].postinstdan mengomentari semuanya (atau lebih baik lagi, cobalah memahaminya dan mengidentifikasi masalah), lalu coba apt-getlagi.

Perhatikan bahwa meskipun dalam pertanyaan khusus ini, pesannya berkenaan dengan "pasca instalasi", namun pesan itu bisa saja menyebutkan misalnya "pra-penghapusan" atau "pasca-penghapusan" (dalam hal ini ekstensi file yang akan diedit telah .prermatau .postrm) .

Skippy le Grand Gourou
sumber
2
Sebenarnya ini adalah metode terbaik. Menginstal ulang dpkgtidak selalu membantu.
Danatela
2
Terima kasih banyak. Saya harus memperbaiki /var/lib/dpkg/info/[package_name].prermtetapi posting Anda memberi saya arah yang benar. Tentunya untuk pengguna tingkat lanjut, ini berisiko !
sмurf
Jawaban terbaik Terima kasih! Memperbaiki .prermdan .postrmfile memperbaiki masalah.
fuser
42

Selain dari yang sudah Anda posting, ada beberapa perintah lain yang bisa membantu.

  • Autoclean menghapus repositori lokal dari file paket yang diambil.

    sudo apt-get autoclean
    
  • Instalasi paksa / penghapusan paket. ☠Gunakan dengan hati-hati

    sudo apt-get --force-yes install <pkgname>
    

    dan

    sudo apt-get --force-yes remove <pkgname>
    

Juga seperti biasa, Anda dapat menggunakan dpkguntuk menginstal, menghapus, dan membersihkan paket.

  • Pasang

    sudo dpkg -i <pkgname>
    
  • Menghapus

    sudo dpkg -r <pkgname>
    
  • Membersihkan

    sudo dpkg -P <pkgname>
    
Pengguna Terdaftar
sumber
Perintah dpkg dan apt-get --force-yes mengembalikan kesalahan yang sama seperti yang saya dapatkan sebelumnya. Autoclean tidak mengembalikan kesalahan tetapi juga sepertinya tidak melakukan apa-apa dengan dua paket yang rusak.
Bijak
@ Bijak Anda pasti telah mencoba membersihkan bsnes. Apakah Anda?
Pengguna Terdaftar
Yap, dengan dpkg -P, pembersihan apt-get, dan dengan Synaptic
Bijak
Poskan output daridpkg -l |grep bsnes
Pengguna Terdaftar
rF bsnes 0.088-7 amd64 Emulator SNES / SuperFamicom Akurat
Bijak
27

Jadi, setelah lebih banyak googling dan sangat hati-hati membaca pesan kesalahan lagi sepertinya dpkgperlu diinstal ulang.

sudo apt-get install --reinstall dpkg

Apa yang memberi tahu bahwa ini adalah masalahnya (jika ada yang mencari dan melihat ini) adalah yang update-alternatives: not foundada di pesan kesalahan. Segera setelah dpkg diinstal ulang, paket-paket lainnya melanjutkan untuk menginstal secara otomatis.

Bijak
sumber
3
Mengapa satu-satunya jawaban yang benar (dan diterima) sejauh ini dalam daftar dengan kurang dari ⅓ suara dari jawaban teratas? +1
David Foerster
untuk satu: karena tidak berfungsi untuk paket-paket yang tidak dapat lagi diunduh "Instalasi ulang linux-image-extra-4.4.0-65-generik tidak mungkin, tidak dapat diunduh."
Joe
3
Ini mungkin solusi yang paling tidak mungkin bagi siapa pun yang datang ke sini berdasarkan judul pertanyaan. Tetapi ada banyak alasan orang bisa berakhir dengan masalah ini, jadi akan ada banyak solusi yang diusulkan "ini bekerja untuk saya".
Michael
Ini sebenarnya tidak berhasil.
NelsonGon
15

Anda dapat menghapus file paket di /var/lib/dpkg/info/jalur ini dan memperbarui sumbernya.

sudo rm /var/lib/dpkg/info/[package_name].*
sudo dpkg --configure -a
sudo apt-get update

Kemudian, instal ulang paket Anda sudo apt-get install [package_name]

Dokter

Hamed
sumber
4
Sebenarnya Anda sebaiknya menggunakan sudo rm /var/lib/dpkg/info/[pakege_name].*. Kalau tidak, Anda juga akan menghapus paket yang dimulai dengan nama yang sama. Bagaimanapun, terima kasih untuk ini, itu adalah satu-satunya solusi yang bekerja untuk saya
smac89
13

Jika semuanya gagal. Apa yang saya lakukan adalah saya pertama kali mengubah direktori menjadi:

cd /var/lib/dpkg/info

kemudian saya menghapus semuanya dengan .postinst:

sudo rm *.postinst

kemudian perbarui repositori

sudo apt-get update

kemudian semuanya kembali normal ketika saya melakukannya:

sudo apt-get --force-yes install openjdk-7-jre-headless
Mike B
sumber
6
Ini menghapus semua skrip pasca-instalasi bukan hanya dari paket yang terpengaruh. Agak terlalu bersemangat menurut saya. -1
David Foerster
Jika mudah untuk mengidentifikasi dan menghapus hanya skrip post-install tertentu yang menyebabkan masalah, ini bisa menjadi cara yang sangat mudah untuk menghapus paket yang gagal.
Ian Mackinnon
setelah mimpi buruk dengan masalah kernal mengganti nama .postinst dari hanya kernel yang terpengaruh memperbaiki masalah
Andy
5

Jika semuanya gagal, Anda dapat menghapus paket secara manual dpkg. Berlari sudo dpkg -P bsnesharus membersihkan bsnes.

saiarcot895
sumber
2
dpkg: error processing package libcuda1-340 (--purge): package is in a very bad inconsistent state; you should reinstall it before attempting a removal
endolith
2

Dalam kasus saya apt-get install -fberhasil. Saya menginstal komunitas mysql-workbench

Sebelumnya sudah dicoba apt autoclean

Saya melihat kesalahan dpkg karena beberapa dependensi yang hilang yang dapat diperbaiki dengan menginstal dalam mode paksa (menginstal dependensi)

Vikas Avnish
sumber
0
sudo apt-get install -f --reinstall coreutils init-system-helpers

Setelah berjalan di atas, Anda dapat menginstal / meningkatkan / menghapus / membersihkan seperti biasa untuk semua paket.

Uddhav Gautam
sumber