如何使用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 Pineau,

Answers:


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 2014年

请说明为什么此postinst脚本无法回答您的原始问题。我现在有点困惑。
西尔文·皮瑙

对不起,我没有以适当的方式解释它。您的解决方案工作正常,这就是我所实施的。但是文档This generally means there is a problem with the Makefile.我明白这个信息,还有其他方法可以做到。我想找出执行此任务的推荐方法。
bessarabov'4

1
该目录的创建可以做的debian/rules这是Makefile为Debian软件包。由于我不认识您,因此debian/rules我更愿意提出一个基于单个文件的解决方案。但是该chown命令必须是安装后的过程。应该避免使用debian / dirs,但我的最初回答是完全可以的。请投票并接受它,谢谢。
Sylvain Pineau'4

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 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.