Product SiteDocumentation Site

6.8. 自動升級

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

6.8.1. 組態 dpkg

如稍早提過的 (見專欄 進一步 避免組態檔的問題),dpkg 可在不必確認的情況下取代原來的組態檔 (以 --force-confdef --force-confold 選項執行該功能)。然而,有三個互動來源:有些來自 APT 自身、有些由 debconf 處理、還有的是由套件組態腳本執行。

6.8.2. 組態 APT

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

6.8.3. 組態 debconf

debconf 需要較詳細的說明。此程式原本的設計就是控制給使用者看到的相關性及數量,以及顯示的方法。問題需有最小的優先權;擁有最小優先權以上的問題才顯示。debconf 預設的答案 (由套件維護者設定) 會略過。
其他的相關組態元素是前端用到的介面。若選擇 noninteractive,就停用所有的使用者互動。若套件試圖顯示資訊性說明,則以電子郵件送給管理者。
組態 debconf 時,用到 dpkg-reconfigure 工具,它是來自 debconf 套件;相關的命令是 dpkg-reconfigure debconf。組態值可能是在需要時暫時取代的環境變數 (例如,DEBIAN_FRONTEND 控制介面,如同在 debconf(7) 手冊頁面所述)。

6.8.4. 處理命令列介面

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

6.8.5. 神奇的組合

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

範例 6.4. 無互動升級腳本

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