Comment créer un répertoire et changer son propriétaire avec le paquet deb

11

J'ai besoin de créer un paquet deb qui créera un répertoire pour les journaux. Je veux créer un répertoire /var/logs/my_packageet changer son propriétaire en my_user.

Dans les documents, il y a des informations que je peux créer un fichier debian/dir. Mais il y a des informations que ce n'est pas la meilleure façon de le faire. Et il n'y a aucune information sur la façon de changer le propriétaire du répertoire (je pense à le placer chown my_user.my_user /var/logs/my_packagedans un debian/postinstfichier).

Quelle est la méthode recommandée pour créer un répertoire avec le paquet deb?

bessarabov
la source
Bienvenue sur Ask Ubuntu. S'il vous plaît, pourriez-vous consacrer une
Sylvain Pineau

Réponses:

9

Vous aviez raison, vous avez besoin d'un debian/my_package.postintfichier pour effectuer une telle opération:

#!/bin/sh

#DEBHELPER#

set -e

USER="my_user"

mkdir -p /var/log/my_package/    
if id -u $USER > /dev/null 2>&1; then    
    chown ${USER}:${USER} /var/log/my_package/
fi

Remarque : Le script vérifie si l'utilisateur existe avant d'appeler chown.

Sylvain Pineau
la source
1
Je suis extrêmement désolé, mais cela ne répond pas à ma question.
bessarabov
Veuillez expliquer pourquoi ce script postinst ne répond pas à votre question d'origine. Je suis un peu perplexe maintenant.
Sylvain Pineau
Je suis désolé de ne pas l'avoir expliqué correctement. Votre solution fonctionne bien et c'est ce que j'ai mis en œuvre. Mais les docs disent que This generally means there is a problem with the Makefile.je comprends ce message qu'il existe une autre façon de le faire. Et je veux savoir quelle est la façon recommandée de faire cette tâche.
bessarabov du
1
La création du répertoire pourrait se faire dans debian/ruleslequel se Makefiletrouvent les paquets for debian. Comme je ne vous connaissais pas, debian/rulesj'ai préféré proposer une solution basée sur un seul fichier. Mais la chowncommande doit être un processus de post-installation. debian / dirs devrait être évité mais ma réponse initiale est parfaitement correcte. Veuillez voter et l'accepter, merci.
Sylvain Pineau
3

Vous n'avez pas besoin de créer de postinstscript, mais la solution reste un peu délicate. J'utilise des dhcaractères génériques dans debian/rules:

#!/usr/bin/make -f
%:
        dh $@

binary:
        dh $@

qui fait tout le nécessaire. Mais j'ai besoin de remplacer la propriété de certains dir (appelons cela des données). Je dois donc faire une exception, j'utilise une directive spéciale (c'est un exemple):

    override_dh_install:
        dh_install   #calls default *.install and *.dirs installation
        install -d -o www-data -g www-data $(CURDIR)/debian/<package_name>/var/www/<something>/data 

Le répertoire de données n'a pas besoin d'être dans le fichier * .dirs. Mais il y a toujours une astuce. Debhelper contient le script dh_fixperms, qui rétablirait la propriété à la racine, nous devons donc également remplacer:

override_dh_fixperms:
    dh_fixperms --exclude data

C'est tout. Gardez à l'esprit que le répertoire de données ne compte pas comme un conffile, il sera donc supprimé lors de la suppression du package. Si vous devez en faire un fichier, c'est une autre histoire.

Marek Šimon
la source
Cela nécessite-t-il que l'utilisateur et le groupe existent sur le système sur lequel le package est construit? Et si oui, existe-t-il un moyen de garantir cela avec un mécanisme basé sur Debian?
moritz
Cela créera les répertoires sur le système utilisé pour construire le paquet Debian, pas le système sur lequel le paquet est installé.
gerardw