我正在创建一个包含一些用户默认设置的包。这些设置通常出现在~/.<some-name>
或~/.config/<app>/<some>.conf
和类似文件下。
在大多数情况下,这些文件安装在框架目录 ( /etc/skel
) 中,但这些文件将仅安装在新用户主目录中。我希望现有用户在安装软件包时也能获得这些文件。
Debian 标准对此有何规定?
举一个具体的例子,我有一个.lessfilter我想添加到我的个人包裹这样它就安装在我所有的机器上了。
所以在我的alex-tools.install
文件中我有:
scripts/.lessfilter /etc/skel
我知道我可以创建alex-tools.postinst
这样的脚本(尚未测试,请谨慎使用):
#!/bin/sh -e
#
# Finish up the installation
#DEBHELPER#
# Source debconf library.
. /usr/share/debconf/confmodule
if [ "$1" = "configure" ]
then
# Install files in user folders
#
for u in /root /home/*
do
if ! test -f "${u}/.lessfilter"
then
cp /etc/skel/.lessfilter "${u}/.lessfilter"
chmod 700 "${u}/.lessfilter"
chown "${u}" "${u}/.lessfilter"
fi
done
fi
但我认为这在 Debian 中可能不被视为“合法”,并且可能有更干净的方法来实现这一点?
Debian 参考资料中是否有关于此的内容?
答案1
我不确定官方是否建议在安装软件包时创建每个用户的配置,但我找到的链接肯定不鼓励这样做。但是,如果我正在安装你的软件包,那么这就是我的观点我希望它如何设计。
安装配置文件
/etc/my_program
许多程序在检查每个用户的配置(例如)之前会先检查全局配置位置(例如~/.my_program
)。如果可能,应将配置放在全局位置。
您安装每个用户配置文件的具体示例很~/.lessfilter
有趣,因为没有全局配置文件选项。在这种情况下,如果您提供包,my_package
那么它可以
- 创建全局配置
/usr/share/my_package/lessfilter
/etc/profile.d/my_package
添加如下内容的脚本
[ -f "${HOME}/.lessfilter" ] || cp /usr/share/my_package/lessfilter "${HOME}/.lessfilter"
这将提供很大的灵活性。一个明显的缺点是,这/etc/profile
可能只会影响交互式 Bash 会话,你可能需要支持其他场景。
链接
- https://unix.stackexchange.com/questions/413484/why-dont-package-managers-have-per-user-installations-and-registries
- https://unix.stackexchange.com/questions/181618/placing-things-in-a-users-home-directory-with-deb
- https://www.reddit.com/r/debian/comments/hbce9i/adding_a_file_in_home_directory_in_deb_package/