久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

Debian軟件包管理技巧

2024-01-11 240

Debian系統(tǒng)中的軟件包管理是一個復(fù)雜而靈活的過程,涉及到多個工具和命令。首先,我們要理解的是高層的軟件包管理工具,例如 aptitude 或 synaptic,它們依賴 apt,而 apt 又依賴 dpkg 來管理系統(tǒng)中的軟件包。

一、上傳軟件包

盡管 “/var/lib/dpkg/available” 和 “/usr/share/doc/package_name/changelog” 中列出的維護(hù)者姓名提供了關(guān)于“軟件包運作的幕后者是誰”這一問題的一些信息,但軟件包的實際上傳者依舊不明。devscripts 軟件包中的 who-uploads(1) 可以識別 Debian 源軟件包的實際上傳者。

二、限制APT下載帶寬

如果想限制 APT 的下載帶寬到 800Kib/sec(=100KiB/sec),應(yīng)該像下面那樣設(shè)置 APT 的配置參數(shù)。

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” 中的參數(shù)來進(jìn)行自定義,相關(guān)說明位于 “/usr/share/doc/unattended-upgrades/README” 中。

unattended-upgrades 軟件包主要用于 stable 系統(tǒng)的安全更新。如果自動升級損壞 stable 系統(tǒng)的風(fēng)險小于被入侵者利用已被安全更新修復(fù)的安全漏洞,應(yīng)該考慮使用自動更新,配置參數(shù)如下。

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";

如果運行的是 testing 或 unstable 系統(tǒng),應(yīng)該不會想要使用自動更新,因為它肯定會在某天損壞系統(tǒng)。即使位于這樣的 testing 或unstable 情況下,可能依舊想提前下載軟件包以節(jié)省交互式升級的時間,其配置參數(shù)如下。

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "0";

四、更新和向后移植

stable-updates (“bookworm-updates”,在 bookworm-作為-stable 發(fā)布循環(huán)) 和 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” 文件中顯式設(shè)置Pin-Priority值. 當(dāng)新的包可用時,默認(rèn)配置提供了更合理的更新。
  • 所有已安裝的舊軟件包都可以通過 bookworm-updates 檔案庫升級到新軟件包。
  • 只有從 bookworm-backports 檔案庫中手動安裝的舊軟件包才會通過 bookworm-backports 檔案庫升級到新軟件包。
  • 當(dāng)想要從 bookworm-backports 檔案庫中手動的安裝一個名叫 “package-name” 的軟件及其依賴包的時候,應(yīng)該在目標(biāo)檔案庫之前加一個 “-t” 參數(shù)。
$ sudo apt-get install -t bookworm-backports package-name

不要從 backports.debian.org 檔案庫安裝太多軟件包。它能夠造成軟件包依賴復(fù)雜。

五、外部軟件包檔案庫

應(yīng)當(dāng)小心,外部軟件包獲取系統(tǒng)的 root 權(quán)限。應(yīng)當(dāng)只使用可信賴的外部軟件包檔案庫。能夠使用安全 APT 來使用 Debian 兼容的外部軟件包檔案庫,將它加入到 源列表,并把它的檔案庫密鑰放入”/etc/apt/trusted.gpg.d/” 目錄。參見 sources.list(5)、apt-secure(8) 和 apt-key(8)。

六、混合源檔案庫軟件包

從混合源檔案庫中安裝軟件包是不被 Debian 官方發(fā)行版所支持的,除了官方支持的檔案庫的特殊組合以外,例如 stable 的 security updates 和 stable-updates。

這里有一個列子,在原有只跟蹤 testing 的場景,操作包含在 unstable 里發(fā)現(xiàn)的新的上游軟件包版本。

1、臨時更改 “/etc/apt/sources.list” 文件,使之指向單一的 “unstable” 發(fā)行版路徑。

2、運行 “aptitude update” 命令。

3、運行 “aptitude install package-name” 命令。

4、恢復(fù)到原始 “/etc/apt/sources.list” 文件,使之指向 testing 路徑。

5、運行 “aptitude update” 命令。

使用這個手工方法,不需要創(chuàng)建 “/etc/apt/preferences” 文件,也不需要擔(dān)心 apt-pinning。但這個方法仍然是非常麻煩的。

當(dāng)使用混合檔案源的時候,因為 Debian 不會確保軟件之間的兼容性,所以必須自己去解決兼容性問題。如果軟件之間存在不兼容性,系統(tǒng)可能會損壞。必須能夠判斷這些操作所需的技術(shù)要求。使用任意混合的檔案源是完全可選的操作,我并不鼓勵去使用它。

