How to change folder permissions during package installation

12,302

Solution 1

I'm not sure what the behaviour is in Ubuntu, but in general for a .deb package containing files or directories with non-standard permissions you need to ensure those permissions are set after dh_fixperms is run. If you're using a dh-style rules, you can do this as follows:

override_dh_fixperms:
        dh_fixperms
        chmod 777 yourfolder

or

execute_after_dh_fixperms:
        chmod 777 yourfolder

You can also do this in a postinst:

if [ "$1" = "configure" ]; then
    chmod 777 yourfolder
fi

but the rules approach is simpler (at least, I prefer doing that rather than relying on maintainer scripts).

Solution 2

I don't have the reputation to comment, so I'm providing another answer.

I created a directory using dh_installdirs, but I couldn't get "override_dh_fixperms" or the newer "execute_after_dh_fixperms" rules to work. I tried a variety of paths including "debian/<package_name>/path/to/dir" as per "https://manpages.debian.org/testing/debhelper/dh.1.en.html"

Ultimately, the only thing that worked was providing a "postinst" script. I would have preferred to specify the permissions in "rules", but sometimes you just have to do what it takes.

Share:
12,302

Related videos on Youtube

Nuno V.
Author by

Nuno V.

Updated on September 18, 2022

Comments

  • Nuno V.
    Nuno V. over 1 year

    I'm making a deb package to install a custom application. I changed all files/folders ownership to root in order to avoid the warnings I was getting during installation, and in Ubuntu all runs smoothly, as Ubuntu changes the ownership of the files/folders to the user installing the package.

    But when I'm installing on Debian, root remains the owner. The application uses a folder to write data, and here is the problem. Running as a standard user, the app does not have permission to write on the folder.

    Now, how should I deal with this problem? Should I make a post install script on the deb package, doing the chmod o+w? Should I package the directory already with those permissions set?

    Or is there any way of setting the owner of the files to the user that installs the app automatically (like Ubuntu does)?

    • Admin
      Admin over 8 years
      A little more context might be helpful. I'm unclear why you need custom permissions. Can you elaborate?
    • Admin
      Admin over 8 years
      Well, ok, but why is it set up this way, and do you have the ability to change it? Needless to say, this isn't a standard setup. One way to go is to create a system user/group for that program. There are many such on your system. You can see them in /etc/group. Regular owners do not normally own system files.
    • Admin
      Admin over 8 years
      I actually changed the way it works. There is some data i decided to put on the /usr/local/share/<appname>, and when starting the app it tests for the existence of a directory at the user's home. Case it does not exist, creates it, copies the needed data it to and uses it to store modified data. It solves the permissions issue. Still i'll look into the possibility of creating the user/group, as may be of interest to share the data among all users.
    • Admin
      Admin over 8 years
      Note that if you are installing using a deb, then you should not install in /usr/local. That would be a violation of the FHS and Debian policy, and generally a bad idea. I recommend using a proper build system. Both autotools and cmake are popular. A handwritten makefile or similar is also an option, but would require more manual work.
    • Admin
      Admin over 8 years
      this is getting a little out of the original question's scope, but i read the FHS specification and can't really see how it would be a violation. Perhaps i'm miss reading but in section about /usr/local it states Locally installed software must be placed within /usr/local rather than /usr unless it is being installed to replace or upgrade software in /usr. Am i miss interpreting the meaning of locally installed software?
    • Admin
      Admin over 8 years
      Debs are by definition not locally installed.