Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

What is the official Debian/Ubuntu way to install new configuration files in user directories?

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?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel


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_package with 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

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading