如何使用 deb 包创建目录并更改其所有者

bes*_*bov 11 package-management permissions directory deb chown

我需要创建 deb 包来为日志创建目录。我想创建目录/var/logs/my_package并将其所有者更改为my_user.

文档中有我可以创建文件的信息debian/dir。但是有信息表明这不是最好的方法。并且没有信息应该如何更改目录所有者(我正在考虑将命令chown my_user.my_user /var/logs/my_package放在debian/postinst文件中)。

使用 deb 包创建目录的推荐方法是什么?

Syl*_*eau 9

你是对的,你需要一个debian/my_package.postinst文件来执行这样的操作:

#!/bin/sh

#DEBHELPER#

set -e

DIR="/var/log/my_package/"
USER="my_user"

mkdir -p ${DIR}    
if id -u ${USER} > /dev/null 2>&1; then    
    chown ${USER}:${USER} ${DIR}
fi
Run Code Online (Sandbox Code Playgroud)

注意:脚本在调用之前检查用户是否存在chown

  • 我非常抱歉,但这并不能回答我的问题。 (2认同)

小智 5

哟不需要创建postinst脚本,但解决方案仍然有点棘手。我使用dh通配符debian/rules

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

binary:
        dh $@
Run Code Online (Sandbox Code Playgroud)

它做所有需要的东西。但我需要覆盖一些目录的所有权(我们称之为数据)。所以我必须做一些例外,我使用特殊指令(这是一个例子):

    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 
Run Code Online (Sandbox Code Playgroud)

数据目录不需要在 *.dirs 文件中。但仍然有一个技巧。Debhelper 包含脚本 dh_fixperms,它会将所有权修复回 root,因此我们也需要覆盖:

override_dh_fixperms:
    dh_fixperms --exclude data
Run Code Online (Sandbox Code Playgroud)

就这样。请记住,数据目录不算作 conffile,因此它将在包删除时删除。如果您需要将其设为 conffile,那就是另一回事了。