web-dev-qa-db-fra.com

Comment ajouter des autorisations aux fichiers installés par dpkg-buildpackage ou debuild

Je construis un paquet à partir de ma propre source en utilisant dh_make et dpkg-buildpackage. Le fichier d'installation dans/debian spécifie les destinations des fichiers de projet. Pour que le programme installé fonctionne, il doit être exécutable/avoir les droits d’exécution avec chmod. En particulier, il s'agit d'un script python et d'un fichier .desktop.

Comment définir ces autorisations dans la configuration? En les copiant uniquement vers leurs destinations, cela n’est pas fait. Ce serait bien pour moi si je pouvais déclencher une commande à la fin de l'installation, ou quelque chose du genre, mais je ne sais pas comment l'inclure.

2
user2366975

Le fichier .desktop n'a pas besoin d'autorisations d'exécution, contrairement à votre script .py.

braiam@bt:~$ ls -l /usr/share/app-install/desktop/deluge.desktop 
-rw-r--r--. 1 root root 1276 Aug  6  2012 /usr/share/app-install/desktop/deluge.desktop
braiam@bt:~$ ls -l /usr/bin/deluge
-rwxr-xr-x 1 root root 289 Jan 27  2013 /usr/bin/deluge

Avant que l’emballage n’ait défini le bit exécutable sur le script python, dpkg se chargera du reste.

Le fichier .desktop est un fichier de configuration lu par xdg, et ses propres variables sont définies pour exécuter le binaire requis:

cat /usr/share/app-install/desktop/deluge.desktop
[...]
GenericName=BitTorrent Client
X-GNOME-FullName=Deluge BitTorrent Client
Comment=Download and share files over BitTorrent
Exec=deluge-gtk %U
Icon=deluge
Terminal=false
Type=Application
Categories=Network;FileTransfer;P2P;GTK
StartupNotify=true
MimeType=application/x-bittorrent;x-scheme-handler/magnet;

Comme vous le voyez, il contient une variable Exec qui s’occupe de l’exécution lors de l’accès au fichier.

2
Braiam

Vous pouvez créer un script de post-installation:

gedit debian/packagename.postinst

Ceci est juste un script normal, donc les instructions suivantes suffiront:

#!/bin/sh
set -e
chmod 755 /path/to/pythonscript.py
exit 0

Vous pouvez également empêcher le fichier d'avoir ses autorisations modifiées par dh_fixperms. Cela peut être fait dans debian/rules:

%:
    dh  $@ --with python2

override_dh_fixperms:
    dh_fixperms --exclude path/to/pythonscript.py

La première option est préférable car dh_fixperms effectue d'autres tâches utiles, telles que le changement du propriétaire d'un fichier et l'exclusion de ce fichier empêchant dh_fixperms de faire quoi que ce soit d'utile. Notez également que dans la première option, il y a une barre oblique précédente /path/to/pythonscript.py car il s’agit d’un chemin absolu, alors que la deuxième option est relative au sous-répertoire debian.

EDIT: @AlexisWilke a mentionné une meilleure alternative à l'option 2, à savoir:

%:
    dh  $@ --with python2

override_dh_fixperms:
    dh_fixperms
    chmod 755 path/to/pythonscript.py

Cela permet à dh_fixperms d’exercer sa magie suivie de la correction mineure nécessaire.

4
Charlie