"Paket-paket berikut telah disimpan kembali:" Mengapa dan bagaimana cara menyelesaikannya?

877

Saya baru saja menambahkan repositori PPA untuk versi pengembangan GIMP, tetapi saya mendapatkan kesalahan ini:

$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
  gimp gimp-data libgegl-0.0-0 libgimp2.0

Mengapa dan bagaimana saya bisa menyelesaikannya sehingga saya dapat menggunakan versi terbaru daripada yang saya miliki sekarang?

jfoucher
sumber
17
Sebenarnya, saya akan mengatakan itu adalah peringatan, bukan kesalahan.
Kazark

Jawaban:

905

Menurut sebuah artikel di debian-administration.org ,

Jika dependensi telah berubah pada salah satu paket yang telah Anda instal sehingga paket baru harus diinstal untuk melakukan upgrade maka itu akan terdaftar sebagai "disimpan-kembali".

Solusi hati-hati 1:

Per jawaban Pablo , Anda dapat menjalankan sudo apt-get --with-new-pkgs upgrade, dan itu akan menginstal paket yang disimpan kembali.

Ini bermanfaat untuk tidak menandai paket yang disimpan sebagai "diinstal secara manual," yang dapat memaksa lebih banyak intervensi pengguna di telepon (lihat komentar).

Jika solusi Pablo cocok untuk Anda, harap perbarui. Jika tidak, beri komentar apa yang salah.

Solusi hati-hati 2:

Solusi yang berhati-hati adalah berjalan sudo apt-get install <list of packages kept back>. Dalam kebanyakan kasus ini akan memberikan paket yang disimpan kembali apa yang mereka butuhkan untuk berhasil ditingkatkan.

Solusi agresif:

Solusi yang lebih agresif adalah menjalankan sudo apt-get dist-upgrade, yang akan memaksa pemasangan dependensi baru tersebut.

Tetapi dist-upgrade bisa sangat berbahaya . Tidak seperti peningkatan, ini dapat menghapus paket untuk menyelesaikan situasi ketergantungan yang kompleks. Tidak seperti Anda, APT tidak selalu cukup pintar untuk mengetahui apakah penambahan dan pemindahan ini dapat mendatangkan malapetaka.

Jadi jika Anda menemukan diri Anda di tempat di mana "solusi hati-hati" tidak berfungsi, dist-upgrade mungkin berhasil ... tetapi Anda mungkin lebih baik belajar sedikit lebih banyak tentang APT dan menyelesaikan masalah ketergantungan "dengan tangan" dengan menginstal dan menghapus paket berdasarkan kasus per kasus.

Anggap saja seperti memperbaiki mobil ... jika Anda punya waktu dan berguna dengan kunci pas, Anda akan mendapatkan ketenangan pikiran dengan membaca dan melakukan perbaikan sendiri. Jika Anda merasa beruntung, Anda dapat mengantar mobil Anda dengan sepupu Anda dist-upgradedan berharap dia tahu barang-barangnya.

