首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让一个基于Dist::Zilla的Perl模块(或app)将文件安装到/etc/?

如何让一个基于Dist::Zilla的Perl模块(或app)将文件安装到/etc/?
EN

Stack Overflow用户
提问于 2014-09-25 22:23:46
回答 2查看 603关注 0票数 8

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

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

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2014-09-29 13:07:13

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

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

对于安装特定于只读模块的数据,Perl语言中的最佳实践是安装到特定于Perl安装的位置,这样做的模块是File::ShareDir::Install。您可以通过ShareDir插件Dist::Zilla::Plugin::ShareDirDist::Zilla中使用它。它甚至包含在@Basic插件包中,所以如果在dist.ini中使用@Basic,除了将数据文件放入发行库的share/目录之外,根本不需要做任何事情。

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

票数 4
EN

Stack Overflow用户

发布于 2014-09-25 22:33:20

要将复杂的模块安装程序移植到Dist::Zilla,我推荐我的插件MakeMaker::CustomModuleBuild::Custom,这取决于您喜欢哪种安装程序。这些允许您保留现有的Makefile.PLBuild.PL,只需插入Dist::Zilla所需的部分,如依赖项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26041056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档