2

最近用cmake/cpack制作了一个debian包,制作成功了,但是我在电脑上安装(sudo dpkg -i mypcakge.deb),发现一个问题:安装程序的用户和组是root:root。由于某种原因,我的问题应该在特定的用户/组中运行。我不知道该怎么做,你能帮帮我吗?

另外,我不想在安装包后用 chown(..) 修改用户和组。有没有办法在 CMakeLists 中添加一些东西来做到这一点?

4

1 回答 1

0

它不仅与 CMake 相关,而且通常在使用 debhelper 和/或非标准用户名时。

dh(1)常用于debian/rules默认会调用dh_fixperms(1),会默认重置所有者和权限。

基本上有三种方法可以保留您想要的所有者/权限:

  1. 如果您使用一些标准的 Debian 系统用户/组,您可以跳过或覆盖dh_fixperms(1),并且您可以指定要覆盖所有者/组的文件。确保您的包预先依赖于base-passwd包含所需用户/组的包的正确版本。

    你可以在这里覆盖你的debian/rules喜欢(参见手册页):dh_fixperms(1)

    override_dh_fixperms:
        dh_fixperms --exclude matchname
    

    Debian 文档有更多信息。

  2. 如果您创建自己的用户并且希望文件/目录归他们所有,则需要使用postinst脚本。在其中,如果用户/组不存在,您首先需要创建它们,然后执行类似的操作

    chown myuser:mygroup /var/log/mydir
    chmod 0750 /var/log/mydir
    
  3. 或者,您可以使用(也在您的postinst 和 postrm脚本中)dpkg-statoverride(8)来更改您(或其他)文件的所有者、组和权限,如下所示:

    for i in /usr/bin/foo /usr/sbin/bar; do
        # only do something when no setting exists
        if ! dpkg-statoverride --list $i >/dev/null 2>&1; then
            #include: debconf processing, question about foo and bar
            if [ "$RET" = "true" ] ; then
                dpkg-statoverride --update --add sysuser root 4755 $i
            fi
        fi
    done
    

    您还应该处理删除,如下所示:

    for i in /usr/bin/foo /usr/sbin/bar; do
        if dpkg-statoverride --list $i >/dev/null 2>&1; then
            dpkg-statoverride --remove $i
        fi
    done
    
于 2019-01-26T04:06:21.510 回答