首頁 > 軟體

Debian GNU/Linux 包管理錦囊妙計

2020-06-16 17:35:08

作為一個資深的 Debian GNU/Linux(後文簡稱“Debian”)粉,筆者可是私藏了不少既實用又鮮為人知的錦囊妙計哦。獨樂樂不如眾樂樂,現從中擷取幾條分享給大家,希望對各位有所幫助。

當包管理工具被玩壞……

設想有一天你不小心誤刪了 dpkg,因為它是 Debian 中最底層的包管理工具,所以然後你將杯具地發現從此再也不能成功安裝 Debian 包。別慌,如果你了解一點兒有關 .deb 二進位制包的知識,那麼可以使用如下方法解決:

  1. 從 Debian 官方網站下載 dpkg 的 .deb 包,形如 dpkg_1.17.26_amd64.deb。其中,amd64 說明該包支援 64 位架構。若你的 Debian 系統為其它架構,請自行選擇合適的包檔案。

  2. 先用 ar 工具對 .deb 解包:

    ar x dpkg_1.17.26_amd64.deb
    

    可能大家對於 tar 比較熟悉,這個 ar 又是什麼東東?ar 是一個比 tar 還要古老的歸檔工具,這裡的 x 指令是提取的意思,跟 tar 類似。

  3. 再用 tar 將所需檔案展開到 /(根目錄):

    tar -C / -p -xzf data.tar.gz
    

至此,筆者已經將 dpkg 安裝到 Debian 系統。莫名消失的 dpkg 重新回到身邊,你是否覺得應倍加珍惜呢?也許你會多留一個心眼,為什麼這樣做有效?讓我們回到基礎來談一談吧。

當我們用 ar 解包 .deb 後,一般將會得到下列三個檔案:

-rw-r--r-- 1 root root    9543 Aug 16 08:26 control.tar.gz
-rw-r--r-- 1 root root 2980910 Aug 16 08:26 data.tar.gz
-rw-r--r-- 1 root root       4 Aug 16 08:26 debian-binary
  • debian-binary:用來指明 .deb 檔案所用版本的文字檔案,本例為 2.0。
  • control.tar.gz:該存檔檔案包含與包相關的各種元資訊,像是包名稱及版本。其它一些資訊則是包管理工具所需要的,據此能夠決定是否可安裝或解除安裝。如果你對此充滿好奇,那麼不妨用 tar 將其解包細看。

    -rw-r--r-- 1 root root    87 Nov 26  2015 conffiles
    -rw-r--r-- 1 root root  2621 Nov 26  2015 control
    -rw-r--r-- 1 root root 10133 Nov 26  2015 md5sums
    -rwxr-xr-x 1 root root  1965 Nov 26  2015 postinst
    -rwxr-xr-x 1 root root  1500 Nov 26  2015 postrm
    -rwxr-xr-x 1 root root  2126 Nov 26  2015 preinst
    -rwxr-xr-x 1 root root  4838 Nov 26  2015 prerm
    
  • data.tar.gz:這個存檔檔案包含要從包中提取的所有檔案,比如可執行檔案、文件等等。值得一提的是,除了末尾的 .gz 之外,Debian 有時也會使用其它壓縮格式:data.tar.bz2 是 bzip2、data.tar.xz 為 XZ。

    ./var
    ./var/lib
    ./var/lib/dpkg
    ./var/lib/dpkg/updates
    ./var/lib/dpkg/alternatives
    ./var/lib/dpkg/info
    ./var/lib/dpkg/parts
    ./usr
    ./usr/share
    ./usr/share/locale
    ./usr/share/dpkg
    ./usr/share/dpkg/cputable
    ./usr/share/dpkg/ostable
    ./usr/share/dpkg/triplettable
    ./usr/share/dpkg/abitable
    ./usr/share/doc
    ./usr/share/doc/dpkg
    ./usr/share/doc/dpkg/changelog.gz
    ./usr/share/doc/dpkg/AUTHORS
    ./usr/share/doc/dpkg/changelog.Debian.gz
    ./usr/share/doc/dpkg/THANKS.gz
    ./usr/share/doc/dpkg/usertags.gz
    ./usr/share/doc/dpkg/README.feature-removal-schedule.gz
    ./usr/share/doc/dpkg/copyright
    ./usr/share/lintian
    ./usr/share/lintian/overrides
    ./usr/share/lintian/overrides/dpkg
    ./usr/share/man
    ./usr/bin
    ./usr/bin/dpkg-trigger
    ./usr/bin/dpkg-deb
    ./usr/bin/dpkg
    ./usr/bin/dpkg-query
    ./usr/bin/dpkg-split
    ./usr/bin/dpkg-maintscript-helper
    ./usr/bin/dpkg-divert
    ./usr/bin/update-alternatives
    ./usr/bin/dpkg-statoverride
    ./usr/sbin
    ./usr/sbin/dpkg-statoverride
    ./usr/sbin/update-alternatives
    ./usr/sbin/dpkg-divert
    ./sbin
    ./sbin/start-stop-daemon
    ./etc
    ./etc/dpkg
    ./etc/dpkg/dpkg.cfg.d
    ./etc/dpkg/dpkg.cfg
    ./etc/alternatives
    ./etc/alternatives/README
    ./etc/cron.daily
    ./etc/cron.daily/dpkg
    ./etc/logrotate.d
    ./etc/logrotate.d/dpkg
    

