gpt4 book ai didi

linux - Debian 软件包创建 postinst 作为非 root

转载 作者:太空狗 更新时间:2023-10-29 12:01:10 29 4
gpt4 key购买 nike

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

我尝试制作一个 postinst 以将文件从预定义位置同步到主目录,但是由于 postinst 文件以 root 身份运行(由于 debian 安装程序以 root 身份运行),它被发送到 root 主目录而不是用户的主目录....

这是 deb 文件内容的示例:

Debian Directory ---> Control File ----> Postint File

usr/share/desktop (directory with files inside)

postinst 文件具有将这些文件发送到用户主目录的同步命令:

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

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

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

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

最佳答案

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

(您可能会争辩说软件包安装可能是由运行 susudo 的用户启动的,但在一般情况下,您不能假设是这种情况.)

从系统包中修改用户文件在任何情况下都显得极其可疑。如果需要是真实的,那么一开始就不应该将其作为系统包安装问题来处理。您实际上想要完成什么?

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

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

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

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

关于linux - Debian 软件包创建 postinst 作为非 root,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35971583/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com