Как создать каталог и изменить его владельца с помощью пакета deb

11

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

В документации есть информация, что я могу создать файл debian/dir. Но есть информация, что это не лучший способ сделать это. И нет никакой информации о том, как нужно менять там владельца каталога (я думаю о том, чтобы поместить команду chown my_user.my_user /var/logs/my_packageв debian/postinstфайл).

Каков рекомендуемый способ создания каталога с пакетом deb?

Бессарабов
источник
Добро пожаловать в Спросите Ubuntu. Пожалуйста, не могли бы вы уделить
Сильвен Пино,

Ответы:

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
Мне очень жаль, но это не отвечает на мой вопрос.
Бессарабов
Пожалуйста, объясните, почему этот скрипт postinst не отвечает на ваш первоначальный вопрос. Я немного озадачен сейчас.
Сильвен Пино
Мне жаль, что я не объяснил это должным образом. Ваше решение работает отлично, и это то, что я реализовал. Но документы говорят, что This generally means there is a problem with the Makefile.я понимаю это сообщение, что есть другой способ сделать это. И я хочу выяснить, каков рекомендуемый способ решения этой задачи.
Бессарабов
1
Можно создать каталог, в debian/rulesкотором находятся Makefileпакеты для Debian. Поскольку я не знал ваших, debian/rulesя предпочел предложить решение, основанное на одном файле. Но chownкоманда должна быть процессом после установки. Следует избегать использования debian / dirs, но мой первоначальный ответ в порядке. Пожалуйста, проголосуйте и примите это, спасибо.
Сильвен Пино
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

Это все. Помните, что каталог данных не считается conffile, поэтому он будет удален при удалении пакета. Если вам нужно сделать это conffile, это другая история.

Марек Шимон
источник
Требуется ли для этого наличие пользователя и группы в системе, в которой собран пакет? И если да, есть ли способ обеспечить это с помощью механизма на основе Debian?
Мориц
Это создаст каталоги в системе, используемой для сборки пакета debian, а не в системе, в которой установлен пакет.
Gerardw