4

我正在使用 .deb 包分发我的一个应用程序,但遇到与其中一个文件有关的问题。

该发行版包括一个由应用程序不断更新的数据库文件,在全新安装时,我希望安装程序将新的空 db 文件复制到用户系统上,但在升级时,我希望安装程序保留现有副本(覆盖它会导致所有用户数据丢失)。

目前我已将该文件包含在“conffiles”文件中,因此安装程序总是询问用户是否覆盖现有文件,但这不是我想要的行为 - 覆盖文件永远不是正确的做法,并且我担心用户可能会在升级过程中选择错误的选项并处理他们的数据。

有什么方法可以告诉安装程序,如果 db 文件已经存在,请不要管它,不要问用户该怎么做?

4

1 回答 1

6

是的,使用 preinst/postinst 脚本。通常的方法是使用以 dpkg-new 结尾的特殊名称来命名包中的文件,例如/var/lib/myapp/mydb.data.dpkg-new。然后写一个' postinst '脚本放到你的包的DEBIAN目录中检查数据库是否存在,并相应地重命名或删除dpkg-new文件,类似:

#!/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
于 2009-11-18T12:45:10.040 回答