Tidak dapat memperbaiki masalah, Anda telah memegang paket yang rusak

216

Setelah meningkatkan dari 10,04 ke 12,04 saya mencoba menginstal paket yang berbeda. Misalnya ia32-libs dan skype (4.0).

Ketika mencoba menginstal ini, saya mendapatkan pesan kesalahan 'Tidak dapat memperbaiki masalah, Anda telah menahan paket yang rusak'.

Output dari perintah:

sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Setelah menjalankan ini:

sudo dpkg --configure -a
foo@foo:~$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
trond
sumber
3
Mungkin membantu jika Anda menunjukkan kepada kami perintah yang sebenarnya Anda coba (seperti sudo apt-get install ia32-libs) dan output dari perintah itu. Juga, apakah sudo apt-get dist-upgradeada pembaruan yang tersedia?
thomasrutter
3
Saya tidak tahu apa yang salah dengan pertanyaan Anda, saya tidak melihat kesalahan yang sebenarnya, atau yang Anda jelaskan dalam judul Anda.
Braiam

Jawaban:

237

Pesan kesalahan tertentu itu mungkin menunjukkan bahwa Anda telah menyimpan paket, tetapi mungkin juga menunjukkan masalah yang berbeda.

Anda bisa mendapatkan daftar yang sebenarnya diadakan paket dengan:

dpkg --get-selections | grep hold

Jika tidak ada, atau tidak ada yang terlihat terkait, maka itu mungkin sesuatu yang lain. Periksa dengan cermat output dari perintah yang Anda coba ketika Anda mendapatkan pesan kesalahan, karena mungkin ada petunjuk lain dalam output penuh dari perintah itu, selain dari pesan kesalahan.

Metode pemecahan masalah lain mungkin menggunakan aptitude daripada apt-get untuk mencoba menginstal paket Anda:

sudo aptitude install <packagename>

Aptitude akan menyerah dengan lebih mudah, dan akan berusaha mencari solusi yang mungkin melibatkan memodifikasi paket lain. Mungkin memberi Anda lebih banyak penjelasan tentang masalah dan opsi untuk memperbaikinya.

Terkadang aptitude akan terlalu bersemangat untuk menghapus atau menurunkan paket dalam jumlah besar untuk memenuhi permintaan Anda, dalam hal ini mencoba kembali dengan -fperubahan prioritasnya dan membantunya menemukan solusi yang melibatkan menghapus / menurunkan paket lebih sedikit bahkan jika itu berarti tidak semua perubahan yang Anda minta dapat melanjutkan:

sudo aptitude -f install <packagename>
thomasrutter
sumber
6
Adakah yang tahu cara membuka paket? :-)
Eugene van der Merwe
6
Itu pertanyaan terpisah .
thomasrutter
59
Aptitude lebih bermanfaat bagi saya daripada apt-get, terima kasih atas petunjuknya.
szx
9
Satu hal yang perlu diperhatikan adalah bahwa aptitude dapat mempermudah kerusakan pada sistem Anda. Misalnya, jika apt-get gagal menginstal sesuatu karena dependensi yang saling bertentangan, ia akan menyerah. Namun, aptitude mungkin menawarkan untuk terus maju, tetapi hapus instalan sejumlah paket lain untuk memenuhi konflik tersebut - atau bahkan menurunkan versi paket. Anda hanya harus menyadari apa yang disarankan dan dilanjutkan hanya jika itu ide yang bagus.
thomasrutter
4
Paket "ditahan" tidak ada hubungannya dengan pesan, hanya saja konflik dihindari dengan menahannya (tidak menginstal, memutakhirkan, menurunkan, atau menghapus).
Braiam
33

Itu juga terjadi pada saya. Yang saya lakukan adalah sudo apt-get updatedan itu memperbaiki masalah saya. Semoga berhasil.

pengguna2292711
sumber
9

Saya mengalami skenario serupa tentang dependensi yang hilang. Dalam kasus saya, saya mencoba menginstal curl di ubuntu saucy salamander 13.10 ...

Kesalahan menyatakan bahwa dependensi memerlukan versi sebelumnya dari curl3 library.

Saya dapat menurunkan ke versi sebelumnya dengan mencoba menginstal curl menggunakan aptitude.

Ketika ia mencatat ketergantungan yang hilang, dan alasannya (diperlukan versi file perpustakaan sebelumnya), itu memberi saya beberapa opsi dalam cara merespons ... y// n/q

Yakan membatalkan instalasi, Nakan mencari opsi lain, dan Qhanya akan berhenti dan tidak melakukan apa-apa lagi, meninggalkan paket yang rusak.

Saya memilih N, dan itu memberi saya opsi untuk menurunkan versi file perpustakaan ke versi sebelumnya. Jadi itulah yang saya lakukan, dan ikal selesai menginstal tanpa kesalahan lagi.

  • Saya mungkin melihat ke dalam memutakhirkan file perpustakaan lagi setelah menginstal, tapi hei, sejauh ini bagus.
Peopleunit
sumber
9

Saya memiliki skenario yang sama dalam pemasangan baru 14,04, tanpa ada file yang terdaftar dpkg --get-selections | grep hold, dan tidak ada sukacita setelah sudo apt-get update.

Apa yang lakukan memperbaikinya bagi saya adalah sederhana

sudo apt-get autoremove

Ketika saya mencoba menginstal ulang paket gagal itu berfungsi dengan baik. Yay!

yochannah
sumber
4

