Jak utworzyć katalog i zmienić jego właściciela za pomocą pakietu deb

11

Muszę utworzyć pakiet deb, który utworzy katalog dla dzienników. Chcę utworzyć katalog /var/logs/my_packagei zmienić jego właściciela na my_user.

W dokumentacji znajdują się informacje, które mogę utworzyć plik debian/dir. Ale są informacje, że nie jest to najlepszy sposób, aby to zrobić. I nie ma informacji jak zmienić właściciela katalogu (myślę o umieszczeniu polecenia chown my_user.my_user /var/logs/my_packagew debian/postinstpliku).

Jaki jest zalecany sposób utworzenia katalogu z pakietem deb?

Besarabow
źródło
Witamy w Ask Ubuntu. Czy mógłbyś poświęcić trochę czasu na przeczytanie askubuntu.com/help/someone-answers
Sylvain Pineau

Odpowiedzi:

9

Miałeś rację, potrzebujesz debian/my_package.postintpliku, aby wykonać taką operację:

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

Uwaga : Skrypt sprawdza, czy użytkownik istnieje przed wywołaniem chown.

Sylvain Pineau
źródło
1
Bardzo mi przykro, ale to nie odpowiada na moje pytanie.
bessarabov
Wyjaśnij, dlaczego ten skrypt postinst nie odpowiada na twoje pierwotne pytanie. Jestem teraz trochę zaskoczony.
Sylvain Pineau
Przepraszam, że nie wyjaśniłem tego we właściwy sposób. Twoje rozwiązanie działa dobrze i to właśnie wdrożyłem. Ale doktorzy mówią, This generally means there is a problem with the Makefile.że rozumiem tę wiadomość, że istnieje inny sposób, aby to zrobić. I chcę się dowiedzieć, jaki jest zalecany sposób wykonania tego zadania.
bessarabov
1
Można utworzyć katalog, w debian/rulesktórym znajdują się Makefilepakiety debian. Ponieważ nie znałem twojego debian/rules, wolałem zaproponować rozwiązanie oparte na jednym pliku. Ale chownpolecenie musi być procesem poinstalacyjnym. Debian / dirs należy unikać, ale moja wstępna odpowiedź jest całkowicie w porządku. Głosuj i zaakceptuj to, dzięki.
Sylvain Pineau
3

Nie musisz tworzyć postinstskryptu, ale rozwiązanie jest nadal nieco trudne. Używam dhsymboli wieloznacznych w debian/rules:

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

binary:
        dh $@

który robi wszystkie potrzebne rzeczy. Ale muszę zastąpić część własności katalogu (nazwijmy to danymi). Muszę więc zrobić wyjątek, używam specjalnej dyrektywy (to jest przykład):

    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 

Katalog danych nie musi znajdować się w pliku * .dirs. Ale wciąż jest jedna sztuczka. Debhelper zawiera skrypt dh_fixperms, który naprawiłby własność z powrotem do katalogu głównego, więc musimy też przesłonić:

override_dh_fixperms:
    dh_fixperms --exclude data

To wszystko. Pamiętaj, że katalog danych nie jest liczony jako plik konfiguracyjny, więc zostanie usunięty po usunięciu pakietu. Jeśli musisz zmienić go w conffile, to inna historia.

Marek Šimon
źródło
Czy wymaga to, aby użytkownik i grupa istnieli w systemie, w którym pakiet jest zbudowany? A jeśli tak, czy istnieje sposób, aby zapewnić to dzięki mechanizmowi opartemu na Debianie?
moritz
Spowoduje to utworzenie katalogów w systemie używanym do zbudowania pakietu debian, a nie w systemie, w którym pakiet jest zainstalowany.
gerardw