linux - .deb 包 conffiles 问题

标签 linux installation debian packaging

我正在使用 .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/

相关文章:

mysql - 使用命令行执行.sql文件

Node.js 脚本无法使用 systemctl 启动

python-3.x - 使用 --enable-shared 安装 Python 3 的问题

c - shell 中的历史功能

linux - 如何重定向 apt 文件更新输出

python - linux写的编译shell文件是什么

docker 登录: Error when manually logging into private Registry

c++ - fatal error : QtGui/QApplication: No such file or directory|

python - 安装 pygame ubuntu 时遇到问题

python - 如何在 Windows 7 上安装适用于 Python 3.5 的 cvxopt