Cómo crear un directorio y cambiar su propietario con el paquete deb

11

Necesito crear el paquete deb que creará el directorio para los registros. Quiero crear un directorio /var/logs/my_packagey cambiar su propietario a my_user.

En los documentos hay información que puedo crear archivo debian/dir. Pero hay información de que esta no es la mejor manera de hacerlo. Y no hay información sobre cómo se debe cambiar el propietario del directorio (estoy pensando en colocar el comando chown my_user.my_user /var/logs/my_packageen el debian/postinstarchivo).

¿Cuál es la forma recomendada de crear un directorio con el paquete deb?

bessarabov
fuente
Bienvenido a Ask Ubuntu. Por favor, ¿podría dedicar parte de su tiempo a leer askubuntu.com/help/someone-answers
Sylvain Pineau

Respuestas:

9

Tenías razón, necesitas un debian/my_package.postintarchivo para realizar dicha operación:

#!/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 : El script verifica si el usuario existe antes de llamar chown.

Sylvain Pineau
fuente
1
Lo siento mucho, pero esto no responde a mi pregunta.
bessarabov
Por favor, explique por qué este script postinst no responde a su pregunta original. Estoy un poco perplejo ahora.
Sylvain Pineau
Lamento no haberlo explicado de la manera adecuada. Su solución funciona bien y esto es lo que he implementado. Pero los documentos dicen This generally means there is a problem with the Makefile.que entiendo este mensaje de que hay otra forma de hacerlo. Y quiero averiguar cuál es la forma recomendada de hacer esta tarea.
bessarabov
1
La creación del directorio podría hacerse en el debian/rulesque se encuentran los Makefilepaquetes debian. Como no conocía tu debian/rules, preferí proponer una solución basada en un solo archivo. Sin embargo, el chowncomando debe ser un proceso posterior a la instalación. Debian / dirs deben evitarse, pero mi respuesta inicial está perfectamente bien. Por favor vote y acéptelo, gracias.
Sylvain Pineau
3

No es necesario crear un postinstscript, pero la solución sigue siendo un poco complicada. Yo uso dhcomodín en debian/rules:

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

binary:
        dh $@

que hace todo lo necesario. Pero necesito anular la propiedad de algunos directorios (vamos a llamarlo datos). Entonces debo hacer alguna excepción, uso una directiva especial (este es un ejemplo):

    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 

El directorio de datos no necesita estar en el archivo * .dirs. Pero aún hay un truco. Debhelper contiene la secuencia de comandos dh_fixperms, que corregiría la propiedad a la raíz, por lo que también debemos anular:

override_dh_fixperms:
    dh_fixperms --exclude data

Eso es todo. Tenga en cuenta que el directorio de datos no cuenta como un conffile, por lo que se eliminará al eliminar el paquete. Si necesita hacer un conffile es otra historia.

Marek Šimon
fuente
¿Requiere esto que el usuario y el grupo existan en el sistema donde se construye el paquete? Y en caso afirmativo, ¿hay alguna manera de garantizar eso con un mecanismo basado en Debian?
moritz
Esto creará los directorios en el sistema utilizado para construir el paquete debian, no el sistema en el que está instalado el paquete.
gerardw