Come creare una directory e cambiarne il proprietario con il pacchetto deb


11

Devo creare un pacchetto deb che creerà la directory per i log. Voglio creare una directory /var/logs/my_packagee cambiarne il proprietario my_user.

Nei documenti ci sono informazioni che posso creare file debian/dir. Ma ci sono informazioni che questo non è il modo migliore per farlo. E non ci sono informazioni su come si dovrebbe cambiare il proprietario della directory (sto pensando di chown my_user.my_user /var/logs/my_packagemetterlo nel debian/postinstfile).

Qual è il modo consigliato per creare una directory con il pacchetto deb?


Benvenuti in Ask Ubuntu. Per favore, potresti dedicare un po 'del tuo tempo a leggere askubuntu.com/help/someone-answers
— Sylvain Pineau

Risposte:


9

Avevi ragione, hai bisogno di un debian/my_package.postintfile per eseguire tale operazione:

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

Nota : lo script verifica se l'utente esiste prima di chiamare chown.


1
Mi dispiace molto, ma questo non risponde alla mia domanda.
— bessarabov,

Spiega perché questo script postinst non risponde alla tua domanda originale. Sono un po 'perplesso ora.
— Sylvain Pineau,

Mi dispiace di non averlo spiegato nel modo giusto. La tua soluzione funziona bene e questo è quello che ho implementato. Ma i documenti dicono This generally means there is a problem with the Makefile.che capisco questo messaggio che c'è un altro modo per farlo. E voglio scoprire qual è il modo consigliato per svolgere questo compito.
— bessarabov,

1
La creazione della directory potrebbe essere eseguita in debian/rulesquale è il Makefilepacchetto debian. Dato che non conoscevo la tua, debian/rulesho preferito proporre una soluzione basata su un singolo file. Ma il chowncomando deve essere un processo post-installazione. debian / dirs dovrebbe essere evitato ma la mia risposta iniziale è perfettamente soddisfacente. Per favore, vota e accettalo, grazie.
— Sylvain Pineau,

3

Non è necessario creare uno postinstscript, ma la soluzione è ancora un po 'complicata. Uso i dhcaratteri jolly in debian/rules:

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

binary:
        dh $@

che fa tutto il necessario. Ma devo sovrascrivere la proprietà di alcuni dir (chiamiamoli dati). Quindi devo fare qualche eccezione, uso una direttiva speciale (questo è un esempio):

    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 

La directory dei dati non deve necessariamente essere nel file * .dirs. Ma c'è ancora un trucco. Debhelper contiene lo script dh_fixperms, che riporterebbe la proprietà su root, quindi è necessario eseguire l'override anche:

override_dh_fixperms:
    dh_fixperms --exclude data

È tutto. Tieni presente che la directory dei dati non viene considerata come un file di configurazione, quindi verrà rimossa al momento della rimozione del pacchetto. Se devi renderlo un conffile, è un'altra storia.


Ciò richiede che l'utente e il gruppo esistano nel sistema in cui è stato creato il pacchetto? E se sì, c'è un modo per assicurarlo con un meccanismo basato su Debian?
— Moritz,

Ciò creerà le directory sul sistema utilizzato per compilare il pacchetto debian, non il sistema su cui è installato il pacchetto.
— Gerardw,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.