GNU/Linux >> Belajar Linux >  >> Fedora

Fedora – Bagaimana Cara Mereplikasi Pilihan Paket yang Terinstal Dari Satu Instance Fedora Ke Yang Lain?

Saya memiliki sistem Fedora (A) di mana saya telah menginstal beberapa paket dari waktu ke waktu. Sekarang saya ingin menginstal Fedora di komputer lain (B) dan saya ingin menginstal paket yang sama di dalamnya.

Dalam istilah Debian saya ingin mencapai sesuatu seperti ini:

$ dpkg --get-selections > pkg_sel_host_a  # on host_a
$ dpkg --set-selections < pkg_sel_host_a  # on host_b

Tapi sejujurnya, saya sangat menginginkan metode yang lebih baik untuk memilih paket yang sama pada sistem Fedora 19 yang baru (B):Saya hanya ingin menginstal paket dari sistem A yang secara eksplisit disebutkan pada dnf install (atau yum install ) baris perintah – dan bukan yang diinstal sebagai dependensi!

Mengapa? Karena mungkin dependensi telah berubah – dan saya tidak ingin menginstal dependensi yang sudah ketinggalan zaman pada sistem baru. Plus, ketika saya menghapus paket, saya ingin menghapus (mungkin) dependensi yang diinstal secara otomatis yang tidak dibutuhkan (yaitu anak yatim) juga.

Saya telah menemukan dnf list installed – tetapi tidak ditampilkan jika sebuah paket dipilih secara eksplisit atau hanya diinstal karena ketergantungan.

Bagaimana cara mendapatkan informasi itu di Fedora?

Apa cara Fedora/dnf untuk mereplikasi pilihan paket?

Jawaban yang Diterima:

Sejak Fedora 26, repoquery Dnf dukungan subcommand memiliki opsi baru untuk mendaftar semua paket yang diinstal pengguna:

$ dnf repoquery --qf '%{name}' --userinstalled 
 | grep -v -- '-debuginfo$' 
 | grep -v '^(kernel-modules|kernel|kernel-core|kernel-devel)$' > pkgs_a.lst

Berbeda dengan metode lain, ini juga mencantumkan semua paket debuginfo. Grep tambahan dalam contoh di atas menyaringnya.

Untuk menginstal daftar pada host B:

$ < pkgs_a.lst xargs dnf -y install

Dnf API

Dengan versi Dnf terbaru (mis. Fedora>=23), database paket dapat ditanyakan untuk nama paket yang diinstal pengguna melalui Dnf Python API:

$ python3 -c 'import dnf; b = dnf.Base(); b.fill_sack(); 
  l = sorted(set(x.name for x in b.iter_userinstalled() 
       if not x.name.endswith("-debuginfo") 
          and x.name not in 
             ["kernel-modules", "kernel", "kernel-core", "kernel-devel"] )); 
  print("n".join(l)) ' > pkgs_a.lst

# dnf install $(cat pkgs_a.lst) # on host_b

Secara default, dnf install dibatalkan jika satu atau lebih paket tidak tersedia lagi. Atau, dnf dapat dipaksa untuk menginstal semua yang tersisa:

# dnf install --setopt=strict=0 $(cat pkgs_a.lst) # on host_b

PS: Masukkan kode di atas dan lainnya ke dalam user-installed.py yang juga mendukung distribusi lain.

riwayat pengguna terpasang

Pada Fedora 23 dan yang lebih baru, Dnf menyediakan

# dnf history userinstalled

perintah yang mencantumkan semua paket yang diinstal pengguna. Pada 2016-11, kegunaannya terbatas karena tidak ada cara untuk mengontrol outputnya dan ia mencetak paket yang sepenuhnya memenuhi syarat (yaitu, termasuk informasi versi).

Batasan yang dipasang pengguna

Perhatikan bahwa penandaan paket sebagai terinstal pengguna memiliki beberapa batasan pada beberapa versi Fedora, untuk sistem Fedora era 23-ish (dari sekitar 2015-11) masalah berikut relevan):

  • paket yang diinstal melalui GUI tidak disertakan
  • paket yang diinstal melalui pengendali command-not-found tidak disertakan
  • beberapa paket yang diinstal secara default (dengan anaconda) disertakan
Terkait:Rentang bus ilegal atau nama untuk fungsi logika misalnya "instMyAdder" dari tipe 4 Bit Adder?

Permintaan Ulang

Pada sistem Fedora yang lebih lama, tempat Dnf, API Dnf, dan dnf history userinstalled tidak tersedia, seseorang dapat menggunakan repoquery sebagai gantinya, mis.:

$ repoquery --installed 
     --qf '%{n} | %{yumdb_info.reason} | %{yumdb_info.installed_by}' --all 
    | awk -F'|' ' $2 ~ /user/ && ($3 != 4294967295) { print $1 }'  
    | sort -u > pkgs_a.lst

Kondisi awk kedua digunakan untuk mengecualikan paket yang diinstal oleh penginstal. ID pengguna penginstal tampaknya disimpan sebagai 4294967295 – sebagai alternatif, Anda dapat menulis sesuatu seperti ($3 == 0 || $3 == your-user-id) .

Perhatikan bahwa perintah ini berfungsi pada Fedora hingga rilis 21 – tetapi mis. bukan pada rilis 23, karena perintah repoquery diganti dengan dnf repoquery . Dan dnf repoquery tidak mengerti %{yumdb_info.reason} tag.


Fedora
  1. Cara Membangun Paket Dari Sumber Menggunakan CheckInstall

  2. Cara Menghapus Paket yang Terinstal Dari Repositori Tertentu Di CentOS, Fedora

  3. Debian – Bagaimana Cara Mereplikasi Pilihan Paket yang Terinstal Dari Satu Sistem Debian Ke Yang Lain? (debian Mengi)?

  1. Cara Mendaftar Paket yang Diinstal di Ubuntu

  2. Cara Meningkatkan Fedora 34 dari Fedora 33 menggunakan DNF

  3. Cara Mengemas dan Mentransfer Gambar Docker Dari Satu Server ke Server Lainnya

  1. Cara Menghapus atau Menghapus Paket Perangkat Lunak Dari Ubuntu

  2. Cara Menghapus atau Menghapus Paket dari CentOS

  3. Cara meningkatkan ke Fedora 24 dari Fedora 23