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?


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.