Bagaimana cara mengetahui dari repositori yum mana suatu paket telah diinstal?


152

Setelah saya menginstal paket dengan yum (dengan beberapa repositori yang dikonfigurasi), bagaimana saya bisa menemukan dari repositori mana ia telah diinstal?

Jika saya menjalankan yum info package-name(atau yum list package-name), saya hanya dapat melihat bahwa paket tersebut "diinstal".


1
Pertanyaan bagus! Saya menginstal yum-utils dan mencoba salah satu utils yang disebut repoquery, tetapi tidak berhasil.
Sean Staats


@warren tautan Anda tidak berguna karena tautan Anda adalah pertanyaan tentang "repo apa yang disimpan dalam satu rpm" tetapi pertanyaan ini menanyakan "repo apa yang berasal dari rpm INSTALLED". pertanyaan yang berbeda.
Trevor Boyd Smith

jika Anda terbiasa melakukan rpm -qa|grep NAMEmaka Anda dapat melakukan yum list installed|grep NAMEuntuk menemukan apa repo dari rpm .
Trevor Boyd Smith

@TrevorBoydSmith - 7 tahun yang lalu, sudah dekat. Hari ini, masih serupa. Tidak pernah mengatakan itu sama . Hanya saja itu terkait.
warren

Jawaban:


82

Dengan yum-utils terinstal, repoquery akan memberikan informasi yang Anda cari (di sini 'epel' menjadi repositori).

└─[$]> repoquery -i cherokee

Name        : cherokee
Version     : 0.99.49
Release     : 1.el5
Architecture: i386
Size        : 8495964
Packager    : Fedora Project
Group       : Applications/Internet
URL         : http://www.cherokee-project.com/
Repository  : epel
Summary     : Flexible and Fast Webserver
Description :
Cherokee is a very fast, flexible and easy to configure Web Server. It supports
the widespread technologies nowadays: FastCGI, SCGI, PHP, CGI, TLS and SSL
encrypted connections, Virtual hosts, Authentication, on the fly encoding,
Apache compatible log files, and much more.

2
repoquery sepertinya tidak berfungsi dengan benar, saya mendapatkan versi paket yang berbeda yum info package_name, sepertinya tidak menanyakan repositori dengan urutan yang sama dengan yum.
Mike Miller

Sama di sini di beberapa server. yum info package_namemengembalikan lebih banyak hasil daripada repoquery. Inilah mengapa pertukaran stack tidak harus mengunci suara.
reflexiv

8
Saya menemukan jawaban Xiong Chiamiov tidak benar. repoquery -i $pkgmemberikan repo dari mana a $pkgtersedia, bukan repo dari mana $pkgdiinstal. Saya melakukan perintah itu dan rpm -qi $pkgdan mendapat nomor versi yang berbeda. rpmmenghasilkan nomor versi lebih awal dari pada repoquery.

Mungkin salinan lokal Anda kedaluwarsa, atau diinstal dengan perintah tambahan untuk yum (mis --use-mirror.). Saya pikir tidak mungkin untuk selalu mendapatkan jawaban yang benar.
Xiong Chiamiov

user158844 benar. Ini akan memberi tahu Anda apa repo menyediakan paket yang diberikan, tetapi bukan dari apa repo paket tertentu berasal. Jika Anda menginstal paket dari repo tertentu, menghapus repo itu, kemudian menginstal repo lain yang menyediakan paket dengan nama yang sama, menjalankan 'repoquery -i' seperti ini akan mengembalikan kepada Anda paket yang berisi repo yang baru diinstal, bukan yang Anda benar-benar menginstal paket dari. Penanya ingin tahu paket apa dari perangkat lunak yang diinstal sebenarnya berasal. Tidak seperti apa repo saat ini memiliki paket dengan nama yang sama.
Todd Walton

43

Apa versi yum?

Pada versi saat ini jika paket yang diinstal adalah versi yang sama dengan yang terbaru tersedia maka repo itu diinstal dari ditampilkan.

$ yum info irssi
Installed Packages
Name       : irssi
Arch       : i586
Version    : 0.8.14
Release    : 1.fc11
Size       : 2.3 M
Repo       : installed
From repo  : updates
Summary    : Modular text mode IRC client with Perl scripting
URL        : http://irssi.org/
License    : GPLv2+
Description: Irssi is a modular IRC client with Perl scripting. Only text-mode
           : frontend is currently supported. The GTK/GNOME frontend is no
           : longer being maintained.

$ yum --version
3.2.23

Jika ada paket yang lebih baru tersedia, maka itu akan ditampilkan secara terpisah, dengan versi baru menunjukkan dari repo itu tersedia.


Saya menggunakan yum 3.2.19 pada CentOs 5.3 dan baris "Dari repo" tidak ada.
lg.

Yap ... Saya mengujinya di 3.2.21, yang tidak memiliki info itu di mana pun. Ketika saya melakukannya di kotak saya yang memiliki 3.2.23, itu berhasil.
Alex

Sekarang ini adalah solusi terbaik, tetapi tidak berlaku untuk RHEL / Centos 5.3. Saya menerima solusi ini, tetapi saya siap untuk memilih jawaban lain jika akan berlaku juga untuk RHEL / Centos 5.3.
lg.

2
Ini juga dilarang di CentOS 5.5.
Mike Miller

"From rep" tidak tersedia bahkan dalam centos 5.8
sepehr

22

Datang terlambat, tetapi (setidaknya pada Fedora 15) orang dapat menggunakan yumdb untuk pertanyaan serupa:

yumdb info 'python*'

Dan apa yang sebenarnya saya butuhkan untuk mendaftar paket dari repo yang diberikan:

yumdb search from_repo 'my-*-repo'

Ini juga berfungsi pada Fedora 14
lg.

1
bekerja pada RHEL 6.2
pixelbeat

8

Jika semuanya gagal, Anda dapat memeriksa yumdb secara manual. Itu terletak di /var/lib/yum/yumdbdan berisi informasi terperinci tentang setiap paket yang diinstal. Anda akan sangat tertarik from_repo. Misalnya, untuk bind-utilspaket:

# for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i`; done
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/checksum_data: 39f7840f93d3d76825a9e8da79cfe0366f7fad68f018a273477aee62cccfa3f4
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/checksum_type: sha256
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/command_line: install bind-utils
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo: updates
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo_revision: 1397654451
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo_timestamp: 1397654759
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/installed_by: 0
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/reason: user
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/releasever: 6

Untuk mendapatkan informasi yang Anda inginkan:

# cat /var/lib/yum/yumdb/b/*bind-utils*/from_repo
updates

Versi yang lebih baru akan memberikan lebih banyak data; misalnya dalam EL 7 mirror dan URL yang tepat dari mana paket itu diunduh disimpan di sini.


