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 包创建目录的推荐方法是什么?
你是对的,你需要一个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
。
小智 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,那就是另一回事了。