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.