歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Debian GNU/Linux 包管理錦囊妙計

Debian GNU/Linux 包管理錦囊妙計

日期:2017/2/28 13:49:49   编辑:Linux教程

作為一個資深的 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 系統,則依法炮制即可。

Copyright © Linux教程網 All Rights Reserved