我有一个Perl应用程序需要很多依赖项,我需要在众多服务器上进行部署
为了更快,我想使用我的包管理器安装我的大多数依赖项,而不是使用CPAN安装它们
有没有办法从perl模块列表中自动确定是否有debian软件包?如果有,请安装软件包,如果没有安装CPAN的Perl模块?
解决方法
嗯,一种方法是看看在系统包管理器周围写一个包装器,即apt-get,如果没有返回包,那么用cpan,cpanm等安装.
sub check_pre_req_package { my $package = shift; system("dpkg -s $package > /dev/null 2>&1"); if ( $? != 0 ) { system("apt-get -y install $package > /dev/null 2>&1"); if ( $? != 0 ) { system("cpanm $package"); } } elsif ($? == 0) { print "Package $package is already installed \n"; } } my @pre_req_packages = qw(strace nmap gcc); foreach(@pre_req_packages) { check_pre_req_package($_); }
当然,通过这种方式,您必须区分大小写(或更改大小写),因为我认为debian在所有小写字母中使用lib(package-name)-perl格式,而cpan将需要不同的格式等,加上这段代码是未经测试的,而且是刚刚抛出的东西.
然后有很好的旧bash脚本,因为我在这个例子中使用了系统命令
我最好的建议是你考虑使用像cfengine或puppet这样的东西和/或其他一些我肯定是在那里进行系统配置管理.然后使用svn或git左右…进行更改以推送到将部署到所有服务器的repo.如果你要管理并对“众多”服务器进行更改,那么cfengine / puppet / etc一旦设置就会让你的生活变得更轻松.只是我的两个.