Apt

如何管理基於 deb 的包/依賴項

  • April 7, 2017

今天我將 Elementary OS Loki 安裝到虛擬機中。

我很驚訝,這個系統是如此快速和漂亮。

但重點是:

如何安裝.deb軟體包並解決對 Elementary OS 的任何依賴關係?

由於實現目標的方法更多,我列出了兩個CLI選項,apt主觀上是最好的和推薦的:

第一個選擇:( **apt**和apt-get

sudo apt install ./long-package-name.deb

請注意,我特別指的是apt, 不是apt-get,因為它不會自動完成文件名,否則您當然可以這樣做,如果您堅持使用apt-get,例如在腳本中:

PACKAGE=$(echo long-package-name.deb)

sudo apt-get install ./$PACKAGE

第二選擇: gdebi

sudo gdebi long-package-name.deb

由於我不使用gdebi,我不能推薦它,也不能說反對它,除了我剛剛嘗試過的,我將與你分享:

  1. 我安裝了一個.debapt
  2. 我跑了sudo apt update
  3. sudo apt install ./long-package-name.deb以預期的結果執行:

PACKAGE 已經是最新版本(VERSION)。

  1. 我跑sudo gdebi long-package-name.deb了一個不受歡迎的結果:

您要安裝軟體包嗎?

可能只有我一個人不知道怎麼正確使用gdebi

我實際上更喜歡使用aptitude包管理器來安裝/解決包依賴項。你安裝它:

sudo apt-get install aptitude

apt這些命令與/非常相似apt-get

aptitude似乎比其他處理依賴項的工具更聰明。它還顯示帶有處理刪除/安裝程序的備選方案的菜單,並在您拒絕第一個選擇時顯示備選方案(如果存在以及何時存在)。

$sudo aptitude purge libasound2
The following packages will be REMOVED:  
 libasound2{p} libasound2-data{u} 

The following packages have unmet dependencies:
openjdk-8-jre : Depends: libasound2 (>= 1.0.16) but it is not going to be installed
The following actions will resolve these dependencies:

Remove the following packages:              
1)     openjdk-8-jre [8u111-b14-3 (now, testing)]



Accept this solution? [Y/n/q/?] n
The following actions will resolve these dependencies:

    Keep the following packages at their current version:    
1)     libasound2 [1.1.2-1 (now, testing)]                
2)     libasound2-data [1.1.2-1 (now, testing)]           

Accept this solution? [Y/n/q/?] 

來自 debian Aptitude wiki

Aptitude 具有許多有用的功能,包括:

  • 一種類似 mutt 的語法,用於以靈活的方式匹配包標記
  • 包為“自動安裝”或“手動安裝”,以便在不再需要時可以自動刪除包
  • 即將採取的行動的彩色預覽
  • 使用者操作的類似 dselect 的持久性
  • 檢索和顯示大多數軟體包的 Debian 變更日誌的能力
  • 類 AptCLI (= apt-get + apt-cache) 命令行模式 (“aptitude install foo”)
  • 基於分數且(通常)比 apt-get 更智能的依賴解析器

儘管它已被歸類為過時多年,並且可以說其他工具提供了類似的功能,但我也建議debfoster清理系統的垃圾。debfoster尤其有趣,例如幫助削減基礎 VM 以用作基礎安裝/模板。

你安裝它:

sudo apt-get install debfoster

我還經常在預生產虛擬機中使用它來在進行測試之前保存包的實際狀態,然後使用它保存的狀態來恢復以刪除所有添加的包,就像我執行它之前一樣。

來自HOWTO:在實踐中使用 debfoster

debfoster - 清除不必要的 Debian 軟體包

debfoster 維護一個已安裝軟體包的列表,這些軟體包是明確請求的,而不是作為依賴項安裝的。參數完全是可選的,可以在每次執行 dpkg 和/或 apt-get 後呼叫 debfoster 本身。

或者,您可以使用 debfoster 通過在命令行上指定軟體包來安裝和刪除軟體包。以 - 為後綴的軟體包被刪除,而沒有後綴的軟體包被安裝。

如果遇到一個新包,或者如果 debfoster 注意到一個曾經是依賴項的包現在是一個孤立包,它會詢問您如何處理它。如果您決定保留它,debfoster 只會記下並繼續。如果您認為這個軟體包不夠有趣,它將在 debfoster 完成提問後立即刪除。如果您的選擇導致其他包成為孤兒,則會出現更多問題。

$sudo debfoster

smem is keeping the following 27 packages installed:
 blt fonts-lyx libglade2-0 libjs-jquery libjs-jquery-ui liblapack3 libtk8.6 libwebp6
 libwebpdemux2 libwebpmux2 libxss1 python-cairo python-cycler python-dateutil
 python-glade2 python-gobject-2 python-gtk2 python-imaging python-matplotlib
 python-matplotlib-data python-numpy python-pil python-pyparsing python-tk python-tz
 tk8.6-blt2.5 ttf-bitstream-vera
Keep smem? [Ynpsiuqx?], [H]elp: Y

imvirt is keeping the following 9 packages installed:
 imvirt-helper libemail-date-format-perl libfile-slurp-perl libfile-which-perl
 libimvirt-perl libmime-lite-perl libmime-types-perl libmodule-find-perl pciutils
Keep imvirt? [Ynpsiuqx?], [H]elp: Y

linux-image-4.8.0-1-amd64-unsigned is keeping the following 9 packages installed:
 busybox firmware-linux-free initramfs-tools initramfs-tools-core irqbalance
 klibc-utils libklibc libnuma1 linux-base
Keep linux-image-4.8.0-1-amd64-unsigned? [Ynpsiuqx?], [H]elp: Y

faketime is keeping the following 1 packages installed:
 libfaketime
Keep faketime? [Ynpsiuqx?], [H]elp: N

haveged is keeping the following 1 packages installed:
 libhavege1
Keep haveged? [Ynpsiuqx?], [H]elp: Y
Keep libfaketime? [Ynpsiuqx?], [H]elp: N
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
 faketime* libfaketime*
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
After this operation, 127 kB disk space will be freed.
Do you want to continue? [Y/n]

引用自:https://unix.stackexchange.com/questions/324648