Bagaimana cara menghapus dependensi yang disarankan dan yang disarankan dari paket yang dihapus?

16

Saya tahu bagaimana cara menghapus dependensi paket yang dihapus? dan saya mencoba

apt-get autoremove

tetapi itu tidak menghapus dependensi yang direkomendasikan / disarankan oleh paket lain.

Yaitu, jika saya menginstal paket X yang merekomendasikan Y, tapi saya tidak menginstal Y, dan kemudian saya menginstal paket Z yang tergantung pada Y. dan kemudian saya lakukan

apt-get remove --auto-remove Z

maka Y tidak secara otomatis dihapus meskipun tidak ada yang bergantung padanya. (X "mengambil" Y, meskipun itu tidak bergantung padanya).

pengguna2809402
sumber
1
Bisakah Anda mengatakan paket apa yang melakukan ini?
Braiam
Ada banyak contoh, jadi saya mencoba mengekstrak esensi masalah dalam uraian di atas. Anda benar bahwa saya juga harus memasukkan contoh konkret: Pertimbangkan instalasi texlive-full. Ini menginstal banyak paket font, yang disarankan (tetapi tidak diperlukan) oleh banyak paket yang sudah ada sebelumnya (saya tidak ingat persisnya, tapi saya pikir libreoffice atau matplotlib atau oktaf yang sudah ada sebelumnya menyarankan ini). Jadi masalahnya adalah "apt-get install texlive-full" diikuti oleh "apt-get remove --purge --auto-remove texlive-full" tidak meninggalkan sistem dalam keadaan asli yang sama.
user2809402

Jawaban:

14

Jika Anda ingin menghapus paket yang direkomendasikan dari sistem Anda, bahkan jika masih ada beberapa paket yang diinstal merekomendasikan (atau menyarankan) mereka, masukkan yang berikut ini di file /etc/apt/apt.conf.d/99_norecommends(buatlah):

APT::Install-Recommends "false";
APT::AutoRemove::RecommendsImportant "false";
APT::AutoRemove::SuggestsImportant "false";

Dokumentasi untuk opsi-opsi ini ada di sini .

Kemudian, jalankan apt berikutnya harus menghapus semuanya. Jika tidak, luncurkan aptitude, dan ketik gdan glagi.

Konfigurasi ini juga menonaktifkan instalasi otomatis paket yang disarankan saat menggunakan apt-get. Untuk aptitudeitu dapat dilakukan dari konsol GUI, menu Pilihan> Preferensi> "Instal paket yang direkomendasikan secara otomatis" (hapus centang).

Totor
sumber
Saya tidak akan merekomendasikan untuk tidak menginstal rekomendasi karena sebagian besar waktu berguna .
Braiam
1
@Braiam Ini bukan yang diminta OP. Komentar Anda untuknya, bukan untuk saya.
Totor
Saya hanya mengatakan bahwa itu mungkin berlebihan.
Braiam
@Braiam Itu POV Anda. Saya hidup cukup baik dengan InstallRecommendsorang cacat. Sebagai catatan, itu dinonaktifkan secara default sampai Debian Squeeze dirilis, yaitu sejak Februari 2011 (tidak tahu tentang Ubuntu). Selain itu, Anda mungkin tidak memerlukan konfigurasi yang sama di server atau pengaturan desktop.
Totor
2
InstallRecommends: Karena mengapa instal 5MB barang yang Anda inginkan, ketika Anda juga bisa menginstal 1GB barang yang tidak Anda inginkan?
Mark K Cowan
7

Mengganti opsi APT

Tidak seperti dependensi, paket yang "otomatis" atau "disarankan" yang diinstal secara otomatis dapat diabaikan oleh apt-get autoremove.

Seperti yang dijelaskan di tempat lain, perilaku APT ini dapat diubah dalam konfigurasi.

Demikian juga, konfigurasi apt-getperintah dapat sementara diubah melalui -oopsi baris perintah.

Ini adalah, bagaimana Anda akan memaksa autoremove untuk menghapus sisa "disarankan" dan "disarankan" paket, di samping dependensi yang tidak digunakan.

sudo apt-get autoremove -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0

Peringatan!

Beberapa fungsi mungkin hilang. Bersiaplah untuk menyelidiki dan menginstal ulang hal-hal. Mungkin lebih mudah meninggalkan paket-paket ini sendiri.

Pilihan lain

Untuk menghapus paket 'disarankan' dan 'disarankan' hanya untuk paket tertentu, lihat log riwayat apt.

Rolf
sumber
1
untuk hanya menganalisis paket tersebut, melakukan kering run dengan apt-get's -spilihan dan pipa untuk grep ^Remv- jadi itu perintah:apt-get autoremove -s -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0 | grep ^Remv
myrdd
1

Sebenarnya perintahnya adalah:

sudo apt-get autoremove <Z>

Tapi ini punya trik! Jika salah satu dari dependensi memiliki beberapa paket lain yang diinstal sebelumnya yang merekomendasikan / menyarankan mereka maka apt tidak akan menghapusnya.

Anda tidak menentukan paket apa itu tetapi sebagai contoh, jika saya menginstal plugin IcedTea, itu akan menginstal Java / OpenJRE oleh dependensi. Jika saya uninstall mereka menggunakan sudo apt-get autoremove icedtea-7-pluginAnda akan melihat bahwa itu tidak akan menghapus Java / OpenJRE, karena LibreOffice juga menyarankan paket.

Jadi, untuk menghapusnya, Anda harus terlalu spesifik tentang paket yang ingin Anda hapus seperti biasa autoremove:

sudo apt-get autoremove <Z> <dependency of Z>

Dengan cara ini Anda bisa memastikan paket Anda dihapus.

Anda juga dapat menggunakan deborphan untuk menghapus beberapa dependensi.

Braiam
sumber
1
Omong-omong, pemahaman saya dari manpage apt adalah autoremove tidak mengharapkan nama paket, dan hanya akan membersihkan semua dependensi paket yang tidak diperlukan dalam sistem. Jadi Anda harus melakukan 2 langkah: "apt-get remove Z" diikuti oleh "apt-get autoremove". 2 langkah ini dapat dilakukan sekaligus dengan "apt-get remove --auto-remove Z", sebagaimana disebutkan dalam pertanyaan awal saya. Tapi seperti saya katakan, masalahnya adalah bahwa ada beberapa paket sisa yang tidak dihapus jika mereka disarankan oleh sesuatu yang lain.
user2809402
1
Ya, Anda menggambarkan masalah saya dengan sempurna. Terima kasih. Tapi, sayangnya, Anda belum menyelesaikannya, karena saya tidak ingin pergi ke /var/log/apt/history.log dan mencari semua paket Y yang diinstal beberapa bulan yang lalu dengan Z (dalam contoh Anda, Y = java / jre, Z = icedtea plugin) dan kemudian secara manual menambahkan semuanya ke baris perintah apt. Saya hanya ingin menentukan Z, dan seluruh dependensi yang akan diambil secara otomatis, bahkan jika mereka disarankan oleh paket X lain yang ada (X = libreoffice dalam contoh Anda).
user2809402
1
Sayangnya, ini adalah cara sistem apt bekerja, lebih memilih untuk tetap menginstal paket daripada menghapusnya, bahkan jika mereka tidak diperlukan lagi. Satu-satunya cara untuk menghapusnya adalah secara manual atau dengan deborphantetapi deborphan mungkin masih melewatkan beberapa paket. Anda dapat menggunakan Debug::opsi dan juga memeriksa jawaban saya yang lain tentang ini . Anda juga dapat menggunakan --no-install-recommends, tetapi apt-get tidak menginstal paket yang disarankan secara default.
Braiam
@ user2809402 Anda juga harus memeriksa askubuntu.com/q/244470/169736
Braiam
Braiam- Terima kasih atas penunjuk deborphan. Saya akan memeriksanya.
user2809402
-1

Benar, jika Anda ingin menghapus paket <Z>dengan dependensi, ketik saja:

sudo apt-get autoremove --purge <Z>
pengguna1019723
sumber
3
Terima kasih, tetapi sayangnya, menambahkan "--purge" hanya menghapus konfigurasi paket yang dihapus dengan "autoremove". Tapi sejauh yang saya bisa lihat, itu tidak mengubah keputusan tentang paket mana yang harus dihapus. Artinya, dependensi Z yang disarankan oleh beberapa paket X yang sudah ada, masih belum dihapus, apakah saya menentukan atau tidak - "gege ".
user2809402
1
Juga, autoremovebekerja di seluruh sistem. Jadi, kapan pun Anda menelepon autoremove, itu akan menghapus semua paket yang tidak digunakan di sistem Anda. Menginstal sebuah paket, maka autoremovingbiasanya tidak akan mengembalikan sistem ke status yang sama, dan sebagai gantinya akan meninggalkan banyak paket "sisa".
Rolf