Apa arti '@' di depan nama repo di `dnf list`?

10

Ketika saya ingin mendaftar paket yang diinstal, saya biasanya melakukannya dengan salah satu dari dua cara.

Cara kuno menggunakan rpm -qa | grep <whatever I look for>, dan hanya itu.

Tetapi baru-baru ini saya ingin tampilan yang lebih komprehensif dari paket saya, dan selanjutnya, saya gunakan dnf list --installed <whatever I look for>.

Namun ketika melihat hasilnya ada beberapa hal yang saya tidak mengerti.

Pertimbangkan contoh ini:

# dnf list --installed zsh                  
Last metadata expiration check: 0:13:25 ago on Mon Jul 11 05:48:04 2016.
Installed Packages
zsh.x86_64            5.2-5.fc24            @@commandline

(spasi dalam hasil cetak sebenarnya lebih luas)

Jadi entri yang dihasilkan, adalah: «paket» «versi» «repo».

Dalam contoh saya itu:

  • paket: zsh.x86_64
  • versi: 5.2-5.fc24
  • repo: @@ commandline

Sejauh ini tabel yang dihasilkan dapat dimengerti, tapi saya bingung apa arti kedua '@@' di depan nama repo.

Juga, "commandline" menyarankan paket diinstal dari baris perintah (mengunduh RPM, dan kemudian melakukan dnf install whatever.rpm di baris perintah , dll.). Namun saya cukup yakin saya telah menginstal zshvia dnf install zsh.

Tapi itu belum semuanya.

Saya sudah beberapa paket pada sistem saya diinstal dari repo @System, @fedora(namun ada juga fedoratanpa @) dan hal-hal seperti @@commandline.

Jadi apa artinya itu @atau @@tepatnya di depan nama repo?

Dan kenapa saya memiliki begitu banyak paket yang diinstal @@commandlinemeskipun saya lebih dari yakin saya telah menginstalnya dari repo?

polemon
sumber

Jawaban:

2

Biarkan saya melempar batu bata untuk menarik beberapa batu giok di sini.

dnf list all | lessmemperlihatkan semua paket (termasuk paket yang diinstal dan tersedia). Output memiliki dua bagian: "Paket Terpasang" dan "Paket Yang Tersedia". Semua "Paket Terpasang" didahului dengan tanda @, sedangkan "Paket yang Tersedia" tidak. Jadi saya percaya @tanda-tanda menunjukkan paket sudah diinstal. Jika sebuah paket diinstal tetapi repo aslinya telah dihapus, saya kira @@tanda diberikan.

kode sumber dnf di-host di https://github.com/rpm-software-management/dnf . Setelah mengunduh kode src, lakukan grep commandline -ri .di direktori dan tidak mengembalikan apa pun. Namun, halaman github-nya menyebutkan ini,

Itu manajemen paket menggunakan RPM, libsolv dan perpustakaan hawkey.

Jadi saya melihat hawkey, yang dihosting di bawah proyek yang sama, di https://github.com/rpm-software-management/hawkey . Melihat kodenya grep -ri commandline ., itu menunjukkan beberapa hasil.

./src/types.h:#define HY_CMDLINE_REPO_NAME "@commandline"
./hawkey.spec:- fix: commandline RPMs do not provide their files (RhBug:1112810) (Ales Kozumplik)

Jadi commandlineberasal dari hawkeypaket. Mengenai pertanyaan mengapa @comandlineditampilkan dalam dnf listperintah, tebakan liar saya adalah dnfkode gagal digunakan hawkeydengan benar.

JohnKoch
sumber
Tampaknya halaman manual dnfsangat sunyi tentang ini. Misalkan '@' menunjukkan paket yang diinstal, apakah '@@' berarti itu diinstal secara manual dari sumber non-repo, mungkin? Saya benar-benar berharap seseorang akan mengklarifikasi.
polemon
1
"Biarkan aku melempar batu bata untuk menarik beberapa batu giok di sini." ... Saya sama sekali tidak tahu apa arti ungkapan yang luar biasa dan tidak dapat dipahami itu, dan saya rasa saya menyukainya. 😍 "Idiom!"
FeRD
1

(Penafian: Saya tidak dapat memberikan sumber untuk semua ini, karena saya belum pernah melihat dokumentasi yang benar-benar membahas hal-hal ini. Informasi yang harus diikuti hanyalah apa yang saya dapat suss melalui inspeksi, eksperimen blackbox, sembarangan coba-coba, dan dugaan lama yang polos. Juga, peringatan yang adil, terlalu banyak mengekspos sampai terlalu lama.)

DNF menambahkan @ untuk menunjukkan repo sebuah diinstal paket dipasang dari , di dnf listkonteks. Seperti yang Anda catat:

Saya sudah beberapa paket pada sistem saya diinstal dari repo @ Sistem, @ fedora (namun ada juga fedora tanpa @) dan hal-hal seperti @@ commandline.

