我读到过,如果你必须使用
debian/[.]dirs
文件,那意味着你的
make install
步骤没有正确完成其工作。该步骤应该创建该文件夹。
以下是我发现的问题:
1.
make install
无法在除了
/usr
(对于Debian软件包)之外的目录下安装任何内容,所以如果你想要一个位于
/etc/...
、
/var/lib//...
等目录下的文件夹,它就没用了。
2. 如果你在
debian/[.]postinst
脚本中使用了
mkdir -p ...
,那么你需要在
debian/[.].postrm
脚本中手动使用
rmdir ...
来删除它。
所以Marek Šimon提出的解决方案与我的相同,唯一的区别是我使用
chown ...
而不是
install -d ...
,尽管使用
install -d ...
可以完全避免
debian/[<package>.]dirs
。个人而言,我喜欢在一个单独的文件中看到我创建的目录列表,这样看起来更清晰明了。
示例
创建这些目录:
# in debian/package.dirs
/etc/package/magic/configuration
/var/www/package/data
更改所有权:
# in debian/rules
override_dh_fixperms:
dh_fixperms
chmod 700 debian/tmp/var/www/package/data
chown www-data:www-data debian/tmp/var/www/package/data
警告:
debian/rules
文件使用制表符缩进目标名称下的代码。 这非常重要。
如示例所示,我也经常更改权限(
chmod
)。
如果您创建两个或多个软件包,则需要使用
debian/tmp/...
引导程序。 如果您只创建一个软件包,则我不太确定它是什么(部分原因是我的项目很少只有一个软件包,而且当您添加第二个软件包时,许多路径会发生变化,因此我总是至少包括一个几乎为空的
package-doc.install
,以便它不会对我产生影响)。
最后注意:
如果您要创建要由Debian或Ubuntu接受的公共Debian软件包,则可能要遵循Sylvain Pineau的解决方案。 请记住,在清除操作中,您需要删除自己的目录(除非用户在其中创建了自己的文件)。
debian/rules
中完成,这是Debian软件包的Makefile
。由于我不知道你的debian/rules
,所以我更倾向于提出一个基于单个文件的解决方案。但是chown
命令必须作为安装后的处理过程。应该避免使用debian/dirs,但我的初始答案完全没问题。请投票并接受它,谢谢。 - Sylvain Pineaupostinst
而不是postint
。 - kayn