จะทราบได้อย่างไรว่าได้ทำการติดตั้งแพคเกจ yum repository แล้ว?


152

หลังจากที่ฉันติดตั้งแพคเกจโดย yum (พร้อมที่เก็บหลายที่กำหนดค่า) ฉันจะหาที่เก็บที่ติดตั้งไว้ได้อย่างไร

ถ้าฉันเรียกใช้yum info package-name(หรือyum list package-name) ฉันจะเห็นได้ว่าแพ็คเกจนั้น "ติดตั้ง" เท่านั้น


1
เป็นคำถามที่ดีมาก! ฉันติดตั้ง yum-utils แล้วลองอันที่เรียกว่า repoquery แต่ไม่มีโชค
Sean Staats

ดูเพิ่มเติมserverfault.com/questions/90409/... :)
วอร์เรน

@warren ลิงก์ของคุณไม่มีประโยชน์เนื่องจากลิงก์ของคุณเป็นคำถามเกี่ยวกับ "repo คือ rpm ที่จัดเก็บใน" แต่คำถามนี้ถามว่า "repo ใดที่ติดตั้ง rpm จาก" คำถามที่แตกต่าง
Trevor Boyd Smith

ถ้าคุณจะใช้ในการทำrpm -qa|grep NAMEแล้วคุณสามารถทำyum list installed|grep NAMEเพื่อค้นหาสิ่งที่ repo รอบต่อนาทีมาจาก
Trevor Boyd Smith

@TrevorBoydSmith - 7 ปีที่แล้วมันใกล้ วันนี้มันยังคงคล้ายกัน ไม่เคยบอกว่ามันเป็นแบบเดียวกัน เพียงแค่ว่ามันเกี่ยวข้อง
warren

คำตอบ:


82

เมื่อติดตั้ง yum-utils แล้ว repoquery จะให้ข้อมูลที่คุณต้องการ (ที่นี่ 'epel' เป็นที่เก็บข้อมูล)

└─[$]> 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 ดูเหมือนว่าจะทำงานไม่ถูกต้องฉันได้รับรุ่นแพคเกจที่แตกต่างกันแล้วyum info package_nameดูเหมือนจะไม่สอบถามที่เก็บในลำดับเดียวกันกับ yum
Mike Miller

เหมือนกันที่นี่บนเซิร์ฟเวอร์ไม่กี่ yum info package_nameส่งคืนผลลัพธ์มากกว่า repoquery อย่างเห็นได้ชัด นี่คือเหตุผลที่การแลกเปลี่ยนสแต็คไม่ควรล็อคในการโหวต
reflexiv

8
ฉันพบคำตอบของ Xiong Chiamiov ไม่ถูกต้อง repoquery -i $pkgให้ repo ที่มี$pkgอยู่ไม่ใช่ repo ที่$pkgติดตั้งไว้ ฉันทำตามคำสั่งนั้นrpm -qi $pkgและได้หมายเลขเวอร์ชันที่แตกต่างกัน ส่งผลให้จำนวนรุ่นก่อนหน้านี้กว่าrpm repoquery

อาจเป็นไปได้ว่าสำเนาในเครื่องของคุณล้าสมัยหรือติดตั้งพร้อมกับคำสั่งเพิ่มเติมเพื่อ yum (เช่น--use-mirror) ฉันไม่คิดว่าเป็นไปได้ที่จะได้รับคำตอบที่ถูกต้องเสมอ
Xiong Chiamiov

user158844 ถูกต้อง สิ่งนี้จะบอกคุณว่า repos มีแพ็คเกจใดบ้าง แต่ไม่ใช่ repo ที่มาจากแพ็คเกจเฉพาะ หากคุณติดตั้งแพคเกจจาก repo บางอย่างออกว่า repo ติดตั้งแล้ว repo ที่ให้แพคเกจที่มีชื่อเดียวกันที่ทำงาน 'repoquery -i' เช่นนี้จะกลับมาให้คุณแพคเกจรายชื่อ repo ที่ติดตั้งใหม่อีกไม่หนึ่งที่ คุณติดตั้งแพ็คเกจจากจริง ผู้ถามต้องการทราบว่าซอฟต์แวร์ที่ติดตั้งมาจากไหน ไม่ใช่ repos ปัจจุบันที่เกิดขึ้นกับแพ็คเกจที่ใช้ชื่อเดียวกัน
ทอดด์วอลตัน

43

Yum รุ่นใด

ในเวอร์ชั่นปัจจุบันหากแพ็กเกจที่ติดตั้งเป็นเวอร์ชั่นเดียวกันกับเวอร์ชั่นล่าสุดที่มีอยู่จะมีการแสดง repo ที่ติดตั้งใหม่

$ 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

หากมีแพ็คเกจใหม่ให้ใช้งานแพคเกจนั้นจะแสดงแยกต่างหากพร้อมกับเวอร์ชั่นใหม่ที่แสดง repo ที่มีให้


ฉันใช้ yum 3.2.19 กับ CentOs 5.3 และแถว "จาก repo" ไม่มีอยู่
lg

