【问题标题】:How to force a Debian package to overwrite permissions?如何强制 Debian 软件包覆盖权限?
【发布时间】:2016-05-15 07:16:57
【问题描述】:

我已经构建了一个 debian 包,它只是将文件放入 /etc/sensu/plugins 以便我的检查以这种方式分发。

现在我写了一个新的检查,构建了包并将它安装在任何地方,但我发现我忘记了文件 +x。

所以我创建了文件 +x 并再次构建了包,但是当我在任何地方安装它时,它不会覆盖该文件的权限。

我如何强制它这样做?

【问题讨论】:

    标签: debian package packages file-permissions


    【解决方案1】:

    主要问题是 /etc 中的文件被 dh_installdeb 视为 conffiles,您可能在包构建期间使用这些文件,因此打包系统以特定方式处理,因为假设用户可以编辑这些文件并且应该保留这些更改。因此,除非您明确清除它们,否则它们不会随包一起删除,并且它们将保留其权限。我不知道有什么方法可以让您将配置文件的权限更改为包中相同文件的权限(例如,dpkg 的--force-confnew 选项不起作用)。

    从管理员的角度来看,您应该清除软件包(以便删除配置文件)然后重新安装软件包或手动更改权限。

    从打包者的角度来看,你可以在postinst脚本中修复权限,这样升级包就会修复权限。作为替代方案,您也可以按照here 的说明调整配置文件:安装新包后,权限将设置为包中文件的权限。

    一般情况下,您可能还想检查dh_fixperms 是否在打包过程中更改了您的文件的权限,并最终使其不作用于这些文件(事实并非如此)。

    【讨论】:

    • 是的,我想清除它,但我不想清除 1,5 k 主机上的重要软件包,并且在我重新安装之前让它们不受监控
    • 对于安装后脚本:它是 jenkins 使用模板的自动构建,我不想每次有人忘记更改文件权限时都使用模板
    • 我所说的 postinst 是 debian.org/doc/debian-policy/ch-maintainerscripts.html 中提到的 postinst 脚本。您可以在那里添加一个 chmod 行,为文件授予适当的权限。这将在安装后由包管理器自动执行,无需人工参与。
    • 我刚刚更新了答案,解释了问题和另一种可能的解决方案。鉴于您的要求和上述 cmets,这个新解决方案很可能是更适合您的用例的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 2017-04-06
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    相关资源
    最近更新 更多