卸載/清除時,「apt」如何檢查依賴項刪除? AkA 幫助我理解 `apt` 的行為

卸載/清除時,「apt」如何檢查依賴項刪除? AkA 幫助我理解 `apt` 的行為

我在 Linux 上擺弄聲音並嘗試安裝該軟體包jackd。這是返回內容的相關摘錄apt

$ sudo apt install jackd
The following additional packages will be installed:
  jackd2 jackd2-firewire libconfig++9v5 libffado2 libglibmm-2.4-1v5 libsigc++-2.0-0v5 libxml++2.6-2v5 python-dbus python-gi qjackctl

然後清除的結果:

$ sudo apt purge jackd
The following packages will be REMOVED:
  jackd* qjackctl*

後續安裝:

$ sudo apt install jackd
The following NEW packages will be installed:
  jackd

- - - - - 編輯 - - - - -

進而 :

sudo apt autoremove
The following packages will be REMOVED:
  libfwup1

(這是在安裝 jackd 之前已經提到過的軟體包)

----------編輯結束----------

從這個實驗來看,apt似乎並沒有消除依賴關係。然而,qjackctl除了我特別提到的套件 ( ) 之外,清除還刪除了另一個套件 ( ) jackd

qjackctl是守護程式對應GUI介面的包jackd,我知道如果我不再需要它了jackd。但是,從邏輯上講,其他依賴項也已安裝,因此:

  • 為什麼他們沒有被卸載?
  • 為什麼被qjackctl卸載了?
  • 為什麼qjackctl在第二次安裝時沒有取得?

僅有的發現特定於有問題的包。

非常感謝你的幫助

PS:我剛剛安裝完 Arch Linux 分割區(旨在將來替換我的 Ubuntu 分割區)。我pacman現在還不是很熟悉。使用這個套件管理器可以更好地管理這種行為嗎? (更準確地說:不對稱的操作和可預測的行為)

答案1

安裝附加軟體包是因為它們(可能是間接)依賴於jackd:jackd2直接依賴,其餘依賴通過jackd2.qjackctl因為推薦而安裝jackd2,並且預設安裝推薦的軟體包。

具體來說,已安裝套件的依賴關係樹如下:

jackd
└─ jackd2
   ├─ python-dbus
   │  └─ python-gi (recommended)
   ├─ jackd2-firewire (recommended)
   │  └─ libffado2
   │     ├─ libconfig++9v5
   │     ├─ libglibmm-2.4-1v5
   │     │  └─ libsigc++-2.0-0v5
   │     └─ libxml++2.6-2v5
   └─ qjackctl (recommended)

兩個附加依賴項不會影響安裝步驟,但稍後會變得很重要:jackd2-firewiredepends onjackd2qjackctldepends on jackd

後一個依賴項意味著當jackd2刪除時,qjackctl也必須刪除(如果沒有嚴格的依賴項,則無法安裝套件)。其他軟體包不依賴jackd,因此沒有被刪除;他們本來會被apt autoremove,除了因為jackd2-firewire依賴jackd2,沒有一個包變得不必要......(apt不記得了具體是哪個包導致安裝另一個軟體包;autoremove只檢查自動安裝的軟體包以查看是否不再有任何東西依賴它們。作為額外的變化,autoremove考慮建議對於保持安裝包來說足夠重要。

第二次安裝時jackdapt請查看其依賴項,IE jackd2或者jackd1,注意到jackd2已經安裝,並停在那裡;因此它沒有註意到qjackctl“缺失”,因為它是由 推薦的jackd2,而不是jackd它自己推薦的。

aptitude一旦刪除了依賴的包,就會刪除不必要的包,無需單獨的autoremove步驟;您可能會發現它更容易使用。命令與 的相同apt;它還有一個基於文字的全螢幕使用者介面,我發現這非常有用。

相關內容