【问题标题】:.deb package conffiles problem.deb 包配置文件问题
【发布时间】:2010-12-17 20:39:26
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: linux installation debian packaging


    【解决方案1】:

    是的,使用 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
    

    【讨论】:

    • 谢谢 - 我想我也应该从 conffiles 中删除 db 文件,除非这样做有其他后果?
    • 是的,如果该文件不存在于包中,则不应将其列在配置文件中。
    猜你喜欢
    • 1970-01-01
    • 2011-11-17
    • 2023-03-07
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    相关资源
    最近更新 更多