我在 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-firewire
depends onjackd2
和qjackctl
depends on jackd
。
後一個依賴項意味著當jackd2
刪除時,qjackctl
也必須刪除(如果沒有嚴格的依賴項,則無法安裝套件)。其他軟體包不依賴jackd
,因此沒有被刪除;他們本來會被apt autoremove
,除了因為jackd2-firewire
依賴jackd2
,沒有一個包變得不必要......(apt
不記得了具體是哪個包導致安裝另一個軟體包;autoremove
只檢查自動安裝的軟體包以查看是否不再有任何東西依賴它們。作為額外的變化,autoremove
考慮建議對於保持安裝包來說足夠重要。
第二次安裝時jackd
,apt
請查看其依賴項,IE jackd2
或者jackd1
,注意到jackd2
已經安裝,並停在那裡;因此它沒有註意到qjackctl
“缺失”,因為它是由 推薦的jackd2
,而不是jackd
它自己推薦的。
aptitude
一旦刪除了依賴的包,就會刪除不必要的包,無需單獨的autoremove
步驟;您可能會發現它更容易使用。命令與 的相同apt
;它還有一個基於文字的全螢幕使用者介面,我發現這非常有用。