2014-10-17 50 views
1

我正在使用Debian包裝源在用戶機器上安裝幾個文件。 debconf/config腳本和postinst腳本正在使用通用邏輯。因此,我將公共邏輯放在一個單獨的文件中,並將其作爲/ usr/share/pkg-name /下的軟件包的一部分添加。如何在debconf提示符前顯示解壓後的debain包?

現在,當我使用dpkg安裝包時,一切正常。首先將包解包並將包含公共代碼庫的文件放置在所述路徑處。接下來,debconf/config腳本讀取文件,然後相應地提示用戶。

當我將文件放入APT repo中時,在使用apt-get安裝時,相同的過程被逆轉。該軟件包並未首先解壓縮,而是顯示debconf提示符,並且config腳本無法找到包含公共代碼庫的腳本。

我想知道爲什麼安裝過程有所不同?通過apt-get進行安裝時,有沒有辦法獲得相同的序列?所有這三個文件都是shell腳本。

有沒有更好的方法來處理這些常見的代碼庫,供各種維護者腳本使用?

回答

1

任務已結束!

現在我明白了debconf manpage中描述的完整過程。無論你怎麼稱呼它,都有不同的階段或步驟。它們是:

  • 的dpkg-預配置
  • dpkg -i來
  • 的dpkg-重新配置

所有這些步驟發起與用戶的debconf通信。當某人使用dpkg -i安裝軟件包時,只需在運行帶有相同命令行選項的postinst腳本之前運行配置腳本。到debconf通信開始時,軟件包已經解壓。

當某人使用apt-get安裝軟件包時,首先運行dpkg-preconfigure執行配置腳本,然後執行dpkg -i以實際安裝再次運行相同配置腳本的軟件包。

在apt-get的第二種情況下,當config腳本作爲dpkg-preconfigure的一部分運行時,那麼軟件包還沒有被解壓縮,所以我正面臨着這個問題。

我只是增加了一個,如果條件繼續,如果文件解包否則退出

if [ ! -f /usr/share/pkg-name/common-codebase ]; 
then 
    exit 0 
fi 
/usr/share/pkg/common-codebase 

使用apt-get的安裝包時,或dpkg-預配置嘗試運行配置腳本將被跳過這樣,當第二次嘗試在dpkg -i很榮幸。這適用於我,因爲我向用戶請求的debconf問題不會影響任何其他軟件包。

如果您有共享模板,並且您的選擇可能會影響軟件包外的任何內容,請記住,即使延遲了提示仍然由apt-get安裝的其他相關/依賴軟件包仍會在dpkg-preconfigure步驟中提示用戶。在嘗試此解決方案之前,請確保您沒有問題。