我有一个Perl应用程序需要很多的依赖,我需要在众多的服务器上部署
我想制作一个能够自动快速安装Perl应用程序的脚本。
为了更快,我想使用我的软件包pipe理器来安装我的大部分依赖项,而不是使用CPAN安装它们
如果有debian软件包,有没有一种方法可以从perl模块列表中自动确定? 如果有的话,安装包,如果没有安装CPAN的Perl模块?
嗯,一种方法是在系统软件包pipe理器周围编写一个包装器,即apt-get,如果软件包没有返回,则用cpan,cpanm等进行安装。
sub check_pre_req_package {
我的$ package = shift;
系统(“dpkg -s $ package> / dev / null 2>&1”);
if($?!= 0){
系统(“apt-get -y install $ package> / dev / null 2>&1”);
if($?!= 0){
系统(“cpanm $ package”);
}
}
elsif($?== 0){
打印“Package $ package已安装\ n”;
}
}
我的@pre_req_packages = qw(strace nmap gcc);
foreach(@pre_req_packages){
check_pre_req_package($ _);
}
当然,用这种方式,你必须区分大小写(或者改变大小写),因为我相信debian使用lib(package-name)-perl格式的全部小写,而cpan将需要不同的格式等,加上这个代码是没有经过testing的东西,只是抛在一起。
然后有很好的bash脚本,在本例中我使用了系统命令
我最好的build议是,你看看使用cfengine或puppet和/或其他一些我肯定是在那里系统configurationpipe理。 然后使用svn或者git或者…来进行更改,以推送到将部署到所有服务器的repo。 如果你将要pipe理和改变“众多”服务器,那么cfengine / puppet / etc将会让你的生活变得更轻松。 只是我的两个。
我的build议是:
首先,在已安装的目标上.bash_history ,很有可能会发现很多已经写好的脚本 ,可以使用脚本来自动安装Perl应用程序及其依赖关系
比你可以安装一个目标, 只使用一个terminal (不要在同一目标上使用另一个会话,以确保每个操作都能正确logging),并使用script命令。
script -t install-perl 2>install-perl.t
尽量不要使用交互式命令,或者将每个操作logging到桌面上的另一个文本文件中。
从那里,你必须能够精确地追溯整个过程
scriptreplay install-perl.t install-perl
并构build一个shell脚本,甚至通过过滤结果文件install-perl或简单的目标的.bash_history 。
中间的方法做一个正确的安装,而不是使用tar复制它们。 有时候这样做更简单,因为所有不是debian打包的join都被限制在/usr/local 。
甚至更简单,在分离的分区上有/usr/local ,以所有目标上的只读模式共享和挂载。
最后,更多的Debian :从正确的安装,(可以称为主 ),创build一个debian软件包,将它们安装在你自己的企业资源库(简单的目录在一些内部Web或FTP服务器,包含确切的目录结构和公钥去做。)。 参考这个存储在你的目标和正确维护你的主。
注意:你必须为每个你使用的perl库build立一个包(或每个库的一个库),但是这可能会产生一些额外的工作,除非你想与Debian打包者共享或贡献,否则不是真的需要。
注意:这最后的解决scheme看起来有点矫枉过正(暗示一些学习维护者),但是没问题:
我可以build议使用perlbrew 。 一般来说,我发现多年来,如果你有一个应用程序依赖于一个特定的解释器:Ruby,Perl,Python等。通常是一个更好的主意,为您的应用程序设置一个专用的解释器安装,而不是依靠包含在特定发行版中的那些。
Perlbrew在您的$HOME目录中维护Perl的完整安装。 事实上, 在完全从一个版本升级到另一个版本之前 ,您可以拥有多个版本的Perl以及它的库,以便您可以执行testing。 通过这样做,您的应用程序与依赖发行版的Perl时可能发生的升级完全分离。
摘自perlbrew网页:
perlbrew是一个pipe理你的$ HOME目录中多个perl安装的工具。 他们是完全孤立的perl宇宙。 这种方法有很多好处:
- 无需再运行sudo来安装CPAN模块。
- 尝试每月发布的新perls。
- 学习新的语言function。
- 根据不同的perl版本testing你的产品代码。
- 把供应商的perl(OS自带的)留给我们吧。
curl -kL http://install.perlbrew.pl | bash
# Pick a preferred CPAN mirror % perlbrew mirror # See what is available % perlbrew available # See full help % perlbrew help # Install some Perls % perlbrew install 5.14.0 % perlbrew install perl-5.8.1 % perlbrew install perl-5.13.6 # See what were installed % perlbrew list # Switch perl in the $PATH % perlbrew switch perl-5.12.2 % perl -v # Temporarily use another version only in current shell. % perlbrew use perl-5.8.1 % perl -v