Michael Crenshaw
sumber
180
Karena ini adalah kebutuhan jawaban yang diterima, itu benar-benar perlu diperbarui untuk memperingatkan tentang penggunaan dist-upgradepada sistem yang stabil seperti yang ditunjukkan oleh banyak jawaban lain di bawah ini. Secara pribadi saya pikir ada jawaban yang lebih sederhana / lebih aman yang perlu dipromosikan: apt-get install <list of pkgs>
Cas
7
Cas, haruskah saya menambahkan bahwa itu bisa berbahaya untuk menjalankan dist-upgrade pada sistem yang stabil? Kenapa itu berbahaya? (Sejujurnya saya tidak tahu apa-apa.)
Michael Crenshaw
17
Ada jawaban Server Fault yang menjelaskan dist-upgrade sedikit lebih detail. Saya pikir itu hanya layak mengklarifikasi (tidak berbahaya seperti itu) bahwa itu dapat memutakhirkan seluruh sistem yang mungkin melampaui apa yang diharapkan / diinginkan pengguna yaitu dalam contoh OP mereka bertanya-tanya mengapa gimp ditahan.
Cas
19
Harap dicatat bahwa sudo apt-get dist-upgradejuga dapat menghapus paket. Konsekuensinya, yang terbaik adalah selalu memeriksa daftar perubahan yang akan dibuat sebelum menyetujui mereka, ketika berjalan sudo apt-get dist-upgrade.
Eliah Kagan
6
@ ElliKagan Bolehkah saya menambahkan bahwa bahkan apt-get upgradedapat menghapus paket? Itu akan selalu melakukan itu ketika akan ada konflik versi sebaliknya. Pikirkan llvm3.6vs. llvm3.6v5(dengan arti "v5" yang dikompilasi gcc 5). Keduanya tidak dapat hidup berdampingan , hanya keduanya yang dapat disimpan dalam sistem. Jadi ya dist-upgrademungkin menghapus beberapa paket juga, tetapi bukan hanya dist-upgradeitu yang akan melakukan ini; dalam keadaan tertentu, upgradeakan, juga.
syntaxerror
500

Setiap kali Anda menerima apt-get upgradepesan dari perintah

The following packages have been kept back:

kemudian untuk memutakhirkan satu atau semua paket yang disimpan, tanpa melakukan pemutakhiran distribusi (ini yang dist-upgradedilakukan, jika saya ingat dengan benar) adalah dengan mengeluarkan perintah:

apt-get install <list of packages kept back>

ini akan menyelesaikan masalah yang disimpan dan akan meminta untuk menginstal paket tambahan, dll. seperti yang dijelaskan oleh jawaban lain.

pengguna88285
sumber
3
Ketika paket disimpan kembali dengan cara ini dan saya secara manual apt-get upgrade <list of packages>, jika saya ulang apt-get upgrade, itu akan mencantumkan paket yang dimaksud sebagai tidak lagi diperlukan dan yang dapat saya gunakan apt autoremoveuntuk menghapusnya, yang saya lakukan, dan yang terakhir apt-get upgradedan mereka tidak lagi terdaftar sebagai terus kembali ... Sangat aneh. Adakah pikiran?
cram2208
Apakah apt-get installjuga menghapus paket ketika diperlukan untuk menyelesaikan situasi ketergantungan degil, atau apakah Anda harus menjalankan apt-get removeperintah terpisah untuk menyelesaikan bagian proses upgrade?
Michael Crenshaw
@ cram2208 Saya percaya itu perilaku yang diharapkan. Paket-paket yang "diinstal secara otomatis dan [...] tidak lagi diperlukan" adalah versi sebelumnya dari paket yang ditingkatkan, yang sekarang tidak lagi diperlukan. apt autoremovekemudian menghapus dependensi yang tidak digunakan ini.
Alex
3
Jika pemutakhiran akan membutuhkan paket baru untuk diinstal, paket tersebut akan "disimpan kembali." Pertama-tama pertimbangkan untuk menggunakan: sudo apt-get --with-new-pkgs upgradeyang tidak
efek
@ mac9416 ya itu.
jarno
174

apt-get dist-upgrade berbahaya bagi lingkungan yang stabil,

  1. pengaturan source.list salah dan Anda berakhir dengan ubuntu yang rusak.
  2. Anda mungkin mendapatkan seluruh aplikasi ditingkatkan ke versi yang tidak Anda inginkan.

Gunakan case: peningkatan kernel terus, Anda hanya ingin meng-upgrade kernel, tidak ingin meng-upgrade seluruh distribusi.

Cara yang lebih baik untuk menangani paket yang disimpan kembali:

sudo aptitude

Jika Anda telah menyimpan kembali paket Anda harus melihat Paket yang Dapat Di-upgrade di bagian atas daftar.

  • Tekan + pada daftar itu
  • Tekan g dua kali
  • Jawab hal-hal debconf jika diminta
  • Tekan kembali untuk melanjutkan
  • Tekan Q
  • Tekan ya

