Product SiteDocumentation Site

6.9. 自動升級

因為 Falcot Corp 雖有多部電腦但功能陽春,其管理者試圖儘可能地自動升級。必須在無人為介入情況下處理升級事宜。

6.9.1. 組態 dpkg

As we have already mentioned (see sidebar 進一步 避免組態檔的問題), dpkg can be instructed not to ask for confirmation when replacing a configuration file (with the --force-confdef --force-confold options). Interactions can, however, have three other sources: some come from APT itself, some are handled by debconf, and some happen on the command line due to package configuration scripts (sometimes handled by ucf).

6.9.2. 組態 APT

APT 的例子很簡單:-y 選項 (或 --assume-yes) 告訴 APT 面對所有的問題時,答案都是 “yes”。

6.9.3. 組態 debconf

debconf 需要較詳細的說明。此程式原本的設計就是控制給使用者看到的相關性及數量,以及顯示的方法。問題需有最小的優先權;擁有最小優先權以上的問題才顯示。debconf 預設的答案 (由套件維護者設定) 會略過。
The other relevant configuration element is the interface used by the frontend. If you choose noninteractive out of the choices, all user interaction is disabled. If a package tries to display an informative note, it will be sent to the administrator by email.
組態 debconf 時,用到 dpkg-reconfigure 工具,它是來自 debconf 套件;相關的命令是 dpkg-reconfigure debconf。組態值可能是在需要時暫時取代的環境變數 (例如,DEBIAN_FRONTEND 控制介面,如同在 debconf(7) 手冊頁面所述)。

6.9.4. 處理命令列介面

最後一個互動來源,以及最難擺脫的,是 dpkg 執行的組態腳本。不幸的是,沒有標準的解法且沒有較佳的答案。
通常的做法是,把標準的輸入由空白內容的 /dev/null 檔案轉向給 命令 </dev/null,或由新的鍵入字串取代。以上的方法都不是 100 % 可靠,但它們可以轉至預設的答案,因為大部份的腳本已考量到無預設值的答案。

6.9.5. 神奇的組合

把前述的元素組合起來,就可能設計出一個可處理自動升級的小而可靠腳本。

範例 6.5. 無互動升級腳本

export DEBIAN_FRONTEND=noninteractive
yes '' | apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade