Làm thế nào để biết từ kho lưu trữ yum mà một gói đã được cài đặt?


152

Sau khi tôi đã cài đặt một gói bởi yum (với nhiều kho được cấu hình), làm thế nào tôi có thể tìm thấy từ kho lưu trữ đã được cài đặt?

Nếu tôi chạy yum info package-name(hoặc yum list package-name), tôi chỉ có thể thấy gói đó được "cài đặt".


1
Câu hỏi tuyệt vời! Tôi đã cài đặt yum-utils và thử một cái mà nó gọi là repoquery, nhưng không có may mắn.
Sean Staats


@warren liên kết của bạn không hữu ích vì liên kết của bạn là một câu hỏi về "repo nào là vòng / phút được lưu trữ trong" nhưng câu hỏi này hỏi "repo nào là vòng / phút được cài đặt từ". câu hỏi khác nhau.
Trevor Boyd Smith

Nếu bạn đã quen làm rpm -qa|grep NAMEthì bạn có thể làm yum list installed|grep NAMEđể tìm repo của vòng / phút .
Trevor Boyd Smith

@TrevorBoydSmith - 7 năm trước, nó đã gần gũi. Ngày nay, nó vẫn tương tự. Không bao giờ nói nó là như nhau . Chỉ là nó có liên quan.
warren

Câu trả lời:


82

Với yum-utils được cài đặt, repoquery sẽ cung cấp thông tin bạn tìm kiếm (ở đây 'epel' là kho lưu trữ).

└─[$]> 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 dường như không hoạt động đúng, tôi nhận được các phiên bản gói khác nhau yum info package_name, dường như nó không truy vấn các kho theo thứ tự như yum.
Mike Miller

Tương tự ở đây trên một vài máy chủ. yum info package_nametrả về kết quả nhiều hơn so với repoquery rõ ràng. Đây là lý do tại sao trao đổi ngăn xếp không nên khóa phiếu.
phản xạ

8
Tôi thấy câu trả lời của Xiong Chiamiov không đúng. repoquery -i $pkgcung cấp repo từ đó $pkgcó sẵn, không phải repo từ đó $pkgđã được cài đặt. Tôi đã thực hiện lệnh đó rpm -qi $pkgvà có số phiên bản khác nhau. rpmdẫn đến số phiên bản sớm hơn so với repoquery.

Có thể bản sao cục bộ của bạn đã lỗi thời hoặc nó đã được cài đặt với các lệnh bổ sung cho yum (ví dụ --use-mirror). Tôi không nghĩ rằng luôn luôn có thể có câu trả lời đúng.
Xiong Chiamiov

người dùng158844 là đúng. Điều này sẽ cho bạn biết repos nào cung cấp một gói nhất định, nhưng không phải repo một gói cụ thể đến từ đâu. Nếu bạn đã cài đặt một gói từ một repo nào đó, hãy xóa repo đó, sau đó cài đặt một repo khác cung cấp một gói có cùng tên, chạy 'repoquery -i' như thế này sẽ trả về cho bạn các gói liệt kê repo mới được cài đặt, không phải là repo bạn thực sự đã cài đặt gói từ. Người hỏi muốn biết phần mềm cài đặt thực sự đến từ gói nào. Không phải những gì hiện tại repos xảy ra để có các gói có cùng tên.
Todd Walton

43

Phiên bản nào của yum?

Trên phiên bản hiện tại nếu gói đã cài đặt giống với phiên bản mới nhất hiện có thì repo nó đã được cài đặt sẽ được hiển thị.

$ 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

Nếu có một gói mới hơn có sẵn, thì nó sẽ được hiển thị riêng, với phiên bản mới hiển thị repo mà nó có sẵn từ đó.


Tôi đang sử dụng yum 3.2.19 trên hàng CentOs 5.3 và hàng "From repo" không tồn tại.
lg.

Đúng ... Tôi đã thử nghiệm nó vào ngày 3.2.21, không có thông tin đó ở bất cứ đâu. Khi tôi làm nó trên hộp của tôi có 3.2,23, nó đã hoạt động.
Alex

