conffiles 中定义的文件的行为

conffiles 中定义的文件的行为

我创建了一个 debian 软件包,并使用sudo dpkg -i package.deb.这工作正常,打包文件夹根目录中的所有文件和配置都被提取。

然后我使用 卸载它sudo dpkg -r package,该文件仍然存在,正如预期的那样。

然后我使用删除了整个配置文件夹rm -rf /var/package/config/,认为我会模拟“全新安装”,并尝试再次安装。现在,每个资源都在那里,除了我的conffiles文件中的单个文件,该文件永远不会再次安装。

安装命令没有提示,这使得在为时已晚之前很难检测到这一点。

这是我的文件夹结构:

deb
├── DEBIAN
│   ├── conffiles # /home/package/app/config/application.yml is listed here
│   ├── control
│   └── postinst
├── etc
│   └── init.d
│       └── startup
└── home
    └── package
        └── app
            └── config
                └── application.yml
                |
                └── stuff
                     └── common.txt

如何提示运行安装包的用户将添加文件?通常如何处理这种情况?

答案1

当管理员删除conf文件(这是由dpkg控制的配置文件)时,dpkg将认为这是用户更改,类似于编辑它,并将在新安装和升级中保留它。如果软件包被删除,但未被清除,并且文件被管理员删除,则后续安装将无法恢复该文件。

要强制恢复这些配置文件,可以随时使用 --force-confmiss,查看dpkg(1)手册页,或者使用更残酷的方法清除然后重新安装,但如果其他一些配置文件或配置文件被修改,这可能会导致数据丢失。

无论如何,在主目录下的 .deb 包中传送路径名并不是一个好主意,因为这些目录由用户拥有,他们可以删除它们,或者用户可能会作为正常系统管理任务的一部分被删除。

相关内容