จะบอกได้อย่างไรว่าแพ็คเกจใดมาจาก Ubuntu หรือ Debian


168

บนระบบที่ใช้ Debian รวมถึง Ubuntu เราจะบอกได้อย่างไรว่าจะดาวน์โหลดแพคเกจที่เก็บข้อมูลจากที่ใดโดยไม่เริ่มดาวน์โหลดจริง aptitude showและapt-cache infoจะแสดงส่วน (เช่น metapackage ฐานกราฟิก) แต่ไม่ใช่ที่เก็บซึ่งเป็นของแพ็คเกจ (เช่นhttp://ppa.launchpad.net/mactel-support/ppa/ubuntuหรือhttp: // us .archive.ubuntu.com / ubuntu / )

เมื่อติดตั้งแพคเกจพื้นที่เก็บข้อมูลจริงจะปรากฏขึ้นในระหว่างการดาวน์โหลด (จะถูกพิมพ์ออกมาในเอาต์พุต "ดาวน์โหลดจาก ... " จากโปรแกรมฉลาดและคล้ายกัน) แต่จะมีวิธีรับข้อมูลในพื้นที่เก็บข้อมูลที่มีแพคเกจ (หรือเฉพาะ รุ่นของแพคเกจ) โดยไม่ต้องดาวน์โหลดและติดตั้งก่อน?

นอกจากนี้หนึ่งจะกำหนดแหล่งเก็บข้อมูลสำหรับแพคเกจที่ติดตั้งแล้วได้อย่างไร


1
ฉันพบว่าหนึ่งในข้อบกพร่องของ Apt นี้; มันไม่ง่ายเลยที่จะบอกได้ว่าแหล่งเก็บข้อมูลใดให้แพคเกจบางอย่างภายในเครื่องมือติดตั้งแพคเกจ
ต้มตุ๋น quixote

คำตอบ:


203

ฉันวิ่งapt-cache policy <package name>:

$ apt-cache policy wajig
wajig:
  Installed: 2.1
  Candidate: 2.1
  Version table:
 *** 2.1 0
        100 /var/lib/dpkg/status
     2.0.47 0
        500 file:/home/wena/.repo_bin/ squeeze/main i386 Packages
        500 ftp://ftp.is.co.za/debian/ squeeze/main i386 Packages

นั่นหมายความว่ามีสามwajigแพ็คเกจ:

  • อันที่ติดตั้ง ( /var/lib/dpkg/status)

  • หนึ่งที่พร้อมใช้งานจากที่เก็บในเครื่อง ( file:/home/wena/.repo_bin/)

  • หนึ่งที่พร้อมใช้งานจากที่เก็บระยะไกล ( ftp://ftp.is.co.za/debian) ซึ่งยังเกิดขึ้นกับรุ่นเดียวกัน ( 2.0.47 ) เป็นที่หนึ่งในพื้นที่เก็บข้อมูลท้องถิ่น


นอกจากนี้apt-cache madison <package name>จะแสดงข้อมูลที่คล้ายกันในรูปแบบตาราง

 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe amd64 Packages
 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe Sources

แต่มันไม่แสดงว่ามาจากไหน
Adobe

2
@Adobe ในกรณีของฉัน2.1เวอร์ชันไม่พร้อมใช้งานจากที่เก็บใด ๆ มันสร้างขึ้นในท้องถิ่น
tshepang

2
แพคเกจที่ติดตั้งคืออะไร? ***หรือ/var/lib/dpkg/status?
SuB

อาจจะทั้งคู่? ไม่แน่ใจ.
tshepang

เมื่อแพคเกจไม่ได้ติดตั้งบอกว่า:apt-cache policy Installed: (none)
John McGehee

28

Aha! เห็นได้ชัดว่าเหมาะสมaptคำสั่งไม่ได้แต่แทนapt-cache infoapt-cache showpkg

$ apt-cache showpkg linux-generic
Package: linux-generic
Versions: 
2.6.31.19.32 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages) (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_karmic-security_main_binary-amd64_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c

2.6.31.14.27 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c


Reverse Depends: 
Dependencies: 
2.6.31.19.32 - linux-image-generic (5 2.6.31.19.32) 
2.6.31.14.27 - linux-image-generic (5 2.6.31.14.27) 
Provides: 
2.6.31.19.32 - 
2.6.31.14.27 - 
Reverse Provides: 

สายให้ข้อมูลที่เก็บหลังจากที่File:/var/lib/apt/lists/

มีรายงานข้อผิดพลาดที่aptitudeไม่สามารถแสดงที่เก็บข้อมูลต้นฉบับได้แต่ดูเหมือนว่าในปัจจุบันคุณลักษณะยังคงอยู่ในรายการที่ต้องการ


คุณสมบัติความถนัดยังคงอยู่ในบัญชีรายชื่อ 8 ปีต่อมาและฉันไม่รู้ว่าทำไมคำตอบนี้ ( apt-cache showpkg) ไม่ถูกทำเครื่องหมายว่าถูกต้อง
Csaba Toth

8

สิ่งนี้ใช้ได้กับฉัน (แสดงว่าแพ็คเกจ 2vcard อยู่ที่ใด):

$ grep 2vcard /var/lib/apt/lists/* | grep "Filename:"

/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_universe_binary-i386_Packages:Filename: pool/universe/2/2vcard/2vcard_0.5-3_all.deb

คุณสามารถใช้การกรองเพิ่มเติมเพื่อตรวจสอบเวอร์ชัน ฯลฯ หากมีหลายเวอร์ชัน


ในทางปฏิบัติ ฉันประหลาดใจข้อมูลนี้ไม่สามารถเข้าถึงได้ผ่านใด ๆ ของด้านหน้าจะสิ้นสุดลงไปdpkgแม้ว่า
gotgenes

@got พร้อมให้บริการแล้ว: superuser.com/questions/106794/…
tshepang

8

aptitudeผมสงสัยว่าทำไมไม่มีใครกล่าวถึง ฉันจะใช้มันตลอดเวลา.

ความถนัดคือ:

  • จัดส่งโดยค่าเริ่มต้นพร้อมการแจกแจงแบบเดเบียนจำนวนมาก สามารถติดตั้งกับคนอื่น ๆ (เช่น Ubuntu) ผ่านทางsudo apt install aptitude
  • ไม่ต้องการสิทธิ์ผู้ดูแลระบบ (อย่างน้อยสำหรับคำสั่งด้านล่าง)
  • มีncursesGUI ที่ดี(แต่ใช้เวลาส่วนใหญ่โดยไม่มี)
  • ให้ผลลัพธ์ที่น่ารักจริงๆ หากต้องการแสดงเวอร์ชันของแพ็คเกจให้ใช้aptitude versionsคำสั่ง:

    me@wheezy:~$ aptitude versions kde-standard
    Package kde-standard:                        
    i A 5:77+deb7u1     stable              500
    p A 5:84            testing,unstable    130
    
  • ไม่มีพลัง Super Cow

ตัวอักษรในด้านหน้าของแต่ละสายบ่งบอกถึงสถานะของแพคเกจที่ฉันมีการติดตั้งและPจะถูกปรับปรุง (หรือไม่เคยติดตั้ง), มั่นคง , การทดสอบและความไม่แน่นอนที่มีคำจำกัดความของพื้นที่เก็บข้อมูลจำนวนในท้ายที่สุดเป็นลำดับความสำคัญขา

ข้อแม้หนึ่งเกี่ยวกับรุ่นล่าสุดของความถนัดมูลค่าการกล่าวขวัญที่นี่: โดยค่าเริ่มต้นมันแสดงให้เห็นทุกแพคเกจซึ่งรวมถึงชื่อที่คุณค้นหาเพื่อใช้regexเวทมนตร์เล็ก ๆ น้อย ๆ aptitude versions ^kde-workspace$ในการค้นหาโดยใช้ชื่อที่เข้มงวดเช่น


1
คำสั่งที่ดี แต่มันไม่ได้แสดงรายการพื้นที่เก็บข้อมูลตามที่ร้องขอ
bjhend

อันที่จริงมันไม่
TranslucentCloud

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

ใช่คุณถูกต้องversionsคุณสามารถตรวจสอบค่าที่เหมาะสมของแพ็คเกจที่ระบุไม่ใช่ repos ที่เกี่ยวข้อง มันยังคงมีประโยชน์แม้ว่าคุณจะรู้ว่า repos ทั้งหมดของคุณและวิธีการตรึง
TranslucentCloud

6

น่าเศร้าที่ข้อมูลนี้ไม่ได้ถูกบันทึกไว้ในระหว่างการติดตั้งแพ็คเกจ คุณสามารถเดาได้อย่างถูกต้องว่าที่เก็บยังอยู่ในรายการแหล่งข้อมูลและที่เก็บยังคงมีแพ็คเกจ:

grep -l PKG /var/lib/apt/lists/*

apt-cache showpkg กำลังแสดงข้อมูลจากฐานข้อมูลที่เก็บ (ไม่ใช่ที่ติดตั้ง) ดังนั้นจึงเป็นรูปแบบของข้อมูลเดียวกันจาก grep

แม้กระทั่ง synaptic ก็ไม่สามารถบอกได้ (ในหน้าจอ Origin) หากคุณปิดการใช้งานที่เก็บและอัปเดต


2

หรือแรงบันดาลใจจากซันนี่คุณสามารถลอง:

# list installed restricted packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'restricted' && echo $i; done

# list installed multiverse packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'multiverse' && echo $i; done

PS ไม่ถูกต้อง 100%

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