Bây giờ đây là giải pháp tốt nhất, nhưng không áp dụng cho RHEL / Centos 5.3. Tôi chấp nhận giải pháp này, nhưng tôi sẵn sàng chọn một câu trả lời khác nếu có thể áp dụng cho RHEL / Centos 5.3.
lg.

2
Đây là điều không nên làm trong CentOS 5.5.
Mike Miller

"Từ đại diện" không khả dụng ngay cả trong centos 5,8
sepehr

22

Đến muộn nhưng (ít nhất là trên Fedora 15) người ta có thể sử dụng yumdb cho các truy vấn tương tự:

yumdb info 'python*'

Và những gì tôi thực sự cần để liệt kê các gói từ repo (s) đã cho:

yumdb search from_repo 'my-*-repo'

Nó cũng hoạt động trên Fedora 14
lg.

1
hoạt động trên RHEL 6.2
pixelbeat

8

Nếu vẫn thất bại, bạn có thể kiểm tra yumdb bằng tay. Nó nằm trong /var/lib/yum/yumdbvà chứa thông tin chi tiết trên mỗi gói được cài đặt. Bạn sẽ đặc biệt quan tâm đến from_repo. Ví dụ: đối với bind-utilsgói:

# 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

Để có được thông tin bạn muốn:

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

Các phiên bản sau này sẽ cung cấp nhiều dữ liệu hơn; ví dụ trong EL 7, máy nhân bản và URL chính xác mà gói được tải xuống được lưu trữ ở đây.


