[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ A ] [ 下一頁 ]

Debian 快速參考手冊
第 3 章 - Debian 套件管理系統


為了減少 Debian 檔案庫 (repository) 的網路負擔,請在使用 APT 下載套件時,確認一下是否使用 squid 設定了本地端的 HTTP proxy,如果需要的話,也請在 /etc/apt/apt.conf 中設定 http 的值。這樣可大幅的改善網路升級的效能,尤其是當 LAN 中有多台 Debian 機器同時升級時。

儘管 apt_preferences(5) 的 pinning 功能十分強大,但它並不能解決所有的相依性問題,因為相依性的需求總傾向於拉進其它較新版本的基本套件。

chroot 的方法非常適合於需要同時結合系統的穩定性和使用最新版軟體的情況。

本章是基於 Woody 系統所撰寫的,但大部分資訊均適用於 Potato 系統 (除了 apt_preferences(5)/etc/apt/preferences 的相關主題之外) 。


3.1 介紹

如果你沒精力閱讀完所有的開發文件,那麼先看看本章的內容,然後就開始體驗 Debian testing/unstable 的威力吧 :-)


3.1.1 主要的工具

     dselect   – 使用選單介面的套件管理工具 (最上層)
     dpkg      – 安裝套件 (以套件檔為中心)
     apt-get   – 安裝套件 (以套件存檔區 (archive) 為中心, CLI APT)
     tasksel   – 安裝 task (一組套件)
     aptitude  – 安裝套件 (套件 & task, 使用 ncurses 的 APT 工具)
     deity     – 另一個使用 ncurses 的 APT 工具
     synaptic, gsynaptic – 可供替代的圖形介面 APT 工具

這些並不是同級的工具。 dselect 運行於 APT (命令列指令是 apt-get ) 和 dpkg 之上。

APT 使用 /var/lib/apt/lists/* 來追蹤可用的套件,而 dpkg 則是使用 /var/lib/dpkg/available 。如果直接用 apt-get 或類似工具如 aptitude 來安裝套件的話,別忘了要使用 dselect 的 [U]pdate 選項,或在執行 dselect updatetaskseldpkg -l 前,以命令列執行 "dselect update" 來更新 /var/lib/dpkg/available

在處理套件相依性的方式上, apt-get 會自動搜尋下載 depends 的套件,但不會理睬 recommendssuggests 的套件,而 dselect 在套件的選擇方面提供了選單方式的操作,對 dependsrecommendssuggests 三種套件均給出選取的提示。 aptitude 則提供了選項能自動下載安裝所有 dependsrecommendssuggests 的套件。


3.1.2 方便的工具

     apt-cache         - 檢查本地端暫存的套件 archive 。
     dpkg-reconfigure  - 重新設定一個已經安裝的套件
                         (如果它是使用 debconf 的話)
     dpkg-source       - 管理套件源碼檔案
     dpkg-buildpackage - 自動重新編建套件檔案
     ...

3.2 Debian 套件管理的基礎

你可以用 task 的方式來安裝一整組的套件,還可以使用下列所介紹的套件管理工具來個別安裝套件或升級系統。


3.2.1 用 taskselaptitude 來安裝 task

taskselDebian Task 安裝工具,它在系統安裝的過程中作為一種"簡易"的安裝方式。

如果你希望安裝由多個套件所共同組成的常見功能,最好的辦法就是使用這種方式來安裝。使用如下的命令:

     # dselect update
     # tasksel

aptitude 也可以使用 task。用它不僅可以選擇 tasks 還可以對 task 以選單的方式來去除選取個別的套件。


3.2.2 設定 APT 系統

如果你要用這裡所說的混合系統的話,可能會造成一些套件相依性的衝突。最好不要用混合的系統。接下來是給喜歡實驗的人應知道的風險。

為了要在跟隨 testing distribution 時作出有選擇性的升級,可以用 將 APT 轉換到 Woody 版本, 第 2.1 節 中描述的方法來設定 APT 系統 (>Woody),使用 apt_preferences(5) 的功能。

首先,在 /etc/apt/sources.list 中加入 stabletestingunstable 的來源,接著編輯 /etc/apt/preferences 以設定合適的 Pin-Priority 。 [1]

     Package: *
     Pin: release a=stable
     Pin-Priority: 500
     
     Package: *
     Pin: release a=testing
     Pin-Priority: 600
     
     Package: *
     Pin: release a=unstable
     Pin-Priority: 50

3.2.3 dselect

當你啟動程式時, dselect 會自動選取所有 "Required" 、 "Important" 和 "Standard" 分類的套件。在 Potato 系統中,某些大型的應用程式像 teTeX 和 Emacs 屬於這些套件中,而在初次安裝系統時最好手動取消對它們的選取 (輸入 `_') 。在 Woody 中,這些程式則被移入 "Optional" 的套件分類。

dselect 的使用介面有點怪。有四個不太明確的指令 (都是大寫的指令!):

     按鍵        動作
     Q           離開。確認目前所選取的並離開程式。
                 (override dependencies)
     R           回復 (Revert)! I did not mean it.
     D           不管你 (Damn it)!我不管 dselect 怎麼想的。照我的做就是了!
     U           都照建議 (sUggested) 的來做

使用 DQ 可以選擇有衝突的選項。要小心地用這些指令。目前 dselect 是一個成熟的選單式工具,在對 suggestsrecommends 套件分類的選擇控制方面,它提供相當棒的細微操作能力。

/etc/dpkg/dselect.cfg 中加上一行 "expert" 選項以減少干擾。對於速度慢的機器,可以在其它速度快的機器上執行 dselect 先選好套件,然後用 apt-get install 來安裝。

對於 Pin-Priority 沒有提到的套件, dselect 不會理它們。


3.2.4 aptitude

aptitude 是一個類似 dselect 的新選單式套件安裝工具。也可以作為命令列工具 apt-get 的另一種選擇。請參閱 aptitude(1)

aptitude 用單一按鍵指令,通常是小寫字母。

     按鍵        動作
     F10         選單
     ?           按鍵說明
     u           更新套件 archive 資訊
     g           下載並安裝選取的套件
     q           退出目前畫面並儲存修改
     x           退出目前畫面並放棄修改
     Enter       瀏覽某套件的相關訊息

aptitude 提供了選項可自動選取所有 dependsrecommendssuggests 分類的套件。可在 F10 -> Options -> Dependency handling 選單中設定。

aptitude 可存取套件的所有版本。


3.2.5 apt-cacheapt-get 命令

當像之前的例子一樣跟隨著 testing,我們可以下列的指令來管理系統。

在上面的例子中,在apt-get 中使用 -u 選項會列出所有要升級的套件列表,並在動作前請示使用者。下面的作法會使 -u 選項變成預設的動作:

     $ cat >> /etc/apt/apt.conf << .
     // 總是列出要升級的套件 (-u)
     APT::Get::Show-Upgraded "true";
     .

使用 -s 選項則只是做個模擬升級的動作,而不是真正做了升級。


3.2.6 跟隨一個 Debian distribution 的風格

根據你想要跟隨的 Debian 風格,你可以修改 設定 APT 系統, 第 3.2.2 節 中的 /etc/apt/preferences 範例來符合你的需求:

     跟隨 stable :            將 testing 的 Pin-Priority 改為 50
     跟隨 testing :           保持之前的設定
     跟隨 testing(unstable) : 將 unstable 的 Pin-Priority 改為 500
     跟隨 unstable(testing) : 將 unstalbe 的 Pin-Priority 改為 800

A guideline for the choice of Pin-Priority is to move from the top to bottom in the above table as the time moves from a time immediately after a distribution release to a time of freeze for the next release.

注意: 跟隨 Debian 的 testing 風格會有的副作用是安全修正會很慢。

先提醒你,如果你在 Debian 的 stable 中混合使用 testing ,或在 stable 中混合使用 unstable 的話,將會不經意地從 testingunstable 中拉入可能有問題的關鍵套件。

examples subdirectory 中的 preferences.testingpreferences.unstable ,有些範例是在 /etc/apt/preferences 中設定,可將某些關鍵的套件鎖定在較成熟的版本,即使是在跟隨一些非必要套件的較不成熟的版本時。另一方面, preferences.stable 可強迫所有的套件都降級至 stable


3.2.7 將所有套件降級至 stable

要把所有的套件降級至 stable,請依下列來編輯 /etc/apt/preferences 檔:

     Package: *
     Pin: release a=stable
     Pin-Priority: 1001

然後執行 "apt-get upgrade" ,因為 Pin-priority > 1000 的原因,所以會強制降級。警告你,這會在相依性上造成點小問題。


3.2.8 /etc/apt/preferences 概觀

設定 APT 系統, 第 3.2.2 節 中的 /etc/apt/preferences 範例中,第一行的 "Package: *" 表示這一段的指令會作用在所有套件上。你可以把 "*" 換成某個套件名稱來為某個特定的套件設定 Pin-Priority 。

在第二行中, "Pin: release a=stable" 的意思是 apt-get 會從在其 Release 檔中有 "Archive: stable" 的 archive 來下載 Packages.gz 檔。

在最後一行中的 "Pin-Priority: 500" 則是指定 Pin-Priority 為 500 。

如果多個套件同名的話,系統通常會安裝具有最高 Pin-Priority 的套件。

在這裡, Pin-Priority 的意思是:

如果把 /etc/apt/apt.conf 如下設定,則會有和 --target-release 一樣的效果。

     # echo 'APT::Default-Release "testing";' >> /etc/apt/apt.conf

命令列選項 --target-release/etc/apt/apt.conf 中的設定會取代 /etc/apt/preferences 中的設定。在把玩 /etc/apt/preferences 的時候小心兩者衝突。


3.3 Debian 生存指令

掌握了這些知識,就能讓你享受無窮盡的"升級"了 :-)


3.3.1 檢查 Debian 中的 bugs 並尋求幫助

如你使用某個套件出現問題,在尋求幫助或發送錯誤報告之前請確認查看過下列網站( lynxlinksw3m 都很好用):

     $ lynx http://bugs.debian.org/
     $ lynx http://bugs.debian.org/package-name  # 如果你知道套件名稱
     $ lynx http://bugs.debian.org/bugnumber     # 如果你知道錯誤序號

在 Google (www.google.com) 中使用關鍵字 "site:debian.org" 搜索。

如有疑問,可閱讀說明文件。設定 CDPATH 如下:

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

並輸入

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

3.3.2 APT 升級的錯誤排除方法

在升級 unstable/testing 時可能會遇到在 升級 Debian 系統, 第 2.3 節 所描述的套件相依性問題。在大多數情況下,是因為無法滿足你將要升級的套件所需要的相依性問題。這個問題可用下面的方法來解決:

     # apt-get dist-upgrade

如果這也沒辦法的話,就重複使用下列之一的方法至到問題自動解決:

     # apt-get upgrade -f         # 即使遇到錯誤也繼續升級
     ... 或
     # apt-get dist-upgrade -f    # 即使遇到錯誤也繼續 dist-upgrade

有些升級用的 script 的確有問題,所以會持續出現狀況。通常要解決這個狀況,你最好能檢查一下這些討厭套件中的 /var/lib/dpkg/info/packagename.{post-,pre-}{install,removal} script ,並執行:

     # dpkg --configure -a    # 設定所有部分安裝的套件

如果 script 抱怨它找不到設定檔的話,在 /etc 中找找對應的設定檔。如果你找到的是個有 .new 的副檔名(或是類似的東西),就把它的後綴去除掉(用 mv )。

在安裝 unstable/testing 系統時也可能遇到相依性問題。可用這個方法巧妙的解決:

     # apt-get install -f package # override broken dependencies

要修正這些問題,另一個可用的方法是使用 equivs 套件。請參閱 /usr/share/doc/equivs/README.Debian


3.3.3 使用 dpkg 來救援

在一個受損的系統上,想要針對崩潰的 dselect (APT) 進行回復的話,可以不透過 APT 而使用 dpkg 來達成:

     # cd /var/cache/apt/archives
     # dpkg -i libc6* libdb2* perl*
     # dpkg -i apt* dpkg* debconf*
     # dpkg -i *  # 直到沒有錯誤發生

如果套件遺失的話,則可由 mirror sites 取得:

     # mc            # 使用 "FTP link" 指向 Debian FTP 伺服器

現在,在 HTTP/FTP 伺服器上的實際套件可能不是在傳統的 /dist 目錄,而是在新的 /pool 目錄下。

然後,用下面的方法安裝:

     # dpkg -i /var/cache/apt/archives/packagefile.deb

對於有問題的相依性,可以修正它,或是用:

     # dpkg --ignore-depends=package1,... -i packagefile.deb
     # dpkg --force-depends -i packagefile.deb
     # dpkg --force-depends --purge package
     # dpkg --force-confmiss -i packagefile.deb # Install missing conffile

3.3.4 回復套件的選取狀態的資料

不論是什麼原因,如果 /var/lib/dpkg/status 亂掉了的話,則 Debian 系統會失去套件的選取狀態的資料,這是很糟糕的事。到 /var/lib/dpkg/status-old/var/backups/dpkg.status.* 找找看舊的 /var/lib/dpkg/status 檔。

因為 /var/backups/ 這個目錄中有很多重要的系統資料,所以把它放到分開的分割區會是個不錯的主意。

如果連舊的 /var/lib/dpkg/status 檔也找不到了,你仍可以從 /usr/share/doc/ 目錄來回復這些資料。

     # ls /usr/share/doc | \
       grep -v [A-Z] | \
       grep -v '^texmf$' | \
       grep -v '^debian$' | \
       awk '{print $1 " install"}' | \
       dpkg --set-selections
     # dselect --expert # 重新安裝系統,如果需要的話去除一些選取

3.3.5 在 /var 崩潰後救援系統

因為 /var 目錄下包含了常被更動的資料,如 mail ,所以比較容易會有損壞。 把它放到獨立的分割區可以減少風險。如果災難發生了,你必需重建 /var 以回復 Debian 系統。

從相同或較舊版本的最簡化的 Debian 系統中取得 /var 目錄內容的架構,例如 var.tar.gz,將它放入受損系統的根目錄,然後

     # cd /
     # mv var var-old      # 如果還留下有用的資料的話
     # tar xvzf var.tar.gz # 使用 Woody 架構的檔案
     # aptitude            # 或是用 dselect

上述步驟應可使系統恢復工作。使用 回復套件的選取狀態的資料, 第 3.3.4 節 中描述的技術來加快套件選取資料的恢復。 ([FIXME] :這個流程需要更多的實驗來驗證。)


3.3.6 把套件安裝到一個無法開機的系統

用 Debian 救援磁片/CD 或是一個多重開機的 Linux 系統的其它分割區來開機進入 Linux 。在 /target 掛上這個無法開機的系統,並使用 dpkg 的 chroot 安裝模式。

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

然後設定並解決問題。

By the way, if a broken lilo is all that prevents booting, you can boot using a standard Debian rescue disk. At boot prompt, assuming the root partition of your Linux installation is in /dev/hda12 and you want runlevel 3, enter:

     boot: rescue root=/dev/hda12 3

Then you are booted into an almost fully functional system with the kernel on floppy disk. (There may be minor glitches due to lack of kernel features or modules.)


3.3.7 如果 dpkg 指令壞了怎麼辦

如果 dpkg 有問題,就不能安裝任何 .deb 檔了。下列的流程可幫助你來修復這個情況。(在第一行中,你可以把 "links" 換成你喜歡的瀏覽器指令。)

     $ 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 xzfv data.tar.gz

如果是 i386 的話,也可以用 http://packages.debian.org/dpkg


3.4 Debian 神技之指令

經過這些指令的啟示,你將可由無休止的升級地獄中解放出來,到達 Debian 涅盤。 :-)


3.4.1 檔案中的資訊

尋找特定檔案所屬的套件:

     $ dpkg {-S|--search} pattern # 在已安裝套件中尋找某個 pattern
     $ zgrep -e pattern /local/copy/of/debian/woody/Contents-i386.gz
                  # 在 debian archive 中尋找符合某個檔名 pattern 的檔案

或是使用特殊的套件命令:

     # apt-get install dlocate  
                      # conflicts with slocate (secure version of locate)
     $ dlocate filename         # dpkg -L 和 dpkg -S 的快速版
     ...
     # apt-get install auto-apt # on-demand package installation tool
     # auto-apt update          # 建立 auto-apt 的 db 檔
     $ auto-apt search pattern  
                     # 尋找符合某個 pattern 的套件,不論是否安裝

3.4.2 套件的資訊

從套件 archive 中尋找並顯示資訊。編輯 /etc/apt/sources.list 以確定 APT 指向適合的 archive(s)。如果想了解 testing/unstable 中的相對應套件與當前系統安裝的套件有何差別,使用 apt-cache policy—會好得多。

     # apt-get   check           # 更新暫存區並檢查損壞的套件
     $ apt-cache search  pattern # 搜尋套件的文字敘述
     $ apt-cache policy  package # 套件的 priority/dists 資訊
     $ apt-cache show -a package # show description of package in all dists
     $ apt-cache showsrc package # show description of matching source package
     $ apt-cache showpkg package # 套件的除錯資訊
     # dpkg  --audit|-C          # search for partially installed packages
     $ dpkg {-s|--status} package ... # 已安裝套件的敘述
     $ dpkg -l package ...       # 已安裝套件的狀態 (一行一個)
     $ dpkg -L package ...       # 列出套件安裝的檔案

apt-cache showsrc 在 Woody release 時沒有文件,但是會動 :)

你也可以在下列的地方找到套件資訊 (我用 mc 來瀏覽) :

     /var/lib/apt/lists/*
     /var/lib/dpkg/available

比較下面的檔案可以正確的了解最近幾個安裝的過程對系統造成了那些改變。

     /var/lib/dpkg/status
     /var/backups/dpkg.status*

3.4.3 Unattended installation with APT

For an unattended installation,請在 /etc/apt/apt.conf 加入一行:

     Dpkg::Options {"--force-confold";}

這等同於執行 apt-get -q -y packagename 。因為這個作法是對所有的提示都回答 "yes" 的,所以可能會造成問題,請小心使用。參閱 apt.conf(5)dpkg(1)

你可以在稍後用 重新設定已安裝的套件, 第 3.4.4 節 的方法重新設定特定的套件。


3.4.4 重新設定已安裝的套件

使用下面的指令來重新設定任何已安裝的套件。

     # dpkg-reconfigure --priority=medium package [...]
     # dpkg-reconfigure --all   # 重新設定所有的套件
     # dpkg-reconfigure locales # 產生額外的 locales
     # dpkg-reconfigure --p=low xserver-xfree86 # 重新設定 X server

如果你要永久設定 debconf 為對話窗模式,請對 debconf 進行重設定。

有些程式是用做特殊設定的 scripts 。

     apt-setup     - 建立 /etc/apt/sources.list
     install-mbr   - 安裝 Master Boot Record manager
     tzconfig      - 設定本地時區
     gpmconfig     - 設定 gpm mouse daemon
     sambaconfig   - 在 Potato 時設定 Samba (Woody 時使用 debconf)
     eximconfig    - 設定 Exim (MTA)
     texconfig     - 設定 teTeX
     apacheconfig  - 設定 Apache (httpd)
     cvsconfig     - 設定 CVS
     sndconfig     - 設定音效系統
     ...
     update-alternatives - 設定預設的指令, e.g., vim as vi
     update-rc.d         - System-V init script management
     update-menus        - Debian 選單系統
     ...

3.4.5 移除和清除套件

移除套件但保留它的設定檔:

     # apt-get remove package ...
     # dpkg  --remove package ...

移除套件並清除所有的設定檔:

     # apt-get remove --purge package ...
     # dpkg    --purge        package ...

3.4.6 維持舊的套件

舉例來說,下面的指令可以在 dselectapt-get -u upgrade package 時維持 libc6libc6-dev 的版本:

     # echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections

但這個方法擋不住 apt-get -u install package 。如果要在 apt-get -u upgrade packageapt-get -u dist-upgrade 時自動降級來維持版本的話,在 /etc/apt/preferences 中加入:

     Package: libc6
     Pin: release a=stable
     Pin-Priority: 2000

在這裡的 "Package:" 不能用類似 "libc6*" 的用法。如果你要所有有關 glibc 的二進位套件都維持同步的話,你需要明確地把它們都列出來。

下面的指令可以列出被維持住的套件:

     dpkg --get-selections "*"|grep -e "hold$"

3.4.7 stable/testing/unstable 混合系統

apt-show-versions 能以 distribution 來列出可用的套件版本。

     $ apt-show-versions | fgrep /testing | wc
     ... 在 testing 中的套件數目
     $ apt-show-versions -u
     ... 列出可升級的套件
     $ apt-get install `apt-show-versions -u -b | fgrep /unstable`
     ... 將所有 unstalbe 的套件升級至各自最新的版本

3.4.8 刪除暫存的套件檔

用 APT 安裝的套件會在 /var/cache/apt/archives 留下暫存的套件檔。這些檔案是可以刪除的。

     # apt-get autoclean # 只刪除無用的套件檔
     # apt-get clean     # 刪除所有的暫存套件檔

3.4.9 記錄/複製系統設定

要把套件選取狀態複製到本地端:

     $ dpkg --get-selections "*" >myselections   # 或使用 \*

"*" 使 myselections 也包含標記為 "purge" 的套件。

你可將這個檔案傳到另一台電腦,並用下列的方法把它安裝起來:

     # dselect update
     # dpkg --set-selections <myselections
     # apt-get -u dselect-upgrade    #  dselect install

3.4.10 把套件引入 stable 系統

stable 系統進行部分升級,並在些環境下以重編建的方式來使用套件,這個方法是可以期待的。這個方法可以避免因相依性而對大量套件升級。首先,將下列來源加入 /etc/apt/sources.list

     deb-src http://http.us.debian.org/debian testing \
      main contrib non-free
     deb-src http://non-us.debian.org/debian-non-US testing/non-US \
      main contrib non-free
     deb-src http://http.us.debian.org/debian unstable \
      main contrib non-free
     deb-src http://non-us.debian.org/debian-non-US unstable/non-US \
      main contrib non-free

因為螢幕輸出的限制,上面 deb-src 中每一項都分成了2行,實際上在 sources.list 中它們都應該是單行。

然後取得源碼套件並編建出本地端的套件:

     $ apt-get update  # 更新源碼套件的搜尋列表
     $ apt-get source package
     $ dpkg-source -x package.dsc
     $ cd package-version
       ... 檢查必需的套件 ( 在 .dsc 檔中的 Build-depends) 並也一起安裝。
           你也需要 "fakeroot" 套件。
     
     $ dpkg-buildpackage -rfakeroot 
     
       ... 或是 (no sig)
     $ dpkg-buildpackage -rfakeroot -us -uc # 如果需要的話,再使用 "debsign" 
     
       ... 然後就安裝吧
     $ su -c "dpkg -i packagefile.deb"

通常,你會需要安裝一些以 "-dev" 結尾的套件以滿足相依性的要求。 debsigndevscripts 套件中。 auto-apt 可以輕鬆解決相依性的問題。請使用 fakeroot 以避免不必要的 root 帳號使用。

在 Woody 中,這些相依性可被簡化。例如編譯 pine 源碼套件:

     # apt-get build-dep pine
     # apt-get source -b pine

3.4.11 本地端的套件 archive

為了要建立相容於 APT 和 dselect 系統的本地端套件,需要建立 Packages 檔,而且套件檔需要被放在特別的檔案目錄樹中。

可以用下列的方法來建立類似官方 Debian archive 的本地端 deb repository :

     # apt-get install dpkg-dev
     # cd /usr/local
     # install -d pool # 套件實體是放在這裡
     # install -d dists/unstable/main/binary-i386
     # ls -1 pool | sed 's/_.*$/ priority section/' | uniq > override
     # editor override # 調整 prioritysection
     # dpkg-scanpackages pool override /usr/local/ \
        > dists/unstable/main/binary-i386/Packages
     # cat > dists/unstable/main/Release << EOF
     Archive: unstable
     Version: 3.0
     Component: main
     Origin: Local
     Label: Local
     Architecture: i386
     EOF
     # echo "deb file:/usr/local unstable main" \
        >> /etc/apt/sources.list

不然,你也可以用一個快速但骯髒的方法來建立本地端的 deb repository :

     # apt-get 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

把這些目錄開放給 HTTP 或 FTP 存取,並在 /etc/apt/sources.list 中設定相對應的位址,就可以遠端存取這些 archives 了。


3.4.12 轉換或安裝外來的二進位套件

alien 可將 Redhat rpm , Stampede slp , Slackware tgz 和 Solaris pkg 的二進位套件檔案格式轉成 Debian 的 deb 套件。如果你不要使用你已安裝在系統中的套件,而想裝來自其他 Linux distribution 的套件的話,你可以使用 alien 來將其轉成你喜愛的套件格式並安裝。 alien 也支援 LSB 套件。


3.4.13 驗證已安裝的套件檔

debsums 以 MD5 偵錯碼的方式來驗證已安裝的套件檔。有些套件並沒有可用的 MD5 偵錯碼。有個可能的暫時性的修正方法提供給系統管理員:

     # cat >>/etc/apt/apt.conf.d/90debsums
     DPkg::Post-Install-Pkgs {"xargs /usr/bin/debsums -sg";};
     ^D

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


3.5 Debian 其它特別之處


3.5.1 dpkg-divert 指令

檔案移轉 是強迫 dpkg 把某個檔案安裝在一個被轉移過的位置,而非預設的位置。當 Debian 套件的 scripts 發生衝突時,可用移轉來將檔案移開。系統管理者也可以用移轉來多載套件的設定檔,或是用在當安裝套件新版本時,包括有些沒被標記為 conffiles 而需要被 dpkg 所保留的檔案。。

     # dpkg-divert [--add]  filename # 加入 "diversion"
     # dpkg-divert --remove filename # 刪除 "diversion"

平時不要請使用 dpkg-divert ,除非是必要的情況下。


3.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.

3.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 系統中的項目都以符號連結的方式放在 /etc/alternatives

想設定你喜歡的 X 視窗環境的話,請用 update-alternatives 來修改 /usr/bin/x-session-manager/usr/bin/x-window-manager

/bin/sh 則就直接符號連結至 /bin/bash/bin/dash 。如果要相容於舊有且 bash 化的 script 的話,用 /bin/bash 會比較好點,但用 /bin/dash 可強迫訓練你與 POSIX 相容。升級至 2.4 Linux kernel 時傾向於將其設定至 /bin/dash


3.5.4 System-V init 和 runlevels

開機時預設的 runlevel 可在 /etc/inittab 中設定。

不同於其他的 distributions , Debian 將管理 runlevel 的責任全放在系統管理者身上。在 Debian 上管理 System-V 風格的 init 是傾向於使用 update-rc.d 的 scripts 。

想要在 runlevel 1,2,3 時以 20 的 sequencing priority number (normal) 來執行 /etc/init.d/name ,而在 runlevel 4,5 停止的話,可執行下面指令:

     # update-rc.d name start 20 1 2 3 . stop 20 4 5 .

想要移除在 init.d 中的某個 script 的符號連結的話,可執行下面的指令:

     # update-rc.d -f name remove

在編輯 runlevels 時我偷吃點步。我用 mc 的 shell 提示符號中用 Alt-Enter 來複製連結,並用 mv 指令來手動編輯。舉個例子:

     # mv S99xdm K99xdm # 停止 xdm (X display manager)

我甚至會用點撇步來停掉 daemon ,就是在 init.d script 的開頭加上 exit 0 。 These are conffiles after all.


3.5.5 停止 daemon 服務程式

Debian distribution 非常注重系統安全,並期望系統管理員能擔此重任。它將系統的易用性放在了第二位,許多 daemon 伺服程式都定位在最高安全等級,因而在預設的安裝狀態下,系統只啟動最少的(甚至沒有)可用的服務程式。

如果你不確定你執行了什麼服務程式(像 Exim , DHCP …)的話,執行 ps aux 或檢查一下 /etc/init.d/*/etc/inetd.conf 的內容。同時也確認一下 /etc/hosts.deny 。而 pidof 指令也是很有用的(請參閱 pidof(8))。

在最近的 Debian 版本中,預設 X11 是不允許(遠端) TCP/IP 連接的。經由 SSH 來 X forwarding 也是禁止的。


[ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ A ] [ 下一頁 ]

Debian 快速參考手冊

1.07-12, 週三 九月 8 02:54:31 UTC 2004

青木 修 (Osamu Aoki) osamu@debian.org
翻譯者:唐偉清 (Tang Wei-Ching) wctang@csie.nctu.edu.tw
作者, 第 A.1 節