perl - 如何使基于 Dist::Zilla 的 Perl 模块(或应用程序)安装文件到/etc/?

标签 perl installation configuration-files dist-zilla

我维护了多个 Perl 编写的(unix-ish)应用程序,它们当前的安装过程包括手动编写的 Makefile并将配置文件安装到 /etc/ .

我真的很想把他们的开发改成使用 Dist::Zilla ,但到目前为止,我还没有找到任何允许我将给定文件放入 /etc/ 的 Dist::Zilla 插件或功能。当make install (或 ./Build install 如果使用 Module::Build 而不是 ExtUtils::MakeMaker )由安装我的应用程序的本地管理员运行。

用纯ExtUtils::MakeMaker ,我可以在 MY::postamble 中定义额外的 make 目标让 install目标通过 depend { install => … } 依赖于其中之一属性。做类似的事情,但通过 dzil build ,可能就足够了,但我会欣赏一种更明显的方式。

一种正交方法是使应用程序不需要 /etc/ 下的文件。存在,但只是切换到 Dist::Zilla 尽管我现在只想更改构建系统,但实际代码似乎发生了很大变化。

出于好奇:我目前想到的用于切换到 Dist::Zilla 的两个应用程序是 xen-toolsunburden-home-dir .

最佳答案

最好的办法是避免将文件安装到 /etc来自任何 Perl 发行版。您无法确保 cpan 客户端(或安装用户)有权在此处安装,并且系统上可能安装了多个 Perls,因此它们中的每一个都会破坏 /etc另一个安装的文件。您无法真正防止该文件被后续安装覆盖,因此您不应将不想丢失的配置数据放在那里。

你可以把配置文件放在/etc/,如果应用程序知道在那里查找它,但是您应该允许自定义该路径(例如在测试系统上,在本地目录或用户的主目录中查找文件)。

对于安装只读模块特定数据,Perl 中的最佳实践是安装到 Perl 安装特定位置,执行此操作的模块是 File::ShareDir::Install .您可以从 Dist::Zilla 使用它使用 [ShareDir] 插件,Dist::Zilla::Plugin::ShareDir .它甚至包含在 [@Basic] 插件包中,所以如果您在 dist.ini 中使用 [@Basic] ,你不需要做任何事情,除了把你的数据文件放到share/分发存储库中的目录。

要从代码访问共享目录的内容,请使用 File::ShareDir .

关于perl - 如何使基于 Dist::Zilla 的 Perl 模块(或应用程序)安装文件到/etc/?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26041056/

相关文章:

regex - Perl 正则表达式命令行问题

mysql - OS Maverick 破坏了 MySQL?

c++ - 从有更多参数的配置文件中读取一个参数,使用 boost program_options

android - 如何访问 Android 应用程序的 classes.dex?

java - 强制开发人员显式定义配置数据的键

c++ - 从 MFC 中的配置文件加载字符串

perl - 如何在 Perl 中替换任意固定字符串

javascript - 通过 APACHE 服务器调用多个 perl 脚本?

arrays - 对具有异常值的数组进行排序的更好方法

Eclipse 上的 Android Facebook SDK 配置