web-dev-qa-db-ja.com

debパッケージを使用してディレクトリを作成し、その所有者を変更する方法

ログ用のディレクトリを作成するdebパッケージを作成する必要があります。ディレクトリ/var/logs/my_packageを作成し、その所有者をmy_userに変更したい。

ドキュメントには情報があります では、ファイルdebian/dirを作成できます。しかし、これが最善の方法ではないという情報があります。また、ディレクトリの所有者をどのように変更するかについての情報はありません(chown my_user.my_user /var/logs/my_packageitコマンドをdebian/postinstファイルに配置することを考えています)。

Debパッケージでディレクトリを作成する推奨される方法は何ですか?

10
bessarabov

そのような操作を実行するには、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を呼び出す前にユーザーが存在するかどうかを確認します。

8
Sylvain Pineau

postinstスクリプトを作成する必要はありませんが、解決策はまだ少し複雑です。 debian/rulesdhワイルドカードを使用します:

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

binary:
        dh $@

これは必要なすべてを行います。ただし、dirの所有権をオーバーライドする必要があります(データをデータと呼びます)。そのため、いくつかの例外を作成する必要があります。特別なディレクティブを使用します(これは一例です)。

    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ファイルにある必要はありません。しかし、まだ1つのトリックがあります。 Debhelperには、所有権をルートに戻すスクリプトdh_fixpermsが含まれているため、オーバーライドする必要があります。

override_dh_fixperms:
    dh_fixperms --exclude data

それで全部です。データディレクトリはconffileとしてカウントされないため、パッケージの削除時に削除されることに注意してください。 conffileにする必要がある場合は、別の話です。

3
Marek Šimon