จะตรวจสอบได้อย่างไรว่าแพ็คเกจเป็น meta-package จากบรรทัดคำสั่งหรือไม่


14

ฉันจะทราบได้อย่างไรว่าแพ็คเกจนั้นเป็นเมตาแพ็คเกจจากบรรทัดคำสั่งหรือผ่าน apt-get, aptitude หรือ apt-cache

ฉันเหนื่อย:

apt-cache show texlive-full
apt-cache showpkg texlive-full

แต่วิธีเดียวที่ฉันบอกได้ว่าแพ็คเกจนี้คือเมตาคือการอ่านช่อง "en-description"

มีวิธีการอัตโนมัติมากกว่านี้ที่จะให้คำตอบใช่ / ไม่ใช่หรืออย่างน้อยก็มีฟิลด์อย่างเช่น "en-description" ที่อุทิศให้กับสิ่งนี้?


1
นอกเหนือจากข้อเท็จจริงที่ว่าคำถามและคำตอบนี้น่าสนใจมากทำไมคุณถึงอยากรู้
Joe

1
ฉันกำลังติดตั้งสิ่งต่าง ๆ ด้วย apt-get และสังเกตว่าถ้าฉันติดตั้ง metapackage (texlive-full) มันจะติดตั้งการพึ่งพาที่ฉันต้องการ แต่ถ้าฉันถอนการติดตั้ง metapackage การพึ่งพาก็อยู่ที่นั่น (apt-get install texlive-full apt-get purge texlive-full; apt-get autoremove) จากนั้นฉันก็พบว่านี่เป็นกรณีสำหรับ metapackages brainstorm.ubuntu.com/idea/17785เท่านั้น ความถนัดในทางกลับกันจะลบการพึ่งพาที่ไม่จำเป็นออกจาก metapackage
Ciro Santilli 新疆改造中心法轮功六四事件

คำตอบ:


7

ไม่มีคำจำกัดความที่เป็นทางการของ metapackage คำจำกัดความที่ไม่เป็นทางการคือ metapackage นั้นมีไว้สำหรับการอ้างอิงเท่านั้นและไม่มีไฟล์ที่เป็นประโยชน์ของตัวเอง

คุณสามารถกำหนด metapackage เป็นแพ็คเกจที่ไม่มีไฟล์ ไม่มีวิธีการตรวจสอบนี้จากฐานข้อมูลแพคเกจ คุณสามารถใช้ฐานข้อมูลไฟล์และตรวจสอบว่าแพ็คเกจมีเฉพาะไดเรกทอรี (แพ็คเกจดังกล่าวมีหลายไดเรกทอรี) อันที่จริง metapackages ส่วนใหญ่มีไฟล์อยู่สองสามไฟล์/usr/share/doc/<package name>: copyrightไฟล์, changelog และบางครั้งก็มีอีกสองสามไฟล์ นี่คือการประมาณที่กำหนด metapackage ว่ามีเฉพาะไฟล์ใน/usr/share/doc/<some directory>(ไม่ใช่ในไดเรกทอรีย่อยของ) และไดเรกทอรีชั้นนำ:

if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
  echo "$package looks like a metapackage"
fi

อีกวิธีหนึ่งคือการมองหาแท็กแพคเกจdebtagsด้วย มีแท็กหลายแท็กที่ใช้กันทั่วไปใน metapackages

debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'

อีกวิธีคือการมองหาแพ็คเกจที่มีขนาดเล็ก แต่ละไดเรกทอรีนับเป็น 4 kB ดังนั้นวางแผนตามเมื่อเลือกขีด จำกัด (อีกครั้งนี่เป็นการประมาณ)

aptitude -F '%I %p' search "~n^$package\$"

จากการไตร่ตรองฉันสงสัยว่าคุณหมายถึงแพ็คเกจเสมือนจริงหรือเปล่ามากกว่า metapackages แพคเกจเสมือนจริงไม่ใช่แพ็คเกจ แต่เป็นชื่อแพคเกจที่ใช้ในProvides:ฟิลด์ aptitude search '~v'คุณสามารถแสดงรายการพวกเขาด้วย การเรียกใช้apt-cache showบนหน้าจอหนึ่งแสดงว่า "ไม่สามารถเลือกรุ่นจากแพ็คเกจ" zcav "เนื่องจากเป็นแบบเสมือนแท้" การวิ่งaptitude showแสดงรายการแพ็คเกจที่ให้มา วิธีที่สะดวกในการแสดงแพ็คเกจเสมือนคือapt-cache: นี้พิมพ์หนึ่งบรรทัดสำหรับแพ็คเกจที่ไม่ใช่เสมือนและอาจมีหลายบรรทัด (หนึ่งรายการสำหรับผู้ให้บริการแต่ละราย) สำหรับแพ็คเกจเสมือน - คุณสามารถบอกได้ว่าแพคเกจนั้นเสมือนจริงแม้ว่าจะมีผู้ให้บริการรายเดียว เนื่องจากชื่อของผู้ให้บริการแตกต่างกัน

