创建脚本以自动安装 Perl 应用程序及其依赖项

创建脚本以自动安装 Perl 应用程序及其依赖项

我有一个 Perl 应用程序,它需要很多依赖项,我需要将其部署到许多服务器上

我想编写一个脚本来自动快速地安装该 Perl 应用程序。

为了更快,我想使用包管理器安装大部分依赖项,而不是使用 CPAN 安装它们

有没有办法从 perl 模块列表中自动确定是否有适合它的 debian 软件包?如果有,则安装该软件包,如果没有,则从 CPAN 安装 Perl 模块?

答案1

嗯,一种方法是考虑在系统包管理器(即 apt-get)周围编写一个包装器,如果没有返回包,则使用 cpan、cpanm 等进行安装。

子检查预请求包{
  我的 $package = shift;
  系统(“dpkg -s $package > /dev/null 2>&1”);
  如果($?!= 0){
    系统(“apt-get -y install $package > /dev/null 2>&1”);
      如果($?!= 0){
        系统(“cpanm $package”);
      }
  }
  elsif ($? == 0) {
    打印“包$package已经安装\n”;
  }
}

我的@pre_req_packages = qw(strace nmap gcc);

foreach(@pre_req_packages) {
  检查预请求包($_);
}

当然,用这种方法你必须区分大小写(或者更改大小写),因为我相信 debian 使用 lib(package-name)-perl 的格式,全部小写,而 cpan 需要不同的格式等等,而且这段代码是未经测试的,只是随便拼凑起来的。

然后是经典的 bash 脚本,我在这个例子中使用了系统命令

我最好的建议是,您考虑使用类似 cfengine 或 puppet 之类的东西和/或其他我确信存在的系统配置管理。然后使用 svn 或 git 等...进行更改以推送到将部署到所有服务器的存储库。如果您要管理和更改“众多”服务器,那么一旦设置好,cfengine/puppet/etc 将使您的生活变得轻松很多。只是我的两个。

答案2

我的建议:

  • 首先,看一下.bash_history已经安装的目标,很有可能你会发现很多已经写好的、随时可用的代码。用于自动安装 Perl 应用程序及其依赖项的脚本

    你可以安装一个目标,使用只有一个终端(注意不要在同一目标上使用另一个会话,以确保每个操作都将被正确记录),并使用script命令。

    script -t install-perl 2>install-perl.t

    尽量不要使用交互式命令,或者将每个操作记录到桌面上的另一个文本文件中。

    从那里,你必须能够精细地追溯整个过程

    scriptreplay install-perl.t install-perl

    并构建一个 shell 脚本,甚至通过过滤结果文件install-perl或仅仅是目标的.bash_history

  • 中间方式制作正确的安装,而不是使用复制它们tar。有时这样做更简单,因为所有不是 debian 打包的添加仅限于/usr/local

    或者更简单,/usr/local在单独的分区中共享并安装只读所有目标上的模式。

  • 最后,更多Debian:从正确的安装开始(可以称为掌握),创建一个 debian 包,将它们安装在您自己的企业存储库中(一些内部 Web 或 ftp 服务器中的简单目录,包含确切的目录结构和您必须执行的公钥。)。在您的目标中引用此存储库并正确维护您的主存储库。

    注意:理想情况下,您必须为使用的每个 perl 库构建一个包(或每个库系列一个包),但这会产生一些额外的工作,而且除非您想与 Debian 打包程序共享或贡献,否则实际上没有必要。

注意:最后这个解决方案看起来有点过头了(意味着维护人员需要学习一些东西),但总的来说:

  1. 这只需学习一次,在第二次甚至第三次升级后就会非常快。
  2. 这是最有效且最具可扩展性的解决方案。
  3. 这必须在已经存在的工作上完成,而无需再考虑。
  4. 如果做得好,这可能会比完成这一切的硬件存在的时间更长。

答案3

我建议使用perlbrew。多年来我发现,如果你的应用程序依赖于特定的解释器:Ruby、Perl、Python 等,那么为你的应用程序设置专用的解释器安装通常是一个更好的主意,而不是依赖于特定发行版中包含的解释器。

Perlbrew 在你的目录中维护着完整的 Perl 安装$HOME。事实上你可以多种的Perl 版本及其这样你就可以进行测试,您完全从一个版本升级到另一个版本。通过这种方式,您的应用程序与依赖发行版的 Perl 版本时可能发生的升级完全分开。

摘自 perlbrew 网页:

perlbrew 是一个用于管理 $HOME 目录中的多个 perl 安装的工具。它们是完全独立的 perl 宇宙。这种方法有很多好处:

  • 不再需要运行 sudo 来安装 CPAN 模块。
  • 尝试每月发布的新 perl。
  • 学习新的语言特性。
  • 针对不同的 perl 版本测试您的生产代码。
  • 保留供应商 perl (操作系统附带的那个)。

安装轻而易举

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

资源

相关内容