使用PAR发布Perl应用
PAR简介PAR相当于Perl的Jar。使用PAR可以把模块(包括跨平台的pm及XS本地代码)及资源文件打包在一起,方便应用的发布。传统的Perl应用发布是将模块装到预定义的系统级目录中去,比如,vendor perl, site perl等位置。对于单个应用而言,将其所需的文件散落到不同的系统目录下不利于管理。主要的弊病有:
[*]因为应用依赖于特定版本的第三模块,当安装在系统级目录中的这些模块升级可能导致应用无法使用
[*]升级不方便,系统目录一般需要root权限才能更新
[*]商业应用保护源码不方便
PAR可以将整个应用包括Perl编译器,核心库,应用本身的模块和第三模块统统打包在一个可执行文件中,彻底隔离了系统级模块升级带来的影响。这大大方便了应用在目标机器上的安装。
PAR打包实例
使用PAR打包先要安装Par::Packer模块,该模块包含了一个pp的命令行工具用来进行打包。pp可以产生普通的par文件,也可以生成可执行程序。生成可以在没有安装Perl的目标机器上执行的程序,用-o选项,最后的参数是要包装的.pl程序。pp会自动扫描应用依赖的所有模块,对于那些被应用动态加载的模块,打包时要用-M选项明确指定。对于那些应用明确不会使用但被自动扫描出来的模块,可以用-X选项排除。以下是个完整的例子:
pp -o cvc \
-vvv \
-M backout.pl \
-M passwd.pl \
-X DBD::SQLite \
-X DBD::DBM \
-X DBD::ExampleP \
-X DBD::File \
-X DBD::Gofer \
-X DBD::Gofer::Policy \
-X DBD::Gofer::Transport \
-X DBD::NullP \
-X DBD::Sponge \
-X DBD::Gofer::Policy::Base \
-X DBD::Gofer::Policy::classic \
-X DBD::Gofer::Policy::pedantic \
-X DBD::Gofer::Policy::rush \
-X DBD::Gofer::Transport::Base \
-X DBD::Gofer::Transport::null \
-X DBD::Gofer::Transport::pipeone \
-X DBD::Gofer::Transport::stream\
cvc.pl
RPM封装
将PAR包装的可执行程序再用RPM封装可以利用RPM的软件包管理系统方便应用的分发。但是,在RPM构建过程中RPM的自动剥离ELF可执行文件冗余内容的功能会错误地把pp打包的模块去除掉,导致应用不完整。所以,在spec文件中必须禁止自动剥离功能(strip)。具体办法是在spec文件头加上:
%define __os_install_post %{nil}
这个语句使得以下自动剥离功能失效:
brp-compress
brp-strip
brp-strip-static-archive
brp-strip-comment-note
页:
[1]