Como criar diretório e alterar seu proprietário com o pacote deb

11

Eu preciso criar um pacote deb que criará um diretório para logs. Eu quero criar um diretório /var/logs/my_packagee mudar seu proprietário my_user.

Nos documentos, há informações que posso criar arquivo debian/dir. Mas há informações de que essa não é a melhor maneira de fazer isso. E não há informações sobre como mudar o proprietário do diretório (estou pensando em colocar o comando chown my_user.my_user /var/logs/my_packageno debian/postinstarquivo).

Qual é a maneira recomendada de criar um diretório com o pacote deb?

bessarabov
fonte
Bem-vindo ao Ask Ubuntu. Por favor, você poderia colocar um pouco do seu tempo para ler askubuntu.com/help/someone-answers
Sylvain Pineau

Respostas:

9

Você estava certo, você precisa de um debian/my_package.postintarquivo para executar essa operação:

#!/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 : O script verifica se o usuário existe antes de chamar chown.

Sylvain Pineau
fonte
1
Sinto muito, mas isso não responde à minha pergunta.
31414 bessarabov
Explique por que esse script postinst não responde à sua pergunta original. Estou um pouco confuso agora.
394 Sylvain Pineau
Lamento não ter explicado da maneira adequada. Sua solução funciona bem e é isso que eu implementei. Mas os médicos dizem This generally means there is a problem with the Makefile.que entendi esta mensagem de que existe outra maneira de fazer isso. E eu quero descobrir qual é a maneira recomendada de fazer essa tarefa.
bessarabov
1
A criação do diretório pode ser feita na debian/rulesqual estão os Makefilepacotes debian. Como não conhecia o seu debian/rules, preferi propor uma solução com base em um único arquivo. Mas o chowncomando deve ser um processo de pós-instalação. debian / dirs deve ser evitado, mas minha resposta inicial está perfeitamente correta. Por favor vote e aceite, obrigado.
394 Sylvain Pineau
3

Você não precisa criar um postinstscript, mas a solução ainda é um pouco complicada. Eu uso dhcuringa em debian/rules:

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

binary:
        dh $@

que faz todo o material necessário. Mas preciso substituir a propriedade de algum diretório (vamos chamá-lo de dados). Portanto, devo fazer alguma exceção, uso diretiva especial (este é um exemplo):

    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 

O diretório de dados não precisa estar no arquivo * .dirs. Mas ainda há um truque. O Debhelper contém o script dh_fixperms, que consertaria a propriedade de volta ao root, portanto, precisamos substituir também:

override_dh_fixperms:
    dh_fixperms --exclude data

Isso é tudo. Lembre-se de que o diretório de dados não conta como um conffile; portanto, ele será removido na remoção do pacote. Se você precisa torná-lo um conffile, é outra história.

Marek Šimon
fonte
Isso requer que o usuário e o grupo existam no sistema em que o pacote foi criado? E se sim, existe uma maneira de garantir isso com um mecanismo baseado no Debian?
Moritz
Isso criará os diretórios no sistema usado para construir o pacote debian, não o sistema no qual o pacote está instalado.
Gerardw #