Cmake Debian包:用户和组

Cmake Debian包:用户和组,cmake,debian,cpack,Cmake,Debian,Cpack,最近,我使用cmake/cpack制作了一个debian包。我成功了。但是我在计算机上安装了它(sudo dpkg-I mypcakge.deb),我发现了一个问题:安装程序的用户和组是root:root。由于某种原因,我的问题应该在特定的用户/组中运行。我不知道怎么做,你能帮我吗 另外,我不想在安装软件包后用chown(..)修改用户和组。有没有办法在CmakeList中添加一些东西来实现这一点?它不仅与CMake有关,而且通常与使用debhelper和/或非标准用户名有关 dh(1)通常在d

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


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

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

dh(1)
通常在
debian/rules
中使用,默认情况下会调用
dh\u fixperms(1)
,默认情况下会重置所有者和权限

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

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

    您可以在
    debian/rules
    中重写如下内容(请参见
    dh_fixperms(1)
    手册页):

    有更多信息

  • 如果您创建自己的用户,并且希望文件/目录归他们所有,则需要使用
    postinst
    script。在它里面,你首先需要,然后做一些类似的事情

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

    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
    
    您还应该处理删除,如下所示:

    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
    

  • 我不认为许多Debian软件包开发者都熟悉Cmake来创建Debian软件包。你可以发布一个链接到一些背景资源,或者只是一个片段,显示你是如何做的?