So erstellen Sie ein Verzeichnis und ändern den Eigentümer mit dem Deb-Paket

10

Ich muss ein Deb-Paket erstellen, das ein Verzeichnis für Protokolle erstellt. Ich möchte ein Verzeichnis erstellen /var/logs/my_packageund seinen Besitzer in ändern my_user.

In den Dokumenten gibt es Informationen , die ich Datei erstellen kann debian/dir. Es gibt jedoch Informationen, dass dies nicht der beste Weg ist, dies zu tun. Und es gibt keine Informationen darüber, wie man den Verzeichnisbesitzer ändern soll (ich denke darüber nach, den Befehl chown my_user.my_user /var/logs/my_packagein eine debian/postinstDatei zu setzen).

Was ist die empfohlene Methode zum Erstellen eines Verzeichnisses mit dem Deb-Paket?

Bessarabov
quelle
Willkommen bei Ask Ubuntu. Bitte, könnten Sie etwas Zeit investieren
Sylvain Pineau

Antworten:

8

Sie hatten Recht, Sie benötigen eine debian/my_package.postintDatei, um einen solchen Vorgang auszuführen:

#!/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

Hinweis : Das Skript prüft vor dem Aufruf, ob der Benutzer vorhanden ist chown.

Sylvain Pineau
quelle
1
Es tut mir sehr leid, aber das beantwortet meine Frage nicht.
Bessarabov
Bitte erläutern Sie, warum dieses Postinst-Skript Ihre ursprüngliche Frage nicht beantwortet. Ich bin jetzt ein bisschen verwirrt.
Sylvain Pineau
Es tut mir leid, dass ich es nicht richtig erklärt habe. Ihre Lösung funktioniert gut und das habe ich implementiert. Aber die Dokumente sagen, This generally means there is a problem with the Makefile.ich verstehe diese Nachricht, dass es einen anderen Weg gibt, dies zu tun. Und ich möchte herausfinden, wie diese Aufgabe empfohlen wird.
Bessarabov
1
Die Verzeichniserstellung könnte in debian/rulesdem Makefilefür Debian-Pakete erfolgen. Da ich Ihre nicht kannte, schlug debian/rulesich lieber eine Lösung vor, die auf einer einzelnen Datei basiert. Der chownBefehl muss jedoch nach der Installation ausgeführt werden. debian / dirs sollte vermieden werden, aber meine erste Antwort ist vollkommen in Ordnung. Bitte stimmen Sie ab und akzeptieren Sie es, danke.
Sylvain Pineau
3

Sie müssen kein postinstSkript erstellen , aber die Lösung ist immer noch etwas schwierig. Ich benutze dhPlatzhalter in debian/rules:

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

binary:
        dh $@

das macht alle benötigten Sachen. Aber ich muss den Besitz eines Verzeichnisses überschreiben (nennen wir es Daten). Also muss ich eine Ausnahme machen, ich benutze eine spezielle Direktive (dies ist ein Beispiel):

    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 

Das Datenverzeichnis muss sich nicht in der * .dirs-Datei befinden. Trotzdem gibt es einen Trick. Debhelper enthält das Skript dh_fixperms, mit dem der Besitz wieder auf root festgelegt wird. Daher müssen wir auch Folgendes überschreiben:

override_dh_fixperms:
    dh_fixperms --exclude data

Das ist alles. Beachten Sie, dass das Datenverzeichnis nicht als Conffile gilt und daher beim Entfernen des Pakets entfernt wird. Wenn Sie es zu einem Conffile machen müssen, ist es eine andere Geschichte.

Marek Šimon
quelle
Erfordert dies, dass der Benutzer und die Gruppe auf dem System vorhanden sind, auf dem das Paket erstellt wurde? Und wenn ja, gibt es eine Möglichkeit, dies mit einem Debian-basierten Mechanismus sicherzustellen?
Moritz
Dadurch werden die Verzeichnisse auf dem System erstellt, auf dem das Debian-Paket erstellt wurde, nicht auf dem System, auf dem das Paket installiert ist.
Gerardw