Як створити каталог і змінити власника за допомогою пакета deb


11

Мені потрібно створити пакет deb, який створить каталог для журналів. Я хочу створити каталог /var/logs/my_packageі змінити його власника my_user.

У документах є інформація про те, що я можу створити файл debian/dir. Але є інформація, що це не найкращий спосіб зробити це. І немає інформації, як слід змінити там власника каталогу (я думаю про розміщення команди chown my_user.my_user /var/logs/my_packageу debian/postinstфайл).

Який рекомендований спосіб створити каталог із пакетом deb?


Ласкаво просимо до Ask Ubuntu. Скажіть,
Sylvain

Відповіді:


9

Ви мали рацію, вам потрібен debian/my_package.postintфайл для виконання такої операції:

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

Примітка . Сценарій перевіряє, чи існує користувач перед тим, як дзвонити chown.


1
Мені дуже шкода, але це не відповідає на моє запитання.
bessarabov

Поясніть, будь ласка, чому цей поштовий сценарій не відповідає на ваше первісне запитання. Я зараз трохи спантеличений.
Сільвейн Пано

Мені шкода, що я не пояснив це належним чином. Ваше рішення працює добре, і це те, що я реалізував. Але документи говорять, що This generally means there is a problem with the Makefile.я розумію це повідомлення, що є ще якийсь спосіб зробити це. І я хочу дізнатися, яким способом було виконано це завдання.
bessarabov

1
Створення каталогу може бути зроблено , debian/rulesякий є Makefileдля Debian пакетів. Оскільки я не знав вашого, debian/rulesя вважав за краще запропонувати рішення, засноване на одному файлі. Але chownкоманда повинна бути процесом після встановлення. debian / dirs слід уникати, але моя початкова відповідь ідеально чудова. Будь ласка, проголосуйте та прийміть це, дякую.
Sylvain Pineau

3

Йо не потрібно створювати postinstсценарій, але рішення все-таки трохи складне. Я використовую dhпідстановку в debian/rules:

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

binary:
        dh $@

який робить усі необхідні речі. Але мені потрібно змінити деяку власність режиму (давайте назвати це даними). Тому я повинен зробити якийсь виняток, я використовую спеціальну директиву (це приклад):

    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 

Каталог даних не повинен бути у файлі * .dirs. Але все ж є одна хитрість. Debhelper містить скрипт dh_fixperms, який би виправляв право власності до кореня, тому нам також потрібно переосмислити:

override_dh_fixperms:
    dh_fixperms --exclude data

Це все. Майте на увазі, що дані dir не враховуються як conffile, тому вони будуть видалені під час видалення пакета. Якщо вам потрібно зробити це конфіле, це вже інша історія.


Чи потрібно це, щоб користувач та група існували в системі, де побудований пакет? І якщо так, чи є спосіб забезпечити це механізмом на основі Debian?
moritz

Це створить каталоги в системі, що використовується для створення пакета debian, а не систему, на якій встановлено пакет.
gerardw
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.