Paket yang disimpan Anda terinstal.

Michael Crenshaw
sumber
34
apt-get dist-upgradehanya berbahaya jika Anda memiliki repositori buruk di /etc/apt/sources.list*. Adalah baik untuk menyadari bahwa dist-upgrademeningkatkan semua paket, tetapi dengan repositori default, itu akan baik-baik saja. Tidak menggunakan dist-upgradebisa berbahaya, karena Anda mungkin kehilangan pembaruan keamanan.
Flimm
6
apt-get dist-upgradedapat menghapus dan menambahkan paket, tetapi itu tidak benar-benar berbahaya. Setiap perintah instalasi paket dapat menyebabkan kerusakan serius jika Anda memiliki masalah dalam sources.listfile Anda ! apt-get upgradePerintah reguler akan menginstal paket apa pun dari sumber perangkat lunak apa pun yang diaktifkan; dist-upgradetidak unik dengan cara ini. Selain itu, menggunakan aptitudeuntuk melakukan operasi apa pun, setidaknya pada amd64, jauh lebih berbahaya daripada berjalan apt-get dist-upgrade, dalam rilis di mana bug 831768 tidak diperbaiki.
Eliah Kagan
Bagi saya, itu lebih mudah (mesin lokal dengan X berjalan) untuk hanya membuka sinaptik dan memaksa upgrade paket. Untuk beberapa alasan sepertinya tidak muncul sama sekali di mana Anda dijelaskan dalam sinaptik.
djvs
3
Jugasudo aptitude safe-upgrade
msanford
146

Mengapa Anda tidak mencoba jawaban Unix SE ini :

sudo apt-get --with-new-pkgs upgrade

Ini memungkinkan paket baru untuk diinstal. Ini akan memberi tahu Anda paket apa yang akan diinstal dan meminta Anda sebelum benar-benar melakukan instalasi.

aptcommand ( alternatif ramah untuk apt-get) berbagi opsi ini.

apt install <pkg>Sebaliknya menggunakan pkg akan ditandai sebagai "terpasang secara manual" !! Untuk menandainya lagi sebagai "terinstal secara otomatis" gunakan apt-mark auto <pkg>(lihat juga subperintah showmanual). Info lebih lanjut tentang jawaban ini .

Pablo A
sumber
20
+1 karena tidak memiliki efek samping yang menyebabkan paket ditandai sebagai diinstal secara manual.
ctrl-alt-delor
1
Catatan untuk siapa yang pernah membaca komentar saya di atas: tidak memiliki efek samping dari penandaan yang diinstal secara manual adalah hal yang baik. Saya suka jawaban ini.
ctrl-alt-delor
1
Iya. apt-mark auto <pkg>seharusnya hanya perlu menandai suatu paket sebagai yang diinstal secara otomatis (di sini halaman manual ).
Pablo A
11
Untuk beberapa alasan sudo apt-get --with-new-pkgs upgrademasih menunjukkan paket-paket sebagai "disimpan kembali". Tidak ada pesan kesalahan.
Franklin Yu
2
Hanya ingin menambahkan bahwa untuk banyak instance server debian 9.6 terbaru ini adalah solusi teraman mutlak tanpa merusak barang-barang. Terima kasih untuk ini, Pablo, karena saya beruntung telah menguji opsi lain pada lingkungan pementasan sebelumnya, dan dapat mengelola banyak server hingga standar keamanan berkat inklusi --dengan-pkg-baru dengan hasil yang jauh lebih bersih untuk manajemen paket masa depan yang umum. Sungguh, jawaban UNIX SE ini harus diunggulkan!
Julius
34

Biasanya ada dua alasan Anda dapat melihat pesan ini.

Jika memutakhirkan program (melalui sudo apt-get upgrade) akan menyebabkan paket ditambahkan atau dihapus, maka program akan ditahan. Anda dapat menggunakan sudo apt-get dist-upgradedalam hal ini, yang kemudian akan menawarkan untuk menambah atau menghapus program tambahan.

