如何手动安装Redis perl库,即离线.我可以从哪里获得要安装的所有依赖项



我正在尝试安装check_redis插件,为此我需要 redis perl 库,但我无法访问 CPAN 和互联网。那么有没有办法通过下载zip文件和所有依赖项进行安装。我正在使用纳吉欧斯核心。这是我正在尝试安装的插件

因为我在工作中遇到了类似的问题,所以我碰巧写了关于这个话题的个人问答。在这里:

Q: How to install CPAN modules without Internet access?
A: 1. Install CPAN::Mini on the internet machine:
$ cpan CPAN::Mini
2. Find a CPAN mirror here: http://mirrors.cpan.org/#de
e.g. http://ftp.hosteurope.de/pub/CPAN/
3. on the internet machine:
$ minicpan -l /path/to/local/cpan/mirror -r http://ftp.hosteurope.de/pub/CPAN/
4. Copy /path/to/local/cpan/mirror to the non-internet machine (or mount it)
5. On the non-internet machine add the directory to CPAN's search path:
$ cpan
cpan shell -- CPAN exploration and modules installation (v1.xxxx)
cpan> o conf urllist unshift file:///path/to/local/cpan/mirror
cpan> o conf commit
commit: wrote /home/user/.cpan/CPAN/MyConfig.pm
6. Install as usual on the non-internet machine.

要更新您的 CPAN 镜像,请转到您的互联网机器并重复步骤 3 和 4。

引用:

  • http://www.perlmonks.org/?node_id=590386
  • http://www.cpan.org/misc/how-to-mirror.html
  • http://search.cpan.org/~rjbs/CPAN-Mini-1.111016/lib/CPAN/Mini.pm
  • http://search.cpan.org/~rjbs/CPAN-Mini-1.111016/bin/minicpan

一些注意事项

尽管CPAN表示初始镜像仅占用约1 GB,但需要约3.5 GB。我认为他们的文件在这方面已经过时了。

镜像最初将包含 CPAN 上所有模块的最新版本。每次更新镜像时,都会下载当时的最新版本(将旧版本保留在磁盘上),因此随着新版本的到来,镜像将随着每次更新而增长

我更新了三到四次镜像,它现在有 3.9 GB。

当然,您可以手动安装东西,但这会很痛苦。

您可以从 CPAN 下载 Redis 发行版压缩包。但它很可能需要您尚未安装的其他模块。您可以在其 META.yml 文件中查看其要求列表。因此,您也可以为每个模块下载分发压缩包。但是,当然,这些模块中的每一个都可能需要您没有的其他模块。所以你可以看看他们所有的META.yml文件。就这样继续下去...

老实说,计算出将机器暂时连接到互联网的难度可能更容易:-)

您可以使用App::FatPacker将所有无法安装到check_nagios.pl中的依赖项打包。我将概述如何做到这一点。

首先,让我们确保 Nagios 插件具有允许我们执行此操作的许可证。

这个程序是自由软件;你可以重新分发它和/或修改 它根据 GNU 通用公共许可证的条款,由 自由软件基金会;许可证版本 2,或 (根据您的选择)任何更高版本。

好的,那太好了。我们可以更改来源。现在让我们克隆它,这样我们就有了整个东西。

$ git clone git@github.com:willixix/WL-NagiosPlugins.git
$ cd WL-NagiosPlugins

现在我们需要将 App::FatPacker 安装到我们的本地 Perl 中。我们需要在一台机器上这样做,从互联网上安装东西不是问题。您可以在用于编写问题的计算机上执行此操作。

$ cpanm App::FatPacker

之后,我们还需要安装所有依赖项。我们知道这需要Redis,所以

$ cpanm Redis

现在通常您需要做的就是运行fatpack pack命令,但这会打包所有内容。我们真的不需要那个。毕竟,我们在目标系统上确实有核心模块。因此,我们将逐步做到这一点。

首先,我们需要告诉fatpack找到所有的依赖项。

$ fatpack trace check_redis.pl

这将创建一个fatpacker.trace文件。

$ cat fatpacker.trace 
IO/Handle.pm
Data/Dumper.pm
IO.pm
bytes.pm
Socket.pm
overload.pm
vars.pm
Redis/Sentinel.pm
lib.pm
Symbol.pm
Redis.pm
IO/Select.pm
PerlIO/via/Timeout.pm
base.pm
Scalar/Util.pm
fields.pm
IO/Socket/UNIX.pm
DynaLoader.pm
constant.pm
overloading.pm
Errno.pm
Getopt/Long.pm
warnings/register.pm
Carp.pm
IO/Socket.pm
SelectSaver.pm
Exporter/Heavy.pm
IO/Socket/Timeout.pm
List/Util.pm
Sub/Util.pm
Fcntl.pm
Time/HiRes.pm
IO/Socket/INET.pm
Try/Tiny.pm
Config.pm
Text/ParseWords.pm

我建议删除所有看起来像核心模块的内容。通过将/文件名替换为::并删除.pm,将文件名重新转换为模块名称,然后将其传递到目标计算机上随Perl一起提供的corelist实用程序中。所有的编译指示(以小写字母开头的那些)都可以忽略,它们是核心的一部分。

这是我将其缩减为我认为有意义的列表之后的列表。这可能不完整或不正确,但我无法在您的计算机上尝试。该文件现在如下所示。

$ cat fatpacker.trace 
Redis/Sentinel.pm
Redis.pm
Try/Tiny.pm

现在,我们按照fatpack文档中食谱中的手册进行操作。

$ fatpack packlists-for `cat fatpacker.trace` >packlists

packlists文件包含几个路径,用于查找这些模块的包单。这是特定于您的 Perl 安装的。

$ fatpack tree `cat packlists`

这将创建一个目录fatlib其中包含我们要捆绑的所有内容。

$ tree fatlib/
fatlib/
├── Redis
│   ├── Hash.pm
│   ├── List.pm
│   └── Sentinel.pm
├── Redis.pm
└── Try
└── Tiny.pm
2 directories, 5 files

最后,我们需要运行实际的打包命令。

$ fatpack file check_redis.pl >check_redis.packed.pl

现在我们有一个名为check_redis.packed.pl的文件。如果你打开它并查看它,你会看到一个加载一堆东西的BEGIN块。这些东西是您无法安装的依赖项。它们现在已捆绑到脚本中。

将该脚本移动到带有 Nagios 的计算机中,并使用它而不是check_nagios.pl。它现在应该可以正常工作了。

请注意,我还没有真正尝试过它是否有效,因为我既没有 Redis 也没有 Nagios 来尝试它。但它应该有效。

这在 centOs 7 中对我有用。

步骤 1:在通过以下命令连接到互联网的 centOs7 中下载依赖项:

yumdownloader --destdir=/etc/LinuxRepos/Redis epel-release
yumdownloader --destdir=/etc/LinuxRepos/Redis jemalloc
yumdownloader --destdir=/etc/LinuxRepos/Redis epel-release

第 2 步:从/etc/LinuxRepos/Redis 复制下载的文件,并将它们复制到目标 centOS 7。

步骤 3:通过以下方式安装软件包

yum localinstal epel-release-7-11.noarch.rpm
yum localinstall jemalloc-3.6.0-1.el7.x86_64.rpm
yum localinstall epel-release-7-11.noarch.rpm

注意:步骤 3 中的文件名可能会因当前最后一个而更改 版本。

最新更新