從不同的檔案庫中安裝軟件包的一般規(guī)則如下:

非二進(jìn)制軟件包 (“Architecture: all”) 的安裝是更保險的。

  • 文檔軟件包:沒有特別的要求;
  • 解釋程序的軟件包:兼容的解釋器必須是可用的。

二進(jìn)制軟件包 (non “Architecture: all”)通常會面臨很多障礙,它的安裝不保險的。

  • 庫文件版本的兼容性(包括 “libc”);
  • 與之相關(guān)的有用的程序版本的兼容性;
  • 內(nèi)核 ABI 的兼容性;
  • C++ ABI 的兼容性;

為了使軟件包的安裝變得更保險 ,一些商業(yè)的非自由的二進(jìn)制程序包可能會提供完整的靜態(tài)鏈接庫。還是應(yīng)該檢查 ABI 的兼容性問題等等。

除非為了短期避免破壞軟件包,從非 Debian 檔案庫安裝二進(jìn)制軟件包通常是一個壞的主意。需要查找所有存在的和目前 Debian 系統(tǒng)兼容的安全技術(shù)替代方案。(參見 第 2.1.11 節(jié) “怎樣和不一致的要求協(xié)作”)。

七、使用apt-pinning

新手用 apt-pinning 命令會造成比較大的問題。必須避免使用這個命令除非確實需要它。

  • 沒有 “/etc/apt/preferences” 文件,APT 系統(tǒng)使用版本字符串來選擇最新的可用版本作為 候選版本。這是通常的狀態(tài),也是 APT 系統(tǒng)最推薦的使用方法。所有官方支持的檔案庫集合,并不要求 “/etc/apt/preferences” 文件,因此,一些不應(yīng)當(dāng)被作為自動更新源的軟件包,被標(biāo)記為 NotAutomatic,并被適當(dāng)處理。
  • 版本字符串的比較規(guī)則可以被驗證,例子如下,”dpkg –compare-versions ver1.1 gt ver1.1~1; echo $?”。
  • 如果經(jīng)常從混合源檔案庫中安裝軟件包, 可以通過創(chuàng)建 “/etc/apt/preferences” 文件并且在其中寫入關(guān)于調(diào)整候選版本的軟件包選取規(guī)則的合適條目 (如apt_preferences(5) 中所示)來自動化這些復(fù)雜的操作。這被稱為 apt-pinning。
  • 當(dāng)使用 apt-pinning 命令時,因為 Debian 不會確保軟件之間的兼容性,所以必須自己確認(rèn)其兼容性。apt-pinning 是完全可選的操作,我并不建議去使用它。
  • 檔案庫層級的 Release 文件使用 apt_preferences(5) 的規(guī)則.對于 Debian 通用檔案庫 和 Debian 安全檔案庫,apt-pinning 只在 “suite” 名下工作。(這點和 Ubuntu 檔案庫不同.)例如,在 “/etc/apt/preferences” 文件里面,可以使用”Pin: release a=unstable” ,但不能使用 “Pin: release a=sid”.
  • 當(dāng)使用非 Debian 的檔案庫作為 apt-pinning 的一部分時,應(yīng)該檢查它們的用途和可信度。例如,Ubuntu 和 Debian 是不能混在一起的。

注意:即使不創(chuàng)建 “/etc/apt/preferences” 文件,在不用 apt-pinning 命令的情況下,也可以進(jìn)行相當(dāng)復(fù)雜的系統(tǒng)工作 。

如下是關(guān)于 apt-pinning 技術(shù)的簡化說明:

可用的軟件包源在 “/etc/apt/sources.list” 文件里面定義,APT 系統(tǒng)從可用的軟件包源里面選擇 Pin-Priority 值最大的,作為升級 軟件包的候選版本。如果一個軟件包的 Pin-Priority 大于 1000,這個版本限制為只能 升級,關(guān)閉了軟件包降級功能。

每個軟件包的 Pin-Priority 值是在 “/etc/apt/preferences” 文件中的 “Pin-Priority” 條目中定義或者是使用它的默認(rèn)值。

用于 apt-pinning 技術(shù)的值得注意的 Pin-Priority 值列表:

Pin-Priority apt-pinning?對軟件包的影響
1001 安裝該軟件包,即使是一個降級軟件包的指令
990 用作目標(biāo)發(fā)行版檔案庫的默認(rèn)值
500 用作常規(guī)檔案庫的默認(rèn)值
100 用于?NotAutomatic?和?ButAutomaticUpgrades?檔案庫的默認(rèn)值
100 用于已安裝軟件包
1 用于?NotAutomatic?檔案庫的默認(rèn)值
-1 即使被推薦,也絕不安裝這個軟件包

