最近,我用cmake / cpack制作一个debian包。我成功了。但是我把它安装在电脑上(sudo dpkg -i mypcakge.deb),我发现一个问题:安装程序的用户和组是root :root.Due由于某种原因,我的问题应该在特定的用户/组中运行。我不知道怎么做,你能帮助我吗?
此外,我不想在安装软件包后使用chown(..)修改用户和组。有没有办法在CMakeLists中添加一些内容来执行此操作?
答案 0 :(得分:0)
它不仅与CMake有关,而且通常与使用debhelper和/或非标准用户名有关。
dh(1)
通常在默认情况下在debian/rules
中使用,将调用dh_fixperms(1)
,默认情况下将重置所有者和权限。
基本上可以通过三种方式保留您想要的所有者/权限:
如果您使用某些标准Debian系统用户/组,则可以跳过
或覆盖dh_fixperms(1)
,您可以指定要覆盖其所有者/组的文件。确保您的软件包预先依赖包含所需用户/组的base-passwd
软件包的正确版本。
您可以像here一样在debian/rules
中覆盖(请参见dh_fixperms(1)
手册页):
override_dh_fixperms:
dh_fixperms --exclude matchname
Debian docs了解更多信息。
如果您创建自己的用户并希望文件/目录归他们所有,则需要使用postinst
脚本。在其中,您首先需要create users/groups if they don't already exist,然后执行类似的操作
chown myuser:mygroup /var/log/mydir
chmod 0750 /var/log/mydir
或者,您可以使用{也在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