Punya masalah yang sama, saya menjalankan perintah cek paket dari jawaban lain ( dpkg --get-selections | grep hold) dan melihat

tomcat7                                         deinstall
tomcat7-common                                  install

jadi saya menggunakan " apt-get remove tomcat7-common"

Kemudian saya dapat menginstal Tomcat 6 (saya menghapus Tomcat 7 dan menginstal Tomcat 6 seperti yang Anda lakukan).

Nollaig
sumber
Paket "sedang ditahan" tidak ada hubungannya dengan pesan, hanya saja konflik dihindari dengan menahannya (tidak menginstal, memutakhirkan, menurunkan versi, atau menghapus)
Braiam
tambahkan flag purge: apt-get remove --purge packet
Sergio Abreu
4

Ini adalah beberapa cara cepat dan mudah untuk memperbaiki you have held broken packageskesalahan.

  • Buka file sources.list Anda /etc/apt/sources.listdan periksa bahwa tidak ada sumber perangkat lunak untuk rilis Ubuntu yang berbeda dari rilis Ubuntu yang saat ini Anda gunakan. Jika Anda menemukan baris rilis yang salah di sources.list, buka file sources.list dengan sudoedit /etc/apt/sources.list, beri komentar pada baris yang salah di sources.list dengan mendahului mereka dengan #karakter, simpan file sources.list, dan jalankan sudo apt updateuntuk memperbarui daftar paket perangkat lunak yang tersedia.

  • Pilih opsi Perbaiki Paket yang Rusak di pengelola paket Synaptic. Jalankan perintah berikut untuk menginstal Synaptic.

    sudo apt update  
    sudo apt upgrade   
    sudo apt install synaptic  
    

    Buka Synaptic dan di Synaptic pilih Edit -> Perbaiki Paket Rusak dan kemudian ulangi Edit -> Perbaiki Paket Rusak untuk kedua kalinya.

    Dalam Synaptic di panel kiri klik tombol Filter Kustom yang ditandai oleh kursor mouse di screenshot di bawah ini. Dari daftar di sudut kiri atas pilih Patah . Di panel tengah akan terdaftar paket yang rusak yang masih perlu diperbaiki.

    tampilkan paket yang rusak di Synaptic

    Pilih paket yang rusak satu per satu. Pilih paket yang rusak, lalu buka terminal dan jalankan . Hasil dari perintah ini akan memberi tahu Anda apakah paket yang rusak itu diinstal dari repositori default Ubuntu atau dari beberapa sumber lain. Jika paket rusak diinstal dari beberapa sumber lain, mungkin paket itu dapat dihapus bersama dengan sumber perangkat lunaknya dan diganti dengan versi berbeda dari paket yang sama dari repositori default Ubuntu. Biasanya ini berarti memperbaiki paket yang rusak dengan menurunkan versi paket itu ke versi yang lebih lama.apt policy <package-name>

  • Jika Anda mendapatkan pesan kesalahan ini:

    Try 'apt-get -f install' with no packages (or specify a solution)  
    

    Jalankan perintah berikut:

    sudo apt update  
    sudo apt upgrade   
    sudo apt-get -f install   
    
  • Hapus secara manual paket yang rusak.

    1. Temukan paket Anda di /var/lib/dpkg/info

      ls -l /var/lib/dpkg/info | grep <package>
      
    2. Pindahkan folder paket ke lokasi lain.

      cd /tmp && sudo mkdir new-package-location  
      sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/    
      
    3. Jalankan perintah berikut:

      sudo dpkg --remove --force-remove-reinstreq <package>  
      

Jika semua metode ini tidak berfungsi, ada kemungkinan bahwa paket yang rusak disebabkan oleh sesuatu yang tertanam begitu dalam di sistem operasi sehingga tidak ada metode ini yang memiliki efek di dalamnya. Tempat pertama yang jelas untuk mencari "sesuatu" yang tertanam dalam ini ada di sumber perangkat lunak di /etc/apt/sources.list. Periksa file sources.list untuk melihat apakah mengandung baris non-standar yang mungkin menyebabkan kesalahan paket. File standar Ubuntu sources.list terlihat seperti file sources.list dalam jawaban ini .

Cara yang benar untuk menghapus baris yang mencurigakan dari sources.list adalah berkomentar dengan mendahului #karakter. Kemudian jalankan sudo apt updateuntuk menyegarkan daftar perangkat lunak yang tersedia.

karel
sumber
0

Bagi saya, tidak ada yang di atas berfungsi karena sistem saya tidak diperbarui. aku melakukannya

Home Key > Software Updater > Install

dan memperbarui sistem saya; setelah itu, saya bisa menginstal paket saya dengan normal apt.

nathangeorge1
sumber
0

Saya memiliki masalah yang sama menginstal ulang xsanesetelah ppainstalasi gagal . Seperti yang terjadi pada yochannah, "tidak ada file yang terdaftar dpkg --get-selections | grep hold, dan tidak ada sukacita setelah sudo apt-get update".

Petunjuk yang apt-getmemberi saya adalah

xsane : Depends: libsane (>= 1.0.24) but it is not going to be installed

Karena jawaban yochannah, saya merasa harus menghapus beberapa paket yang diinstal sebelumnya. Dan memang begitu, saya harus menghapus secara manual semua paket yang terkait sane, antara lain xsane-commondan libsane, yang masih diinstal sebagai ppaversi.

Karena itu, perhatikan apa yang sudah Anda pasang sebelumnya dan rapikan!

dicintai.Yesus
sumber