Bir paketin sadece bağımlılıkları nasıl kurulur?


45

Çalıştırma sudo apt-get install <PACKAGE>paketi, bağımlılıkları ve önerilen diğer paketleri yükler.

Ancak, yalnızca bir paketin bağımlılıklarını kurmanın ve paketin kendisini dışlamanın bir yolu görünmüyor .

Bir insan bunu nasıl yapacak?


Sadece merak ediyorum, neden bunu yapmak istiyorsun?
Kris Harper 18:

@ root45: Bu benzersiz bir durum biraz: Depodaki Python paketinin kaynak kodunu aldım. ve başlamadı. Paketin bağımlılıklarını, paketin kendisini yüklemeden yüklemeliyim (kod zaten var).
Nathan Osman

1
Sadece apt-get install'un kuru çalışmasını yapıp ne kurulacağına bakıp, derlediğiniz uygulama dışındaki her şeyi yükleyemez misiniz?
duffydack

2
Ya da sadece kurun ve ardından uygulamayı kaldırın (ancak bağımlılıkları değil). Ve / veya güncellenmiş / sabit bir paketi oluşturduktan sonra kurun.
Ocak

Bunu yapabilme yeteneğine ihtiyacım var, bu sayede mimarim için hazırlanmamış bir kaynak paket oluşturabilir ve yükleyebilirim. apt-get build-depbuild bağımlılıklarını kurar, apt-get -b sourceçalışır, ancak çalışma zamanı bağımlılıkları kurulmaz, bu nedenle dpkg -i *.debbaşarısız olur.
Trevor Robinson

Yanıtlar:


24

Bu paketin tüm paketleri kuracaktır Bağlıdır ve PreDepends Kime:

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

Temel olarak tüm bağımlılıkları istersiniz, (Ön) Bağımlıları filtrelersiniz ve apt-get için çıktıyı formatlarsınız.

Bir sorun gibi bağımlılıklar

Depends: pulseaudio
  pulseaudio:i386

veya sanal paketler

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

Yani: dikkatli kullanın - her durumda işe yaramaz!


1
İşe yaramadığı pek çok durum var, örneğin sanal paketleri tamamen açacak (köşeli parantezler içinde basılacak). Örnekler için buraya bakınız: askubuntu.com/questions/25361/…
Trevor Robinson

İpucu için teşekkürler, ancak tüm bu sorunların nasıl ele alınacağından emin değilim. :-(
htorque

2
Mümkünse, AWK ile daha basit bir çözüm önermek isterim:sudo apt-get install $(apt-cache depends PACKAGE-NAME-HERE | awk '$1~/Depends/{printf $2" "}')
Sergiy Kolodyazhnyy

1
Yukarıda bahsettiğin sanal paket sorunuyla karşılaştım; güncellenmesi sedaşağıdakilere boru hattında benim için çalıştı: sed -e "s/.*ends:\ //" -e 's/<[^>]*>//'. Benim durumumda, sanal < >içerideki paket onu tatmin eden paketten önce geliyordu, bu yüzden öğeyi çıkarmak < >gayet iyi çalışıyordu.
berto

5

apt-get build-dep <package> hile yapacak.


13
Bu işe yaramaz çünkü paketin kurulmayacak çalışma zamanı bağımlılıkları vardır apt-get build-dep.
Nathan Osman

5

Kopyala / geçmişte sakıncası yoksa, sadece bir apt-get install ile simüle edin -s. Bu şekilde başka hangi paketlerin yükleneceğini ve / veya yükseltileceğini göreceksiniz, ardından yüklemek istemediğiniz paket adını o listeden ve işten çıkarmanız yeterli olacaktır.

sudo apt-get install -s <package>


4

Belirli bir paketin kurulmamış bütün bağımlılıklarını listelemek için aptitude

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

Bağımlılıkları yüklemek için

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

Örnekler

  • Bağımlılıkları listele

    % aptitude search '!~i?reverse-depends("^mc$")'
    p    mc-data         - Midnight Commander - a powerful file manager -- data files
    
  • Sadece paket adını göster

    % aptitude search '!~i?reverse-depends("^mc$")' -F "%p"
    mc-data                            
    
  • Örneğin, bağımlılıkları yükleyin. 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

Bunu yapmak için uygun bir kurulum simülasyonunun çıktısını çözümleyebilirsiniz, işte size bunun için bir bash işlevi:

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
}

Kullanımı:

apt-install-depends mopidy

0

Sadece bağımlılıkları kurmak için kullanabilirsiniz apt-cache show package | grep Depends. Bu size bağımlılıkların bir listesini verecektir:

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)

daha sonra apt-get ile hangi paketin yükleneceğine karar verebilirsiniz. Ayrıca aptitudeinteraktif modda, onu seçip paketine bakıp ardından bağımlılıklarını kuracaksınız:

görüntü tanımını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.