Bagaimana saya bisa menghapus Paket Anak Yatim di Fedora?

42

Saya baru saja beralih dari Ubuntu ke Fedora14. Di Ubuntu kami memiliki apt-get autoremovehal untuk menghapus paket yatim / tidak terpakai. Apa rekan di Fedora?

c0da
sumber

Jawaban:

36

package-cleanup --quiet --leavesdari paket yum-utils akan mencantumkan paket perpustakaan yang tidak diandalkan oleh paket lain. Sayangnya itu cenderung sedikit berlebihan. Di sistem saya, misalnya, disarankan menghapus libvirt. Menambahkan --exclude-binargumen membantu. Jika Anda puas dengan sarannya, maka untuk membersihkan paket, lakukan:

# package-cleanup --quiet --leaves --exclude-bin | xargs yum remove -y

sumber
1
Mengujinya setelah menginstal dan menghapus netbeans-platformdan paket-pembersihan daftar beberapa hal tetapi sebenarnya tidak ada netbeans-platformdependensi yang diinstal sebelumnya (menggunakan Fedora 17).
maxschlepzig
2
Tidak berfungsi, seperti yang ditunjukkan oleh @maxschlepzig
c0da
30

DNF, pengganti yum sejak Fedora 22, juga menyediakan autoremovesubperintah yang dimodelkan setelah apt-get / yum autoremove.

Contoh:

# dnf autoremove

yang mencoba untuk menghapus semua paket dependensi yang diinstal secara otomatis dan yang tidak digunakan - harusnya setara apt-get autoremove.

# dnf autoremove examplepackage

yang menghapus paket contoh dan semua dependensinya yang diinstal secara otomatis (dan jika tidak digunakan).

Yum

Yum memiliki perintah autoremove sejak Fedora 19, dan didokumentasikan sejak Fedora 20 / RHEL 7.

Penggunaannya analog dengan implementasi dnf, misalnya:

# yum autoremove

atau

# yum autoremove examplepackage

Ubah perilaku penghapusan yum

Yum mendukung opsi konfigurasi untuk mengubah perilaku default dari removesub- perintah (mis. Via /etc/yum.conf):

clean_requirements_on_remove=yes

yum.conf (5)

Ketika ini diatur, berikutnya yum removejuga mencoba untuk menghapus dependensi yang diinstal otomatis jika mereka tidak diperlukan oleh paket lain.

Anda juga dapat menguji opsi ini untuk sementara waktu melalui sesuatu seperti:

# yum --setopt=clean_requirements_on_remove=1 remove examplepackage

Penanganan masalah untuk versi Fedora lama

(Untuk versi Fedora di mana yum autoremove subcommand tidak tersedia dan / atau clean_requirements_on_removetidak berfungsi.)

Meskipun selama instalasi paket diinstal dependensi ditandai seperti itu (tampaknya fitur yang relatif baru dari rpm / yum).

Anda dapat menemukan dependensi yang tidak dibutuhkan melalui:

$ package-cleanup --leaves -q --all \
    | xargs repoquery --installed --qf '%{nvra} - %{yumdb_info.reason}' \
    | grep -- '- dep' \
    | cut -d' ' -f1 > tmp

Baris perintah ini terinspirasi oleh skrip fenris02 .

Setelah memeriksa tmp(dan mungkin kurasi) Anda dapat menghapusnya melalui sesuatu seperti ini:

# xargs yum remove < tmp
maxschlepzig
sumber
Itu memberi kesalahan "Invalid yumdb querytag 'alasan' untuk pkg terpasang: adobe-release-x86_64-1.0-1.noarch". Apa ini sekarang?
c0da
@ c0da, saya kira bahwa fitur yang yum mencatat dalam databasenya 'alasan' instalasi (eg'dep 'atau' pengguna ') untuk setiap paket relatif baru. Mungkin instance Fedora Anda mendahului pengenalan fitur tersebut sehingga Anda masih memiliki (beberapa) paket lama yang diinstal tanpa set tag itu.
maxschlepzig
Saya menginstal Fedora 18 beberapa hari yang lalu. Jadi saya pikir tag yang diperlukan harus ada di sana.
c0da
1
@ c0da, mungkin 'alasan' tidak dicatat karena Anda telah menginstal paket adobe-releasemelaluiyum localinstall
maxschlepzig
16

Anda perlu menginstal plugin yum "hapus-dengan-daun":

# yum install yum-plugin-remove-with-leaves.noarch

setelah diinstal:

# yum remove --remove-leaves package

semoga berhasil!

mrc
sumber
3
dan bagaimana menjalankannya untuk semua aplikasi yang diinstal?
cnd
Tampaknya tidak terlalu dapat diandalkan juga: skvidal.wordpress.com/2010/11/09/orphaned-dep-cleanup-in-yum
maxschlepzig
1
RHEL / CentOS / Oracle Linux 6 membutuhkan yum-plugin-remove-with-leaves.noarchpaket yang diinstal untuk menggunakanpackage-cleanup
Terry Wang
8
# package-cleanup --orphans >/tmp/junk

edit /tmp/junkfile dan hapus baris pertama yang bersifat informasi dari baris perintah, masukkan yang berikut ini:

for file in `cat /tmp/junk`
do
  yum remove $file
done
Larry Mohr
sumber
1
package-cleanup (1) mengatakan: '--orphans Daftar paket yang diinstal yang tidak tersedia dari repositori yang saat ini dikonfigurasi.' Ini tidak setara dengan apa yang apt-get autoremovedilakukannya. apt-get (8) mengatakan: 'autoremove digunakan untuk menghapus paket yang diinstal secara otomatis untuk memenuhi dependensi untuk beberapa paket dan yang tidak diperlukan lagi.'
maxschlepzig
1
Tidak bekerja! Saya pasti salah sebelumnya. Terima kasih @maxschlepzig
c0da
Ini digunakan untuk saya, tetapi dalam CentOS 6.6 sebenarnya mencantumkan semua paket yang diinstal, bukan hanya anak yatim.
Gaia
4

CATATAN: Jawaban ini benar tetapi hanya berlaku untuk RHEL 7+ dan Fedora 20+ (di mana autoremove telah ditambahkan sebagai fitur baru).

# yum autoremove

Cukup konfirmasi untuk menghapus paket yang dipilih.

Milly yang dingin
sumber
0

Membangun berdasarkan jawaban Larry Mohr :

package-cleanup --orphans | sed '1d' | sed '/^ * /d' | sed '/Loading mirror speeds from cached hostfile/d' | xargs sudo yum remove

(Termasuk melewatkan untuk cermin tercepat, jika Anda bertanya-tanya.)

Bengt
sumber
0

Di Fedora, paket anak yatim berarti tidak ada repo kandidat untuk diperbarui!

  1. Jika paket-paket anak yatim dihasilkan oleh Anda, nonaktifkan yum.repos.d / some.conf.

    yum distro-sync
    
  2. Paket yatim lainnya, perintahnya mungkin berbahaya.

    yum remove $(package-cleanup --orphans)
    

    atau, cukup gunakan perintah keamanan.

    yum remove name-of-page
    
Firo
sumber