內容目錄
unstable
軟體包的 testing
版本
experimental
軟體包的 unstable
版本
注意 | |
---|---|
這一章假定最新的穩定版的代號為: 在本文件中,APT 系統的資料來源總稱為源列表。能夠在
" |
Debian 是一個志願者組織,它建立一致的自由軟體的預編譯二進位制包並從檔案庫中分發它們。
許多遠端映象站提供了 HTTP 和 FTP 的方式來存取 Debian 檔案庫。也可以使用 CD-ROM/DVD 。
目前 Debian 的軟體包管理系統是 高階軟體包工具 (APT),它能夠使用所有這些資源。
Debian 軟體包管理系統,當使用適當時,可以讓使用者從檔案庫安裝統一設定的二進位制軟體包 到系統中。現在,有 74165 個可用於 amd64 架構的軟體包。
Debian 軟體包管理系統有豐富的歷史,有許多可供選擇的前端使用者程式和後端存取方式。現在,我們推薦下列的這些。
apt
(8) 用於所有的互動式命令列操作,包含軟體包的安裝、移除和版本升級。
apt-get
(8) 用於從指令碼中呼叫 Debian 軟體包管理系統。它在
apt
不可用時也可作為一個備選選項(常見於較舊的 Debian 系統)。
aptitude
(8) 使用一個互動式的文字介面來管理已安裝的軟體包和搜尋可用的軟體包。
表格 2.1. Debian 軟體包管理工具列表
軟體包 | 流行度 | 大小 | 說明 |
---|---|---|---|
dpkg
|
V:912, I:999 | 6388 | 用於 Debian 的底層軟體包管理系統(基於檔案的) |
apt
|
V:865, I:999 | 4318 | 使用命令列管理軟體包的 APT 前端:
apt /apt-get /apt-cache |
aptitude
|
V:48, I:253 | 4389 | 使用全屏控制檯互動式管理軟體包的 APT 前端: aptitude (8) |
tasksel
|
V:34, I:980 | 347 | 用來安裝選擇的任務的 APT 前端: tasksel (8) |
unattended-upgrades
|
V:182, I:278 | 301 | 用於 APT 的增強軟體包,會自動安裝安全更新 |
gnome-software
|
V:153, I:263 | 3085 | GNOME 軟體中心(圖形化的 APT 前端) |
synaptic
|
V:46, I:375 | 7627 | 圖形化的軟體包管理工具(GTK 的 APT 前端) |
apt-utils
|
V:379, I:998 | 1065 | APT 實用程式:apt-extracttemplates (1)
、apt-ftparchive (1) 和 apt-sortpkgs (1) |
apt-listchanges
|
V:358, I:872 | 398 | 軟體包歷史更改提醒工具 |
apt-listbugs
|
V:6, I:8 | 477 | 在每次 APT 安裝前列出嚴重的 bug |
apt-file
|
V:17, I:67 | 89 | APT 軟體包搜尋工具 —— 指令列介面 |
apt-rdepends
|
V:0, I:5 | 39 | 遞迴列出軟體包依賴 |
下面是 Debian 系統軟體包調配的一些要點。
Debian 尊重系統管理員的手動調配。換句話說,軟體包調配系統不會為了方便而去更改那些調配。
每個軟體包都帶有自己的調配指令碼,它使用標準使用者介面 debconf
(7) 來幫助軟體包初始化安裝過程。
Debian 開發者通過軟體包調配指令碼,盡力使你能有一個完美的升級體驗。
系統管理員可以使用軟體包工具的全部功能。但在預設的安裝中會禁用那些具有安全風險的。
如果你手動激活了一些具有安全隱患的服務,你有責任遏制風險。
高深的配置可以由系統管理員手動啟用。這可能會對用於系統配置的通用流行幫助程式造成干擾。
Debian 系統管理員中的新手應該保持在只進行安全更新的 stable
版本。直到你十分了解 Debian
系統前,你應當遵循下列的預防措施。
在 原始檔 中不要包含 testing
或 unstable
。
在 原始檔 裡不要在標準的 Debian 中混合使用其它非 Debian 的檔案庫,例如 Ubuntu 。
不要建立 “/etc/apt/preferences
” 。
不瞭解會造成的全部影響,就不要通過組態檔案改變軟體包管理工具的預設行為。
不要使用 “dpkg -i random_package
”
安裝任何軟體包。
絕不使用 “dpkg --force-all -i
random_package
” 安裝任何軟體包。
不要刪除或修改 “/var/lib/dpkg/
” 中的檔案。
不要讓從原始碼直接安裝的程式覆蓋系統檔案。
如果需要的話,將它們安裝到 “/usr/local
” 或 “/opt
” 中。
對 Debian 軟體包管理系統,違背上面的預防措施,會導致不相容影響,可能會使你的系統無法使用。
負責有關鍵任務的伺服器的嚴謹的 Debian 系統系統管理員,應該使用額外的預防措施。
沒有在安全的條件下使用你特定的調配進行徹底地測試,就不要從 Debian 安裝任何軟體包(包含安全更新)。
你作為系統管理員要對你的系統負責到底。
Debian 系統長久的穩定史並無法保證什麼。
注意 | |
---|---|
對於你的生產伺服器,建議使用帶有安全更行的
|
儘管我在上面進行了警告,我知道本文件的許多讀者希望可以執行更新的 testing
或
unstable
版。
菩薩使用下面的內容拯救一個人,使他從掙扎於持續升級地獄的因果報應中脫困,並讓他達到 Debian 的極樂世界。
這個列表面向 自己管理的 桌面環境。
使用 testing
版,實際上,它是自動滾動釋出的,由 Debian 檔案庫的 QA
質量架構來管理,比如:Debian
持續整合、只上傳原始碼實踐 和
庫轉換跟蹤。在
testing
版中的軟體包被更新得足夠頻繁來提供全部最新的特性。
在源列表裡面設定 testing
版相應的程式碼名為套件名(在
bookworm
-作為-stable
版的釋出週期時,是"trixie
")。
大概在主版本釋出一個月後,僅僅在你自己評估了形勢後,才手動更新 原始檔 裡的這個程式碼名到新的版本號。對於這個更新,Debian 使用者和開發者郵件列表也是好的資訊來源。
使用 unstable
版是不推薦的。unstable
版對開發者
除錯軟體包合適,但對普通的桌面使用而言,會有使你暴露在不必要的風險中的傾向。 儘管
Debian 系統的 unstable
版在大多數時候看起來都非常穩定,但會有一些軟體包問題,並且它們中的一部分是不容易解決的。
這裡有一些基本預防措施意見,確保簡單快速地從 Debian 軟體包的 bug 中恢復。
通過將 Debian 系統的 stable
套件安裝到另一個分割槽,可以使系統能夠進行雙啟動
製作安裝 CD 便於用於 救援啟動
考慮安裝 apt-listbugs
,這可以在升級之前檢查 Debian Bug 跟蹤系統(BTS) 的資訊
對軟體包系統的基礎設施有足夠的瞭解來解決問題
注意 | |
---|---|
如果你無法做到這些預防措施中的任何一個,那你可能還沒做好使用 |
提示 | |
---|---|
Debian 檔案庫官方政策的定義參見 Debian 政策文件,第2章 —— Debian 檔案庫。 |
讓我們從系統使用者的角度來看看 Debian 檔案庫。
對於系統使用者,是使用 APT 系統來訪問 Debian 檔案庫。
APT 系統定義它的資料來源作為源列表,在
sources.list
(5) 裡面描述。
對於使用典型的 HTTP 訪問的 bookworm
系統,單行格式的源列表如下:
deb http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free deb-src http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free deb http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free deb-src http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free
可替代的,相等的使用 deb822 格式的源列表如下:
Types: deb deb-src URIs: http://deb.debian.org/debian/ Suites: bookworm Components: main non-free-firmware contrib non-free Types: deb deb-src URIs: http://security.debian.org/debian-security/ Suites: bookworm-security Components: main non-free-firmware contrib non-free
原始檔 的關鍵點如下。
單行格式
它的定義檔案在"/etc/apt/sources.list
"檔案和"/etc/apt/sources.list.d/*.list
"檔案裡面。
每一行定義了 APT 系統的資料來源。
“deb
” 的那行定義了二進位制軟體包。
“deb-src
” 的那行定義了原始碼軟體包。
第一個參數是 Debian 檔案庫的根 URL 。
第二個引數是發行版名稱,可以使用套件名或代號。
第三個和之後的參數是 Debian 檔案庫的有效檔案庫範圍名稱。
Deb822 格式
它的定義檔案在"/etc/apt/sources.list.d/*.source
"檔案裡。
由空格隔開的每個多行塊,定義了 APT 系統的資料來源。
"Types:
" 章節定義列表型別,即"deb
" 和
"deb-src
"。
"URIs:
"章節定義 Debian 檔案庫 URI 的根地址。
"Suites:
"章節定義了發行版名稱列表,名稱可以使用套件名或代號。
"Components:
" 章節定義 Debian 檔案庫中有效檔案庫名稱列表。
如果只是用
aptitude
,它不訪問原始碼相關的元資料,“deb-src
”定義可以安全地省略。這可以加速檔案庫元資料的更新。
URL 可以是 "https://
", "http://
",
"ftp://
", "file://
",……
"#
" 開頭的行是註釋,被忽略。
這裡,我傾向於使用代號
“bookworm
”或"trixie
"來代替套件名
“stable
”或"testing
" ,以避免下一個
stable
版本釋出時出現意外。
提示 | |
---|---|
如果在上述的例子中,使用了 “ |
在 bookworm
釋出後,下面是配置檔案所使用的 Debian 檔案庫站點的 URL
和套件名或代號的列表。
表格 2.2. Debian 檔案庫站點列表
檔案庫 URL | 套件名 | 程式碼名 | 倉庫用途 |
---|---|---|---|
http://deb.debian.org/debian/ | stable |
bookworm |
在擴充套件檢查後,類似靜態的 stable 釋出 |
http://deb.debian.org/debian/ | testing |
trixie |
在表面檢查和短期等待後的動態 testing 釋出 |
http://deb.debian.org/debian/ | unstable |
sid |
在最少的檢查和不等待的動態 unstable 釋出 |
http://deb.debian.org/debian/ | experimental |
N/A | 開發者預釋出實驗版本(可選,只適用於開發者) |
http://deb.debian.org/debian/ | stable-proposed-updates |
bookworm-proposed-updates |
用於下一個穩定版 stable 的點版本(小版本)釋出的更新(可選) |
http://deb.debian.org/debian/ | stable-updates |
bookworm-updates |
stable-proposed-updates 套件的子集,需要緊急更新,比如說時區(可選的) |
http://deb.debian.org/debian/ | stable-backports |
bookworm-backports |
大部分從 testing 版中隨機收集和重新編譯的軟體包(可選) |
http://security.debian.org/debian-security/ | stable-security |
bookworm-security |
stable 釋出的安全更新(重要) |
http://security.debian.org/debian-security/ | testing-security |
trixie-security |
這個沒有積極支援,不被安全團隊使用 |
注意 | |
---|---|
只有帶有安全更新的純淨的 |
注意 | |
---|---|
在 " |
提示 | |
---|---|
對於使用 |
注意 | |
---|---|
The security bugs for the |
表格 2.3. Debian 歸檔列表
區域 | 軟體包數量 | 軟體包元件標準 |
---|---|---|
main |
72806 | 遵從 Debian 自由軟體引導方針(DFSG),並且不依賴於 non-free |
non-free-firmware |
39 | 不符合 Debian 自由軟體指導方針(DFSG),正常的系統安裝過程中必需要用到的韌體 |
contrib |
356 | 遵從 Debian 自由軟體引導方針(DFSG),但依賴於 non-free |
non-free |
964 | 不遵從 Debian 自由軟體指導方針(DFSG),並且不在 non-free-firmware |
上述軟體包的數量是 amd64 架構的。main
區域提供 Debian 系統(參見 節 2.1.6, “Debian 是100% 的自由軟體”)。
通過把你的瀏覽器指向檔案庫 URL,這些 URL 在 dists
或
pool
之後是各不相同的,Debian 檔案庫能夠被有規劃的組織。
發行版可以用套件或代號來指定。發行版在許多文件中也被當做是套件的同義詞。套件和代號的關係總結如下。
表格 2.4. 套件和代號的關係
時間 | suite = stable |
suite = testing |
suite = unstable |
---|---|---|---|
在 bookworm 發佈後 |
codename = bookworm |
codename = trixie |
codename = sid |
在 trixie 發佈後 |
codename = trixie |
codename = forky |
codename = sid |
代號的歷史參見 Debian FAQ: 6.2.1 Which other codenames have been used in the past?
在較嚴格的 Debian 檔案術語,“部分 section”這一詞特指按應用領域來分類的軟體包類別。(但是,主要部分 ("main section") 這一詞有時會用來描述 Debian 檔案區中,名為”main 主要"的區域 。)
Debian 開發者(DD)每次上傳軟體包到 unstable
檔案庫(通過 incoming 處理),都必須確保上傳的軟體包與最新的
unstable
檔案庫中的最新軟體包相容。
如果 DD 故意打破重要的庫升級等的這種相容性,這通常會在 Debian 開發者郵件列表等進行公告。
在 Debian 檔案庫維護指令碼將軟體包從 unstable
檔案庫移動到
testing
檔案庫前,檔案庫維護指令碼不僅檢查時間(約2-10天)和軟體包的 RC bug
報告的狀態,還嘗試確保它們可以和最新的 testing
檔案庫中的軟體相容。這個過程使得testing
檔案庫非常正確可用。
通過由釋出團隊領導的逐步凍結檔案庫的過程,並進行一些手動干預,使 testing
檔案庫完全一致,無缺陷。然後,將舊的 testing
檔案庫的程式碼名稱分配給新的
stable
檔案庫,併為新的 testing
檔案庫建立新的程式碼名稱。新的 testing
檔案庫最初的內容和新發布的
stable
檔案庫的內容完全相同。
unstable
和 testing
檔案庫都可能會遭受由以下幾個因素導致的臨時的小故障。
損壞的軟體包被上傳到檔案庫(多見於 unstable
)
延遲接受新的軟體包到檔案庫(多見於 unstable
)
檔案庫時間同步問題( testing
和 unstable
)
手動干預檔案庫,例如移除軟體包(多見於 testing
)等。
因此,如果你決定使用這些檔案庫,你應該能夠修復或忍受這些型別的小故障。
注意 | |
---|---|
在新的 |
提示 | |
---|---|
跟蹤 |
檔案庫的定義參見 Debian 政策文件。
Debian 是100%的自由軟體,因為:
Debian 預設只安裝自由軟體,這尊重了使用者的自由。
Debian 在 main
中只提供自由軟體。
Debian 建議只執行來自 main
的自由軟體。
在 main
中的軟體包,沒有依賴或推薦在 non-free
或
non-free-firmware
或 contrib
中的軟體包。
有人想知道下列的兩個事實是否互相矛盾。
“ Debian 將始終是 100% 的自由軟體”。( Debian 社群契約中的第一條)
Debian 伺服器上有一些
non-free-firmware
、non-free
和
contrib
軟體包。
因為下列原因,這並不矛盾。
Debian 系統具有100%的自由,並且它的軟體包位於 Debian 伺服器的 main
區域。
Debian 系統之外的軟體包位於 Debian 伺服器的 non-free
、
non-free-firmware
和 contrib
區域。
在 Debian 社群契約的第4條和第5條對這進行了明確的解釋:
我們將優先考慮我們的使用者及自由軟體
我們由我們的使用者及自由軟體社群的需要所導向。我們將優先考慮他們的利益。我們將在多種計算環境中支援我們的使用者的操作需要。我們不反對在 Debian 系統上使用非自由軟體,我們也不會嘗試向建立和使用這部分軟體的使用者索取費用。我們允許他人,在沒有我們的資金的參與下,製造包括 Debian 以及商業軟體的增值套件。為了達成這些目標,我們將提供整合的、高質量的、100%自由的軟體,而不附加任何可能阻止在這些方面使用的法律限制。
哪些作品不符合我們的自由軟體規範
我們知道,某些我們的使用者需要使用不符合 Debian 自由軟體指導方針的作品。
我們為這些作品,在我們的檔案庫中留出了"non-free
"、"non-free-firmware
"和"contrib
"目錄。在這些目錄下的軟體包,並不屬於
Debian 系統 儘管它們已被配置成可以在 Debian
下使用。我們鼓勵光碟製造商閱讀這些目錄下的軟體的許可證,以判斷他們是否可以在光碟中發行這些軟體 。所以,儘管非自由軟體並非 Debian
系統的一部分,我們仍支援它們的使用,並且我們為非自由軟體提供了公共資源 (諸如我們的缺陷跟蹤系統以及郵件列表)。Debian
官方媒介可以包括韌體,韌體不是 Debian 系統的一部分,這是一個例外,能夠讓 Debian 用於需要這些韌體的硬體上。
注意 | |
---|---|
在目前的 Debian 社群契約(Debian Social Contract) 1.2 版本第 5 條條款的實際文字和上面的文字有稍微不同。在不改變 Debian 社群契約實際內容下,這個文字調整讓本使用者文件在邏輯上保持一致。 |
使用者應該瞭解使用 non-free
、non-free-firmware
和
contrib
中的軟體包所需要冒的風險:
使用類似的軟體包會失去自由
失去 Debian 對軟體包的支援(這些軟體包無法存取原始碼,Debian 不能進行完全的支援。)
汙染你100%自由的 Debian 系統
Debian 自由軟體引導方針為 Debian 設立了自由軟體標準。Debian 對軟體包中的軟體做了最廣泛的解釋,包含文件、韌體、圖示和圖形資料。這使得 Debian 的自由軟體標準非常嚴格。
典型的 non-free
、 non-free-firmware
和
contrib
軟體包包含了下列型別的自由分發的軟體包:
在GNU Free Documentation
License下的文件包 ,包含不變的部分 ,比如GCC 和 Make的。
(大多數都可以在non-free/doc
找到 .)
包含沒有原始碼的二進位制資料的韌體軟體包,例如在 節 9.10.5, “硬體驅動和韌體”
中作為 non-free-firmware
列出的軟體包。(多見於
non-free-firmware/kernel
部分。)
遊戲和字型軟體包,對商業使用和/或內容修改進行了限制。
請注意,non-free
、non-free-firmware
和
contrib
軟體包的數量少於 main
軟體包的2%。允許訪問
non-free
、non-free-firmware
和
contrib
並不會模糊軟體包的來源。使用 aptitude
(8)
的全屏互動式介面可以提供完全的可見性和完全的控制,可以讓你決定安裝來自某個部分的軟體包,來使你的系統保持自由。
Debian 系統通過其控制檔案欄位中的版本化二進位制依賴宣告機制來提供一致的二進位制軟體包集合。下面有一些它們的簡單定義。
“依賴”
絕對的依賴,所有在這裡列出的軟體包都必須同時或提前安裝。
"預依賴"
類似於 Depends,但列出的軟體包必須提前完成安裝。
"推薦"
這裡表示一個強,但不是絕對的依賴關係 。大多數使用者不會想要這個包,除非在這裡列出的所有包都已經安裝。
"建議"
較弱的依賴。這個軟體包的大多數使用者可能會從安裝所列的軟體包中受益,但沒有它們也可以有適當的功能。
"增強"
這裡表明一個像建議的弱依賴關係,不裝也沒關係。
"破損"
表明一個軟體包不相容一些版本規範。一般的解決方法就是升級列出的所有軟體包。
"衝突"
這表明了絕對的不相容。為了安裝這個軟體包必須移除所有列出的軟體包。
"替代"
這表明這個檔案安裝的檔案會替代所列的軟體包的檔案。
"提供"
表明這個軟體包會提供所列的軟體包所有的檔案和功能。
注意 | |
---|---|
請注意,同時將 “Provides” 、“Conflicts” 和 “Replaces” 定義到一個虛擬的軟體包是一個明智的調配。這確保了在任何一個時間只能安裝一個提供該虛擬包的真正軟體包。 |
包含原始碼依賴關係的官方定義位於 the Policy Manual: Chapter 7 - Declaring relationships between packages。
這是 APT 提供的軟體包管理的簡單事件流摘要。
更新(“apt
update
”、“aptitude update
” 或 “apt-get
update
”):
從遠端檔案庫獲得檔案庫元資料
重建和更新 APT 使用的本地元資料
升級(“apt upgrade
” 和
“apt full-upgrade
”,或 “aptitude
safe-upgrade
” 和 “aptitude full-upgrade
”,或
“apt-get upgrade
” 和 “apt-get
dist-upgrade
”):
選擇候選版本,它所安裝的軟體包通常都是最新的可用版本(例外參見 節 2.7.7, “使用 apt-pinning 調整獲選版本” )
解決軟體包依賴關係
如果候選版本與已安裝的版本不同,會從遠端檔案庫獲得所選擇的二進位制軟體包
解包所獲得的二進位制軟體包
執行 preinst 指令碼
安裝二進位制檔案
執行 postinst 指令碼
安裝(“apt install
...
”、“aptitude install ...
" 或者
"apt-get install …
” ):
選擇命令列中列出的包
解決軟體包依賴關係
從遠端伺服器獲得已選二進位制包
解包所獲得的二進位制軟體包
執行 preinst 指令碼
安裝二進位制檔案
執行 postinst 指令碼
移除 ("apt remove …
",
“aptitude remove …
” 或 “apt-get remove
…
”):
選擇命令列中列出的包
解決軟體包依賴關係
執行 prerm 指令碼
移除已安裝的檔案,除了組態檔案
執行 postrm 指令碼
清除 ("apt
purge
",“aptitude purge …
” 或 “apt-get
purge …
”):
選擇命令列中列出的包
解決軟體包依賴關係
執行 prerm 指令碼
移除已安裝的檔案,包含組態檔案
執行 postrm 指令碼
這裡,為了大局,我特意省略了技術細節。
你應該閱讀優良的官方文件。第一個閱讀的文件是 Debian 特定的
“/usr/share/doc/package_name/README.Debian
”。同時也應該查詢
“/usr/share/doc/package_name/
”
中的其它文件。如果你設定 shell 為節 1.4.2, “定製bash”,輸入下列指令。
$ cd package_name
$ pager README.Debian
$ mc
你可能需要安裝以 “-doc
” 字尾命名的對應文件軟體包來獲得詳細的資訊。
如果你在使用一個特定的軟體包時出現了問題,一定要首先檢查 Debian bug 跟蹤系統(BTS) 網站。
表格 2.5. 解決特定軟體包問題的主要網站
網站 | 指令 |
---|---|
Debian bug tracking system (BTS) 主頁 | sensible-browser "https://bugs.debian.org/" |
已經知道軟體包名稱的 bug 報告 | sensible-browser
"https://bugs.debian.org/package_name" |
知道 bug 編號的 bug 報告 | sensible-browser
"https://bugs.debian.org/bug_number" |
使用 Google 搜尋,在關鍵字中包含
“site:debian.org
”,“site:wiki.debian.org
”,“site:lists.debian.org
”
等等。
當你要傳送一份 bug 報告時,請使用 reportbug
(1) 指令。
當遇到2個以上的類似的軟體包時,先前沒有經過反覆的嘗試,你不知道安裝哪一個的時候,應該用常識來判斷。我認為以下幾點是首選的軟體包應該具有的特徵。
重要性:是 > 否
型別:main > contrib > non-free
優先順序:需要 > 重要 > 標準 > 可選 > 額外
任務:在任務下有軟體包的列表資訊,例如 “桌面環境”
軟體包是被與之有依賴關係的軟體包所選擇的(例如 gcc
依賴 gcc-10
)
流行度:在投票或者安裝指數上有著更高的分數
更新日誌:維護者經常的更新
BTS (缺陷跟蹤系統):沒有 RC 級別的缺陷(沒有危險、重大嚴重的缺陷)
BTS (缺陷跟蹤系統):有維護者對缺陷報告反饋
BTS (缺陷跟蹤系統): 有著更多的近期修復的 bug 數目
BTS (缺陷跟蹤系統):遺留的非嚴重(non-wishlist)缺陷數量較少
Debian 是一個使用分散式開發模式的志願專案,它的檔案庫包含了許多不同關注點和不同質量的軟體包。你必須做出自己的選擇。
無論你決定使用哪個 Debian 系統套件,你仍然希望執行在那個套件裡不存在的程式版本。即使你在其它 Debian 套件裡面,或者在其它非 Debian 的資源裡面,找到這個程式的二進位制軟體包,它們的要求可能和你目前的 Debian 系統不一致。
在 節 2.7.7, “使用 apt-pinning 調整獲選版本” 裡描述的 apt-pinning 等技術,雖然你能夠用它來調整軟體包管理系統來安裝這類不不同步的二進位制軟體包,但這樣的調整方法只有有限的使用場景,應為它們可能破壞那些程式和你的系統。
在單獨安裝這類不同步的軟體包之前,你需要查詢所有存在的和你目前 Debian 系統相容的安全技術替代方案。
使用相應的沙盒化的上游二進位制軟體包來安裝這樣的程式(參見 節 7.7, “沙盒”)。
建立一個 chroot 或類似的環境來在裡面執行這樣的程式(參見節 9.11, “虛擬化系統”)。
CLI 命令能夠在和它相容的 chroot 下輕鬆執行(參見 節 9.11.4, “Chroot 系統”)。
不重啟機器,能夠輕鬆的嘗試多個完整的桌面環境(參見 節 9.11.5, “多桌面系統”)。
自己構建需要的二進位制軟體包版本,和你目前 Debian 系統相容。
這是一個 不輕鬆的任務 (參見 節 2.7.13, “移植一個軟體包到 stable 系統”)。
在 Debian 系統中有許多基於 APT 的軟體包管理工具可以在 Debian
系統上進行基於倉庫的軟體包管理操作。在這裡,我們將介紹兩種基本的軟體包管理工具:apt
、apt-get
/ apt-cache
和 aptitude
。
對於涉及軟體包安裝或更新軟體包元資料的軟體包管理操作,你必須有 root 許可權。
儘管 aptitude
是作者主要使用的一個非常好的可互動工具,但你應該知道下列警示:
不建議在新版本釋出後在 stable
Debian 系統上使用
aptitude
指令來進行跨版本的系統升級。
建議使用"apt full-upgrade
"或“apt-get
dist-upgrade
” 來進行這個操作。參見 Bug
#411280。
aptitude
指令有時候會為了testing
或
unstable
Debian 系統升級清除大量軟體包。
這個情況嚇壞了許多的系統管理員。請不要驚慌。
這似乎大多數是由元軟體包的依賴或推薦的軟體包版本偏差造成的,例如 gnome-core
。
要解決這個問題,可以在 aptitude
命令選單中選擇 “取消待執行的動作” ,退出
aptitude
,並使用 “apt full-upgrade
”。
apt-get
和 apt-cache
是最基礎 的基於 APT 的軟體包管理工具。
apt-get
和 apt-cache
只提供指令列使用者介面。
apt-get
是進行跨版本的主系統升級等操作的最合適工具。
apt-get
提供了一個強大的軟體包依賴解析器。
apt-get
對硬體資源的要求不高。它消耗更少的記憶體並且執行速度更快。
apt-cache
提供了一個 標準的正規表達式來搜尋軟體包名稱和描述。
apt-get
和 apt-cache
可以使用
/etc/apt/preferences
來管理軟體包的多個版本,但這非常繁瑣。
apt
指令是一個高階的命令列介面用於套件管理。基本上,它是apt-get
、apt-cache
及其相似指令的封裝。本意為一個終端使用者介面,且預設開啟一些適合互動用途的選項。
apt
工具在使用者使用 apt install
安裝軟體包時提供了一個友好的進度條。
在成功安裝下載的軟體包後,apt
將預設刪除快取的 .deb
軟體包。
提示 | |
---|---|
建議使用者使用新的 |
aptitude
指令是最通用的基於 APT
的軟體包管理工具。
aptitude
提供了一個全螢幕的互動式文字使用者介面。
aptitude
同樣也提供了一個指令使用者介面。
aptitude
是用於日常軟體包管理(例如檢查已安裝的軟體包和搜尋可用的軟體包)的最合適工具。
aptitude
對硬體資源的要求更高。它消耗更多的記憶體並且執行速度更慢。
aptitude
提供一個增強的正規表達式來搜尋所有的軟體包元資料。
aptitude
可以管理軟體包的多個版本,並且不使用
/etc/apt/preferences
,這會十分直觀。
下面是使用 apt
(8), aptitude
(8) 和
apt-get
(8) / apt-cache
(8)
的命令列基本軟體包管理操作。
表格 2.6. 使用 apt
(8), aptitude
(8) 和
apt-get
(8) / apt-cache
(8)
的命令列基本軟體包管理操作
apt 語法 |
aptitude 語法 |
apt-get / apt-cache 語法 |
說明 |
---|---|---|---|
apt update |
aptitude update |
apt-get update |
更新軟體包檔案庫元資料 |
apt install foo |
aptitude install foo |
apt-get install foo |
安裝 “foo ” 軟體包的候選版本以及它的依賴 |
apt upgrade |
aptitude safe-upgrade |
apt-get upgrade |
安裝已安裝的軟體包的候選版本並且不移除任何其它的軟體包 |
apt full-upgrade |
aptitude full-upgrade |
apt-get dist-upgrade |
安裝已安裝的軟體包的候選版本,並且需要的話會移除其它的軟體包 |
apt remove foo |
aptitude remove foo |
apt-get remove foo |
移除 “foo ” 軟體包,但留下組態檔案 |
apt autoremove |
N/A | apt-get autoremove |
移除不再需要的自動安裝的軟體包 |
apt purge foo |
aptitude purge foo |
apt-get purge foo |
清除 “foo ” 軟體包的組態檔案 |
apt clean |
aptitude clean |
apt-get clean |
完全清除本地倉庫的軟體包檢索檔案 |
apt autoclean |
aptitude autoclean |
apt-get autoclean |
清除本地倉庫中過時軟體包的軟體包檢索檔案 |
apt show foo |
aptitude show foo |
apt-cache show foo |
顯示 “foo ” 軟體包的詳細資訊 |
apt search 正則表示式 |
aptitude search regex |
apt-cache search regex |
搜尋匹配 regex 的軟體包 |
N/A | aptitude why regex |
N/A | 解釋匹配 regex 的軟體包必須被安裝的原因 |
N/A | aptitude why-not regex |
N/A | 解釋匹配 regex 的軟體包不必安裝的原因 |
apt list --manual-installed |
aptitude search '~i!~M' |
apt-mark showmanual |
列出手動安裝的軟體包 |
apt
/ apt-get
和
aptitude
能夠混用,沒有大問題。
“aptitude why regex
” 可以透過
“aptitude -v why regex
”
列出更多的資訊。類似的資訊可以透過"apt rdepends
package
" 或 “apt-cache rdepends
package
” 獲取。
當 aptitude
指令在指令列模式下啟動後遇到了一些問題(例如軟體包衝突),你可以在之後的提示中按下
“e
” 鍵切換到全螢幕的互動模式。
注意 | |
---|---|
雖然 |
你可以在 “aptitude
” 後面使用的指令選項。
更多內容參見 aptitude
(8) 和位於
“/usr/share/doc/aptitude/README
” 的 “aptitude 使用者手冊”。
要使用互動式的軟體包管理,你可以像下面那樣以互動模式啟動 aptitude
。
$ sudo aptitude -u Password:
這將更新檔案庫資訊的本地副本,並以選單的形式全螢幕顯示軟體包列表。 aptitude 將它的調配放在
“~/.aptitude/config
”。
提示 | |
---|---|
如果你想用 root 的調配而非使用者的,可以在上面的例子中使用 “ |
提示 | |
---|---|
當 |
在全螢幕模式下瀏覽軟體包狀態和設定動作的按鍵如下。
表格 2.8. aptitude 的按鍵繫結
快捷鍵 | 鍵綁定功能 |
---|---|
F10 or Ctrl-t |
選單 |
? |
顯示按鍵幫助(更加完整的清單) |
F10 → 幫助 → 使用者手冊 |
顯示使用者手冊 |
u |
更新軟體包檔案庫資訊 |
+ |
標記該軟體包以便升級或安裝 |
- |
標記該軟體包以便移除(保留組態檔案) |
_ |
標記該軟體包以便清除(移除組態檔案) |
= |
將軟體包設為保持狀態 |
U |
標記所有可升級包(動作如同 full-upgrade) |
g |
開始 下載 並 安裝 所選擇包 |
q |
退出該介面並儲存變更 |
x |
退出該介面並清除變更 |
Enter |
檢視軟體包的資訊 |
C |
檢視軟體包的變更記錄 |
l |
變更軟體包的顯示限制 |
/ |
搜尋匹配的第一個軟體包 |
\ |
重複上一個搜尋 |
可以透過命令列指定檔名稱,也可以透過按 “l
” 或 “/
”
之後在選單提示下輸入下列所述的 aptitude 正則表示式。aptitude 正則表示式可以使用 “~n
”
開頭後接軟體包名稱的字串來精確匹配軟體包名稱。
提示 | |
---|---|
你需要在視覺化介面中按下 “ |
aptitude
(8) 全螢幕互動模式下,軟體包列表裡的軟體包會像下面的例子那樣顯示。
idA libsmbclient -2220kB 3.0.25a-1 3.0.25a-2
該行的從左到右的含義如下。
“狀態”標籤 (第一個字母)
“動作”標籤(第二個字母)
“自動”標籤(第三個字母)
軟體包名稱
該“動作”對磁碟空間的變化
軟體包當前版本
軟體包可用版本
提示 | |
---|---|
您可以在幫助選單中找到完整的標籤列表,按“ |
可用版本 的選擇是依據當前的本地首選項(參見
apt_preferences
(5) 和 節 2.7.7, “使用 apt-pinning 調整獲選版本”)。
軟體包檢視的幾種型別都可以在“ 檢視
”選單下找到。
表格 2.9. aptitude 檢視
檢視 | 檢視描述 |
---|---|
Package View |
參見 表格 2.10, “標準軟體包檢視的分類” (預設) |
Audit Recommendations |
列出推薦安裝但還沒有安裝的軟體包 |
Flat Package List |
不分類地列出軟體包 (用於正規表達式) |
Debtags Browser |
列出由 debtags 進行分類的軟體包 |
原始碼軟體包檢視 |
列出由原始碼軟體包分組的軟體包 |
注意 | |
---|---|
請幫助我們改進用 debtags 標記的軟體包! |
標準“軟體包檢視
”分類軟體包的方法與帶有一些額外功能的 dselect
有點像。
表格 2.10. 標準軟體包檢視的分類
分類 | 檢視描述 |
---|---|
Upgradable Packages |
按照 section → area →
軟體包 的順序顯示列出軟體包 |
New Packages |
同上 |
Installed Packages |
同上 |
Not Installed Packages |
同上 |
Obsolete and Locally Created Packages |
同上 |
Virtual Packages |
列出同樣功能的軟體包 |
Tasks |
列出一個特定任務所需的不同功能的軟體包 |
提示 | |
---|---|
|
aptitude 提供了幾個可以使用正規表達式來搜尋軟體包的選項。
shell 指令列:
“aptitude search 'aptitude_regex'
”
列出安裝狀態、軟體包名稱和匹配軟體包的剪短描述
“aptitude show 'package_name'
”
列出軟體包的詳細描述
全螢幕互動模式:
"l
" 可以限制匹配軟體包的檢視
"/
" 搜尋匹配的軟體包
"\
" 向後搜尋匹配的軟體包
"n
" 查詢下一個
"N
" 查詢上一個
提示 | |
---|---|
字串 package_name 被看作軟體包名稱的精確字串匹配,除非它是以
" |
aptitude 常規表達式是類 mutt 的拓展 ERE(參見 節 1.6.2, “正規表達式”),aptitude
具體的特殊匹配規則擴充如下。
表格 2.11. aptitude 正規表達式
擴充的比對規則描述 | 正規表達式 |
---|---|
匹配軟體包名稱 | ~nregex_name |
匹配描述 | ~dregex_description |
匹配軟體集名稱 | ~tregex_task |
匹配 debtag | ~Gregex_debtag |
匹配維護者 | ~mregex_maintainer |
匹配軟體包的 section | ~sregex_section |
匹配軟體包版本 | ~Vregex_version |
匹配檔案庫 | ~A{bookworm,trixie,sid } |
匹配來源 | ~O{debian,… } |
匹配優先順序 | ~p{extra,important,optional,required,standard } |
匹配必要的軟體包 | ~E |
匹配虛擬軟體包 | ~v |
匹配新的軟體包 | ~N |
匹配待執行的動作 | ~a{install,upgrade,downgrade,remove,purge,hold,keep } |
匹配已安裝軟體包 | ~i |
匹配帶有 A 標籤的已安裝軟體包(自動安裝的軟體包) | ~M |
匹配不帶有 A 標籤的已安裝軟體包(管理員選擇的軟體包) | ~i!~M |
匹配已安裝並且是可升級的軟體包 | ~U |
匹配已刪除但未清除的軟體包 | ~c |
匹配已移除,已清除或可移除的軟體包 | ~g |
匹配破壞依賴關係的軟體包 | ~b |
匹配破壞 type 依賴關係的軟體包 | ~Btype |
匹配 pattern 軟體包的 type 依賴關係 | ~D[type:]pattern |
匹配 pattern 軟體包破壞的 type 依賴關係 | ~DB[type:]pattern |
匹配依賴於 pattern 軟體包的 type 依賴的軟體包 | ~R[type:]pattern |
匹配依賴於 pattern 軟體包破壞的 type 依賴的軟體包 | ~RB[type:]pattern |
匹配其它已安裝軟體包所依賴的軟體包 | ~R~i |
匹配沒有被其它已安裝軟體包所依賴的軟體包 | !~R~i |
匹配其它已安裝軟體包所依賴或建議安裝的軟體包 | ~R~i|~Rrecommends:~i |
匹配 pattern 過濾版本之後的軟體包 | ~S filter pattern |
匹配所有軟體包(真) | ~T |
不匹配軟體包(假) | ~F |
正規表達式使用的是 ERE,就跟
egrep
(1)、awk
(1) 和
perl
(1) 這些典型的類 Unix 文字工具中所使用的
“^
”、“.*
”、“$
” 等是相同的。
依賴關係 type 是一種特定的軟體包相互關係(depends、predepends、recommends、suggests、conflicts、replaces、provides)。
預設的 type 依賴關係是 “depends”。
提示 | |
---|---|
當 regex_pattern 為空字串時,請立即在指令後面新增
" |
下面是一些快捷方式。
"~Pterm
" ==
"~Dprovides:term
"
"~Cterm
" ==
"~Dconflicts:term
"
"…~W term
" == "(…|term)
"
使用者熟悉 mutt
的快速選擇,因為 mutt 的靈感來源於表示式語法。參見 “使用者手冊”
“/usr/share/doc/aptitude/README
” 中的 “SEARCHING, LIMITING,
AND EXPRESSIONS”。
注意 | |
---|---|
|
如果通過選單 “F10
→ 選項 → 首選項 → 正在處理依賴關係” 進行相應的設定,則在
aptitude
中選擇一個軟體包時,不僅會將其 “Depends:
”
列表中的軟體包選上,“Recommends:
” 列表中的軟體包也會被選上。在
aptitude
下,這些自動安裝的軟體包在不再需要時會自動移除。
aptitude
指令中控制 “自動安裝” 行為的標籤也可以通過 apt
軟體包中的 apt-mark
(8) 指令來設定。
你可以在日誌檔案裡查詢到軟體包活動歷史。
表格 2.12. 軟體包活動日誌檔案
檔案 | 內容 |
---|---|
/var/log/dpkg.log |
dpkg 級的軟體包活動日誌 |
/var/log/apt/term.log |
通用 APT 活動日誌 |
/var/log/aptitude |
aptitude 指令活動日誌 |
事實上,很難從這些日誌上快速獲得有用的資訊。較簡便的方法參見 節 9.3.9, “記錄組態檔案的變更” 。
下面是一些 aptitude
(8) 的操作範例。
下面的指令列出了通過正規表達式匹配軟體包名稱來列出軟體包。
$ aptitude search '~n(pam|nss).*ldap' p libnss-ldap - NSS module for using LDAP as a naming service p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces
這種方式查詢精確的軟體包名稱很方便。
您能清除所有已移除軟體包的剩餘組態檔案。
檢查以下指令的結果。
# aptitude search '~c'
如果您確認所列出的軟體包應當被完整刪除,請執行以下指令。
# aptitude purge '~c'
您可能想要在互動模式中做類似的操作進行細粒度的控制。
在 "新軟體包檢視" 使用 "l
" 提示並輸入正則匹配式 "~c
"
,這將僅匹配軟體包,比如, "移除但不清空調配" 。所有符合匹配的軟體包可以在頂層標題上使用 "[
" 顯示。
當您在頂層標題如 “未安裝的包” 中輸入
“_
”,當前標題下的軟體包只有匹配正則式才會被清除。您還可以使用“=
”
來互動式地排除軟體包以避免刪除它們。
這種技術方便易用且適用於許多其他的指令鍵。
下面是調整軟體包的自動/手動安裝狀態的方法(在使用非 aptitude 軟體包管理器之後)。
用 root 以互動模式執行 aptitude
。
用 "u
" 指令更新可用的軟體包列表,"U
"
指令標記所有可升級的軟體包以執行升級,"f
" 指令清除新軟體包列表,"g
"
指令執行所有可升級的軟體包以執行升級。
按下 “l
”,並輸入 “~i(~R~i|~Rrecommends:~i)
”
來限制軟體包的顯示,按下 “M
” 將 “已安裝軟體包
” 的狀態改為自動安裝。
按下 “l
”,並輸入
“~prequired|~pimportant|~pstandard|~E
” 來限制軟體包的顯示,按下
“m
” 將 “已安裝軟體包
” 的狀態改為手動安裝。
按下 “l
”,並輸入 “~i!~M
” 來限制軟體包的顯示,在
“已安裝軟體包
” 上按下 “[
” 來陳列無用的軟體包,按下
“-
” 將它們移除。
按下 “l
”,並輸入 “~i
” 來限制軟體包的顯示,之後在
“軟體集
” 上按下 “m
” 將那些軟體包標記為手動安裝。
退出 aptitude
。
用 root 使用者執行 "apt-get -s autoremove|less
"
指令,來檢視有那些軟體包是不再需要的。
在互動模式下重啟 aptitude
程式,用 “m
”
指令標記所需要的軟體包。
用 root 使用者重新執行 "apt-get -s autoremove|less
"
這個指令來複查移除的包中是不是隻含有自己所希望移除的軟體包。
用 root 使用者執行 "apt-get autoremove|less
" 指令來自動移除不再需要的軟體包。
在你所需要執行的 "Tasks
" 上,執行 "m
"
指令是一個可選的操作,目的就是為了防止大量軟體包被解除安裝的情況出現。
注意 | |
---|---|
當你遷移到新的發行版的時候,雖然正如下面所描述的那樣,Debian 是可升級的,但是你還是應該考慮純淨的安裝新的系統。這給了你機會去移除廢棄的軟體包同時還可以接觸到最新軟體包的完美集合體。當然,在做遷移之前,你也應該對你的系統做完整的備份,並把它移到安全的地方去(檢視節 10.2, “備份和恢復”)。“我”也建議用不同的分割槽做另外一個啟動項,來實現平穩的升級。 |
你可以透過改變 源列表
的內容使之指向新的發行版所在地址的方法來進行系統的全面升級,然後執行 "apt update; apt
dist-upgrade
" 命令。
在 bookworm
-作為-stable
釋出迴圈中, 從
stable
升級到 testing
或者
unstable
,你應該用 "trixie
" 或者
"sid
" 替換源列表 檔案裡的
"bookworm
"示例,參考 節 2.1.5, “Debian 檔案庫基礎”。
事實上,由於一些軟體包版本變遷的問題,你可能會遇到一些困難,主要是由於軟體包的依賴問題。升級之後的差異越大,你越有可能遇到麻煩。在新版本發行後,系統從舊的
stable
過渡到新的 stable
,你可以檢視 Release Notes 然後按照裡面的步驟去做,來儘可能的減少麻煩。
在它正式釋出之前,你決定要從先前的 stable
遷移到將要釋出的
testing
,這裡沒有 Release Notes
可以幫到你。 在前一個 stable
釋出以後, stable
發行版跟將要釋出的 testing
發行版之間的差異可能變得相當大同時也使得升級系統變得更加的複雜。
在全面升級系統的時候,你應該謹慎的操作,同時你也應該從郵件列表中獲得最新的資料然後根據你的常識作出正確的判斷。
檢視先前的“發行說明”。
備份整個系統(尤其是資料和調配資訊)。
當 bootloader 壞了的時候,手邊應該有可以引導電腦啟動的儲存介質。
事先通知系統上的使用者。
用 script
(1) 記錄升級的過程。
用 “unmarkauto” 指令來保留你想要的軟體包,例如 "aptitude unmarkauto vim
"
這個指令是用來防止移除vim這個軟體的。
為了減少軟體包之間可能會發生的衝突,應該儘量減少要安裝的軟體包的數目,例如,移除桌面環境這個軟體包。
移除 "/etc/apt/preferences
" 檔案(停用apt-pinning)。
試著一步步的升級: oldstable
→ stable
→
testing
→ unstable
.
升級 源列表 檔案,使其指向新的檔案庫然後執行
"aptitude update
" 命令。
可選的安裝選項,首先是新的 core packages,例如
“aptitude install perl
"。
執行 "apt-get -s dist-upgrade
" 指令來評估升級造成的影響。
最後執行 "apt-get dist-upgrade
" 指令。
注意 | |
---|---|
在 |
注意 | |
---|---|
在先前的“發行手冊”裡, GCC, Linux Kernel, initrd-tools, Glibc, Perl, APT tool chain 等等,有一些關於系統全面升級的重要注意事項。 |
關於 unstable
版本的日常升級,檢視 節 2.4.3, “預防軟體包故障”。
下面列出了一些其它的軟體包管理操作,這些操作對於 aptitude
過於高階或缺失所需的功能。
表格 2.13. 高階軟體包管理操作
指令 | 操作 |
---|---|
COLUMNS=120 dpkg -l
package_name_pattern |
列出已安裝軟體包的列表用於錯誤報告 |
dpkg -L package_name |
顯示一個已安裝軟體包的內容 |
dpkg -L package_name | egrep
'/usr/share/man/man.*/.+' |
列出一個已安裝軟體包的 man 手冊頁 |
dpkg -S file_name_pattern |
列出匹配檔名的已安裝軟體包 |
apt-file search file_name_pattern |
列出檔案庫中匹配檔名的軟體包 |
apt-file list package_name_pattern |
列出檔案庫中匹配的軟體包的內容 |
dpkg-reconfigure package_name |
重新調配軟體包 |
dpkg-reconfigure -plow package_name |
通過最詳細的方式來重新調配軟體包 |
configure-debian |
以全螢幕選單的形式重新調配軟體包 |
dpkg --audit |
部分安裝軟體包的審計系統 |
dpkg --configure -a |
調配所有部分安裝的軟體包 |
apt-cache policy binary_package_name |
顯示一個二進位制軟體包的可用版本、優先順序和檔案庫資訊 |
apt-cache madison package_name |
顯示一個軟體包的可用版本和檔案庫資訊 |
apt-cache showsrc
binary_package_name |
顯示一個二進位制軟體包的原始碼軟體包資訊 |
apt-get build-dep package_name |
安裝構建軟體包所需要的軟體包 |
aptitude build-dep package_name |
安裝構建軟體包所需要的軟體包 |
apt-get source package_name |
(從標準檔案庫)下載原始碼 |
dget dsc 檔案的 URL |
(從其它檔案庫)下載原始碼軟體包 |
dpkg-source -x
package_name_version-debian.revision.dsc |
從原始碼軟體包集合(“*.orig.tar.gz ” 和
“*.debian.tar.gz "/"*.diff.gz ”)中構建程式碼樹 |
debuild binary |
從本地的原始碼樹中構建軟體包 |
make-kpkg kernel_image |
從核心原始碼樹中構建一個核心軟體包 |
make-kpkg --initrd kernel_image |
從啟用了 initramfs 的核心程式碼樹中構建一個核心軟體包 |
dpkg -i
package_name_version-debian.revision_arch.deb |
安裝一個本地的軟體包到系統中 |
apt install
/path/to/package_filename.deb |
安裝一個本地軟體包到系統中,同時,嘗試自動地解析依賴性 |
debi
package_name_version-debian.revision_arch.dsc |
安裝本地軟體包到系統中 |
dpkg --get-selections '*' >selection.txt |
儲存 dpkg 級別的軟體包選擇狀態資訊 |
dpkg --set-selections <selection.txt |
使用 dpkg 設定軟體包選擇狀態 |
echo package_name hold | dpkg
--set-selections |
使用 dpkg 將一個軟體包的包選擇狀態設定為 hold(相當於 "aptitude hold <
包名> ") |
注意 | |
---|---|
對於一個支援多架構的軟體包,你可能需要為一些指令指定架構名稱。例如,使用
“ |
注意 | |
---|---|
系統管理員應該小心使用低階的軟體包工具(例如 “ |
請注意以下幾點。
所有的系統調配和安裝指令都需要以 root 執行。
不同於使用正規表達式的 aptitude
(參見 節 1.6.2, “正規表達式”),其它的軟體包管理指令使用類似於 shell glob 的萬用字元(參見 節 1.5.6, “Shell 萬用字元”)。
apt-file
(1) 由 apt-file
軟體包提供,並且需要先執行
“apt-file update
”。
configure-debian
(8) 由 configure-debian
軟體包提供,它執行 dpkg-reconfigure
(8) 作為後端。
dpkg-reconfigure
(8) 使用 debconf
(1)
作為後端來執行軟體包指令碼。
"apt-get build-dep
" 、"apt-get source
"
和 "apt-cache showsrc
" 命令需要 源列表中存在 "deb-src
" 條目。
dget
(1) 、debuild
(1) 和
debi
(1) 需要 devscripts
軟體包。
參見 節 2.7.13, “移植一個軟體包到 stable 系統” 裡使用
"apt-get source
" 的打包(重打包)過程。
make-kpkg
指令需要 kernel-package
軟體包(參見
節 9.10, “核心”)。
通用打包參見 節 12.9, “製作 Debian 套件”.
已經安裝 debsums
軟體包的,能使用 debsums
(1) 指令通過
"/var/lib/dpkg/info/*.md5sums
" 檔案中的 MD5sum
值,驗證已安裝的檔案。參見節 10.3.5, “MD5 校驗和”來獲得 MD5sum 是怎樣工作的資訊。
注意 | |
---|---|
因為 MD5sum 資料庫可能被侵入者篡改, |
許多使用者更想使用 Debian 系統的 testing (或 unstable)版本,因為它有新的功能和軟體包。但這會使得系統更容易遇到嚴重的軟體包問題。
安裝軟體包 apt-list bugs
可以避免您的系統遭遇嚴重 bugs,在通過 APT
系統升級時,它會自動檢查 Debian BTS 裡的嚴重 bug。
安裝 apt-listchanges
軟體包,在使用 APT 系統升級時它會在
“NEWS.Debian
” 中提供重要新聞。
儘管近來瀏覽 Debian 網站 https://packages.debian.org/ 是搜尋軟體包元資料更加簡單的方法,但我們依舊來看看更傳統的方法。
grep-dctrl
(1) 、grep-status
(1) 和
grep-available
(1) 指令被用來搜尋具有 Debian 軟體包控制檔案格式的任何檔案。
“dpkg -S file_name_pattern
”
能夠被用來搜尋包含該檔案的軟體包名稱,其匹配的名稱是由 dpkg
安裝的。但它會忽略維護者的指令碼建立的檔案。
如果你需要對 dpkg 元資料進行更復雜的搜尋,你需要在 “/var/lib/dpkg/info/
” 目錄下執行
“grep -e regex_pattern *
” 命令。這會使你在軟體包指令碼和安裝查詢文字中搜索提及的單詞。
如果你想遞迴查詢軟體包依賴,你應該使用 apt-rdepends
(8) 。
讓我們來學習 Debian 軟體包管理的內部工作原理。這應該能夠幫助你獨立解決一些軟體包問題。
每個發行版的元資料檔案都儲存在 Debian 映象站的
“dist/codename
” 下面,例如
“http://deb.debian.org/debian/
”。檔案庫的結構可以通過網路瀏覽器來瀏覽。其中有 6
種關鍵的元資料。
表格 2.14. Debian 檔案庫元資料的內容
檔案 | 位置 | 內容 |
---|---|---|
Release |
發行版的頂層 | 檔案庫描述和完整性資訊 |
Release.gpg |
發行版的頂層 | "Release " 檔案的簽名檔案,使用檔案庫金鑰簽名 |
Contents-architecture |
發行版的頂層 | 列出在相關架構中所有軟體包的全部檔案 |
Release |
每個發行版/區域/架構組合的頂部 | 歸檔描述使用 apt_preferences ( 5 ) 的規則 |
Packages |
每個發行版/區域/二進位制架構組合的頂部 | 連線 debian/control 獲得二進位制包 |
Sources |
每個 發行版/區域/原始碼 組合的頂部 | 連線 debian/control 獲得原始碼包 |
為了減少網路流量,在最近的檔案庫中,這些元資料儲存為壓縮了的差分檔案。
提示 | |
---|---|
頂層“ |
每個 Debian 檔案庫的網址都有一個這樣的 “Release
” 檔案,例如
“http://deb.debian.org/debian/dists/unstable/Release
”,內容如下。
Origin: Debian Label: Debian Suite: unstable Codename: sid Date: Sat, 14 May 2011 08:20:50 UTC Valid-Until: Sat, 21 May 2011 08:20:50 UTC Architectures: alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc Components: main contrib non-free Description: Debian x.y Unstable - Not Released MD5Sum: bdc8fa4b3f5e4a715dd0d56d176fc789 18876880 Contents-alpha.gz 9469a03c94b85e010d116aeeab9614c0 19441880 Contents-amd64.gz 3d68e206d7faa3aded660dc0996054fe 19203165 Contents-armel.gz ...
注意 | |
---|---|
在 節 2.1.5, “Debian 檔案庫基礎” 裡,你能夠發現我使用"suite" 和 "codename"的邏輯。“發行版”被用來同時談及"suite" 和 "codename".所有由檔案庫提供的歸檔 "area" 名,會被列在 "Components" 下. |
頂層檔案 "Release
" 的完整性,是由叫 secure
apt 的加密架構來驗證,在 apt-secure
(8)中進行描述。
加密簽名檔案 "Release.gpg
" 是由頂層授權檔案
"Release
" 和加密的 Debian 檔案庫公鑰建立。
公開的 Debian 檔案庫公鑰能夠透過安裝 debian-archive-keyring
軟體包來安裝到本地。
secure APT 系統自動驗證下載的頂層檔案
"Release
"
的完整性。加密驗證過程用到了"Release.gpg
"檔案和本地安裝的 Debian 檔案庫公鑰.
所有 "Packages
" 和 "Sources
" 檔案的完整性是由在頂層
"Release
" 檔案裡的 MD5sum 值來驗證。所有軟體包檔案的完整性由
"Packages
" 和 "Sources
" 檔案裡的 MD5sum
值來驗證.參見 debsums
(1) 和 節 2.4.2, “驗證安裝的軟體包檔案”.
因加密簽名驗證比計算 MD5sum 值消耗更多的 CPU,使用 MD5sum 值來驗證每一個軟體包,使用加密簽名來驗證頂層的
"Release
" 檔案,這種方式提供 較好安全性的同時,也有比較好的效能 (參見 節 10.3, “資料安全基礎”).
如果 源列表條目特別指定了
"signed-by
"
選項,它下載的頂層"Release
"檔案使用這個指定的公鑰來驗證。這在當源列表包含有非 Debian 檔案庫時有用。
提示 | |
---|---|
不贊成使用 |
當然,你能夠使用 gpg
手工驗證"Release
" 的完整性,使用
"Release.gpg
" 檔案和在 ftp-master.debian.org 上公佈的 Debian 檔案庫公鑰。
提示 | |
---|---|
檔案庫層的“ |
歸檔層次的 "Release
" 檔案,其全部歸檔位置在 源列表 中指定,如以下的
"http://deb.debian.org/debian/dists/unstable/main/binary-amd64/Release
"
或
"http://deb.debian.org/debian/dists/sid/main/binary-amd64/Release
"。
Archive: unstable Origin: Debian Label: Debian Component: main Architecture: amd64
注意 | |
---|---|
對於" |
對於部分檔案庫,比如說 experimental
和
bookworm-backports
,
它們包含的軟體包不會被自動安裝,這是因為有額外的行,例如在
"http://deb.debian.org/debian/dists/experimental/main/binary-amd64/Release
"
裡面有如下額外的一行。
Archive: experimental Origin: Debian Label: Debian NotAutomatic: yes Component: main Architecture: amd64
請注意,普通的檔案庫沒有 "NotAutomatic: yes
", 預設的 Pin-Priority 值是
500, 而對於有 "NotAutomatic: yes
"的特殊檔案庫, 預設的 Pin-Priority 值是
1 (參見 apt_preferences
(5) 和 節 2.7.7, “使用 apt-pinning 調整獲選版本”).
當使用 APT 工具時,如 aptitude
, apt-get
,
synaptic
, apt-file
,
auto-apt
,我們需要更新包含 Debian 檔案庫資訊元資料的本地複製。這些本地複製的檔名稱,和在
源列表檔案裡面的 distribution
,
area
, architecture
相應名稱一致。 (參見 節 2.1.5, “Debian 檔案庫基礎”).
"/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_Release
"
"/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_Release.gpg
"
"/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area_binary-architecture_Packages
"
"/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area_source_Sources
"
"/var/cache/apt/apt-file/deb.debian.org_debian_dists_distribution_Contents-architecture.gz
"
(apt-file
)
前 4 種類型的檔案是所有相關的 APT 命令共享的,並且可以透過 “apt-get update
” 或
“aptitude update
” 在命令列中進行更新。如果在源列表中有相應的 “deb
” 行,則
“軟體包
” 元資料會進行更新。如果在 源列表中有相應的 “deb-src
” 行,則
“原始碼
” 元資料會進行更新。
"Packages
" 和 "Sources
"
的元資料檔案包含有“Filename:
”欄位,指向二進位制和原始碼包檔案的位置。目前,這些軟體包都統一放在"pool/
"目錄樹下,這樣可以改善跨版本釋出的傳輸。
“軟體包
”元資料的本地副本可以使用 aptitude
來進行互動式的搜尋。專門的搜尋指令 grep-dctrl
(1)
可以搜尋“軟體包
”和“原始碼
”元資料的本地副本。
"Contents-architecture
"元資料的本地拷貝,能夠被"apt-file
update
"更新,它的位置和其它 4 個不同。參見
apt-file
(1). (auto-apt
的
"Contents-architecture.gz
"檔案的本地拷貝預設也使用不同的位置。)
除了遠端獲得元資料,lenny
之後的 APT 工具還會將它在本地產生的安裝狀態資訊儲存在
“/var/lib/apt/extended_states
” 中,APT 會使用它們來追蹤自動安裝的所有軟體包。
除了遠端獲得元資料,aptitude
指令還會將它在本地產生的安裝狀態資訊儲存在
“/var/lib/aptitude/pkgstates
” 中,這些資訊只能被 aptitude 使用。
所有通過 APT 機制遠端獲得的軟體包都被儲存在 “/var/cache/apt/archives
”
中,直到它們被清除。
aptitude
的這個快取檔案清理策略,能夠在"Options
" →
"Preferences
"下設定,也可以通過它的選單,"Actions
"下的"Clean
package cache
" 或 "Clean obsolete files
"
來執行強制清理。
Debian 軟體包檔案有特定的名稱結構。
表格 2.15. Debian 軟體包的名稱結構
軟體包型別 | 名稱結構 |
---|---|
二進位制軟體包(亦稱 deb ) |
package-name_upstream-version-debian.revision_architecture.deb |
用於 debian-installer 的二進位制軟體包(亦稱 udeb ) |
package-name_upstream-version-debian.revision_architecture.udeb |
原始碼軟體包(上游原始碼) | package-name_upstream-version-debian.revision.orig.tar.gz |
1.0 原始碼軟體包(Debian 改變) |
package-name_upstream-version-debian.revision.diff.gz |
3.0 (quilt 補丁管理工具) 原始碼軟體包(Debian 改變) |
package-name_upstream-version-debian.revision.debian.tar.gz |
原始碼軟體包(說明) | package-name_upstream-version-debian.revision.dsc |
提示 | |
---|---|
這裡僅敘述了基本的原始碼包格式。更多內容請參考 |
表格 2.16. Debian 軟體包名稱中每一個元件可以使用的字元
名稱元件 | 可用的字元(正則表示式) | 存在狀態 |
---|---|---|
package-name |
[a-z0-9][-a-z0-9.+]+ |
必需 |
epoch: |
[0-9]+: |
可選 |
upstream-version |
[-a-zA-Z0-9.+:]+ |
必需 |
debian.revision |
[a-zA-Z0-9.+~]+ |
可選 |
注意 | |
---|---|
你可以用 |
注意 | |
---|---|
debian-installer (d-i) 使用
|
dpkg
(1) 是 Debian 軟體包管理中最底層的工具。它非常強大,必須小心使用。
當安裝名為 “package_name
”
的軟體包時,dpkg
會按照下列的順序處理它。
解包 deb 檔案(等同於 “ar -x
”)
使用 debconf
(1) 執行
“package_name.preinst
”
將軟體包安裝到系統中(等同於 “tar -x
”)
使用 debconf
(1) 執行
“package_name.postinst
”
debconf
系統提供帶有 I18N 和 L10N (章 8, I18N 和 L10N)支援的標準化使用者互動。
表格 2.17. dpkg
建立的重要檔案
檔案 | 內容說明 |
---|---|
/var/lib/dpkg/info/package_name.conffiles |
列出組態檔案。(使用者可修改的) |
/var/lib/dpkg/info/package_name.list |
列出軟體包安裝的所有檔案和目錄 |
/var/lib/dpkg/info/package_name.md5sums |
列出軟體包安裝的檔案的 MD5 雜湊值 |
/var/lib/dpkg/info/package_name.preinst |
軟體包安裝之前執行的軟體包指令碼 |
/var/lib/dpkg/info/package_name.postinst |
軟體包安裝之後執行的軟體包指令碼 |
/var/lib/dpkg/info/package_name.prerm |
軟體包移除之前執行的軟體包指令碼 |
/var/lib/dpkg/info/package_name.postrm |
軟體包移除之後執行的軟體包指令碼 |
/var/lib/dpkg/info/package_name.config |
用於 debconf 系統的軟體包指令碼 |
/var/lib/dpkg/alternatives/package_name |
update-alternatives 指令使用的替代資訊 |
/var/lib/dpkg/available |
所有軟體包的可用性資訊 |
/var/lib/dpkg/diversions |
dpkg (1) 使用的檔案移動資訊,由 dpkg-divert (8) 設定 |
/var/lib/dpkg/statoverride |
dpkg (1) 使用的檔案狀態改變資訊,由
dpkg-statoverride (8) 設定 |
/var/lib/dpkg/status |
所有軟體包的狀態資訊 |
/var/lib/dpkg/status-old |
“var/lib/dpkg/status ” 檔案的第一代備份 |
/var/backups/dpkg.status* |
第二代備份,以及“var/lib/dpkg/status ”檔案更舊的備份 |
“status
” 檔案也被例如
dpkg
(1)、“dselect update
” 和
“apt-get -u dselect-upgrade
” 等工具使用。
專門的搜尋指令 grep-dctrl
(1) 可以搜尋 “status
” 和
“available
” 元資料的本地副本。
提示 | |
---|---|
在debian 安裝器環境下,
|
Debian 系統使用 update-alternatives
(1)
讓使用者可以不受干擾地安裝多種重疊的程式。例如,如果同時安裝了 vim
和
nvi
軟體包,你可以使 vi
指令選擇執行
vim
。
$ ls -l $(type -p vi) lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi $ sudo update-alternatives --display vi ... $ sudo update-alternatives --config vi Selection Command ---------------------------------------------- 1 /usr/bin/vim *+ 2 /usr/bin/nvi Enter to keep the default[*], or type selection number: 1
Debian 選擇系統在 "/etc/alternatives/
"
目錄裡通過符號連結來維持它的選擇。選擇程序使用"/var/lib/dpkg/alternatives/
"目錄裡面的相應檔案。
當安裝一個軟體包時,由 dpkg-statoverride
(8) 指令提供的 狀態修改,是告訴dpkg
(1) 對 檔案 使用不同的屬主或許可權的一個方法。如果使用了
"--update
" 選項,並且檔案存在,則該檔案會被立即設定為新的屬主和模式。
注意 | |
---|---|
系統管理員使用 |
注意 | |
---|---|
本人在此使用了檔案
一詞,但事實上也可用於 |
當執行 測試版
或 不穩定版
系統,系統管理員會遇到從錯誤的軟體包管理進行恢復的情形。
注意 | |
---|---|
下面的一些方法具有很高的風險。在此先對你進行警告! |
如果你透過"sudo dpkg -i
...
"強制安裝一個軟體包到系統,而不安裝它所依賴的所有軟體包,這個軟體包將作為“部分安裝”而失敗。
你應當安裝所有依賴的軟體包,使用 APT 系統或者 "sudo dpkg -i ...
"。
然後,使用下列命令來配置所有部分安裝的軟體包。
# dpkg --configure -a
軟體包資料快取錯誤,能夠造成奇怪的錯誤,比如 APT 的 "GPG error: ... invalid: BADSIG ..."。
你應該透過 "sudo rm -rf /var/lib/apt/*
"
刪除所有快取的資料,然後重新嘗試。(如果使用了 apt-cacher-ng
,你還應執行"sudo
rm -rf /var/cache/apt-cacher-ng/*
"。 )
如果一個桌面 GUI 程式在重要的上游版本升級後變得不穩定,你應該懷疑這是舊的本地配置檔案(由它建立的)所導致的。如果它在新建的使用者賬號下執行穩定,那麼這個假設就得到了證實。(這是一個打包的 bug 並且打包者通常會避免它。)
為了恢復穩定,你應該移除相應的本地組態檔案並重新啟動 GUI 程式。你可能需要閱讀舊的組態檔案內容以便之後恢復調配資訊。(別將它們刪得太快了。)
文件級的軟體包管理系統,比如說 aptitude
(8) 或
apt-get
(1), 使用軟體包依賴,當出現相同檔案時,不會嘗試去安裝軟體包。(參見 節 2.1.7, “軟體包依賴關係”).
軟體包維護者的錯誤,或者系統管理員調配了不一致的檔案庫混合源,(參見 節 2.7.6, “不使用 apt-pinning 的混合源檔案庫軟體包”),都會出現不正確的軟體包依賴情況。如果在出現相同檔案的情況下,你通過
aptitude
(8) 或 apt-get
(1)
安裝軟體包,dpkg
(1) 在對軟體包解包時,確定會給呼叫程式回傳錯誤,並不會覆蓋已經存在的檔案。
注意 | |
---|---|
使用第三方軟體包會導致重大的系統風險,因為其通過使用 root
許可權執行維護者指令碼能夠對你的系統做任何事。 |
可以先通過刪除舊的令人討厭的軟體包,old-package
,來解決這類錯誤的安裝問題。
$ sudo dpkg -P old-package
當軟體包指令碼中的一個指令由於某些原因回傳錯誤,指令碼也將由於錯誤而退出,軟體包管理系統忽略它們的行為,並導致部分安裝的軟體包。當一個軟體包在它的刪除指令碼中有錯誤時,該軟體包將會成為不可能刪除的軟體包,處理這些問題,都會變得相當棘手。
對於 “package_name
”
的軟體包指令碼問題,你應該檢視下列的軟體包指令碼。
"/var/lib/dpkg/info/package_name.preinst
"
"/var/lib/dpkg/info/package_name.postinst
"
"/var/lib/dpkg/info/package_name.prerm
"
"/var/lib/dpkg/info/package_name.postrm
"
使用下列的方法,以 root 編輯損壞的軟體包指令碼。
在行首新增 “#
” 可以禁用出錯的行
在出錯行的行尾新增 “|| true
” 可以強制回傳成功
然後,按照 節 2.6, “從損壞的系統中恢復”。
因為 dpkg
是非常底層的軟體包工具,它可以在很糟糕的情況下進行工作,例如無法啟動系統且沒有網路連線。讓我們假定
foo
軟體包損壞了,並且需要更換。
你可以在軟體包快取目錄:“/var/cache/apt/archives/
” 中找到舊的
foo
軟體包的無 bug 版本。(如果找不到,你可以從檔案庫 https://snapshot.debian.org/
中下載它,或從具有軟體包快取功能的機器中複製它。)
如果你能夠啟動系統,你可以通過下列指令來安裝它。
# dpkg -i /path/to/foo_old_version_arch.deb
提示 | |
---|---|
如果你係統損壞較小,你也可以使用更高層的 APT 系統來降級整個系統,就像 節 2.7.11, “緊急降級” 中做的那樣。 |
如果你的系統無法從硬碟啟動,你應該尋找其它方式來啟動它。
使用 Debian 安裝光碟以救援模式啟動系統。
將硬碟上無法啟動的系統掛載到 “/target
”。
通過下列指令安裝舊版本的 foo
軟體包。
# dpkg --root /target -i /path/to/foo_old_version_arch.deb
即使位於硬碟上的 dpkg
指令已損壞,該指令依舊可以執行。
提示 | |
---|---|
任何由硬碟、live GNU/Linux CD、可啟動的 USB 驅動或網路啟動上的另一系統啟動的 GNU/Linux 系統到可以類似地用來救援損壞的系統。 |
如果由於依賴問題,無法用這種方式安裝軟體包,並且你真的必須真麼做,你可以使用 dpkg
的
“--ignore-depends
”、“--force-depends
”
和其它選項來無視依賴。如果你這麼做了,之後你必須認真努力地修復依賴關係。更多細節參見 dpkg
(8)。
注意 | |
---|---|
如果你的系統嚴重損壞了,你應該將系統完整備份到一個安全的地方(參見 節 10.2, “備份和恢復”)並進行一次全新的安裝。這是耗時較少且效果較好的辦法。 |
如果 “/var/lib/dpkg/status
” 因為某種原因出現錯誤,Debian
系統會丟失軟體包選擇資料並受到嚴重影響。尋找位於 “/var/lib/dpkg/status-old
” 或
“/var/backups/dpkg.status.*
” 中舊的
“/var/lib/dpkg/status
” 檔案。
給 “/var/backups/
” 分配一個單獨的分割槽是一個好習慣,因為這個目錄包含了許多重要的系統資料。
對於嚴重的損壞,我建議備份系統後重新安裝。即使失去 “/var/
” 中的所有資料,你依舊可以從
“/usr/share/doc/
” 目錄恢復一些資訊來引導你進行新的安裝。
重新安裝最小(桌面)系統。
# mkdir -p /path/to/old/system
將舊系統掛載到 “/path/to/old/system/
”。
# cd /path/to/old/system/usr/share/doc # ls -1 >~/ls1.txt # cd /usr/share/doc # ls -1 >>~/ls1.txt # cd # sort ls1.txt | uniq | less
然後你就可以根據軟體包名稱來進行安裝了。(可能會有一些非軟體包名稱,例如 “texmf
”。)
出於簡化,在bookworm
釋出後,在這個章節的源列表例子,使用單行式樣在
"/etc/apt/sources.list
" 裡表示。
儘管 “/var/lib/dpkg/available
” 和
“/usr/share/doc/package_name/changelog
”
中列出的維護者姓名提供了關於“軟體包運作的幕後者是誰”這一問題的一些資訊,但軟體包的實際上傳者依舊不明。devscripts
軟體包中的 who-uploads
(1) 可以識別 Debian 源軟體包的實際上傳者。
如果你想限制 APT 的下載頻寬到 800Kib/sec(=100KiB/sec),你應該像下面那樣設定 APT 的調配參數。
APT::Acquire::http::Dl-Limit "800";
apt
軟體包有自己的 cron 指令碼
“/etc/cron.daily/apt
” ,它支援自動下載軟體包。可以安裝
unattended-upgrades
軟體包來增強這個指令碼,使它能夠自動升級軟體包。可以通過
“/etc/apt/apt.conf.d/02backup
” 和
“/etc/apt/apt.conf.d/50unattended-upgrades
”
中的參數來進行自定義,相關說明位於
“/usr/share/doc/unattended-upgrades/README
” 中。
unattended-upgrades
軟體包主要用於 stable
系統的安全更新。如果自動升級損壞 stable
系統的風險小於被入侵者利用已被安全更新修復的安全漏洞,你應該考慮使用自動更新,調配引數如下。
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "1";
如果你執行的是 testing
或 unstable
系統,你應該不會想要使用自動更新,因為它肯定會在某天損壞系統。即使位於這樣的 testing
或unstable
情況下,你可能依舊想提前下載軟體包以節省互動式升級的時間,其配置引數如下。
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "0";
stable-updates
("bookworm
-updates",在
bookworm
-作為-stable
釋出迴圈) 和
backports.debian.org 檔案庫提供了
stable
版軟體包更新。
為了去使用這些檔案庫,你需要在 "/etc/apt/sources.list
" 檔案裡寫入如下所示的檔案庫列表。
deb http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free deb http://security.debian.org/debian-security bookworm-security main non-free-firmware contrib non-free deb http://deb.debian.org/debian/ bookworm-updates main non-free-firmware contrib non-free deb http://deb.debian.org/debian/ bookworm-backports main non-free-firmware contrib non-free
並不需要在 "/etc/apt/preferences
" 檔案中顯式設定Pin-Priority值.
當新的包可用時,預設調配提供了更合理的更新 (請見 節 2.5.3, “檔案庫層的“Release”檔案”).
所有已安裝的舊軟體包都可以通過 bookworm-updates
檔案庫升級到新軟體包。
只有從 bookworm-backports
檔案庫中手動安裝的舊軟體包才會通過
bookworm-backports
檔案庫升級到新軟體包。
當你想要從 bookworm-backports
檔案庫中手動的安裝一個名叫
"package-name
"
的軟體及其依賴包的時候,你應該在目標檔案庫之前加一個 “-t" 參數。
$ sudo apt-get install -t bookworm-backports package-name
警告 | |
---|---|
不要從 backports.debian.org 檔案庫安裝太多軟體包。它能夠造成軟體包依賴複雜。替代解決方案參見 節 2.1.11, “怎樣和不一致的要求協作”。 |
警告 | |
---|---|
你應當小心,外部軟體包獲取你係統的 root 許可權。你應當只使用可信賴的外部軟體包檔案庫。替代方案參見 節 2.1.11, “怎樣和不一致的要求協作”。 |
你能夠使用安全 APT 來使用 Debian 相容的外部軟體包檔案庫,將它加入到 源列表,並把它的檔案庫金鑰放入"/etc/apt/trusted.gpg.d/
"
目錄。參見 sources.list
(5)、apt-secure
(8) 和
apt-key
(8)。
注意 | |
---|---|
從混合源檔案庫中安裝軟體包是不被 Debian 官方發行版所支援的,除了官方支援的檔案庫的特殊組合以外,例如
|
這裡有一個列子,在原有隻跟蹤 testing
的場景,操作包含在
unstable
裡發現的新的上游軟體包版本。
臨時更改 "/etc/apt/sources.list
" 檔案,使之指向單一的
"unstable
" 發行版路徑。
執行 "aptitude update
" 指令。
執行 "aptitude install package-name
"
指令。
恢復到原始 "/etc/apt/sources.list
" 檔案,使之指向
testing
路徑。
執行 "aptitude update
" 指令。
使用這個手工方法,你不需要建立 "/etc/apt/preferences
" 檔案,也不需要擔心
apt-pinning。但這個方法仍然是非常麻煩的。
注意 | |
---|---|
當使用混合檔案源的時候,因為 Debian 不會確保軟體之間的相容性,所以你必須自己去解決相容性問題。如果軟體之間存在不相容性,系統可能會損壞。你必須能夠判斷這些操作所需的技術要求。使用任意混合的檔案源是完全可選的操作,我並不鼓勵你去使用它。 |
從不同的檔案庫中安裝軟體包的一般規則如下。
非二進位制軟體包 ("Architecture: all
") 的安裝是更保險的。
文件軟體包:沒有特別的要求
解釋程式的軟體包:相容的直譯器必須是可用的
二進位制軟體包 (non "Architecture: all
")通常會面臨很多障礙,它的安裝不保險的。
注意 | |
---|---|
為了使軟體包的安裝變得更保險 ,一些商業的非自由的二進位制程式包可能會提供完整的靜態連結庫。你還是應該檢查 ABI 的相容性問題等等。 |
注意 | |
---|---|
除非為了短期避免破壞軟體包,從非 Debian 檔案庫安裝二進位制軟體包通常是一個壞的主意。你需要查詢所有存在的和你目前 Debian 系統相容的安全技術替代方案。(參見 節 2.1.11, “怎樣和不一致的要求協作”)。 |
警告 | |
---|---|
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. |
沒有 "/etc/apt/preferences
" 檔案,APT 系統使用版本字串來選擇最新的可用版本作為
候選版本。這是通常的狀態,也是 APT
系統最推薦的使用方法。所有官方支援的檔案庫集合,並不要求 "/etc/apt/preferences
"
檔案,因此,一些不應當被作為自動更新源的軟體包,被標記為 NotAutomatic,並被適當處理。
提示 | |
---|---|
版本字串的比較規則可以被驗證,例子如下," |
如果經常從混合源檔案庫中安裝軟體包 (參見節 2.7.6, “不使用 apt-pinning 的混合源檔案庫軟體包”), 你可以通過建立
"/etc/apt/preferences
" 檔案並且在其中寫入關於調整候選版本的軟體包選取規則的合適條目
(如apt_preferences
(5) 中所示)來自動化這些複雜的操作。這被稱為 apt-pinning。
當使用 apt-pinning 命令時,因為 Debian 不會確保軟體之間的相容性,所以你必須自己確認其相容性。apt-pinning 是完全可選的操作,我並不建議去使用它。
檔案庫層級的 Release 檔案 (參見 節 2.5.3, “檔案庫層的“Release”檔案”) 使用
apt_preferences
(5) 的規則.對於 Debian 通用檔案庫 和 Debian 安全檔案庫,apt-pinning 只在 "suite" 名下工作。(這點和 Ubuntu 檔案庫不同.)例如,你在
"/etc/apt/preferences
" 檔案裡面,可以使用"Pin: release
a=unstable
" ,但不能使用 "Pin: release a=sid
".
當使用非 Debian 的檔案庫作為 apt-pinning 的一部分時,你應該檢查它們的用途和可信度。例如,Ubuntu 和 Debian 是不能混在一起的。
注意 | |
---|---|
即使不建立 " |
如下是關於 apt-pinning 技術的簡化說明。
可用的軟體包源在 "/etc/apt/sources.list
" 檔案裡面定義,APT
系統從可用的軟體包源裡面選擇 Pin-Priority 值最大的,作為升級
軟體包的候選版本.如果一個軟體包的 Pin-Priority 大於
1000,這個版本限制為只能 升級,關閉了軟體包降級功能 (參見 節 2.7.11, “緊急降級”).
每個軟體包的 Pin-Priority 值是在 "/etc/apt/preferences
" 檔案中的
"Pin-Priority" 條目中定義或者是使用它的預設值。
表格 2.18. 用於 apt-pinning 技術的值得注意的 Pin-Priority 值列表。
Pin-Priority | apt-pinning 對軟體包的影響 |
---|---|
1001 | 安裝該軟體包,即使是一個降級軟體包的指令 |
990 | 用作目標發行版檔案庫的預設值 |
500 | 用作常規檔案庫的預設值 |
100 | 用於 NotAutomatic 和 ButAutomaticUpgrades 檔案庫的預設值 |
100 | 用於已安裝軟體包 |
1 | 用於 NotAutomatic 檔案庫的預設值 |
-1 | 即使被推薦,也絕不安裝這個軟體包 |
目標版本檔案倉庫,能夠由命令列選項設定,例如: "apt-get
install -t testing some-package
"
NotAutomatic 和 ButAutomaticUpgrades 的檔案是由檔案庫伺服器上檔案層級的 Release
檔案來設定,(參見 節 2.5.3, “檔案庫層的“Release”檔案”),同時包含"NotAutomatic:
yes
" 和 "ButAutomaticUpgrades: yes
".而 NotAutomatic 檔案也是由檔案庫伺服器上的檔案層級的 Release 檔案來設定,但只包含
"NotAutomatic: yes
".
來自眾多檔案源的軟體包的 apt-pinning
情況可以通過 "apt-cache policy
package
" 指令顯示。
"Package pin:
" 開頭的行,列出了軟體包版本的 pin ,如果 package 相關的 pin 已經定義,
例如, "Package pin: 0.190
".
沒有 "Package pin:
" 的行存在,如果沒有 package
相關的定義。
與 package 相關的 Pin-Priority
值列在所有版本字串的右邊,比如,"0.181 700
".
"0
" 是列在所有版本字串的右邊,如果沒有 package
相關的定義。例如, "0.181 0
".
檔案庫 (在 "/etc/apt/preferences
" 檔案作為"Package:
*
"定義) 的 Pin-Priority 值,列在所有檔案庫路徑的左邊,例如,"100
http://deb.debian.org/debian/ bookworm-backports/main
Packages
".
警告 | |
---|---|
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. |
如果不想要引入推薦的特定軟體包,你必須建立 "/etc/apt/preferences
"
檔案並且像如下所示的那樣在檔案的頂部明確列出這些軟體包。
Package: package-1 Pin: version * Pin-Priority: -1 Package: package-2 Pin: version * Pin-Priority: -1
警告 | |
---|---|
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. |
如下是一個關於 apt-pinning 技術的例子,當使用
testing
的時候,實現 unstable
中的特定的較新的上游版本軟體包的日常升級。你應該按如下所示的在 "/etc/apt/sources.list
"
檔案中列出所有需要的檔案庫。
deb http://deb.debian.org/debian/ testing main contrib non-free deb http://deb.debian.org/debian/ unstable main contrib non-free deb http://security.debian.org/debian-security testing-security main contrib
按如下所示的設定 "/etc/apt/preferences
" 檔案。
Package: * Pin: release a=unstable Pin-Priority: 100
當想要在此調配下從 unstable
檔案庫中安裝
"package-name
" 軟體及它的依賴包時,你執行帶有
"-t
" 選項 (unstable
的 Pin-Priority 值變為
990) 的轉換目標發行版的指令。
$ sudo apt-get install -t unstable package-name
在此調配下,執行 "apt-get update
" 和 "apt-get
dist-upgrade
"(或者 "aptitude safe-upgrade
" 和
"aptitude full-upgrade
") 指令,會從 testing
檔案庫升級那些從 testing
檔案庫安裝的軟體包並且從 unstable
檔案庫升級那些從 unstable
檔案庫中安裝的軟體包。
注意 | |
---|---|
小心不要去移除 " |
提示 | |
---|---|
我通常會在上述操作後,馬上註釋掉 " |
提示 | |
---|---|
如果 " |
如果你希望自動跟蹤 unstable
裡某些特殊的軟體包,而在安裝時不再使用初始化選項 "-t
unstable
" , 你必須建立 "/etc/apt/preferences
"
檔案,並在該檔案頂部按下面的方式清晰的列出所有那些軟體包。
Package: package-1 Pin: release a=unstable Pin-Priority: 700 Package: package-2 Pin: release a=unstable Pin-Priority: 700
如下是為每個特定的軟體包設定 Pin-Priority 值。例如,為了使用最新的 unstable
的英文版
"Debian Reference",你應該在 "/etc/apt/preferences
" 檔案中寫入以下條目。
Package: debian-reference-en Pin: release a=unstable Pin-Priority: 700 Package: debian-reference-common Pin: release a=unstable Pin-Priority: 700
提示 | |
---|---|
即使你使用的是 |
警告 | |
---|---|
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. |
這是使用apt-pinning
的另一個示例,該示例主要使用unstable
源,但包含了experimental
源,
該源可用於安裝上游更新的軟體包 . 需要包含在"/etc/apt/sources.list
" 檔案中的列表如下:
deb http://deb.debian.org/debian/ unstable main contrib non-free deb http://deb.debian.org/debian/ experimental main contrib non-free deb http://security.debian.org/ testing-security main contrib
由於experimental
源是 非自動(NotAutomatic)的源 (參見 節 2.5.3, “檔案庫層的“Release”檔案”),其預設的Pin-Priority值 被設定為1
(<<100) .
並不需要在"/etc/apt/preferences
"檔案中設定Pin-Priority值,只需要指定
experimental
源,除非你需要在下次更新時自動升級時更新特定軟體包.
警告 | |
---|---|
Use of apt-pinning technique by a novice user is sure call for major troubles. You must avoid using this technique except when you absolutely need it. |
注意 | |
---|---|
降級在 Debian 設計上就不被官方支援。僅僅是在緊急恢復過程中需要做的一部分工作。儘管憎恨這種情形,但降級在很多場景下工作得也不錯。對於重要系統,你應當在恢復操作後備份所有重要資料,並從零開始重新安裝一個新的系統。 |
你可以通過控制候選版本從新的檔案庫降級到舊的檔案庫(參見 節 2.7.7, “使用 apt-pinning 調整獲選版本”),從而使損壞的系統恢復。下面是一種懶惰的方法,可以避免許多冗長的
“dpkg -i
broken-package_old-version.deb
”
指令(參見 節 2.6.6, “使用 dpkg 指令進行救援”)。
搜尋 “/etc/apt/sources.list
” 檔案中像下面那樣使用
unstable
的行。
deb http://deb.debian.org/debian/ sid main contrib non-free
使用下面的行替換它,從而改為使用 testing
。
deb http://deb.debian.org/debian/ trixie main contrib non-free
按如下所示的設定 "/etc/apt/preferences
" 檔案。
Package: * Pin: release a=testing Pin-Priority: 1010
執行 “apt-get update; apt-get dist-upgrade
” 使整個系統的軟體包強制降級。
在緊急降級後,移除 “/etc/apt/preferences
” 這個特殊的檔案。
提示 | |
---|---|
這是一個好方法,移除(不是清除!)儘可能多地軟體包,來減少依賴問題。你可能需要手動移除和安裝一些軟體包來使系統降級。需要特別注意 Linux 核心、載入程式、udev、PAM、APT 和網路相關的軟體包以及它們的組態檔案。 |
如果你從原始碼編譯了一個程式來代替 Debian 軟體包,最好將它做成一個真正的本地 Debian
軟體包(*.deb
)並使用私人檔案庫。
如果你選擇從原始碼編譯一個程式並將它安裝到 “/usr/local
”,你可能需要使用
equivs
作為最後步驟來滿足缺失的軟體包依賴。
Package: equivs Priority: optional Section: admin Description: Circumventing Debian package dependencies This package provides a tool to create trivial Debian packages. Typically these packages contain only dependency information, but they can also include normal installed files like other packages do. . One use for this is to create a metapackage: a package whose sole purpose is to declare dependencies and conflicts on other packages so that these will be automatically installed, upgraded, or removed. . Another use is to circumvent dependency checking: by letting dpkg think a particular package name and version is installed when it isn't, you can work around bugs in other packages' dependencies. (Please do still file such bugs, though.)
注意 | |
---|---|
由於系統差異,不能夠保證這裡描述的過程能夠工作,而不需要額外的手工處理。 |
對於部分升級的 stable
系統,使用源軟體包在執行環境中重新構建一個軟體包是不錯的選擇。這可以避免因為依賴關係導致大量軟體包升級。
在 stable
系統的 “/etc/apt/sources.list
”
檔案中新增下列條目。
deb-src http://deb.debian.org/debian unstable main contrib non-free
如下安裝編譯所需的軟體包並下載源軟體包。
# apt-get update # apt-get dist-upgrade # apt-get install fakeroot devscripts build-essential # apt-get build-dep foo $ apt-get source foo $ cd foo*
如果需要向後移植,可以從 backport 的軟體包中更新一些工具鏈軟體包,例如 dpkg
和
debhelper
。
執行下列指令。
$ dch -i
更新軟體包版本,例如在 “debian/changelog
” 中附加一個
“+bp1
”
像下面那樣構建軟體包並將它們安裝到系統中。
$ debuild $ cd .. # debi foo*.changes
因為映象整個 Debian 檔案庫的子區會浪費硬碟和網路頻寬,當你管理許多 LAN 上的系統時,為
APT 部署一個本地代理伺服器是個好主意。APT 可以通過調配來使用通用 web(http)代理伺服器,例如
squid
(參見 節 6.5, “其它網路應用服務”),細節參見
apt.conf
(5) 和
“/usr/share/doc/apt/examples/configure-index.gz
”。環境變數
“$http_proxy
會覆蓋 “/etc/apt/apt.conf
”
檔案中設定的代理伺服器。
這裡有一些 Debian 檔案庫的專用代理工具。你應該在使用它們之前檢查 BTS。
表格 2.19. Debian 檔案庫的專用代理工具
軟體包 | 流行度 | 大小 | 說明 |
---|---|---|---|
approx
|
V:0, I:0 | 7124 | 快取 Debian 檔案庫檔案的代理伺服器(已編譯的 OCaml 程式) |
apt-cacher
|
V:0, I:0 | 266 | 為 Debian 軟體包和原始碼檔案進行快取代理(Perl 程式) |
apt-cacher-ng
|
V:4, I:4 | 1816 | 分發軟體包的快取代理(C++ 編譯的程式) |
注意 | |
---|---|
當 Debian 重構它的檔案庫結構時,這些專用的代理工具往往需要軟體包維護者重寫程式碼,並可能在一段時間內無法使用。另一方面,通用 web (http) 代理伺服器更強健並且更容易應對這種改變。 |
你可以從下面的文件中瞭解軟體包管理的更多資訊。
軟體包管理的主要文件:
aptitude
(8), dpkg
(1),
tasksel
(8), apt
(8),
apt-get
(8), apt-config
(8),
apt-secure
(8), sources.list
(5),
apt.conf
(5), and apt_preferences
(5);
來自 apt-doc
軟體包的
“/usr/share/doc/apt-doc/guide.html/index.html
” 和
“/usr/share/doc/apt-doc/offline.html/index.html
”;
來自 aptitude-doc-en
軟體包的
“/usr/share/doc/aptitude/html/en/index.html
”。
Debian 檔案庫的官方詳細文件:
為 Debian 使用者構建一個 Debian 軟體包的教學: