I’m creating a package which includes some default settings for users. Things that generally appear under ~/.<some-name> or ~/.config/<app>/<some>.conf and similar files.
In most cases, these files are installed in the skeleton directory (/etc/skel) but those are going to be installed only in new users home directories. I’d like existing users to also get the files at the time the package gets installed.
What does the Debian standard say about that?
For a concrete example, I have a .lessfilter script that I’d like to add to my personal package so that way it gets installed on all of my machines.
So in my alex-tools.install file I have:
scripts/.lessfilter /etc/skel
I know I can create an alex-tools.postinst script like so (not yet tested, use with care):
#!/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
But I’m thinking that this may not be considered "legal" in Debian and there may be a cleaner way to implement such?
Is there something about this in the Debian references?
>Solution :
I’m not sure about official recommendations for creating per-user configuration during package installation, but links I found certainly discourage it. However, if I was installing your package then this is my opinion on how I’d like it designed.
Installing configuration files
Many programs will first check a global configuration location (e.g. /etc/my_program) before checking a per-user configuration (e.g. ~/.my_program). When possible, the configuration should be placed at the global location.
Your concrete example of installing a per-user configuration file for ~/.lessfilter is interesting because that does not have a global configuration file option. In this case, if you are providing the package my_package then it could
- create a global configuration at
/usr/share/my_package/lessfilter - add a script
/etc/profile.d/my_packagewith content like
[ -f "${HOME}/.lessfilter" ] || cp /usr/share/my_package/lessfilter "${HOME}/.lessfilter"
This would allow a lot of flexibility. An obvious downside is that /etc/profile might only affect interactive Bash sessions, and you may need to support other scenarios.
Links
- 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/