目標(biāo)版本檔案倉庫,能夠由命令行選項設(shè)置,例如: “apt-get install -t testing some-package”

NotAutomatic 和 ButAutomaticUpgrades 的檔案是由檔案庫服務(wù)器上檔案層級的 Release 文件來設(shè)置,,同時包含”NotAutomatic: yes” 和 “ButAutomaticUpgrades: yes”.而 NotAutomatic 檔案也是由檔案庫服務(wù)器上的檔案層級的 Release 文件來設(shè)置,但只包含 “NotAutomatic: yes”.

來自多個檔案源的軟件包的 apt-pinning 情況可以通過 “apt-cache policy package” 命令顯示。

  • “Package pin:” 開頭的行,列出了軟件包版本的 pin ,如果 package 相關(guān)的 pin 已經(jīng)定義, 例如, “Package pin: 0.190″;
  • 沒有 “Package pin:” 的行存在,如果沒有 package 相關(guān)的定義;
  • 與 package 相關(guān)的 Pin-Priority 值列在所有版本字符串的右邊,比如,”0.181 700″;
  • “0” 是列在所有版本字符串的右邊,如果沒有 package 相關(guān)的定義。例如, “0.181 0″;
  • 檔案庫 (在 “/etc/apt/preferences” 文件作為”Package: *”定義) 的 Pin-Priority 值,列在所有檔案庫路徑的左邊,例如,”100 http://deb.debian.org/debian/ bookworm-backports/main Packages”。

八、阻止軟件包安裝

如果不想要引入推薦的特定軟件包,必須創(chuàng)建 “/etc/apt/preferences” 文件并且像如下所示的那樣在文件的頂部明確列出這些軟件包。

Package: package-1
Pin: version *
Pin-Priority: -1
Package: package-2
Pin: version *
Pin-Priority: -1

九、testing版本

新手用 apt-pinning 命令會造成比較大的問題。必須避免使用這個命令除非確實需要它。如下是一個關(guān)于 apt-pinning 技術(shù)的例子,當(dāng)使用 testing的時候,實現(xiàn) unstable 中的特定的較新的上游版本軟件包的日常升級。應(yīng)該按如下所示的在 “/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

按如下所示的設(shè)置 “/etc/apt/preferences” 文件。

Package: *
Pin: release a=unstable
Pin-Priority: 100

當(dāng)想要在此配置下從 unstable 檔案庫中安裝 “package-name” 軟件及它的依賴包時,執(zhí)行帶有 “-t” 選項 (unstable 的 Pin-Priority 值變?yōu)?990) 的轉(zhuǎn)換目標(biāo)發(fā)行版的命令。

$ sudo apt-get install -t unstable package-name

在此配置下,執(zhí)行 “apt-get update” 和 “apt-get dist-upgrade”(或者 “aptitude safe-upgrade” 和 “aptitude full-upgrade”) 命令,會從 testing 檔案庫升級那些從 testing 檔案庫安裝的軟件包并且從 unstable 檔案庫升級那些從 unstable 檔案庫中安裝的軟件包。

注意:

  • 小心不要去移除 “/etc/apt/sources.list” 文件中的 “testing” 檔案庫。如果文件中沒有 “testing” ,APT 系統(tǒng)會使用更加新的 unstable 檔案庫升級軟件包;
  • 我通常會在上述操作后,馬上注釋掉 “/etc/apt/sources.list” 文件中的 “unstable” 檔案庫記錄。這避免了因為處理 “/etc/apt/sources.list” 文件中的眾多記錄而造成的升級緩慢雖然同時也阻止了那些從 unstable 檔案庫中安裝的軟件包通過 unstable 升級;
  • 如果 “/etc/apt/preferences” 文件中 “Pin-Priority: 1” 替代了 “Pin-Priority:100″,即使 “/etc/apt/sources.list” 文件中的 “testing” 記錄被刪除了,Pin-Priority 值為 100 的已安裝軟件包也不會通過 unstable 檔案庫升級。

如果希望自動跟蹤 unstable 里某些特殊的軟件包,而在安裝時不再使用初始化選項 “-t unstable” , 必須創(chuàng)建 “/etc/apt/preferences” 文件,并在該文件頂部按下面的方式清晰的列出所有那些軟件包。

Package: package-1
Pin: release a=unstable
Pin-Priority: 700
Package: package-2
Pin: release a=unstable
Pin-Priority: 700

