Product SiteDocumentation Site

6.2. aptitudeapt-get、與 apt 命令

APT 是個原先有圖形介面的大計畫。以包括核心應用程式的程式庫為基礎,且包括第一個前端 — 命令列指令 — apt-getapt 是 APT 的第二個命令列指令包括若干處理錯誤的 apt-get
還有很多圖形介面的延伸計襩:synapticaptitude (包括文字介面與圖形介面 — 即使尚未完成)、wajig等。最被推薦的介面 apt 是本節的範例。然而要注意 apt-getaptitude 的命令列語法極為類似。aptapt-getaptitude 還是有區別的,將詳述於下。

6.2.1. 初始化

APT 可用的套件清單可經由 apt update 更新。連線速度還不錯的話,祗需要幾秒鐘下載若干套件/來源/Translation-語系代碼 檔案,隨著 Debian 的發展愈來愈大 (在 main 區塊至少有 10 MB 的資料)。當然,從 CD-ROM 安裝則不需要任何的下載 — 在此情況下,運作速度極快。

6.2.2. 安裝與移除

有了 APT,以指令 apt install 套件apt remove 套件,就可以從系統新增或移除套件。以前述的指令,APT 將自動安裝必要的相依性或移除不需要的套件。apt purge 套件 指令可以完全移除套件 — 同時刪除組態檔。
若在 sources.list 內論及多個發行版,可以在套件內分給不同的版本。可以用 apt install 套件=版本 指定套件的版本,但需指出原始的 (穩定版測試版不穩定版) — 與 apt install 套件/發行版 — 等偏好的部份。在此命令下,祗要舊版本仍列在 sources.list 之內,就可以回到套件的舊版本 (若您知道該版本較佳). 否則可以用 snapshot.debian.org 拯救它 (見專欄 進階 舊套件版本:snapshot.debian.org)。

範例 6.3. 安裝 不穩定unstable 版的 spamassassin

# apt install spamassassin/unstable

6.2.3. 系統升級

建議使用正常的升級,因為包括最新的安全升級。升級的指令,有 apt upgradeapt-get upgradeaptitude safe-upgrade (當然是跟著 apt update 之後)。在不移除任何套件的情況下,此命令搜尋已安裝套件中可以升級的部份。換句話說,其目標是做到侵入性最小的升級。apt-getaptitudeapt 有更多的需求,因為拒絕安裝不曾安裝過的套件。
apt 會選擇最新的版本號 (除了來自 實驗版穩定反向植入版,其預設忽略版本號)。若指定 測試版不穩定版sources.list 內,則 apt upgrade 會把 穩定版 系統切換至 測試版不穩定版,這些都不是您要的。
搜尋升級的套件時需把特定的發行版告知 apt,採用 -t--target-release 選項,然後是發行版的名稱 (如:apt -t stable upgrade)。為了避免每次使用 apt 都需指定版本,可以把, you can add APT::Default-Release "stable"; 加在 /etc/apt/apt.conf.d/local 之內。
重要的升級,諸如 Debian 的主要版本升級,需使用 apt full-upgrade。在此指令內, 即使刪除若干老舊的套件或安裝新的相依性也會把 apt 完全升級。也是每日於T Debian 不穩定版 使用的命令以及逐日追蹤其變動。它的運作極簡單不需說明:APT 的名聲來自其功能性。
不同於 aptaptitudeapt-get 不知道 full-upgrade 命令。反而,您應使用 apt-get dist-upgrade (”升級發行版”),此古老且知名的命令也被 aptaptitude 接受給讀者相當的便利。

6.2.4. 組態選項

除了已提及的組態細目,還可在 /etc/apt/apt.conf.d/ 資料夾內增加 APT 的其他組態。讓 APT 告知 dpkg 忽略由 DPkg::options { "--force-overwrite"; } 引發的錯誤。
若祗能經由代理伺服器近用網頁,新增像這樣的一列 Acquire::http::proxy "http://yourproxy:3128"。對 FTP 代理伺服器,用 Acquire::ftp::proxy "ftp://yourproxy"。更多的組態選項,參考 apt.conf(5) 手冊頁以 man apt.conf 命令 (手刪的詳情,見 節 7.1.1, “手冊頁面”) 查看。

6.2.5. 管理套件優先性