apt-cache -n search "^$package\$"

ขอบคุณสำหรับวิธีการเหล่านั้น: ฉันไม่รู้เรื่องหนี้! นอกจากนี้ฉันได้อ่านที่ไหนสักแห่งว่าเมื่อคุณติดตั้ง metapackage ด้วย apt-get มันก็เหมือนกับว่าคุณได้ติดตั้งการพึ่งพาแต่ละครั้งด้วยตนเองซึ่งหมายความว่าการลบแพคเกจเดิมจะไม่ลบการอ้างอิงทันทีในขณะที่แพ็คเกจปกติจะลบ ลบการอ้างอิงที่ติดตั้ง มันเป็นเรื่องจริงเหรอ? ถ้าเป็นเช่นนั้นฉลาดจะบอกความแตกต่างได้อย่างไร สิ่งนี้อาจถูกนำไปใช้ประโยชน์ได้เช่นกัน ... (ดูเหมือนว่าความถนัดไม่ได้สนใจว่า meta ของมันหรือไม่มันเป็นเรื่องจริงหรือไม่?)
Ciro Santilli 新疆改造中心中心法轮功六四事件

@cirosantilli คุณลักษณะของการลบการอ้างอิงโดยอัตโนมัติไม่เกี่ยวข้องกับ metapackages สิ่งนี้เกิดขึ้นเพราะถ้าคุณไม่ได้ร้องขอแพคเกจอย่างชัดเจนมันถูกทำเครื่องหมายว่าติดตั้งโดยอัตโนมัติและแพ็กเกจที่ทำเครื่องหมายว่าติดตั้งโดยอัตโนมัติจะถูกลบออกหากไม่มีแพ็คเกจที่ขึ้นอยู่กับการติดตั้ง ดูapt-get autoremove, aptitude (un)markautoที่Mคำสั่งในอินเตอร์เฟซแบบโต้ตอบความถนัด
Gilles 'หยุดความชั่วร้าย'

@cirosantilli เมื่อไตร่ตรองฉันสงสัยว่าคุณมีสิ่งที่คุณคิดว่าเป็นแพคเกจเสมือนจริงและไม่ metapackages? ดูคำตอบที่อัปเดตของฉัน
Gilles 'หยุดความชั่วร้าย'

ฉันไม่รู้เกี่ยวกับแพ็คเกจเสมือนจริง ๆ แต่ฉันคิดว่า texlive-full นั้นไม่ได้เป็นเสมือนตั้งแต่ apt-cache show texlive-full แสดงผลลัพธ์ตามปกติ ดังนั้นแม้หลังจากที่ฉันได้apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremoveไม่ได้ลบทั้งหมดอ้างอิงที่ติดตั้ง ฉันอ่านที่ไหนสักแห่งว่าเป็นเพราะ texlive-full เป็น metapackage และนั่นเป็นพฤติกรรมปกติของ metapackage แต่อาจเป็นสิ่งที่ผิด ความถนัดในทางกลับกันดูเหมือนจะเอาการพึ่งพาการติดตั้งโดยอัตโนมัติเพียงแค่ปรับ
Ciro Santilli 事件改造中心法轮功六四事件

2

คุณสามารถลองเข้า

apt-cache search 'metapackage | meta-package'

ซึ่งจะทำให้คุณมีรายชื่อยาว ๆ แล้วใช้grepบอกว่าแสดง metapackages ที่เกี่ยวข้องกับวิทยาศาสตร์ทั้งหมดด้วย

apt-cache search 'metapackage | meta-package' | grep -i science

นี่จะส่งคืนรายการยาว (ฉันย่อให้สั้นลงที่นี่)

science-astronomy - Debian Science Astronomy packages
science-astronomy-dev - Debian Science Astronomy-dev packages
science-biology - Debian Science Biology packages
science-chemistry - Debian Science Chemistry packages
science-dataacquisition - Debian Science data acquisition packages
science-dataacquisition-dev - Debian Science data acquisition development packages
science-distributedcomputing - Debian Science Distributed Computing packages
science-electronics - Debian Science Electronics packages
science-electrophysiology - Debian Science packages for Electrophysiology
science-engineering - Debian Science Engineering packages
science-engineering-dev - Debian Science Engineering-dev packages
science-geography - Debian Science Geography packages
science-highenergy-physics - Debian Science High Energy Physics packages

คุณสามารถใช้ทางเลือกจำนวนมากสำหรับวิทยาศาสตร์เช่นKDEเพื่อค้นหาKDEmetapackages ทั้งหมด

นี่อาจเป็นสิ่งที่ดีที่สุดที่คุณสามารถทำได้apt-cacheแต่ควรค้นหา metapackages ส่วนใหญ่ที่คุณต้องการค้นหาอย่างรวดเร็ว ถ้ามันไม่ได้พบว่าทุกสิ่งที่คุณกำลังมองหาสิ่งที่ง่ายที่สุดคือการมองในส่วน metapackage Synapticใน

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