0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

debian軟件包管理詳解

PoisonApple ? 來源:網(wǎng)絡(luò)整理 ? 2018-02-12 15:50 ? 次閱讀

廣義的Debian是指一個致力于創(chuàng)建自由操作系統(tǒng)的合作組織及其作品,由于Debian項目眾多內(nèi)核分支中以Linux宏內(nèi)核為主,而且 Debian開發(fā)者 所創(chuàng)建的操作系統(tǒng)中絕大部分基礎(chǔ)工具來自于GNU工程 ,因此 “Debian” 常指Debian GNU/Linux。

非官方內(nèi)核分支還有只支持x81的Debian GNU/Hurd(Hurd微內(nèi)核),只支持amd14的Dyson(OpenSolaris混合內(nèi)核)等。這些非官方分支都存在一些嚴(yán)重的問題,沒有實用性,比如Hurd微內(nèi)核在技術(shù)上不成熟,而Dyson則基礎(chǔ)功能仍不完善。

“Debian” 正式發(fā)音為 /?d?.bi.?n/ ,Debian 是國際化協(xié)作項目,官方未指定任何非英文名稱。

Debian 軟件包管理

高級包管理工具 aptitude 是目前首選的字符界面的 APT 前端程序。它會記住哪些包是你安裝的,哪些是為了滿足依賴關(guān)系而安裝的;在不被已安裝包需要的情況下aptitude 會自動卸載后者。它內(nèi)建一套高級的包過濾器,但是比較難上手。

synaptic 是目前首選的基于 GTK 的圖形化 APT 前端程序。它的包過濾器比 aptitude 的好用多了。它包含了對 Debian Package Tags的實驗性支持。

為了減少 Debian 倉庫的網(wǎng)絡(luò)負(fù)擔(dān)和加快你下載的速度,你應(yīng)該從 Debian 鏡像下載。

如果你需要在你本地網(wǎng)絡(luò)的許多臺機(jī)器上安裝相同的包。在使用 APT 下載包的時候,請考慮使用squid 來設(shè)置本地 HTTP 代理。必要的話,可以設(shè)置環(huán)境變量 http_proxy 或者在/etc/apt/apt.conf 里面設(shè)置 http 的值。

盡管 apt_preferences(5) 中描述的 APT 的 pinning 功能非常強(qiáng)大,但造成的影響是難以察覺和管理的。你應(yīng)該把它作為一個高級功能來看待。

在 chroot, 第 8.1.35 節(jié) 中描述的使用方法非常適合于需要同時確保系統(tǒng)的穩(wěn)定性和使用最新軟件的情況。

本章節(jié)是基于 Woody 之后的系統(tǒng)寫的,某些東西只適合于 Sarge 或更新的系統(tǒng)。

1.1 介紹

如果你沒有精力閱讀完所有的開發(fā)者文檔,那么先看看本章的內(nèi)容,然后開始體驗 Debiantesting/unstable 的威力吧:-)

1.1.1 主要的包管理工具

dpkg – Debian 包安裝工具

apt-get – APT 的命令行前端

aptitude – APT 的高級的字符和命令行前端

synaptic – 圖形界面的 APT 前端

dselect – 使用菜單界面的包管理工具

tasksel – Task 安裝工具

這些工具不是用來取代對方的,比如 dselect 同時使用 APT 和 dpkg。