อ๋อ ... ฉันกำลังทดสอบมันใน 3.2.21 ซึ่งไม่มีข้อมูลนั้นเลย เมื่อฉันทำมันในกล่องของฉันที่มี 3.2.23 มันทำงานได้
Alex

ตอนนี้เป็นทางออกที่ดีที่สุด แต่ไม่สามารถใช้ได้กับ RHEL / Centos 5.3 ฉันยอมรับโซลูชันนี้ แต่ฉันพร้อมที่จะเลือกคำตอบอื่นถ้าจะใช้ได้สำหรับ RHEL / Centos 5.3
lg

2
นี่คือไม่ต้องไป CentOS 5.5 เหมือนกัน
Mike Miller

"จากตัวแทน" ไม่สามารถใช้งานได้แม้แต่ใน centos 5.8
sepehr

22

วิธีที่จะมาสาย แต่ (อย่างน้อยใน Fedora 15) เราสามารถใช้ yumdb สำหรับข้อความค้นหาที่คล้ายกัน:

yumdb info 'python*'

และสิ่งที่ฉันต้องการในการแสดงรายการแพ็คเกจจาก repo ที่ได้รับ:

yumdb search from_repo 'my-*-repo'

สามารถใช้งานได้กับ Fedora 14
lg

1
ทำงานบน RHEL 6.2
pixelbeat

8

หากสิ่งอื่นล้มเหลวคุณสามารถตรวจสอบ yumdb ได้ด้วยตนเอง มันตั้งอยู่ใน/var/lib/yum/yumdbและมีข้อมูลรายละเอียดเกี่ยวกับทุกแพ็คเกจที่ติดตั้ง from_repoคุณจะมีความสนใจโดยเฉพาะอย่างยิ่งใน ตัวอย่างเช่นสำหรับbind-utilsแพ็คเกจ:

# 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

วิธีรับข้อมูลที่คุณต้องการ:

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

รุ่นที่ใหม่กว่าจะให้ข้อมูลมากขึ้น เช่นใน EL 7 จะมีการเก็บมิเรอร์และ URL ที่แน่นอนซึ่งดาวน์โหลดมาจากแพ็คเกจ