Ini cukup umum dan biasanya bukan masalah. Kadang-kadang (terutama selama alfa Ubuntu) dist-upgradeakan menawarkan untuk menghapus banyak program lain, dalam hal ini Anda mungkin ingin membatalkannya.

Jika program tergantung pada paket atau versi yang tidak tersedia, maka program tersebut akan ditahan. Anda benar-benar tidak dapat melakukan apa pun kecuali menunggu dalam keadaan ini, karena paket ini pada dasarnya dapat dihapus. Ini bisa terjadi ketika paket ditambahkan ke repositori rusak, ketika sebuah paket diganti namanya, atau ketika sebuah paket berhenti menyediakan paket virtual.

jbowtie
sumber
5
Apakah ada cara untuk menentukan apakah paket yang ditangguhkan membutuhkan dependensi yang tidak dapat diinstal atau jika ditahan karena paket lain bergantung padanya. Saya memiliki banyak paket yang ditahan dan saya percaya kedua kasus ini dapat diterapkan pada sistem saya.
Jake
Terima kasih, alasan kedua adalah masalah bagi saya. Bahkan apt-get dist-upgrademenolak untuk menginstalnya. Memeriksa paket dengan bakat menunjukkan bahwa itu tergantung pada paket yang tidak tersedia. Saya kira saya harus menunggu.
jlh
23

Anda juga dapat mencoba:

sudo aptitude safe-upgrade.

Ini lebih aman daripada full-upgrade(awalnya bernama dist-upgrade) karena "paket tidak akan dihapus kecuali mereka tidak digunakan".

Dari man aptitude:

upgrade yang aman

Memutakhirkan paket yang diinstal ke versi terbaru mereka. Paket yang diinstal tidak akan dihapus kecuali jika tidak digunakan / .../ Paket yang saat ini tidak diinstal dapat diinstal untuk menyelesaikan dependensi kecuali jika opsi baris perintah --no-install-baru disediakan.

Afilu
sumber
21

Kemungkinan besar paket-paket ini ditahan karena instalasi mereka akan menciptakan inkonsistensi ketergantungan. Ini bisa terjadi karena Anda menggunakan arsip dalam pengembangan aktif, ppas, atau karena cermin yang Anda gunakan tidak sepenuhnya diperbarui.

Dalam kasus terakhir, tunggu saja, ketika dependensi diselesaikan itu akan diinstal pada waktu berikutnya.

Sunting:

Ada kemungkinan lain, paket mungkin ditahan jika ada yang menahannya, atau jika mereka disematkan.

txwikinger
sumber
Apa yang mendasari kemungkinan itu, tanpa mengetahui apa pun yang ia jalankan dengan upgrade apt-get atau apt-get dist-upgrade (alt. Setara dengan aptitude)?
andol
ini adalah masalah yang paling sering muncul dalam pertanyaan dan bug dukungan
txwikinger
Sepakat. Anda mungkin harus menunggu dan memeriksa Anda apt_preferences. Ini sering disebabkan oleh arsip pengembangan di mana dependensi paket dan tersedia berubah dengan sangat cepat. Tunggu sampai mereka tenang dan Anda mungkin tidak perlu dist-upgradesama sekali. Jika Anda masih ingin dist-upgrade, lihat paket BARU yang akan diinstal dan paket yang akan dihapus sebelum melanjutkan.
Umang
Ini adalah kasus saya karena saya mendapatkan pesan "disimpan kembali" menggunakan dist-upgrade
Postadelmaga
Dalam kasus di mana masalah ini adalah karena messup dengan preferensi apt (menjepit), saya menemukan instalasi ulang paket terus membantu saya: apt-get install --reinstall <packages>.
tanius
9

Ini biasanya karena paket telah menambahkan ketergantungan, dan peningkatan tidak ingin menambahkannya untuk Anda tanpa izin.