+1. Nhưng thậm chí còn tốt hơn để làm một cái gì đó như : for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i` | grep -oP 'from_repo:\ \K.*'; done, trong ví dụ trên trả về: updates- dễ đọc hơn nhiều!
Greg Dubicki

1
@GregDubicki Điểm của lệnh là hiển thị nhiều hơn về bối cảnh của những gì đang diễn ra và cách mọi thứ được lưu trữ. Rõ ràng là không làm như vậy: Không cần grepbất cứ điều gì ở đây, và bạn thậm chí có thể thả vòng lặp. Rất đơn giản cat /var/lib/yum/yumdb/b/*bind-utils*/from_repolà tất cả những gì bạn cần.
Michael Hampton


5

Để xem những gì được cài đặt từ repo epel: (Nên hoạt động theo Centos 5.5), nếu bạn không có repo có tên epel, nó sẽ nhổ ra mọi thứ được cài đặt.

repoquery --repoid = epel -a | danh sách xargs yum được cài đặt


1
Điều này dường như hoạt động miễn là không có gói cập nhật trong kho lưu trữ. Vì vậy, bạn cần chạy cập nhật yum ngay trước khi sử dụng nó.
mã hóa

4

Nếu gói được cài đặt gần đây, bạn có thể xem trong / var / cache / yum.

Trong thư mục đó, có một thư mục cho mỗi repo và trong đó là một thư mục gói. Vì vậy, bạn sẽ làm một cái gì đó như:

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

Tuy nhiên, bộ đệm phải được bật trong tệp /etc/yum.conf của bạn:

cachedir=/var/cache/yum
keepcache=1

Lưu ý rằng a yum clean [packages|all]sẽ xóa thư mục bộ đệm.

Nếu thư mục bộ đệm trống, có một cách khác. Thông tin được đọc bởi yum info [package]/var/cache/yum/[repo[/primary.xml.gz

Bạn có thể xem qua tệp bằng cách nhập:

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

Tuy nhiên, trên các máy yum info [package]không hiển thị "Từ repo:", như được chỉ ra bởi 'thetherreceive', đó là vì nó không có trong tệp sơ cấp, vì vậy sẽ không có cách nào để lấy thông tin đó. Do đó, nếu gói nằm trong hai hoặc nhiều tệp sơ cấp, bạn sẽ phải xác định mức ưu tiên repo trên hệ thống của mình.


Giải pháp này có thể là một lựa chọn (tôi bỏ phiếu), nhưng tôi đang tìm kiếm một câu trả lời dứt khoát.
lg.

4

Dựa trên và trả lời bởi Swoogan
On RedHat và CentOS người ta có thể làm

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

Các kết quả sẽ trông giống như

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

Trong đó repository_name là kho lưu trữ nơi gói của bạn có thể được tìm thấy và có thể nó đã được cài đặt từ gói đầu tiên trong danh sách (xem yum repolist)


1

Thông tin đó có được nắm bắt ở bất cứ đâu không? Gói không có thông tin đó và yum không quan tâm sau khi tìm thấy gói. Bạn có thể ghép nó lại với nhau bằng cách tìm ra repos nào có gói và sau đó xác định cái nào được ưu tiên.


Giải pháp này có thể là một tùy chọn (tôi bỏ phiếu), nhưng chỉ cho gói được cài đặt gần đây, vì tôi có thể thay đổi kho lưu trữ và mức độ ưu tiên của chúng.
lg.

1

Không phải là một giải pháp tuyệt vời, nhưng tôi thấy rằng danh sách yum có sẵn sẽ cho bạn thấy nơi có phiên bản cập nhật nhất của mỗi gói, ví dụ:

danh sách yum có sẵn | greper

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

bluez-gstreamer.i386 4.30-2.fc10 cập nhật
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- plugin-bad-devel.i386 0.10.9-1.fc10 guxer-free guxer
-plugins-bad-devel.x86_64 0.10.9-1.fc10 rpmfusion-free

Vì vậy, bạn có thể thực hiện một danh sách yum có sẵn trên gói của mình, sau đó so sánh phiên bản đã cài đặt của bạn bằng cách sử dụng danh sách yum được cài đặt và có ý tưởng hay về việc repo nó đến từ đâu nếu các phiên bản khớp.


Điều này chỉ đúng khi gói chưa được cài đặt.
lg.

Mặc dù nó không trả lời chính xác câu hỏi OP, nhưng nó rất hữu ích cho tôi vì nó hoạt động trong Centoss 5.5 chỉ với yum và không có tiện ích nào khác, và bạn có thể: 1. Gỡ cài đặt gói sau đó truy vấn để xem repo ở đâu sau đó cài đặt lại hoặc 2. Truy vấn trên một máy khác mà không cài đặt gói.
tham lam

1

Bạn có thể thêm cờ dài dòng vào "thông tin yum":

yum info -v <package_name>

Kho lưu trữ cài đặt sẽ nằm dưới đầu ra "Từ repo".


Đây dường như là giải pháp duy nhất không yêu cầu cài đặt yum-utils.
Đánh dấu Edington

Điều này chỉ liệt kê "cài đặt" cho tôi.
ếchstarr78

1

Vì vậy, tôi biết đây là một câu hỏi hơi cũ - nhưng nó xuất hiện trên google tìm kiếm những gì tôi đang tìm kiếm.

Ngoài ra còn có một phương pháp để có được một danh sách repos duy nhất được sử dụng:

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

Điều này sẽ liệt kê các kho lưu trữ đã có các gói được cài đặt từ đó.


1

Cách tiếp cận đơn giản và đơn giản nhất mà không cần cài đặt bất kỳ công cụ bổ sung nào, greping hoặc xuất thông tin không liên quan chỉ đơn giản là:

yum list installed [package name]

Cột thứ ba sẽ cung cấp ID của kho lưu trữ mà gói đã được cài đặt từ đó.

Điều này đã được đề cập trong một nhận xét về câu hỏi ban đầu bằng grep, nhưng điều đó không cần thiết. Bạn chỉ có thể chuyển tên gói trực tiếp yumđể lọc.



-1

Cách dễ nhất là đây:

rpm -qa --qf '%{NAME} %{VENDOR}\n'

Thêm mẹo và thủ thuật có sẵn tại đây: http://wiki.centos.org/TipsAndTricks/YumAndRPM


2
Theo cách này (thêm một tên gói với tên grep -i) tôi phát hiện ra nhà cung cấp, nhưng không phải là kho lưu trữ.
lg.

1
Nhà cung cấp có (hầu như) không có gì để làm với kho lưu trữ.
Matteo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.