+1 แต่จะดียิ่งขึ้นถ้าทำสิ่งที่ชอบ: for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i` | grep -oP 'from_repo:\ \K.*'; doneซึ่งในตัวอย่างด้านบนจะส่งกลับ: updates- อ่านได้มากขึ้น!
เกร็ก Dubicki

1
@GregDubicki จุดสำคัญของคำสั่งคือการแสดงบริบทของสิ่งที่เกิดขึ้นและวิธีการจัดเก็บสิ่งต่างๆ เห็นได้ชัดว่าล้มเหลวในการทำเช่นนั้น: ไม่จำเป็นต้องมีgrepอะไรที่นี่และคุณสามารถปล่อยลูปได้ ง่ายมากcat /var/lib/yum/yumdb/b/*bind-utils*/from_repoคือทั้งหมดที่คุณต้องการ
Michael Hampton


5

หากต้องการดูสิ่งที่ติดตั้งจาก repo epel: (ควรทำงานภายใต้ Centos 5.5) หากคุณไม่มี repo ชื่อ epel มันจะคายทุกสิ่งที่ติดตั้ง

repoquery --repoid = epel -a | ติดตั้งรายการ xargs yum แล้ว


1
ดูเหมือนว่าจะใช้งานได้ตราบใดที่ไม่มีแพ็คเกจที่อัปเดตในที่เก็บ ดังนั้นคุณจำเป็นต้องเรียกใช้ yum update ก่อนใช้งาน
codewaggle

4

หากติดตั้งแพคเกจเมื่อเร็ว ๆ นี้คุณสามารถดูใน / var / cache / yum

ภายในไดเรกทอรีนั้นจะมีไดเรกทอรีสำหรับแต่ละ repo และในไดเรกทอรีแพ็คเกจนั้น ดังนั้นคุณจะทำสิ่งที่ชอบ:

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

อย่างไรก็ตามต้องเปิดใช้งานแคชในไฟล์ /etc/yum.conf ของคุณ:

cachedir=/var/cache/yum
keepcache=1

โปรดทราบว่า a yum clean [packages|all]จะล้างไดเรกทอรีแคช

หากไดเรกทอรีแคชว่างเปล่ามีวิธีอื่น ข้อมูลที่อ่านโดยyum info [package]มาจาก /var/cache/yum/ ที่เป็นข้อมูล /primary.xml.gz

คุณสามารถดูไฟล์โดยป้อน:

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

อย่างไรก็ตามบนเครื่องที่yum info [package]ไม่แสดง "จาก repo:" ตามที่ระบุโดย 'theotherreceive' เป็นเพราะมันไม่ได้อยู่ในไฟล์ primary.xml ดังนั้นจะไม่มีวิธีในการดึงข้อมูลนั้น ดังนั้นหากแพ็กเกจอยู่ในไฟล์ primary.xml สองไฟล์ขึ้นไปคุณจะต้องกำหนดลำดับความสำคัญของ repo ในระบบของคุณ


วิธีนี้อาจเป็นตัวเลือก (ฉันลงคะแนน) แต่ฉันกำลังมองหาคำตอบที่ชัดเจน
lg

4

ตามและคำตอบโดยSwoogan
On RedHat และ CentOS หนึ่งสามารถทำได้

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

ผลลัพธ์ควรมีลักษณะคล้ายกัน

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

โดยที่repository_name เป็นที่เก็บที่สามารถพบแพ็คเกจของคุณและอาจถูกติดตั้งจากที่หนึ่งในรายการ (ดูที่ yum repolist)


1

ข้อมูลนั้นถูกจับได้ทุกที่หรือไม่? แพ็คเกจไม่มีข้อมูลนั้นและ yum ไม่สนใจหลังจากที่พบแพ็คเกจ คุณอาจจะรวมมันเข้าด้วยกันโดยหาว่า repos ใดมีแพ็คเกจแล้วกำหนดว่าอันไหนมีความสำคัญ


โซลูชันนี้อาจเป็นตัวเลือก (ฉันโหวต) แต่สำหรับแพ็คเกจที่ติดตั้งล่าสุดเนื่องจากฉันสามารถเปลี่ยนที่เก็บและลำดับความสำคัญของพวกเขา
lg

1

ไม่ใช่วิธีการแก้ปัญหาที่ดี แต่ฉันพบว่ารายการยำที่มีอยู่จะแสดงให้คุณเห็นว่ามีรุ่นล่าสุดของแต่ละแพ็คเกจที่ใช้ได้เช่น:

รายการยำใช้ได้ grep gstreamer

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

bluez-gstreamer.i386 4.30-2.fc10 อัปเดต
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- ปลั๊กอินไม่ดี devel.i386 0.10.9-1.fc10 rpmfusion ฟรี
GStreamer-ปลั๊กอินไม่ดี devel.x86_64 0.10.9-1.fc10 rpmfusion ฟรี

ดังนั้นคุณสามารถทำรายการยำที่มีอยู่ในแพคเกจของคุณแล้วเปรียบเทียบรุ่นที่ติดตั้งของคุณโดยใช้รายการที่ติดตั้ง yum และมีความคิดที่ดีว่า repo มาจากไหนถ้าตรงกับรุ่น


สิ่งนี้เป็นจริงเฉพาะแพคเกจที่ยังไม่ได้ติดตั้ง
lg

แม้ว่ามันจะไม่ตอบคำถาม OPs แต่มันก็มีประโยชน์มากสำหรับฉันเพราะมันใช้งานได้ใน Centoss 5.5 ด้วย yum และไม่มีอุปกรณ์อื่น ๆ และคุณสามารถ: 1. ถอนการติดตั้งแพคเกจจากนั้นสอบถามเพื่อดูว่า repo ติดตั้งที่ไหน หรือ 2 ค้นหาบนเครื่องอื่นโดยไม่ได้ติดตั้งแพ็คเกจ
lreeder

1

คุณสามารถเพิ่มธง verbose ไปที่ "yum info":

yum info -v <package_name>

ที่เก็บการติดตั้งจะอยู่ภายใต้เอาท์พุท "จาก repo"


นี่น่าจะเป็นทางออกเดียวที่ไม่ต้องติดตั้ง yum-utils
Mark Edington

นี่เป็นเพียงรายการ "ติดตั้ง" สำหรับฉัน
frogstarr78

1

ดังนั้นฉันรู้ว่านี่เป็นคำถามที่ค่อนข้างเก่า - แต่มันขึ้นมาในการค้นหา google สำหรับสิ่งที่ฉันกำลังมองหา

นอกจากนี้ยังมีวิธีรับรายการ repos ที่ไม่ซ้ำกันที่ใช้:

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

นี่จะแสดงรายการที่เก็บที่ติดตั้งแพ็กเกจไว้


1

วิธีที่ง่ายที่สุดและตรงไปตรงมาที่สุดโดยไม่ต้องติดตั้งเครื่องมือเสริมการพิมพ์หรือส่งออกข้อมูลภายนอกคือ:

yum list installed [package name]

คอลัมน์ที่สามจะระบุ ID ของที่เก็บที่ติดตั้งแพคเกจ

สิ่งนี้ถูกกล่าวถึงในความคิดเห็นของคำถามเดิมโดยใช้ grep แต่ไม่จำเป็น คุณสามารถส่งชื่อแพ็คเกจไปyumที่ตัวกรองได้โดยตรง



-1

วิธีที่ง่ายที่สุดคือ:

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

เคล็ดลับและลูกเล่นเพิ่มเติมมีอยู่ที่นี่: http://wiki.centos.org/TipsAndTricks/YumAndRPM


2
ด้วยวิธีนี้ (เพิ่มไพพ์ด้วยชื่อแพคเกจ grep -i) ฉันค้นหาผู้จำหน่าย แต่ไม่ใช่ที่เก็บ
lg

1
ผู้ขายไม่มีอะไรเกี่ยวข้องกับที่เก็บ
Matteo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.