Namun dalam kenyataannya, Anda tidak akan pernah melihat paket yang datang dari fedorapada diinstal daftar, karena setiap paket ada menunjukkan beberapa @ -repo sebagai sumbernya. (Anda dapat memverifikasi bahwa dengan menjalankan sudo dnf list installeddan memeriksa; tidak ada repo yang terdaftar tanpa setidaknya satu tanda @.) Ketika Anda melihat informasi paket dengan dnf info, " From repo:" bidang akan menunjukkan nama repo tanpa @. (" From repo: fedora" Jadi sangat mungkin, dan setara dengan @fedoradalam daftar yang diinstal.)

Tetapi beberapa repo diberi nama dengan @tanda di depan. Seperti yang ditemukan JohnKoch di sumber hawkey, "@commandline" didefinisikan sebagai "nama repo" untuk "repo baris perintah". Jadi, @@commandlinedalam dnf listdaftar hanya menunjukkan paket yang diinstal From repo: @commandline, repo yang membingungkan diberi nama yang dimulai dengan tanda @ sendiri.

dnf infopada setiap paket yang terinstal akan ditampilkan Repository: @System, yang merupakan @repo virtual yang dinamai lainnya . Tampaknya itu @Systemadalah repo virtual yang memegang set paket yang saat ini diinstal, dan repo sumber@commandline virtual dari mana sebuah paket datang, ketika itu tidak berasal dari repo apa pun.

Arti @commandlinedan @System, dan hubungan mereka satu sama lain, tampaknya telah berubah sejak saya pertama kali menulis jawaban ini. Dalam beberapa hal itu lebih konsisten, dan mengatasi beberapa keberatan saya sebelumnya tentang bagaimana @commandlinedigunakan. Saya tidak lagi melihat setiap paket yang diinstal terdaftar sebagai dari @@System, dan out-of-band menginstal memang akan sekarang menunjukkan From repo: @commandline( @@commandlinedalam konteks daftar). dnf infopada paket out-of-band yang diinstal biasanya menunjukkan sesuatu seperti berikut:

$ dnf info remi-release
Installed Packages
Name         : remi-release
---✀---
Repository   : @System
From repo    : @commandline

Jika saya melakukan dnf reinstall remi-release(karena paket tersebut dalam remirepo), itu berubah menjadi:

$ dnf info remi-release
Installed Packages
Name         : remi-release
---✀---
Repository   : @System
From repo    : remi

Satu hal lain tentang repo sumber: Repo yang terdaftar di From repo:bidang selalu repo yang ada dalam konteks repo saat ini . Dengan kata lain, sumber instalasi suatu paket bukan hanya string yang berisi nama repo; paket yang diinstal dikaitkan dengan identitas repo yang menyediakan sebagaimana ada (atau ada) dalam sistem.

Karena kebanyakan repo adalah versi distro, mereka diredefinisi dengan setiap rilis Fedora baru. (Seperti misalnya fedorarepo menjadi set paket yang membentuk rilis baru, repo yang sama sekali berbeda dari " fedora" yang ada pada rilis sebelumnya.) Jadi, setiap kali upgrade sistem dilakukan, banyak identitas repo lama batal.

DNF (atau hawkey) digunakan untuk membuang paket yang diinstal dari repo yang tidak lagi ada @commandlinesebagai sumber repo mereka. Saya katakan "dulu", karena itu (untungnya) tidak lagi dilakukan. Paket terinstal yang berasal dari repo yang tidak ada lagi tidak akan lagi menunjukkan sumbernya sebagai @@commandline/ From repo: @commandline. Bahkan, dnf infomenunjukkan bahwa mereka tidak lagi memiliki setiap sumber repo. Misalnya, sitecopyadalah paket Fedora yang sejak itu sudah pensiun. Saya menginstalnya dari fedoraatau updatesrepo 7 atau 8 rilis yang lalu, dan masih menginstalnya:

$ dnf info sitecopy
Installed Packages
Name         : sitecopy
Version      : 0.16.6
Release      : 14.fc22
Architecture : x86_64
Size         : 373 k
Source       : sitecopy-0.16.6-14.fc22.src.rpm
Repository   : @System

Tidak ada yang From repo:terdaftar.

Hal ini membingungkan berarti bahwa dnf list installedakan menunjukkan bahwa paket (dan lain-lain seperti itu) dengan @System(satu @) tercantum di samping itu. Jadi dalam beberapa hal kami baru saja menukar satu inkonsistensi dengan yang lain, karena kolom itu tidak lagi selalu menjadi sumber repo dengan @prepended. Tetap saja, saya lebih suka keadaan saat ini.

Catatan kaki

  1. "... yang ditampilkan ..."
    (Terkadang ditampilkan. "Paket yang Tersedia" tidak selalu muncul di setiap proses dnf list: Jika versi paket yang terinstal adalah versi terbaik yang tersedia, itu terdaftar di bawah "Paket Terpasang" jadi akan berlebihan untuk juga mendaftar di bawah "Paket yang Tersedia". Menggunakan --showduplicatesakan memaksa bagian "Paket yang Tersedia" yang mencakup semua contoh yang diketahui, terlepas dari versi, apakah diinstal atau dapat diunduh.)
FeRD
sumber
Saya telah memperbarui jawaban ini dengan beberapa perubahan yang diamati pada F30 dibandingkan dengan F28 (ketika awalnya ditulis), dan juga untuk mengatasi hal-hal yang muncul pada pertanyaan duplikat ini .
FeRD