จะติดตั้งเฉพาะการพึ่งพาของแพ็คเกจได้อย่างไร?


45

การรันsudo apt-get install <PACKAGE>จะติดตั้งแพ็คเกจการขึ้นต่อกันและแพ็คเกจที่แนะนำอื่น ๆ

อย่างไรก็ตามดูเหมือนว่าจะไม่มีวิธีในการติดตั้งเฉพาะการขึ้นต่อกันของแพ็คเกจและไม่รวมแพ็คเกจเอง

เราจะทำสิ่งนี้ได้อย่างไร?


แค่อยากรู้อยากเห็นทำไมคุณต้องการทำเช่นนี้?
Kris Harper

@ root45: มันเป็นสถานการณ์ที่ไม่เหมือนใคร: ฉันมีซอร์สโค้ดสำหรับแพ็คเกจ Python ใน repos และมันไม่เริ่มต้น ฉันต้องติดตั้งการพึ่งพาสำหรับแพ็คเกจโดยไม่ต้องติดตั้งแพ็กเกจเอง (เนื่องจากฉันมีรหัสอยู่แล้ว)
Nathan Osman

1
คุณไม่สามารถทำการติดตั้ง apt-get แบบ dry-run และดูว่ากำลังจะติดตั้งอะไรจากนั้นเพียงติดตั้งทุกอย่าง แต่แอพที่คุณกำลังรวบรวม
duffydack

2
หรือเพียงแค่ติดตั้งแล้วลบแอปพลิเคชัน (แต่ไม่ใช่การขึ้นต่อกัน) และ / หรือติดตั้งแพ็คเกจที่อัพเดท / คงที่หลังจากสร้างเสร็จแล้ว
JanC

ฉันต้องการความสามารถในการทำเช่นนี้เพื่อให้ฉันสามารถสร้างและติดตั้งแพคเกจแหล่งที่ไม่ได้สร้างขึ้นสำหรับสถาปัตยกรรมของฉัน apt-get build-depติดตั้ง build dependencies ดังนั้นapt-get -b sourceทำงานได้ แต่ไม่ได้ติดตั้ง runtime dependencies ดังนั้นจึงdpkg -i *.debล้มเหลว
เทรเวอร์โรบินสัน

คำตอบ:


24

นี้จะติดตั้งแพ็กเกจทั้งหมดในแพคเกจที่ขึ้นอยู่และPreDependsฟิลด์:

sudo apt-get install $(apt-cache depends <PACKAGE> | grep Depends | sed "s/.*ends:\ //" | tr '\n' ' ')

โดยทั่วไปคุณขอการอ้างอิงทั้งหมดกรอง(ขึ้นอยู่กับ)และจัดรูปแบบเอาต์พุตสำหรับ apt-get

ปัญหาหนึ่งคือการพึ่งพาเช่น

Depends: pulseaudio
  pulseaudio:i386

หรือแพคเกจเสมือนจริงเช่น

Depends: <java6-runtime-headless>
  default-jre-headless
  openjdk-6-jre-headless

ดังนั้น: ใช้ด้วยความระมัดระวัง - มันไม่ทำงานในทุกกรณี!


1
มีหลายกรณีที่ไม่สามารถจัดการได้เช่นจะแตกหักในแพ็คเกจเสมือนจริง (ซึ่งพิมพ์ด้วยวงเล็บเหลี่ยม) ดูที่นี่สำหรับตัวอย่าง: askubuntu.com/questions/25361/ …
เทรเวอร์โรบินสัน

ขอบคุณสำหรับคำใบ้แม้ว่าฉันจะไม่แน่ใจจริงๆว่าจะจัดการกับปัญหาเหล่านั้นได้อย่างไร :-(
htorque

2
ถ้าฉันอาจฉันต้องการแนะนำวิธีแก้ปัญหาที่ง่ายขึ้นด้วย AWK:sudo apt-get install $(apt-cache depends PACKAGE-NAME-HERE | awk '$1~/Depends/{printf $2" "}')
Sergiy Kolodyazhnyy

1
ฉันพบปัญหาแพคเกจเสมือนที่คุณกล่าวถึงข้างต้น การอัปเดตsedในไปป์เป็นแบบต่อไปนี้ใช้งานได้สำหรับฉัน: sed -e "s/.*ends:\ //" -e 's/<[^>]*>//'. ในกรณีของฉันแพคเกจเสมือน< >ถูกนำหน้าด้วยแพคเกจที่น่าพอใจดังนั้นการลบรายการในการ< >ทำงานได้ดี
berto

5

apt-get build-dep <package> จะทำเคล็ดลับ


13
ไม่สามารถใช้งานได้เนื่องจากแพ็คเกจดังกล่าวมีการขึ้นต่อกันแบบรันไทม์ที่ไม่สามารถติดตั้งapt-get build-depได้
Nathan Osman

5

หากคุณไม่ทราบคัดลอก / ที่ผ่านมาเพียงแค่จำลอง apt-get install -sด้วย ด้วยวิธีนี้คุณจะเห็นว่าแพ็กเกจอื่นจะได้รับการติดตั้งและ / หรืออัปเกรดจากนั้นคุณเพียงลบชื่อแพ็คเกจที่คุณไม่ต้องการติดตั้งจากรายการนั้นและ voila

sudo apt-get install -s <package>


4

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

aptitude search '!~i?reverse-depends("^PACKAGE_NAME$")'

เพื่อติดตั้งการพึ่งพา

aptitude search '!~i?reverse-depends("^PACKAGE_NAME$")' -F "%p" | xargs sudo apt-get install

ตัวอย่าง

  • แสดงรายการการพึ่งพา

    % aptitude search '!~i?reverse-depends("^mc$")'
    p    mc-data         - Midnight Commander - a powerful file manager -- data files
    
  • แสดงเฉพาะชื่อแพ็คเกจ

    % aptitude search '!~i?reverse-depends("^mc$")' -F "%p"
    mc-data                            
    
  • ติดตั้งการอ้างอิงสำหรับเช่น mc

    % aptitude search '!~i?reverse-depends("^mc$")' -F "%p" | xargs sudo apt-get install     
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following NEW packages will be installed:
      mc-data
    0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
    Need to get 1.166 kB of archives.
    After this operation, 5.550 kB of additional disk space will be used.
    Get:1 http://archive.ubuntu.com/ubuntu/ wily/universe mc-data all 3:4.8.13-3 [1.166 kB]
    Fetched 1.166 kB in 0s (1.250 kB/s)
    Selecting previously unselected package mc-data.
    (Reading database ... 606748 files and directories currently installed.)
    Preparing to unpack .../mc-data_3%3a4.8.13-3_all.deb ...
    Unpacking mc-data (3:4.8.13-3) ...
    Processing triggers for doc-base (0.10.6) ...
    Processing 1 added doc-base file...
    Registering documents with scrollkeeper...
    Processing triggers for man-db (2.7.4-1) ...
    Processing triggers for hicolor-icon-theme (0.15-0ubuntu1) ...
    Setting up mc-data (3:4.8.13-3) ...
    

1

คุณสามารถแยกเอาท์พุทของการจำลองการติดตั้ง apt เพื่อทำสิ่งนี้นี่คือฟังก์ชั่นทุบตีสำหรับคุณ:

apt-install-depends() {
    local pkg="$1"
    apt-get install -s "$pkg" \
      | sed -n \
        -e "/^Inst $pkg /d" \
        -e 's/^Inst \([^ ]\+\) .*$/\1/p' \
      | xargs apt-get install
}

การใช้งาน:

apt-install-depends mopidy

0

apt-cache show package | grep Dependsการติดตั้งการอ้างอิงเท่านั้นคุณสามารถใช้ นี่จะให้รายการของการพึ่งพา:

apt-cache show apache2 | grep Depends
Depends: apache2-mpm-worker (= 2.2.22-6ubuntu5.1) | apache2-mpm-prefork (= 2.2.22-6ubuntu5.1) | apache2-mpm-event (= 2.2.22-6ubuntu5.1) | apache2-mpm-itk (= 2.2.22-6ubuntu5.1), apache2.2-common (= 2.2.22-6ubuntu5.1)

จากนั้นคุณสามารถตัดสินใจได้ว่าจะติดตั้งแพ็คเกจใดกับ apt-get นอกจากนี้ยังมีaptitudeในโหมดโต้ตอบคุณมองหาแพ็คเกจที่เลือกแล้วติดตั้งการพึ่งพา:

ป้อนคำอธิบายรูปภาพที่นี่

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