Sejak Fedora 26, dukungan repoquery
sub- perintah Dnf 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, ia juga mencantumkan semua paket debuginfo. Grep tambahan dalam contoh di atas memfilternya.
Untuk menginstal daftar di host B:
$ < pkgs_a.lst xargs dnf -y install
API Dnf
Dengan versi Dnf terbaru (mis. Fedora> = 23), basis data paket dapat ditanyakan untuk nama paket yang diinstal pengguna melalui API Python Dnf:
$ 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
batalkan 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 lebih banyak lagi user-installed.py
yang juga mendukung distribusi lain.
riwayat pengguna diinstal
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 hasilnya dan mencetak paket yang sepenuhnya memenuhi syarat (yaitu termasuk informasi versi).
Keterbatasan yang diinstal pengguna
Perhatikan bahwa penandaan paket sebagai yang diinstal oleh pengguna memiliki beberapa batasan pada beberapa versi Fedora, untuk sistem era Fedora 23-ish (mulai sekitar 2015-11) masalah berikut ini relevan):
Repoquery
Pada sistem Fedora yang lebih lama, di mana Dnf, API Dnf dan dnf history userinstalled
tidak tersedia, seseorang dapat menggunakan repoquery sebagai gantinya, misalnya:
$ 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 installer. User-id installer tampaknya disimpan sebagai 4294967295 - atau Anda dapat menulis sesuatu seperti itu ($3 == 0 || $3 == your-user-id)
.
Perhatikan bahwa perintah ini berfungsi pada Fedora hingga rilis 21 - tetapi mis. Tidak pada rilis 23, karena perintah repoquery
diganti dengan dnf repoquery
. Dan dnf repoquery
tidak mengerti %{yumdb_info.reason}
tag.
repoquery ...
: "querytag yumdb tidak valid 'alasan' untuk pkg terpasang: HandBrake-cli-0.9.5-1.fc14.x86_64"yum localinstall ...
. Saya punya cukup banyak paket yang jatuh ke kamp itu.repoquery --installed --qf '%{n} - %{yumdb_info.reason}' --all 2>&1|grep -v "user$"|grep -v "dep$" |wc -l
mengembalikan 90 paket.Cara termudah, dan itu berhasil untuk waktu yang lama adalah:
... yang berfungsi seperti perintah get / set dpkg, AIUI. Perhatikan juga bahwa jika Anda memutar ulang riwayat, Anda dapat menggunakan:
... Daripada harus mengurai sendiri.
sumber
Terinspirasi oleh jawaban slm , saya telah datang dengan solusi berbasis berikut :
yum history
Dapatkan semua riwayat terperinci tentang semua transaksi pemasangan yum (mis. Tidak ada peningkatan), tidak termasuk yang dieksekusi sebagai bagian dari tindakan pemasang awal (transaksi 1 dan 2 pada sistem saya, dikaitkan dengan pengguna 'Sistem'):
Saring paket yang diinstal secara eksplisit dan memotong awalan versi.
Ekspresi reguler yang jelek diperlukan agar semua jenis sufiks versi cocok.
Hasilnya terlihat cukup baik di sistem saya.
Perbandingan dengan ansatz repoquery (di sistem saya):
(Saya menyalurkan hasil repoquery melalui sort -u)
Mengapa ada perbedaan? Karena repoquery mencakup semua paket dari transaksi 1 dan 2, yaitu semua paket yang diinstal oleh installer Fedora. Ini menjelaskan mengapa repoquery menyertakan paket-paket yang disebutkan xorg-x11- drv-mga dan teman-teman.
Membandingkan repoquery-2nd dan yum-history menunjukkan bahwa repoquery-2nd lebih akurat - tidak termasuk beberapa paket yang sudah dihapus. Selain itu termasuk beberapa (2 pada sistem saya) paket dari operasi 'pembaruan yum', tampaknya.
Peringatan
Metode berbasis sejarah di atas hanya mencantumkan semua paket yang diinstal secara eksplisit selama masa hidup lengkap sistem. Itu tidak mengimbangi paket-paket yang dihapus dalam transaksi nanti. Dengan demikian, metode ini membutuhkan beberapa kurasi manual dari hasil dan hanya boleh digunakan pada sistem yang
repoquery
tidak tersedia.sumber
Saya memiliki versi yang lebih lama dari Fedora (14) sehingga yum saya menyertakan versi yang kurang kaya fitur
yum
, tetapi Anda mungkin ingin melihatyum history
fitur tersebut. Saya yakin Anda bisa mendapatkan info yang Anda cari dari perintah itu.daftar sejarah
Anda dapat kembali ke transaksi pertama dengan memberikan daftar nomor ke
yum history list
:info sejarah
Berikut ini akan menunjukkan kepada Anda apa yang diinstal sebagai bagian dari transaksi yum pertama:
Perhatikan bagaimana Anda melaporkan apakah suatu paket secara eksplisit diinstal atau diinstal karena dibutuhkan oleh dependensi. Anda dapat menguraikan info ini dan mendapatkan daftar paket yang diinstal secara eksplisit.
sumber
yum history
ide Anda , itu juga membandingkan hasilnya denganrepoquery
metode berbasis. Sebagai efek samping saya telah memperluas jawaban repoquery saya.sumber
--userinstalled
saklar hanya ditambahkan ke DNF Mei . Saya sudah mengujinya, dan memberikan hasil yang akurat. Modulo paket kernel / kernel-inti / modul-kernel yang tidak benar-benar diinstal pengguna. Ini juga berisi semua*-debuginfo
paket - tetapi mereka dapat dengan mudah disaring, jika perlu.Untuk mencantumkan paket yang telah Anda instal, coba one-liner ini :
Hasil:
PS1: tidak menunjukkan dependensi
PS2: disortir berdasarkan abjad
PS3: itu tidak muncul jika Anda telah menghapus paket nanti
sumber
Apa yang saya lakukan (lupa detailnya, dan saya gelandangan malas, jadi ...
Dapatkan semua paket yang diinstal:
rpm -qa > file
Gunakan
sed(1)
untuk menyingkirkan nomor versi dan semacamnya (pertahankan arsitektur, jika diperlukan). Ini membutuhkan beberapa iterasi untuk memperbaikinya, Anda ingin mengganti bentangan terakhir-[0-9.]-[0-9].fc23
atau serupa dengan tidak ada, tetapi ada juga versi "angka" yang lucu.Setelah menginstal seperti biasa, lakukan
yum -y install $(< file)
(ataudnf
, sesuai kebutuhan).Anda akan mendapatkan beberapa paket kejatuhan yang tidak ada lagi, atau berganti nama, atau digantikan oleh yang lain.
sumber