如下是為每個特定的軟件包設(shè)置 Pin-Priority 值。例如,為了使用最新的 unstable 的英文版 “Debian Reference”,應(yīng)該在 “/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

即使使用的是 stable 檔案庫,apt-pinning 技術(shù)仍然是有效的。根據(jù)我以前的經(jīng)驗,從 unstable 檔案庫安裝的文檔包一直是安全的。

十、unstable版本

新手用 apt-pinning 命令會造成比較大的問題。必須避免使用這個命令除非確實需要它。這是使用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 節(jié) “檔案庫層的“Release”文件”),其默認(rèn)的Pin-Priority值 被設(shè)置為1 (<<100) . 并不需要在”/etc/apt/preferences”文件中設(shè)置Pin-Priority值,只需要指定 experimental 源,除非需要在下次更新時自動升級時更新特定軟件包.

十一、緊急降級

新手用 apt-pinning 命令會造成比較大的問題。必須避免使用這個命令除非確實需要它。降級在 Debian 設(shè)計上就不被官方支持。僅僅是在緊急恢復(fù)過程中需要做的一部分工作。盡管憎恨這種情形,但降級在很多場景下工作得也不錯。對于重要系統(tǒng),應(yīng)當(dāng)在恢復(fù)操作后備份所有重要數(shù)據(jù),并從零開始重新安裝一個新的系統(tǒng)。

可以通過控制候選版本從新的檔案庫降級到舊的檔案庫(參見 第 2.7.7 節(jié) “使用 apt-pinning 調(diào)整獲選版本”),從而使損壞的系統(tǒng)恢復(fù)。下面是一種懶惰的方法,可以避免許多冗長的 “dpkg -i broken-package_old-version.deb” 命令(參見 第 2.6.6 節(jié) “使用 dpkg 命令進(jìn)行救援”)。

搜索 “/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

按如下所示的設(shè)置 “/etc/apt/preferences” 文件。

Package: *
Pin: release a=testing
Pin-Priority: 1010

運行 “apt-get update; apt-get dist-upgrade” 使整個系統(tǒng)的軟件包強制降級。在緊急降級后,移除 “/etc/apt/preferences” 這個特殊的文件。

十二、equivs軟件包

如果從源代碼編譯了一個程序來代替 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.)

十三、移植軟件包

由于系統(tǒng)差異,不能夠保證這里描述的過程能夠工作,而不需要額外的手工處理。對于部分升級的 stable 系統(tǒng),使用源軟件包在運行環(huán)境中重新構(gòu)建一個軟件包是不錯的選擇。這可以避免因為依賴關(guān)系導(dǎo)致大量軟件包升級。在 stable 系統(tǒng)的 “/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。

執(zhí)行下列命令:

$ dch -i

更新軟件包版本,例如在 “debian/changelog” 中附加一個 “+bp1”像下面那樣構(gòu)建軟件包并將它們安裝到系統(tǒng)中。

$ debuild
$ cd ..
# debi foo*.changes

十四、APT代理服務(wù)器

因為鏡像整個 Debian 檔案庫的子區(qū)會浪費硬盤和網(wǎng)絡(luò)帶寬,當(dāng)管理許多 LAN 上的系統(tǒng)時,為 APT 部署一個本地代理服務(wù)器是個好主意。APT 可以通過配置來使用通用 web(http)代理服務(wù)器,例如 squid。環(huán)境變量 “$http_proxy 會覆蓋 “/etc/apt/apt.conf” 文件中設(shè)置的代理服務(wù)器。

這里有一些 Debian 檔案庫的專用代理工具。應(yīng)該在使用它們之前檢查 BTS。

Debian 檔案庫的專用代理工具:

軟件包 流行度 大小 說明
approx V:0, I:0 7124 緩存 Debian 檔案庫文件的代理服務(wù)器(已編譯的?OCaml?程序)
apt-cacher V:0, I:0 266 為 Debian 軟件包和源代碼文件進(jìn)行緩存代理(Perl 程序)
apt-cacher-ng V:4, I:4 1816 分發(fā)軟件包的緩存代理(C++ 編譯的程序)

當(dāng) Debian 重構(gòu)它的檔案庫結(jié)構(gòu)時,這些專用的代理工具往往需要軟件包維護(hù)者重寫代碼,并可能在一段時間內(nèi)無法使用。另一方面,通用 web (http) 代理服務(wù)器更強健并且更容易應(yīng)對這種改變。

  • 廣告合作

  • QQ群號:4114653

溫馨提示:
1、本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。郵箱:2942802716#qq.com(#改為@)。 2、本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)裁,轉(zhuǎn)載請注明出處“站長百科”和原文地址。