2009-11-18 163 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