TL; DR atau "Just scorch my pi"
sudo apt-get remove --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --purge
(Ulangi apt-get autoremove --purge
sampai tidak ada anak yatim yang tersisa)
Penjelasan lebih lanjut
Jika paket foo bergantung pada paket libfoo lain dan Anda menghapus paket libfoo , dependen ( foo ) juga dihapus. Karena Foo memiliki tergantung garis menentukan libfoo , itu akan rusak untuk meninggalkan foo jika libfoo telah dihapus. Kebalikannya tidak benar: menghapus foo tidak menghapus libfoo secara otomatis. Paket xfoo lain mungkin juga bergantung pada libfoo, jadi apt tidak hanya menghapusnya (walaupun apt akan melacak jika diinstal hanya sebagai efek samping dari menginstal foo dan menawarkan untuk menghapusnya secara otomatis jika Anda memintanya, selama tidak ada orang lain yang bergantung padanya)
Paket-paket meta bergantung pada sekumpulan paket lain dengan cara yang sama seperti foo bergantung pada libfoo , jadi ketika Anda menghapus paket meta, sedikit saja yang biasanya dihapus. Sebagai contoh, mungkin ada dua paket meta yang bergantung pada xterm (mungkin lxsession dan xfsession), tetapi menghapus satu atau keduanya tidak akan menghapus instalan xterm karena xterm tidak rusak tanpa lxsession atau xfsession. Paket meta umumnya di atas pohon dependensi, bukan di bawah, dan beberapa hal cenderung bergantung langsung pada meta-paket. Meta-paket terutama menyediakan cara mudah untuk menginstal satu set paket yang masuk akal sekaligus, tetapi mereka tidak menghapus alat.
Jadi, jika Anda ingin menghanguskan semua yang bergantung pada X11, Anda harus menargetkan kumpulan dasar pustaka libx11 yang pada akhirnya semua aplikasi x11 harus bergantung pada:
sudo apt-get remove --dry-run --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --dry-run --purge
Ini akan (mensimulasikan) menghapus semua yang akhirnya bergantung pada libx11 -. *, Dan juga akan menghapus paket apa pun yang diinstal sebagai dependensi program X11 bahkan jika mereka tidak secara langsung bergantung pada X11 itu sendiri (CUPS dan Ghostscript biasanya diinstal sebagai efek samping dari menginstal lingkungan desktop). Perintah kedua akan menghapus anak yatim berikutnya sampai tidak ada yang tersisa. Hapus "--auto-hapus" jika Anda ingin melakukan langkah ini nanti atau tidak melakukannya sama sekali, atau cukup tambahkan kembali paket secara manual setelah membersihkan GUI.
Hapus opsi --dry-run untuk benar-benar melakukan operasi setelah Anda memeriksa bahwa itu tidak akan menghapus paket yang tidak ingin Anda hapus.)
Saya lebih suka membersihkan dan membersihkan efek samping, dan menambahkannya kembali sesuai kebutuhan. Juga, saya pergi ke depan dan menguji ini pada pi saya sendiri, dan reboot ke server yang sangat sederhana tetapi fungsional. :)
Mengapa menghapus menginstal sesuatu?
Strategi di atas memecahkan masalah yang disebutkan, tetapi masih ada rasa ingin tahu mengapa operasi penghapusan menghasilkan paket yang diinstal .
Di jantung setiap manajer paket adalah pemecah kepuasan dari beberapa jenis. Ketika Anda memberi tahu manajer paket untuk menginstal beberapa paket, menghapus beberapa paket, atau memutakhirkan beberapa paket, yang benar-benar Anda minta lakukan adalah menyelesaikan keadaan instalasi perangkat lunak yang diinginkan berikutnya dengan serangkaian paket yang tersedia. Solusi ini mungkin termasuk menginstal paket tambahan (dependensi), menghapus paket yang ada (konflik, jeda), menurunkan versi / meningkatkan paket tertentu (tingkat kompatibilitas), atau kombinasi keduanya. Jadi, sementara itu agak berlawanan dengan intuisi bahwa pemecah menentukan bahwa beberapa paket perlu diinstal agar paket lain dihapusMasuk akal. Ini adalah masalah manajemen ketergantungan buruk yang dipecahkan oleh manajer paket.
Contoh konkret: Diberikan satu set aplikasi Java yang sudah diinstal, semuanya tergantung pada runtime yang kompatibel dengan java yang saat ini kebetulan openjdk-7-jre . Anda kemudian meminta manajer paket untuk memecahkan instalasi alat Java baru yang menyatakan suatu konflik dengan openjdk-7-jre tetapi bekerja dengan oracle-7-jre (kedua paket umum memberikan sebuah java-7-runtime ). Solver akan mengusulkan penghapusan dari openjdk-7-jre dan menginstal dari oracle-java-7-jresebagai solusi untuk keadaan yang Anda inginkan agar paket baru diinstal tanpa merusak paket yang ada.
Dalam hal ini spesifik kasus, xterm adalah paket yang menyediakan dependensi virtual yang disebut x-terminal-emulator ( xterm , lxterminal , dan aterm semua memberikan sebuah x-terminal-emulator ), sehingga kemungkinan bahwa dalam menghilangkan lxterminal (sebagai bagian dari menghapus lxde), solver menemukan paket terinstal yang ada ( transcode sebagai contoh yang mungkin) yang memerlukan beberapa jenis x-terminal-emulator , sehingga solver memilih untuk menginstal xterm (yang memerlukan libutempter0 dan xbitmaps, menjelaskan paket-paket lain untuk diinstal) untuk memenuhi ketergantungan yang rusak. Tanpa melihat paket database, saya akan berhipotesis bahwa ini adalah skenario yang paling mungkin.
Untuk menemukan paket yang saat ini bergantung pada xterm (atau alternatif), gunakan perintah apt-cache rdepends (menggunakan sakelar --installed untuk membatasi hanya paket yang diinstal):
$ apt-cache --installed rdepends xterm
xterm
Reverse Depends:
|xorg
clusterssh
|xinit
|tk8.5
|tk8.4
|transcode
Ketergantungan yang dimulai dengan karakter alternatif '|' berarti bahwa paket tergantung pada xterm atau sesuatu yang disediakannya (bahwa ada sesuatu x-terminal-emulator dalam kasus ini). The clusterssh paket tergantung pada xterm eksplisit , dan tidak memungkinkan untuk alternatif. Ini adalah daftar pendek dari paket-paket yang menyebabkan xterm diperlukan.
Bagaimana dengan deborphan?
Fungsionalitas pelacakan anak yatim dimasukkan ke dalam apt-get melalui fungsionalitas 'autoremove' pada tahun 2010 (Debian bug 582791 ) yang menjadikan deborphan sebagian besar berlebihan dan pada dasarnya usang. Tidak seperti deborphan dan solusi lain seperti itu, apt-get langsung melacak paket mana yang diinstal secara eksplisit dan paket mana yang diinstal sebagai efek samping atau ketergantungan dari paket yang diinstal secara eksplisit. Misalnya, jika administrator menginstal foo, libfoo diinstal sebagai efek samping dan apt-get autoremove akan , pada kenyataannya, menghapus libfoo jika autoremove (atau --auto-remove) ditentukan saat menghapus foo.
Pendekatan yang diambil oleh deborphan adalah kumpulan tebakan. Misalnya, tebakan bahwa pustaka terinstal yang tidak memiliki dependen harus berupa anak yatim: Jika libfoo diinstal, tetapi bukan foo atau xfoo , deborphan dapat memutuskan bahwa itu haruslah yatim piatu. Satu mode kegagalan di sini adalah bahwa perpustakaan mungkin secara khusus diinstal untuk alat yang mereka sediakan (libxml2 untuk xmllint sebelum dipaket ulang menjadi libxml2-utils) atau hanya tersedia untuk tujuan pengembangan. Paket seperti itu bukan yatim piatu. Selain itu, deborphan berfokus pada perpustakaan, sehingga merindukan sejumlah anak yatim non-perpustakaan yang sesuai trek (paket usang vs paket yatim) .
munin
karena beberapa alasan, tetapi saya bisa mengembalikannya dengan cukup mudah setelahnya.