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

时间:2014-09-25 14:23:46

标签: perl installer configuration-files dist-zilla

我维护多个Perl编写的(unix-ish)应用程序,其当前安装过程由手动编写的Makefile组成,并将配置文件安装到/etc/

我真的想将他们的开发转换为使用Dist::Zilla,但到目前为止我还没有找到任何Dist :: Zilla插件或功能,它允许我将给定的文件放入{{ 1}}当/etc/(或使用Module::Build而不是ExtUtils::MakeMaker时为make install)由安装我的应用程序的本地管理员运行时。< / p>

使用纯./Build install,我可以在ExtUtils::MakeMaker中定义其他制作目标,并让MY::postamble目标通过install属性依赖其中一个。做一些类似的事情,但是通过depend { install => … },可能就足够了,但我更欣赏一种更明显的方式。

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

要从代码访问sharedir的内容,请使用File::ShareDir

答案 1 :(得分:2)

要将复杂的模块安装程序移植到Dist :: Zilla,我建议使用我的插件MakeMaker::CustomModuleBuild::Custom,具体取决于您喜欢的安装程序。这些允许您保留现有的Makefile.PLBuild.PL,并将Dist :: Zilla插入必要的位,如依赖项。