同時安裝和移除包

這是筆者最為喜歡的一條妙計。對於 apt/apt-get/aptitude installapt/apt-get/aptitude remove 來安裝/移除包,想必大家都比較熟悉,可是你知道它們還能同時安裝並移除包麼?

因為筆者同時也是一位不折不扣的 Vim 粉,所以會執行如下命令來安裝 Vim,但這條指令的作用絕不僅僅於此:

apt install vim emacs-

該指令在將 Vim 安裝到 Debian 中的同時也會移除 Emacs。emacs 後面的 - 起移除作用。

與此等效的命令是:

apt remove emacs vim+

vim 之後的 + 為安裝之意。

阻止升級某些包

在執行系統更新時,有時候筆者想阻止某些個別的包升級, Debian 下可以使用 apt-mark 命令。

  • 阻止包

    apt-mark hold <pkg>
    

    比如,阻止升級 Perl,執行 apt-mark hold perl 即可。

  • 取消阻止

    如果不想阻止了,那麼可以通過 apt-mark unhold 取消:

    apt-mark unhold <pkg>
    
  • 顯示已阻止的包

    要檢視已經被阻止的包,則可以執行:

    apt-mark showhold
    

快取代理包

雖然 Debian 官方針對世界各地提供了包倉庫的映象,但有時候還是會感覺下載的速度不夠理想。另外,如果你有多個 Debian 系統,那麼架設一個原生的包快取代理服務顯然是一種既經濟又高效的方式。

APT 包管理工具除了支援標準的 HTTP/FTP 代理方法外,Debian 也具有專門的軟體來搭建代理快取伺服器。在此,筆者向各位推薦 Approx。你可以將 Approx 看作是遠端倉庫的映象,只不過這個映象在本地而已。

Approx 的使用方法很簡單,按如下步驟執行即可:

  • 安裝 Approx

    apt install approx
    
  • 設定 Approx

    Approx 的組態檔存於 /etc/approx/approx.conf,將下列地址行前的注釋去掉:

    # <name> <repository-base-url>
    debian   http://ftp.debian.org/debian
    security http://security.debian.org
    
  • 設定 sources.list

    Approx 預設監聽 9999 埠,調整需要使用代理快取的 Debian 系統的 sources.list 檔案,將其指向 Approx 所在機器的域名或 IP:

    deb http://192.168.0.2:9999/debian jessie main contrib non-free
    deb http://192.168.0.2:9999/security jessie/updates main contrib non-free
    

在多台系統安裝相同的包

筆者有兩台 VPS 都跑著 Debian 系統,它們的基本環境幾乎一致。為了方便省事,在一台系統上裝好所需要的包之後,將其匯出為包列表:

dpkg --get-selections > installed_pkgs.txt

接著,把匯出的列表檔案 installed_pkgs.txt 傳輸到另一台系統。並執行以下操作:

# 更新 dpkg 的包資料庫
apt-cache dumpavail > avail.txt
dpkg --merge-avail avail.txt
# 更新 dpkg 的包列表
dpkg --set-selections < installed_pkgs.txt
# 安裝選擇的包
apt-get dselect-upgrade

若有其它 Debian 系統,則依法炮製即可。

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-08/134378.htm


IT145.com E-mail:sddin#qq.com