2009-11-18 70 views
3

我正在使用.deb包發佈我的一個應用程序,但遇到與其中一個文件有關的問題。.deb包conffiles問題

該分配包括一個數據庫文件,它不斷由應用程序更新,全新安裝我希望安裝程序將新的空白數據庫文件複製到用戶系統上,但升級時我希望安裝程序離開現有的複製到位(覆蓋它將導致所有用戶數據丟失)。

目前我已經包含在「那些默認配置文件」文件中的文件,所以安裝程序總是會詢問用戶是否覆蓋現有文件或沒有,但這不是我想要的行爲 - 覆蓋該文件是從未正確的做法,我擔心用戶在升級過程中可能會選擇錯誤的選項並將其數據輸出。

有沒有什麼辦法可以告訴安裝程序,如果db文件已經存在,就把它放在一邊,不要問用戶該做什麼?

回答

4

是的,使用preinst/postinst腳本。通常的方法是使用以dpkg-new結尾的特殊名稱命名包中的文件,例如/var/lib/myapp/mydb.data.dpkg-new。然後寫一個「的postinst」腳本放在DEBIAN目錄軟件包來檢查數據庫的存在,並重新命名或相應刪除的dpkg-新的文件,是這樣的:

#!/bin/bash 

if [ -f /var/lib/myapp/mydb.data ]; then 
    rm /var/lib/myapp/mydb.data.dpkg-new 
else 
    mv /var/lib/myapp/mydb.data.dpkg-new /var/lib/myapp/mydb.data 
fi 
+1

謝謝 - 我想我應該從conffiles中刪除db文件,除非這樣做有其他後果嗎? – codebox 2009-11-19 08:33:06

+1

是的,如果文件不在包中,它不應該列在配置文件中。 – wazoox 2009-11-20 11:58:27