Debian包创建postinst为非root用户

时间:2016-03-13 14:40:23

标签: linux deb

我创建了很多deb文件,我没有遇到任何问题,而且它们都运行得非常好。但是,如果我想替换用户主目录中的文件,我不确定如何做到这一点。

我已经尝试将postinst文件从预定位置rsync转发到主目录,但由于postinst文件是以root身份运行的(由于debian安装程序以root身份运行),因此它被发送到根主目录而不是用户的主目录....

这是deb文件内容的一个例子:

  

Debian目录--->控制文件----> Postint文件

     

usr / share / desktop(包含文件的目录)

postinst文件具有sync命令,可将这些文件发送给用户主页:

#!/bin/sh
rsync -av /usr/share/desktop/ ~/.config/desktop/

问题是它是将文件发送到Root / home ...而不是默认用户home:(

我没有用户的用户名,因为这将在许多用户不同的计算机上使用,因此我无法使用sudo -u username

那我该怎么办?如何从deb安装中替换用户主目录中的文件?非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

在Bash脚本中,~指的是当前用户的主目录。软件包安装脚本始终以root身份运行,因此“当前用户”在此上下文中的含义。

(您可能会认为软件包安装可能是由运行susudo的用户启动的,但在一般情况下,您不能认为是这种情况。)

在任何情况下,修改系统包中的用户文件都会显得非常可疑。如果需要是真实的,那么首先应该不将其作为系统包安装问题来处理。你实际试图完成什么?

您不仅违反了包管理不应干涉用户文件的基本原则;这种安排的结果是操作只能执行一次:如果用户已经安装了软件包,尝试再次安装它什么都不做(至少在卸载之前)。

更易于管理和可预测的方法似乎是使程序包提供此功能,但是让用户根据需要调用实际的同步(覆盖)脚本。也许你想以某种方式将它挂钩到桌面启动脚本中。

话虽如此,sudo$SUDO_USER中公开了调用用户的身份,因此你可以查找它,如果没有设置就会失败。

顺便说一下,软件包脚本应该与dash一起使用,因此您需要避免使用基本原则 - 例如,更喜欢$HOME而不是~

答案 1 :(得分:0)

我设法找到了一种解决方法,虽然这不是我想要的,但这是我的解决方案,至少目前是这样。

#!/bin/sh
#This will move the desktop settings to required folder.

szAnswer=$(zenity --entry --text "Enter your login username\nThis must be entered correctly\n" --entry-text "Enter name of profile to use:")
xfce4-terminal -e "sudo rsync -av /usr/share/Desktop/ /home/$szAnswer/.config/xfce4/" 

exit 0

换句话说,要求用户输入他的用户名,并将文件复制到该用户的主目录。优点是,如果他有多个用户,它将使用正确的用户。缺点是如果输入用户名错误,即使是拼写错误,安装也会失败。

但它确实有效,我已经测试过了。如果有人有更好的解决方案,我热切期待你的建议。