+1. Tetapi bahkan lebih baik untuk melakukan sesuatu seperti:, for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i` | grep -oP 'from_repo:\ \K.*'; doneyang dalam contoh di atas mengembalikan: updates- jauh lebih mudah dibaca!
Greg Dubicki

1
@GregDubicki Maksud dari perintah ini adalah untuk menunjukkan lebih banyak konteks dari apa yang terjadi dan bagaimana segala sesuatu disimpan. Tampaknya gagal melakukannya: Tidak perlu grepapa - apa di sini, dan Anda bahkan dapat membatalkannya. Yang sangat sederhana cat /var/lib/yum/yumdb/b/*bind-utils*/from_repoadalah semua yang Anda butuhkan.
Michael Hampton

6
rpm -qi packagename

Akan memberi tahu Anda vendor dan pembuat paket


5

Untuk melihat apa yang diinstal dari repo epel: (Harus bekerja di bawah Centos 5.5) perhatikan, jika Anda tidak memiliki repo bernama epel, itu akan memuntahkan semua hal yang diinstal.

repoquery --repoid = epel -a | xargs daftar yum diinstal


1
Ini tampaknya berfungsi selama tidak ada paket yang diperbarui di repositori. Jadi, Anda perlu menjalankan pembaruan yum tepat sebelum menggunakannya.
codewaggle

4

Jika paket diinstal baru-baru ini, Anda dapat melihat di / var / cache / yum.

Di dalam direktori itu, ada direktori untuk setiap repo, dan dalam direktori paket. Jadi, Anda akan melakukan sesuatu seperti:

find /var/cache/yum -name [package-name]*

Namun, cache harus diaktifkan di file /etc/yum.conf Anda:

cachedir=/var/cache/yum
keepcache=1

Perhatikan bahwa a yum clean [packages|all]akan menghapus direktori cache.

Jika direktori cache kosong, ada cara alternatif. Informasi yang dibaca oleh yum info [package]berasal dari /var/cache/yum/[repo[/primary.xml.gz

Anda dapat melihat melalui file dengan memasukkan:

gunzip -d -c /var/cache/yum/[repo]/primary.xml.gz | grep '<name>[package]'

Namun, pada mesin di mana yum info [package]tidak menampilkan "Dari repo:", seperti yang ditunjukkan oleh 'theotherreceive', itu karena tidak ada di file primary.xml, jadi tidak akan ada cara untuk mengambil informasi itu. Oleh karena itu, jika paket tersebut dalam dua atau lebih file primary.xml, Anda harus menentukan prioritas repo pada sistem Anda.


Solusi ini mungkin merupakan opsi (saya memilihnya), tetapi saya mencari jawaban yang pasti.
lg.

4

Berdasarkan dan dijawab oleh Swoogan
Pada RedHat dan CentOS, seseorang dapat melakukannya

sudo grep -ir PACKAGE_NAME /var/cache/yum/

Hasilnya akan terlihat seperti

Binary file /var/cache/yum/REPOSITORY_NAME/primary.xml.gz.sqlite matches

Di mana repository_name adalah repositori tempat paket Anda dapat ditemukan, dan itu mungkin diinstal dari yang pertama dalam daftar (lihat yum repolist)


1

Apakah informasi itu ditangkap di mana saja? Paket tidak memiliki informasi itu, dan yum tidak peduli setelah menemukan paket. Anda mungkin bisa menyatukannya dengan mencari tahu repo apa yang memiliki paket dan kemudian menentukan mana yang memiliki prioritas.


Solusi ini mungkin sebuah opsi (saya memilihnya), tetapi hanya untuk paket yang baru saja diinstal, karena saya dapat mengubah repositori dan prioritasnya.
lg.

1

Bukan solusi yang hebat, tetapi saya menemukan bahwa daftar yum yang tersedia akan menunjukkan kepada Anda di mana versi terbaru dari setiap paket tersedia, misalnya:

daftar yum tersedia | grep gstreamer

PackageKit-gstreamer-plugin.x86_64 0.3.16-1.fc10          updates               

bluez-gstreamer.i386 4.30-2.fc10 memperbarui
gstreamer.i386 0.10.21-2.fc10 fedora
gstreamer-devel.i386 0.10.21-2.fc10 fedora
gstreamer-devel.x86_64 0.10.21-2.fc10 fedora
gstreamer- plugins-bad-devel.i386 0.10.9-1.fc10 rpm
gstreamer bebas -plugins-bad-devel.x86_64 0.10.9-1.fc10 rpmfusion-free

Jadi Anda bisa melakukan daftar yum yang tersedia di paket Anda, lalu membandingkan versi yang diinstal menggunakan daftar yum yang diinstal, dan memiliki ide yang bagus tentang repo mana yang berasal dari jika versi cocok.


Ini benar hanya paket belum diinstal.
lg.

Meskipun tidak menjawab pertanyaan OPs dengan tepat, itu sangat membantu bagi saya karena ia bekerja di Centoss 5.5 hanya dengan yum dan tidak ada utilitas lain, dan Anda dapat: 1. Hapus instalasi paket kemudian kueri untuk melihat di mana repo kemudian instal ulang , atau 2. Permintaan pada mesin yang berbeda tanpa paket terpasang.
lreeder

1

Anda dapat menambahkan bendera verbose ke "info yum":

yum info -v <package_name>

Repositori instalasi akan berada di bawah output "Dari repo".


Ini tampaknya menjadi satu-satunya solusi yang tidak perlu menginstal yum-utils.
Mark Edington

Ini hanya mencantumkan "diinstal" untuk saya.
frogstarr78

1

Jadi saya tahu ini adalah pertanyaan yang agak lama - tetapi muncul di pencarian google untuk apa yang saya cari.

Ada juga metode untuk mendapatkan daftar unik dari repo yang digunakan:

# repoquery -ai | grep 'Repository  : ' | sort | uniq

Ini akan mencantumkan repositori yang memiliki paket yang diinstal.


1

Pendekatan paling sederhana dan paling mudah tanpa menginstal alat tambahan, menangkap atau mengeluarkan informasi asing adalah hanya:

yum list installed [package name]

Kolom ketiga akan memberikan ID dari repositori tempat paket itu diinstal.

Ini disebutkan dalam komentar pada pertanyaan asli menggunakan grep, tapi itu tidak perlu. Anda bisa langsung memberikan nama paket langsung yumke filter.



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.