Jika Anda menjalankan:

sudo apt-get install gimp gimp-data libgegl-0.0-0 libgimp2.0

Kemudian versi baru harus diinstal bersama dengan ketergantungan baru mereka.

John Lawrence Aspden
sumber
Meng-upgrade paket tertentu (dan ketergantungannya) tanpa komitmen (risiko) dari dist-upgrade.
John Mee
8

Ini berhasil untuk saya

sudo aptitude full-upgrade
Singh
sumber
Bahkan aptitude upgradebekerja untukku.
Bibhas
Saya menggunakan Ubuntu 14.04dan saya tidak memiliki aptitudebaris perintah
ahmed hamdy
apt-get dist-upgradememberi saya pesan yang sama, tetapi ini menyelesaikannya untuk saya. Saya memiliki paket yang melanggar pemutakhiran paket lain. Saya tidak membutuhkan yang saya instal, jadi aptitude full-upgradeberi saya pilihan untuk menghapusnya sehingga dapat meningkatkan segalanya.
f.ardelian
6

Saya telah menemukan bahwa aptitude melakukan pekerjaan yang lebih baik dalam meningkatkan paket jika versinya sedikit berbeda. Saya memiliki situasi seperti ini:

me@compy:/etc/apt$ apt-cache policy gzip
gzip:
  Installed: 1.3.5-15
  Candidate: 1.3.5-15+etch1
  Version table:
     1.3.5-15+etch1 0
        500 http://archive.debian.org etch/main Packages
 *** 1.3.5-15 0
        100 /var/lib/dpkg/status

Ini membuat apt-get menahan pembaruan, tetapi aptitude memperbaruinya dengan baik. Saya tidak yakin algoritma mana yang digunakan untuk menentukan apakah suatu paket harus diperbarui atau tidak. Saya kira keduanya memiliki versi yang sama, hanya 'kualifikasi' yang berbeda. Tetapi bagaimanapun juga, apt-get tidak akan memperbaruinya, tetapi aptitude akan melakukannya.

Alexander Torstling
sumber
4

Dalam kasus saya, paket yang ditahan adalah yang terkait dengan linux-header dan kernel. Saya sampai pada hal ini dengan mencoba menyelesaikan masalah dengan memiliki tanda seru merah di area notifikasi dan tidak dapat memperbarui paket.

Untuk mengatasinya, saya tidak perlu menggunakan dist-upgrade atau manual apt-get install xxx .

Apa yang saya lakukan dan telah bantu sederhana dan bersih :

sudo apt-get update
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get upgrade

Saya harus secara manual mengonfirmasi pembaruan Grub dan konfigurasinya.

Kemudian saya hanya bekerja dengan komputer untuk sementara waktu dan kemudian dialog pembaruan standar telah muncul lagi akhirnya termasuk bagian "basis Ubuntu" dengan kernel dan terkait. Pembaruan dilakukan tanpa masalah dan saya tidak melihat paket yang ditahan lagi.

Juga, sangat penting untuk diingat bahwa pembaruan * buntu tersebut termasuk pembaruan kernel peka terhadap hibernasi - Saya mengalami masalah ini beberapa kali dan saya selalu menyelesaikannya dengan menyalakan kembali mesin dan melakukan langkah-langkah di atas.

Jadi mungkin ini cukup?

(situasi yang dijelaskan di sini terkait dengan Xubuntu 15.10 saya pada akhir Desember 2015)

crysman
sumber
3

Saya mengalami masalah ini ketika kernel baru dirilis. (Mungkin karena saya mengaktifkan pembaruan yang tidak stabil.) Saya menemukan cara paling sederhana untuk melakukan instalasi adalah melalui installer grafis Ubuntu ( update-manager).

Kazark
sumber
2

Saya mengalami masalah ini menggunakan synaptic karena tampaknya hang, dan untuk mencoba dan memperbaikinya saya boot ulang dan mencoba lagi.

