![创建脚本以自动安装 Perl 应用程序及其依赖项](https://linux22.com/image/798032/%E5%88%9B%E5%BB%BA%E8%84%9A%E6%9C%AC%E4%BB%A5%E8%87%AA%E5%8A%A8%E5%AE%89%E8%A3%85%20Perl%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%8F%8A%E5%85%B6%E4%BE%9D%E8%B5%96%E9%A1%B9.png)
我有一个 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 打包程序共享或贡献,否则实际上没有必要。
注意:最后这个解决方案看起来有点过头了(意味着维护人员需要学习一些东西),但总的来说:
- 这只需学习一次,在第二次甚至第三次升级后就会非常快。
- 这是最有效且最具可扩展性的解决方案。
- 这必须在已经存在的工作上完成,而无需再考虑。
- 如果做得好,这可能会比完成这一切的硬件存在的时间更长。
答案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