APT 使用 /var/lib/apt/lists/* 來跟蹤可用的軟件包,而 dpkg 使用的是/var/lib/dpkg/available。如果你使用了 aptitude 或者其他 APT 前端來安裝軟件包,同時你希望使用 dselect 來安裝軟件包,請不要忘記使用 dselect 菜單上的 [U]pdate (或者運行“dselect update”) 來更新 /var/lib/dpkg/available。

在處理依賴關(guān)系上 apt-get 會自動下載安裝依賴的軟件包,但是不會處理所安裝軟件推薦的或者建議的軟件包。

相反 aptitude 可以設(shè)置成安裝所安裝軟件推薦的或者建議的軟件包。

dselect 給使用者列出所安裝軟件推薦或建議的軟件包,可以進(jìn)行單獨選擇。 參閱 軟件包依賴關(guān)系, 第 2.2.8 節(jié)。

1.1.2 方便的工具

dpkg-reconfigure - 重新配置已安裝的軟件包

(如果它是使用 debconf 進(jìn)行配置的)

dpkg-source - 管理源碼包

dpkg-buildpackage - 自動生成包文件

apt-cache - 在本地緩沖區(qū)檢查包文件

1.2 Debian 軟件包管理基礎(chǔ)

1.2.1 設(shè)置 APT

參考 準(zhǔn)備升級工作, 第 5.2 節(jié) 來設(shè)置 sources.list。 [34] 請參考 Debian 系統(tǒng)安裝提示, 第 3 章, 發(fā)行版升級到 stable、testing 或 unstable, 第 5 章, 和 應(yīng)急的編輯器, 第 11.2 節(jié)。

1.2.2 安裝 tasks

你可以安裝一些軟件包集合,這些集合是由使 Debian 系統(tǒng)滿足某些特定用途的典型軟件包組成的。 這些集合被稱為“tasks”。

在初始化安裝中,安裝 tasks 最簡單的方法就是使用 tasksel。注意在使用之前,你需要運行

dselect update

建議使用 aptitude 來安裝 tasks。 它能讓你在選擇好 tasks 并準(zhǔn)備安裝之前,刪除 tasks 中的某些軟件包。

1.2.3 aptitude

aptitude 是全新的可菜單操作的包安裝工具,和 dselect 類似,但是是針對 APT 從頭設(shè)計的。從大多數(shù)參數(shù)來講,aptitude 完全可以作為 apt-get 的一個兼容的代替品。 參閱 aptitude(1)和 /usr/share/doc/aptitude/README.

一旦開始使用 aptitude,你最好繼續(xù)使用它,而不是選擇其他替代工具。否則你將失去aptitude 包存的軟件安裝清單,你就不能享受自動刪除多余軟件包的功能了。

全屏狀態(tài)下 aptitude 接受單鍵的命令,大多數(shù)是小寫的。主要的幾個功能鍵如下:

按鍵 動作

F10 菜單

? 按鍵命令幫助(完整的清單)

u 更新軟件包信息

+ 標(biāo)記軟件包為升級或者新安裝

- 標(biāo)記軟件包為刪除(保留配置文件)

_ 標(biāo)記軟件包為完全刪除(刪除配置文件)

= 保持軟件包的當(dāng)前版本,阻止其被升級

U 標(biāo)記所有可以升級的軟件包為升級

g 下載和安裝選擇的軟件包

q 退出當(dāng)前屏幕,保存改變

x 退出當(dāng)前屏幕,忽略改變

Enter 查看一個軟件包的信息

C 查看一個軟件包的更新日志

l 改變軟件包樹狀顯示限制

/ 搜索第一個匹配的軟件包

重復(fù)最后一次搜索

和 apt-get 一樣, aptitude 安裝軟件包的時候自動解決依賴問題。 aptitude 還能安裝即將安裝的軟件包推薦或者建議的軟件包。你通過 F10 -》 選項 -》 處理依賴關(guān)系 在菜單上更改這一默認(rèn)設(shè)置。

aptitude 的其他特點如下:

aptitude 能訪問所有版本的軟件包。

aptitude 的動作記錄在 /var/log/aptitude。

aptitude 能輕松的追蹤陳舊的和本地建立的軟件包,并在“過期的和在本地創(chuàng)建的軟件包”上列出。

aptitude 內(nèi)建強(qiáng)大的包搜索和顯示功能。熟悉 mutt 的用戶很容易上手,因為這個顯示方法的靈感來源于 mutt。 參閱 /usr/share/doc/aptitude/README 中的 “SEARCHING, LIMITING, AND EXPRESSIONS”

aptitude 在全屏狀態(tài)下有嵌入的 su 功能。普通用戶都可以執(zhí)行,直到安裝或刪除軟件的時候再取得管理員權(quán)限。

1.2.4 dselect

從 stable 發(fā)行到現(xiàn)在為止(包含 Potato),dselect 一直是主要的包維護(hù)工具。對于 Sarge,你可以考慮用 aptitude 代替。

當(dāng)你啟動程序的時候,dselect 會自動選擇所有“Required”“Important”和“Standard”的包。

dselect 的用戶界面是有些奇怪,但是大部分人已經(jīng)習(xí)慣了。它有四個主要命令: (指令都是大寫的!):

按鍵 動作

Q 退出。確認(rèn)當(dāng)前的選擇并退出。

(忽略依賴關(guān)系)

R 撤銷! 我不是那個意思。

D 不管他!我不管你 dselect 怎么想的,照做就好了!

U 都照建議的來做

使用 D 和 Q,你可以選擇有沖突的選項。請小心使用這個命令。

在 /etc/dpkg/dselect.cfg 中加上一行“expert”來減少干擾。

如果你的機(jī)器運行 dselect 的速度很慢,你可以考慮在速度快一點的機(jī)器上運行 dselect,確定你要安裝的軟件包之后,在慢的機(jī)器上通過 apt-get 來安裝它們。

1.2.5 使用 APT 來維護(hù)發(fā)行版本

請編輯 /etc/apt/preferences 并加入以下內(nèi)容來維持系統(tǒng)為 testing 版本:

Package: *

Pin: release a=testing

Pin-Priority: 800

Package: *

Pin: release a=stable

Pin-Priority: 100

要注意的是追蹤 testing 版本可能帶來延誤安裝安全性修正軟件包的副作用。因為這些軟件包都是上傳到 unstable 一段時間后再移植到 testing

更多復(fù)雜的例子請參考apt_preferences(5),可以讓您做更多的事情,例如安裝 unstable 的軟件包的同時還能把系統(tǒng)維持在 testing。

關(guān)于限制特定軟件在特定版本上,而其他軟件隨系統(tǒng)升級的設(shè)置在 examples subdirectory找到,即 preferences.testing 和preferences.unstable。

如果你混用不同的發(fā)行版本,例如 testing 和 stable 或 unstable 和 stable,你終究還是會安裝上 testing 或 unstale 版本的核心軟件,例如 libc1,這樣作無法確保系統(tǒng)中沒有臭蟲。你需要特別小心。

另外一個例子,preferences.stable,會強(qiáng)制降級所有的軟件到 stable。

Debian 不支持將某個軟件包降級到先前的發(fā)行版本。然而在新的軟件包出問題時,你會發(fā)現(xiàn)你不得不安裝舊的可用的軟件包。你可以在本地的 /var/cache/apt/archives/ 或遠(yuǎn)端的http://snapshot.debian.net/ 中找到先前的版本。請參考 使用 dpkg 救助, 第 1.3.3 節(jié)。

從某個發(fā)行版本降級到先前的發(fā)行版本也是不被支持的,而且這樣做往往造成很多問題。不過你愿意冒險的話,作為最后的手段這樣做也是值得的。

1.2.1 aptitude, apt-get 和 apt-cache 命令

還是以上面使用 testing 發(fā)行版的用戶為例,可使用下列命令來管系統(tǒng):

aptitude upgrade (或 apt-get upgrade 或 aptitude dist-upgrade 或 apt-get dist-upgrade)

這樣就會跟隨 testing 版本 — 它們會跟蹤 testing 版本的更新情況,對系統(tǒng)上所有軟件包進(jìn)行升級,并從 testing 處重新分析依賴關(guān)系并安裝相關(guān)的包。 [35]

apt-get dselect-upgrade

這個命令跟蹤 testing 版本 — 根據(jù) dselect 的選擇對系統(tǒng)上的軟件包進(jìn)行升級。

aptitude -R -G install package (或 apt-get install package)

從 testing 版本安裝 package 以及依賴的包。

aptitude -r -G install package

從 testing 版本安裝 package 以及依賴和推薦的包。

aptitude -r -g install package

從 testing 版本安裝 package 以及依賴和建議的包。

aptitude install package/unstable

從 unstable 中安裝 package,并由 testing 版本提供安裝依賴的包。

aptitude install -t unstable package

通過設(shè)置 unstable 的 Pin-Priority 為 990,可以從 unstable 處安裝 package 及其依賴的包。

apt-cache policy foo bar

檢查 foo bar 軟件包的狀態(tài)。

aptitude show foo bar 。| less (或 apt-cache show foo bar 。 | less)

查看 foo bar 。軟件包的有關(guān)信息。

aptitude install foo=2.2.4-1

安裝 foo 軟件包的特定版本 2.2.4-1。

aptitude install foo bar-

安裝 foo 軟件包并刪除 bar 軟件包。

aptitude remove bar

刪除 bar 軟件包,但保留其配置文件。

aptitude purge bar

刪除 bar 軟件包及其所有配置文件。

在上面的例子中使用 -u 選項的作用是在實際升級之前將所有將要升級的軟件包列出,并提示用戶確認(rèn)。下面的操作可將 -u 設(shè)置為默認(rèn)行為:

$ cat 》》 /etc/apt/apt.conf 《《 。

// Always show packages to be upgraded (-u)

APT::Get::Show-Upgraded “true”;

使用 --no-act 可進(jìn)行模擬升級,并不是進(jìn)行真正的升級行為。

1.3 Debian 生存命令

掌握了這些知識,你就能夠享受無盡的“升級”了 :-)

1.3.1 檢測程序錯誤尋求幫助

如你使用某個軟件包出現(xiàn)問題,在尋求幫助或發(fā)送錯誤報告之前請確認(rèn)查看過下列站點 (lynx,links 和 w3m 都很好用):

$ lynx http://bugs.debian.org/

$ lynx http://bugs.debian.org/package-name # 如果你知道軟件包的名字

$ lynx http://bugs.debian.org/bugnumber # 如果你知道錯誤序號

在 Google(www.google.com)中使用關(guān)鍵字“site:debian.org”搜索。

如有疑問,可閱讀幫助文件。設(shè)置 CDPATH 如下:

export CDPATH=。:/usr/local:/usr/share/doc

然后輸入

$ cd packagename

$ pager README.Debian # 如果存在的話

$ mc

更多技術(shù)支持資源列在 Debian 技術(shù)支持, 第 15 章。

1.3.2 APT 升級錯誤以及解決方法

從 unstable/testing 進(jìn)行升級時可能出現(xiàn) 升級, 第 5.3 節(jié) 中提到的軟件包關(guān)聯(lián)問題。多數(shù)情況下,是因為升級的軟件包所需的新增的關(guān)聯(lián)包沒有安裝??墒褂萌缦路椒ń鉀Q:

# aptitude dist-upgrade

如果這招無效,可以重復(fù)下面的方法至到問題解決:

# aptitude -f upgrade # 即使遇到錯誤也繼續(xù) upgrade

# aptitude -f dist-upgrade # 即使遇到錯誤也繼續(xù) dist-upgrade

一些的確存在問題的升級腳本會引起持續(xù)出錯。最好的解決方法是檢查該軟件包的安裝腳本/var/lib/dpkg/info/packagename.{post-,pre-}{install,removal} 然后運行:

# dpkg --configure -a # 配置所有安裝的軟件包

如果腳本報告缺少配置文件,查看一下 /etc 中相關(guān)的配置文件。如果配置文件有 .dpkg-new 擴(kuò)展名(或其它類似的擴(kuò)展名),去掉(mv)它的擴(kuò)展名。

從 unstable/testing 進(jìn)行升級時可能出現(xiàn)軟件包關(guān)聯(lián)問題??捎眠@個方法智取:

# aptitude -f install package # 重載壞關(guān)聯(lián)

還可以用 equivs 包來解決此類問題。參閱 /usr/share/doc/equivs/README.Debian 和equivs 軟件包, 第 1.5.2 節(jié)。

1.3.3 使用 dpkg 救助

如果你在使用 APT 的時候遇到死胡同了,那么可以從 Debian 的鏡像站點下載軟件包并使用dpkg 來安裝。如果你不能訪問網(wǎng)絡(luò),可以在 /var/cache/apt/archives/ 中找到被緩存的軟件包。

# dpkg -i fetchmail_1.2.5-4_i381.deb

如果你用這種方法安裝軟件包,但是遇到了依賴問題安裝失敗了,并且你確實需要安裝這個軟件包。你可以用 dpkg 的 --ignore-depends,--force-depends 和其他參數(shù)來安裝軟件包。dpkg(8) 有更詳細(xì)的介紹。

1.3.4 恢復(fù)軟件包選擇狀態(tài)的數(shù)據(jù)

如果 /var/lib/dpkg/status 因為某種原因壞掉了,Debian 系統(tǒng)將會完全丟失軟件包選擇狀態(tài)的數(shù)據(jù)。趕快到 /var/lib/dpkg/status-old 或 /var/backups/dpkg.status.* 下找找舊的/var/lib/dpkg/status 文件

將 /var/backups/ 放在其它的分區(qū)是個好習(xí)慣,因為該目錄包含了許多非常重要的系統(tǒng)數(shù)據(jù)。

如果舊的 /var/lib/dpkg/status 文件也壞了,仍可以從 /usr/share/doc/ 下的目錄進(jìn)行恢復(fù)這些信息。

# ls /usr/share/doc |

grep -v [A-Z] |

grep -v ‘^texmf$’ |

grep -v ‘^debian$’ |

awk ‘{print $1 “ install”}’ |

dpkg --set-selections

# dselect --expert # 重新安裝系統(tǒng),如果需要的話去除一些選項

1.3.5 /var 崩潰之后如何恢復(fù)系統(tǒng)

/var 目錄包含著定時更新的數(shù)據(jù)如 mail,它們很容易遭破壞。將目錄放到別的分區(qū)可降低風(fēng)險,如果最壞的事情發(fā)生了,可以通過重建 /var 目錄來挽救 Debian 系統(tǒng)。

從相同或舊版本的最簡 Debian 系統(tǒng)中取得 /var 目錄的內(nèi)容框架,例如 var.tar.gz,然后它放入受損系統(tǒng)的 root 目錄,接著

# cd /

# mv var var-old # 如果里面還有其他有用資料的話

# tar xv*** var.tar.gz # 使用 Woody 框架文件

# aptitude # 或是用 dselect

上述步驟可使系統(tǒng)恢復(fù)工作。使用 恢復(fù)軟件包選擇狀態(tài)的數(shù)據(jù), 第 1.3.4 節(jié) 中描述的技術(shù)加速軟件包選擇數(shù)據(jù)的恢復(fù)。([FIXME]:該過程需要更多的實踐來檢驗)

1.3.6為無法啟動的系統(tǒng)安裝軟件包

使用 Debian 急救軟盤 /CD 或從多啟動 Linux 系統(tǒng)其它分區(qū)啟動。 參閱 啟動系統(tǒng), 第 8.1 節(jié)。 將無法啟動的系統(tǒng)掛載到 /target 并使用 dpkg 的 chroot 安裝模式。

# dpkg --root /target -i packagefile.deb

接下來就可以著手配置并解決問題。

如是只是由于 lilo 損壞而造系統(tǒng)無法啟動,可使用標(biāo)準(zhǔn) Debian 急救盤啟動。假設(shè)你的 root 分區(qū)位于 /dev/hda12 且想使用 runlevel 3,在啟動提示符輸入:

boot: rescue root=/dev/hda12 3

這樣,你就可以使用軟盤中內(nèi)核啟動系統(tǒng),新系統(tǒng)的功能基本齊全。(可能丟失某些內(nèi)核特性或模塊)

1.3.7 如果 dpkg 命令出錯怎么辦

如果 dpkg 損壞就不能安裝任何 .deb 文件。下面的操作可幫助你修復(fù)這種狀況。(在第一行,你可將“l(fā)inks”替換成你喜歡的瀏覽器。)

$ links http://http.us.debian.org/debian/pool/main/d/dpkg/

下載完好的 dpkg_version_arch.deb

$ su

password: *****

# ar x dpkg_version_arch.deb

# mv data.tar.gz /data.tar.gz

# cd /

# tar x***v data.tar.gz

對 i381,亦可用 http://packages.debian.org/dpkg 作為 URL。

1.4 Debian 必殺技

有了這些命令的啟迪,你將會從無休止的升級沖突的地獄中解放出來,達(dá)到 Debian 天堂。 :-)

1.4.1 文件信息

在已安裝的軟件包中許找特定文件所屬的軟件包:

$ dpkg {-S|--search} pattern

或者搜索 Debian archive:

$ wget http://ftp.us.debian.org/debian/dists/sarge/Contents-i381.gz

$ zgrep -e pattern Contents-i381.gz

或是用專門的軟件包命令:

# aptitude install dlocate

# 和 slocate 沖突 (locate 的安全版本)

$ dlocate filename # dpkg -L 和 dpkg -S 的高效代替品

# aptitude install auto-apt # 請求式軟件包安裝工具

# auto-apt update # 為 auto-apt 建立 db 文件

$ auto-apt search pattern

# 在所有軟件包中搜索 pattern,不論安裝與否

1.4.2 軟件包信息

搜索并顯示包文件的信息。編輯 /etc/apt/sources.list,讓 APT 指向正確的包文件。如果想了解 testing/unstable 中的相應(yīng)軟件包與當(dāng)前系統(tǒng)安裝的軟件包有何差別,使用 apt-cache policy — 更好。

# apt-get check # 更新緩沖區(qū)并檢查損壞的軟件包

$ apt-cache search pattern # 按文本描述搜索軟件包

$ apt-cache policy package # 軟件包的 priority/dists 信息

$ apt-cache show -a package # 顯示所有 dists 中軟件包描述信息

$ apt-cache showsrc package # 顯示相應(yīng)源碼包的信息

$ apt-cache showpkg package # 軟件包調(diào)試信息

# dpkg --audit|-C # 搜索未完成安裝的軟件包

$ dpkg {-s|--status} package 。 # 已安裝軟件包描述

$ dpkg -l package 。 # 已安裝軟件包的狀態(tài)(每個占一行)

$ dpkg -L package 。 # 列出軟件包安裝的文件的名稱

Woody 發(fā)布版沒有為 apt-cache showsrc 建檔,但該命令可用:)

你也這可這樣查看軟件包信息(我用 mc 瀏覽):

/var/lib/apt/lists/*

/var/lib/dpkg/available

比較下面的文件可以確切了解最近的安裝過程對系統(tǒng)造成了那些改變。

/var/lib/dpkg/status

/var/backups/dpkg.status*

1.4.3 使用 APT 無人執(zhí)守安裝

使用 APT 無人執(zhí)守安裝,要在 /etc/apt/apt.conf 中加上一行: /etc/apt/apt.conf:

Dpkg::Options {“--force-confold”;}

另一種等價的方法是運行 apt-get -q -y packagename。這種方法可能產(chǎn)生嚴(yán)重的負(fù)作用,所以使用起來要小心。參閱 apt.conf(5)和 dpkg(1)。

安裝完畢以后,可以用 重新配置已安裝的軟件包, 第 1.4.4 節(jié) 中的方法配置特定的軟件包。

1.4.4 重新配置已安裝的軟件包

使用下列方法重新配置已安裝的軟件包。

# dpkg-reconfigure --priority=medium package

# dpkg-reconfigure --all # 重新配置所有的軟件包

# dpkg-reconfigure locales # 生成額外的 locales

# dpkg-reconfigure --p=low xserver-xfree81 # 重新配置 X 服務(wù)器

如果你想永久改變 debconf 對話框模式,可這么做。

某些程序用于生成特殊的配置腳本。

apt-setup - 創(chuàng)建 /etc/apt/sources.list

install-mbr - 安裝主引導(dǎo)(Master Boot Record)管理器

tzconfig - 設(shè)定本地時間

gpmconfig - 設(shè)置 gpm 鼠標(biāo) daemon

sambaconfig - 在 Potato 中配置 Samba( Woody 使用 debconf 來配置)

eximconfig - 配置 Exim (MTA)

texconfig - 配置 teTeX

apacheconfig - 配置 Apache (httpd)

cvsconfig - 配置 CVS

sndconfig - 配置聲音系統(tǒng)

update-alternatives - 設(shè)定默認(rèn)啟動命令,例如設(shè)定 vi 啟動 vim

update-rc.d - System-V init 腳本管理工具

update-menus - Debian 菜單系統(tǒng)

1.4.5 刪除和清除軟件包

刪除軟件包但保留其配置文件:

# aptitude remove package 。

# dpkg --remove package 。

刪除軟件包并清除配置文件:

# aptitude purge package 。

# dpkg --purge package 。

1.4.6阻止舊軟件包升級

舉個例子,要阻止 libc1 和 libc1-dev 通過 dselect 或使用 aptitude install package 命令升級,可執(zhí)行:

# echo -e “l(fā)ibc1 holdnlibc1-dev hold” | dpkg --set-selections

這種方法不影響 aptitude install package 命令操作。要阻止 aptitude upgrade package 或aptitude dist-upgrade 命令對軟件包執(zhí)行的強(qiáng)制自動降級行為,可在 /etc/apt/preferences中加上:

Package: libc1

Pin: release a=stable

Pin-Priority: 2000

這里“Package:”后不能使用通配符如“l(fā)ibc1*”,如果要保持所有與 glibc 源碼包相關(guān)的二進(jìn)制包的版本同步,可以明確的列出它們。

該命令可以顯示處于“阻止”狀態(tài)的軟件包:

dpkg --get-selections “*”|grep -e “hold$”

1.4.7 stable/testing/unstable 混合系統(tǒng)

apt-show-versions 可以列出發(fā)行版中可用軟件包的版本

$ apt-show-versions | fgrep /testing | wc

你有多少 testing 軟件包

$ apt-show-versions -u

列出可升級的軟件包

$ aptitude install `apt-show-versions -u -b | fgrep /unstable`

將所有 unstable 軟件包升級到最新版

1.4.8 刪除緩存包文件

使用 APT 安裝軟件包會在 /var/cache/apt/archives 目錄留下緩存文件,要清除這些文件可使用:

# aptitude autoclean # 僅刪除無用的包

# aptitude clean # 刪除所有的包

1.4.9 記錄/拷貝系統(tǒng)配置

對軟件包選擇情況進(jìn)行本地備份:

$ dpkg --get-selections “*” 》myselections # 或使用 *

“*” 使 myselections 包含那些被指定“完全刪除(purge)”的文件。

你可將這個文件發(fā)送到另一臺電腦并在那兒按文件中的選擇進(jìn)行軟件包安裝。

# dselect update

# dpkg --set-selections 《myselections

# apt-get -u dselect-upgrade # 或者 dselect install

1.4.10 向 stable 系統(tǒng)引入軟件包

對 stable 系統(tǒng)進(jìn)行部分升級,在軟件運行環(huán)境中重新編譯源碼的確是個誘人的想法,這樣可以避免由于關(guān)聯(lián)關(guān)系不得不對大量軟件包升級。首先,將下列鏡像源加入/etc/apt/sources.list:

deb-src http://http.us.debian.org/debian testing

main contrib non-free

deb-src http://http.us.debian.org/debian unstable

main contrib non-free

由于屏幕輸出的限制,上述每條 deb-src 命令均分成了 2 行,實際上在 sources.list 中它們均為單行。

然后下載源碼并在本地生成軟件包:

$ apt-get update # 更新軟件包搜索列表

$ apt-get source package

$ dpkg-source -x package.dsc

$ cd package-version

。。。 查找需要的軟件包(編譯所需的關(guān)聯(lián)包列在.dsc文件中)并安裝它們,

你還需要“fakerroot”軟件包。

$ dpkg-buildpackage -rfakeroot

……或者(沒有簽名)

$ dpkg-buildpackage -rfakeroot -us -uc # 如果需要,再使用“debsign”

……然后安裝

$ su -c “dpkg -i packagefile.deb”

通常,需要安裝一些帶 “-dev” 后綴的軟件包以滿足關(guān)聯(lián)關(guān)系。debsign 在 devscripts 軟件包中。auto-apt 可以輕松解決這些關(guān)聯(lián)問題。請使用 fakeroot,如是沒有必要,就別使用 root 帳號。

在 Woody 中,這些關(guān)聯(lián)問題已被簡化。例如,編譯 pine 源碼包:

# apt-get build-dep pine

# apt-get source -b pine

1.4.11 本地軟件包文件

為了創(chuàng)建與 APT 和 dselect 系統(tǒng)兼容的本地軟件包文件,需要創(chuàng)建 Packages,包中文件要放在特定的目錄樹中。

Debian 官方包文件喜歡存放于本地 deb 倉庫,下面就來創(chuàng)建倉庫:

# aptitude install dpkg-dev

# cd /usr/local

# install -d pool # 軟件包存放的物理地址

# install -d dists/unstable/main/binary-i381

# ls -1 pool | sed ‘s/_.*$/ priority section/’ | uniq 》 override

# 編輯 override # 調(diào)整 priority and section

# dpkg-scanpackages pool override /usr/local/

》 dists/unstable/main/binary-i381/Packages

# cat 》 dists/unstable/main/Release 《《 EOF

Archive: unstable

Version: 3.0

Component: main

Origin: Local

Label: Local

Architecture: i381

EOF

# echo “deb file:/usr/local unstable main”

》》 /etc/apt/sources.list

還有一種快速但是骯臟的方法來創(chuàng)建本地 deb 倉庫:

# aptitude install dpkg-dev

# mkdir /usr/local/debian

# mv /some/where/package.deb /usr/local/debian

# dpkg-scanpackages /usr/local/debian /dev/null |

gzip - 》 /usr/local/debian/Packages.gz

# echo “deb file:/usr/local/debian 。/” 》》 /etc/apt/sources.list

在 /etc/apt/sources.list 中設(shè)置相應(yīng)鏡像源入口地址,就可以通過 HTTP 或 FTP 方式遠(yuǎn)程訪問存放在其中的包文件了。

1.4.12 轉(zhuǎn)換或安裝外來的二進(jìn)制軟件包

alien 可將其它格式的二進(jìn)制軟件包如 Redhat 的 rpm、Stampede 的 slp 、Slackware 的tgz 和 Solaris 的 pkg 等轉(zhuǎn)化成 Debian 的 deb 格式軟件包,如果你想在自己的系統(tǒng)上使用別的 Linux 發(fā)行版中的軟件包,可使用 alien 將它轉(zhuǎn)化成系統(tǒng)首選的軟件包格式后安裝。alien 還支持 LSB 的軟件包。

1.4.13 自動安裝命令

auto-apt 是一種請求式軟件包安裝工具。

$ sudo auto-apt update

。。。 升級數(shù)據(jù)庫

$ auto-apt -x -y run

進(jìn)入 auto-apt 模式:/bin/bash

退出這個命令繼而退出 auto-apt 模式。

$ less /usr/share/doc/med-bio/copyright # 訪問不存在的文件

。。。 安裝提供了這個文件的軟件包。

。。。 同樣安裝依賴的包

1.4.14 校驗已安裝的軟件包

debsums 可以校驗已安裝軟件包的 MD5 編碼,對某些軟件包沒有可用的 MD5 編碼,系統(tǒng)管理員可使用一個臨時的解決辦法:

# cat 》》/etc/apt/apt.conf.d/90debsums

DPkg::Post-Install-Pkgs {“xargs /usr/bin/debsums -sg”;};

^D

per Joerg Wendland joergland@debian.org (untested)。

1.4.15 優(yōu)化 sources.list

簡而言之,我嘗試過用各種優(yōu)化方法來創(chuàng)建 sources.list,但任何一種方法對我這個住在美國的人來說都沒有明顯的改善。最后我還是用 apt-setup 手工選擇近一點的站點。

apt-spy 會根據(jù)站點回應(yīng)時間和帶寬自動創(chuàng)建 sources.list。netselect-apt 會創(chuàng)建一個更完整的 sources.list 文件,但它使用更落后的方法來選擇鏡像站點(比較 ping 時間)。

# aptitude install apt-spy

# cd /etc/apt ; mv sources.list sources.list.org

# apt-spy -d testing -l sources.apt

1.5 其他 Debian 的特性

1.5.1 dpkg-divert 命令

使用文件轉(zhuǎn)移(diversions)的方法可以強(qiáng)令 dpkg 將文件安裝到 轉(zhuǎn)移 目錄而非默認(rèn)目錄。對于某個引起沖突的文件,可以在 Debian 軟件包腳本中使用 Diversions 將它安裝到別的目錄。系統(tǒng)管理員還可以使用 diversion 來重載軟件包配置文件,或者用來保留某些舊配置文件(這些文件沒有在 conffiles 中登記)當(dāng)安裝新版軟件時這些文件會被覆蓋。(參閱 保存本地配置, 第 2.2.4 節(jié))。

# dpkg-divert [--add] filename # 添加 “轉(zhuǎn)移”

# dpkg-divert --remove filename # 刪除 “轉(zhuǎn)移”

記住,不到萬不得已不要使用 dpkg-divert。

1.5.2 equivs 軟件包

如果你從源碼編譯程序,最好將它做成本地 Debian 化軟件包(*.deb)。最新的方法是使用equivs。

Package: equivs

Priority: extra

Section: admin

Description: Circumventing Debian package dependencies

This is a dummy package which can be used to create Debian

packages, which only contain dependency information.

1.5.3 Alternative 命令

如果想用 vi 來啟動 vim,請用 update-alternatives:

# update-alternatives --display vi

。。。

# update-alternatives --config vi

Selection Command

-----------------------------------------------

1 /usr/bin/elvis-tiny

2 /usr/bin/vim

*+ 3 /usr/bin/nvi

Enter to keep the default[*], or type selection number: 2

Debian alternatives 系統(tǒng)中的這些項目,都是以符號連接的形式存放在 /etc/alternatives下的。

想設(shè)置你喜愛的 X window 環(huán)境,執(zhí)行 update-alternatives 來指定 /usr/bin/x-session-manager 和 /usr/bin/x-window-manager。詳情參閱 自定義 X 會話, 第 9.4.5.1 節(jié)

/bin/sh 是指向 /bin/bash 或 /bin/dash 的鏈接。想兼容舊的 Bash 腳本,使用/bin/bash 比較保險,但更好還是使用/bin/dash,因為它更符合 POSIX 標(biāo)準(zhǔn)。升級到 2.4 版 Linux 內(nèi)核,系統(tǒng)一般將它設(shè)置為/bin/dash。

1.5.4 運行級別 Runlevel

安裝好之后,大部分 Debian 軟件包的服務(wù)被設(shè)定為在 runlevel 2 到 5 時運行。所以,在沒有定制過的 Debian 系統(tǒng)中,runleve 2、3、4、5、1 是沒有區(qū)別的。Debian 保留這些給本地管理員使用。 自定義運行級別, 第 2.4.3 節(jié) 說明如何定制 runlevels。 這樣的 runlevels 系統(tǒng)和其他流行的 GNU/Linux 發(fā)行版本完全不同。 你可能要做的改變之一就是取消 runlevel 2 上的xdm 和 gdm,使得在完成啟動之后 X 顯示管理去不會自動啟動;然后你可以通過切換到 runlevel 3 來啟動 X 顯示管理器。

參閱 運行級別, 第 2.4.2 節(jié) 來獲得更多關(guān)于 runlevels 的信息。

1.5.5 停止 daemon 服務(wù)

Debian 發(fā)行版非常注重系統(tǒng)安全,并期望系統(tǒng)管理員能擔(dān)此重任。它將系統(tǒng)的易用性放在了第二位,許多 daemon 服務(wù)都定位在最高安全級別,因而,默認(rèn)安裝狀態(tài)下系統(tǒng)只啟動最少的(甚至沒有)可用的服務(wù)。

如果拿不定把握(有關(guān) Exim、DHCP.。。),可執(zhí)行 ps aux 或檢查 /etc/init.d/* 和/etc/inetd.conf 下的內(nèi)容,還可以使用 用 PAM 來控制登錄, 第 9.2.1 節(jié) 中提到的方法檢查/etc/hosts.deny。pidof 命令也很有用(參閱 pidof(8))

在最近的 Debian 系統(tǒng)中,默認(rèn)狀態(tài)下 X11 不允許 TCP/IP(遠(yuǎn)程)連接。參閱 在 TCP/IP 中使用 X, 第 9.4.1 節(jié),使用 SSH 進(jìn)行 X 傳送也是禁用的,參閱 聯(lián)接遠(yuǎn)程的 X 服務(wù)器 – ssh, 第 9.4.8 節(jié)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 軟件包
    +關(guān)注

    關(guān)注

    0

    文章

    104

    瀏覽量

    11626
  • Debian
    +關(guān)注

    關(guān)注

    0

    文章

    75

    瀏覽量

    1206
收藏 人收藏

    評論

    相關(guān)推薦

    Linux環(huán)境下如何管理Python包管理工具

    Linux環(huán)境下,需要對軟件包進(jìn)行安裝、卸載、升級和查詢等操作,包含這些操作的工具,稱為包管理工具。
    發(fā)表于 08-22 15:14 ?676次閱讀
    Linux環(huán)境下如何<b class='flag-5'>管理</b>Python<b class='flag-5'>包管理</b>工具

    RT-Thread Studio中的RT-Thread Setting中已經(jīng)有軟件包管理和組件服務(wù)管理了,那還需要env工具嗎?

    RT-Thread Studio中的RT-Thread Setting中已經(jīng)有軟件包管理和組件服務(wù)管理了,那還需要env工具嗎,如果也使用env工具那不是和RT-Thread Setting中的管理沖突了?
    發(fā)表于 02-23 07:36

    rpm軟件包使用

    1-8-rhel7-軟件包管理
    發(fā)表于 08-09 09:56

    命令終端的常用操作有哪些?軟件包管理機(jī)制是什么

    一.命令終端(terminal)常用操作:ctrl+shift +t,在終端上打開多個標(biāo)簽ctrl+alt+t,在終端上打開另外一個終端二.deb軟件包管理1.Debian 軟件包管理
    發(fā)表于 12-21 06:38

    TB-RK3588x預(yù)裝的debian11常用軟件包介紹

    1、TB-RK3588x預(yù)裝的debian11常用軟件包系統(tǒng)軟件包TB-RK3588x預(yù)裝的debian11內(nèi)預(yù)置了以下常用到的各種軟件包。
    發(fā)表于 06-16 17:55

    linux基礎(chǔ)(軟件包管理)

    介紹linux下軟件包主要的安裝方式:1 命令行安裝 2 圖像界面安裝 3 源代碼編譯安裝等
    發(fā)表于 03-25 14:01 ?3次下載

    debian安裝教程

    如果你使用Debian軟件包管理器來管理Linux軟件,應(yīng)該詳細(xì)了解Debian軟件倉庫的原理,
    的頭像 發(fā)表于 02-23 09:14 ?1.1w次閱讀

    Linux教程之如何進(jìn)行軟件包管理

    軟件包管理器(RPM)是開放打包系統(tǒng),在Red Hat Linux 里,因為有了Red Hat PackageManager(Red Hat 軟件包管理器),而使得安裝和升級軟件包輕松簡單。RPM
    發(fā)表于 11-30 16:36 ?6次下載

    Linux Debian 11 Bullseye發(fā)布暫定軟件包凍結(jié)日期計劃

    Debian開發(fā)團(tuán)隊發(fā)布了下一個主要版本Debian 11 Bullseye的暫定軟件包凍結(jié)日期計劃。
    的頭像 發(fā)表于 03-13 14:18 ?3653次閱讀
    Linux <b class='flag-5'>Debian</b> 11 Bullseye發(fā)布暫定<b class='flag-5'>軟件包</b>凍結(jié)日期計劃

    開源軟件包管理升級的多目標(biāo)優(yōu)化方法

    近年來,開源軟件包管理成為軟件產(chǎn)品重用的一種普遍方式,尤其是在Linuⅹ發(fā)行版操作系統(tǒng)領(lǐng)域。其中,軟件升級題是軟件包管理工具必須要解決的關(guān)鍵挑戰(zhàn)之一。
    發(fā)表于 05-19 10:58 ?0次下載

    如何更新存儲庫簽名密鑰

      為了最好地確保 RPM 和 Debian 軟件包存儲庫的安全性和可靠性, NVIDIA 從 2022 年 4 月 27 日開始更新并輪換apt、dnf/yum和zypper軟件包管理器使用的簽名密鑰。
    的頭像 發(fā)表于 05-07 10:50 ?1522次閱讀

    什么是Linux軟件包,如何管理它們

    現(xiàn)代類 Unix 操作系統(tǒng)都提供了一個集中的軟件包管理機(jī)制,以幫助用戶搜索、安裝和管理軟件。而軟件通常以包的形式存儲在倉庫中,對軟件包的使用和管理
    的頭像 發(fā)表于 02-06 14:59 ?1477次閱讀

    在Linux中如何查找軟件包版本

    中找到軟件包版本,例如 Alpine Linux、Arch Linux 及其衍生產(chǎn)品、Debian 及其衍生產(chǎn)品、RHEL 及其衍生產(chǎn)品。
    的頭像 發(fā)表于 05-12 16:33 ?3103次閱讀

    華為云 CodeArts?Artifact:數(shù)字化時代軟件包管理的領(lǐng)航者

    隨著數(shù)字化浪潮的席卷,企業(yè)正在經(jīng)歷一場深刻的變革,而軟件包管理作為數(shù)字化轉(zhuǎn)型的關(guān)鍵環(huán)節(jié)備受矚目。在這個背景下,華為云 CodeArts?Artifact 應(yīng)運而生,不僅僅是一款軟件包管理工具,更是
    的頭像 發(fā)表于 12-11 12:06 ?1313次閱讀
    華為云 CodeArts?Artifact:數(shù)字化時代<b class='flag-5'>軟件包管理</b>的領(lǐng)航者

    解鎖數(shù)字化時代的軟件包管理利器—華為云 CodeArts Artifact

    在數(shù)字化浪潮中,軟件開發(fā)的速度和規(guī)模不斷增長,因此對于高效、安全的軟件包管理工具的需求也愈發(fā)迫切。華為云 CodeArts?Artifact 在此背景下應(yīng)運而生,作為一款全面、高效的制品倉庫服務(wù)
    的頭像 發(fā)表于 12-11 12:07 ?1306次閱讀
    解鎖數(shù)字化時代的<b class='flag-5'>軟件包管理</b>利器—華為云 CodeArts Artifact