Debian包:用户和组

时间:2014-02-18 02:14:38

标签: cmake debian cpack

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

此外,我不想在安装软件包后使用chown(..)修改用户和组。有没有办法在CMakeLists中添加一些内容来执行此操作?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

    您可以像here一样在debian/rules中覆盖(请参见dh_fixperms(1)手册页):

    override_dh_fixperms:
        dh_fixperms --exclude matchname
    

    Debian docs了解更多信息。

  2. 如果您创建自己的用户并希望文件/目录归他们所有,则需要使用postinst脚本。在其中,您首先需要create users/groups if they don't already exist,然后执行类似的操作

    chown myuser:mygroup /var/log/mydir
    chmod 0750 /var/log/mydir
    
  3. 或者,您可以使用{也在postinst and 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