我正在使用 .deb 包分发我的一个应用程序,但遇到与其中一个文件相关的问题。
发行版包括一个由应用程序不断更新的数据库文件,在全新安装时我希望安装程序将一个新的空数据库文件复制到用户系统中,但在升级时我希望安装程序保留现有的就地复制(覆盖它会导致所有用户数据丢失)。
目前我已经将该文件包含在“conffiles”文件中,因此安装程序总是询问用户是否覆盖现有文件,但这不是我想要的行为 - 覆盖文件从不 正确的做法,我担心用户在升级过程中可能会选择错误的选项并管理他们的数据。
有什么方法可以告诉安装程序如果 db 文件已经存在就不要管它,不要问用户要做什么?
最佳答案
是的,使用 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
关于linux - .deb 包 conffiles 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1755678/