組態 APT 最重要的層面之一是管理每個套件來源的優先性。例如,從 測試版不穩定實驗版 中選取一個或多個套件。可以指令每個套件的優先性 (視其版本或發行版,同個套件可以有多個優先性)。這些優先性將影響 APT 的行為:每個套件總是選擇最優先的版本 (除非舊於已安裝的版本或優先性小於 1000)。
APT 設定若干預設的優先性。已安裝套件版本的優先性是 100。未安裝版本預設優先性為 500,若是另個釋出的目標則可跳至 990 (以 -t 命令列選項或 APT::Default-Release 組態指令調整)。
/etc/apt/preferences 檔案內新增款目的方式,指名受影響套件名稱、版本、出處及其新的優先性。
APT 永遠不會安裝舊版的套件 (就是套件的版本編號小於已安裝的套件),除非其優先性高於 1000。APT 總是安裝優先性最高的套件。若兩個套件的優先性相同,APT 安裝最新的 (其版本編號較高)。若同版本的兩個套件優先性相同但內容不同,APT 安裝還沒有安裝的版本 (包括沒有遞增修訂編號的套件,通常是需要的)。
更具體地說,永遠不會安裝優先性小於 0 的套件。沒有安裝其他版本時,將安裝優先性在 0 與 100 之間的套件。其他發行版沒有更新版本或可用的版本時,安裝優先性在 100 與 500 之間的套件。在目標發行版內沒有更新的版本時,安裝優先性在 501 與 990 之間的套件。已安裝的版本不是更新時,安裝優先性在 990 與 1000 之間的套件。即使使強迫 APT 降級也要安裝優先性高於greater than 1000 的套件。
APT 檢查 /etc/apt/preferences 時,首先考量最精確的款目 (通常是指定的套件),然後是較通用的 (包括發行版內的所有套件)。存在多個通用款目時,選用第一個。可用的選項包括套件名稱及其原始檔。每個套件來源包括 釋出 檔案,由 APT 與 套件 檔案同時下載。指定來源 (通常 “Debian” 的官方鏡射站套件,但也可以是個人的或機構的第三方典藏所)。給予發行版名稱 (通常是 Debian 提供標準發行版內的 穩定版測試版不穩定版實驗版) 及其版本 ( 8 就是 Debian 的 Jessie)。接著以實例檢視其語法。
暫時假設您祗需用到 Debian 穩定版的套件。除非特別指明,不會安裝其他版本的套件。可以在 /etc/apt/preferences 檔案內寫入以上的款目:
Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release o=Debian
Pin-Priority: -10
a=stable 設定發行版的名稱。o=Debian 限制來自 “Debian” 的套件。
假設若干伺服器內的程式使用 Perl 5.14 且不希望被升級為其他版本。您需用到此款目:
Package: perl
Pin: version 5.14*
Pin-Priority: 1001
此組態檔的參考文件在手冊的 apt_preferences(5),以 man apt_preferences 命令就可看到。

6.2.6. 在多個發行版工作

apt 是很奇妙的工具,可從其他發行版提取套件。例如,安裝 穩定版 系統之後,或許想要在不偏離系統原來狀態下,試試 測試版不穩定版 的套件。
混用不同版本套件出問題時,Even if you will occasionally encounter problems while mixing packages from different distributions, apt 可以處理得極為恰當把風險降到最低。最好的方法是把所有的發行版置於 /etc/apt/sources.list 檔案內 (某些人總是置入三個發行版,不過還是要記得 不穩定版 是有經驗使用者的專屬。) 且在 APT::Default-Release 參數中設定偏好的發行版 (見 節 6.2.3, “系統升級”) 。
假設 穩定版 是您的參考版本,但是 測試版不穩定版 也列在 sources.list 檔案內。在這個情況下,您可使用 apt install 套件名稱/testing 安裝來自 測試版 的套件。若因相依性未滿足而安裝失敗,可以在 測試版 內加入 -t testing 參數。同樣的方式也適用於 不穩定版
在此情況下,除了已經被其他發行版升級之外,升級 (upgradefull-upgrade) 祗在 穩定版 內完成:其他的升級在各自的發行版內處理。稍後以 APT 預設的優先性說明此行為。請使用 apt-cache policy (見專欄 秘訣 apt-cache policy) 檢視指定的優先性。
每件事都圍繞在 APT 祗處理高於或等於已安裝版本號套件的前提下 (假設 /etc/apt/preferences 還未強迫優先性高於 1000 的某些套件)。
假設從Let's assume that you have installed version 1 of a first package from 穩定版 安裝第一個套件的第一版且從and that version 2 and 3 are available respectively in 測試版不穩定版 安裝同套件的第二版與第三版水。已安裝的版本優先性為 100 但在but the version available in 穩定版 (相同的) 優先性為 990 (因為它是目標釋出版的一部份)。在 測試版不穩定版 的套件其優先性為 500 (預設不安裝版本的優先性)。獲選者為優先性 990 的版本1。套件 “留在 穩定版 內”。
另個套件的例子,已從 測試版 安裝版本 2。版本 1 在 穩定版 且版本 3 在 不穩定版。因為優先性小於已安裝的版本,所以版本 1 (優先性為 990 — 小於 1000) 已作廢。祗剩下優先性為 500 的版本 2 與版本 3。在此情況下,APT 選擇較新的版本,即使用 不穩定版。若不要已安裝自 測試版 的套件,可以移殖至 不穩定版,必須指定來自於 不穩定版 優先性小於 500 (例如 490) 的套件。修改 /etc/apt/preferences 檔案即可:
Package: *
Pin: release a=unstable
Pin-Priority: 490

6.2.7. 自動追蹤已安裝的套件

apt 的必要功能之一是經由相依性追蹤已安裝的套件。這些套件稱為 “自動”,且通常包括其程式庫。
有了這些資訊後,移除套件時,套件管理者可以計算該等不再需要的自動套件 (因為沒有 “手動安裝” 套件相依於他)。apt-get autoremove 會清除該等套件。aptitudeapt 沒有這個命令:辨認之後,前者自動移除它們,而使用者不需手動執行後者命令。所有的情況下,在清除訊息中列出所有影響到的套件。
把套件標記為自動是個好習慣,不需要時就被自動移除。apt-mark auto 套件名稱 會標記該套件為自動而 apt-mark manual 套件名稱 則不標記。aptitude markautoaptitude unmarkauto 作用相同祗是功能較多 (見 節 6.4.1, “aptitude)。命令互動介面的 aptitude 也可檢視多個套件的 “自動旗標”。
自動安裝套件出現在系統內。係由於從命令列取得該等資訊,可使用 aptitude why 套件名稱 (aptapt-get 沒有類似的功能):
$ aptitude why python-debian
i   aptitude         Recommends apt-xapian-index         
i A apt-xapian-index Depends    python-debian (>= 0.1.15)