创build一个脚本来自动安装Perl应用程序及其依赖关系

我有一个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看起来有点矫枉过正(暗示一些学习维护者),但是没问题:

    1. 这只是一次学习,二次后很快,也许是第三次升级。
    2. 这是最有效和可扩展的解决scheme。
    3. 这必须在已经存在的工作上完成,而不必再次讨论。
    4. 如果做得好,这可能比所有这些硬件都存在更长的时间。

    我可以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 

    资源

    • 使用Perlbrewpipe理$ HOME目录中的多个Perl安装