Kemudian saya menemukan pesan informatif sebagai bagian dari paket dengan beberapa instruksi pasca pemasangan untuk saya.

Saya harus menekan " perincian ", dan kemudian ' q ' untuk berhenti setelah membaca pesan, dan kemudian semuanya berjalan normal.

Pandangan elips
sumber
2

Ini seperti cara yang benar untuk menginstal ulang paket yang disimpan kembali:

apt-get install --reinstall libjpeg-progs

Setidaknya ini bekerja untuk saya ketika libjpeg-progsmacet setelah memutakhirkan dari Ubuntu 14.04 ke 16.04. Saya yakin Anda dapat melakukan hal yang sama dengan aplikasi yang disimpan lainnya, misalnya gimp.

Sumber: https://ubuntuforums.org/showthread.php?t=2321702&p=13476183#post13476183

Stephan Henningsen
sumber
1
Anda bisa melakukannya tanpa --reinstalljuga.
jarno
Lucunya ia menghapus paket libjpeg-turbo-progs.
jarno
1

Pada kenyataannya, switch yang Anda butuhkan adalah dselect-upgradeyang menginstal / menghapus dependensi untuk paket tertentu yang terlibat.

Johnny
sumber
1

Saya telah membaca semua posting dan menemukan bahwa ada banyak penjelasan yang menarik. Saya sudah mencoba semuanya tetapi belum mendapatkan hasil sepenuhnya. Saya memiliki masalah dengan utilitas mysql yang tidak dapat saya tingkatkan. Pembaruan diusulkan oleh sistem. Jadi, saya ingin menunjukkan beberapa langkah untuk melakukannya. Tentu saja, saya akan mengulangi dalam beberapa saat semua posting yang disebutkan di atas. Ini kesalahan saya, ya saya menemukannya dengan posting yang sudah ada, tetapi apa yang harus saya lakukan selanjutnya? masukkan deskripsi gambar di sini

Langkah selanjutnya adalah:

sudo apt-get --purge remove mysql-utilities

Hasilnya bisa kita lihat pada gambar di bawah ini. Saya menghapus paket dan memeriksa ini dengan perintah:

sudo apt-get -f install

Hasil - Baik! Kemudian saya menginstal paket versi baru ini dengan benar. masukkan deskripsi gambar di sini

Dengan cara ini, saya pikir dapat membantu lebih banyak orang baru karena memiliki paket lain kita dapat melakukan langkah yang sama.

Sekali, saya minta maaf, ketika saya mengulangi di beberapa tempat posting lain.

Vasyl Lyashkevych
sumber
5
Tolong jangan gunakan tangkapan layar untuk teks terminal, karena itu membuatnya tidak dapat ditelusuri oleh Google dan tidak dapat dibaca oleh beberapa orang. Alih-alih, tempel teks terminal ke dalam jawaban Anda, pilih teks itu, dan tekan {}tombol di editor untuk memformatnya dengan benar.
Chai T. Rex
@ ChaiT.Rex Terima kasih atas sambutannya, saya akan mempertimbangkannya untuk masa depan.
Vasyl Lyashkevych
1

Ubuntu 18.04 menyediakan sintaksis yang lebih baru dan efisien aptyang dapat digunakan alih-alih apt-get.

sudo apt full-upgrade

sudo apt upgradedigunakan untuk menginstal pemutakhiran yang tersedia dari semua paket yang saat ini diinstal pada sistem dari sumber yang dikonfigurasi melalui sources.list (5). Paket-paket baru akan diinstal jika diperlukan untuk memenuhi dependensi, tetapi paket yang ada tidak akan pernah dihapus. Jika upgrade untuk suatu paket membutuhkan penghapusan paket yang diinstal, upgrade untuk paket ini tidak dilakukan.

sudo apt full-upgrade melakukan fungsi pemutakhiran tetapi akan menghapus paket yang diinstal saat ini jika ini diperlukan untuk memutakhirkan sistem secara keseluruhan.

l --marc l
sumber