我正在尝试构建一个debian软件包,它会自动配置我的所有计算机以使用相同的配置文件和设置。
例如,我正在尝试设置alter / etc / default / hostapd。我目前正在使用dh_install将文件复制到/ etc / default / hostapd,并使用我希望它具有的配置。
这会导致错误:
trying to overwrite '/etc/default/hostapd', which is also in package hostapd
创建一个覆盖/ etc / default / hostapd等设置的debian软件包的正确方法是什么?
答案 0 :(得分:4)
错误的原因是因为将文件写入系统的任何程序包都标记为其所有者。当两个包拥有相同的文件时,deb机制不喜欢它。
您最好的选择是使用dpkg-divert将其他包的文件重命名为其他名称。在您的preinst脚本中,输入以下命令(假设您的包名为 my_package :
dpkg-divert --divert /etc/default/hostapd.saved.my_package --package my_package --rename --add /etc/default/hostapd
在你的postrm脚本中,你需要输入相反的命令(未经测试,RTFM以正确获得精确的语法):
dpkg-divert --divert /etc/default/hostapd.saved.my_package --package my_package --rename --remove /etc/default/hostapd
至少在过去,在debian控制文件中放置一个“conffile”字段有一个更简单(虽然不太安全)的选项。这告诉系统该软件包安装覆盖另一个软件包文件的文件。但是,我不确定我会推荐这种方法,因为它可能会在卸载时破坏。