How Can I Install Redis perl library Manually i.e offline.And From Where Can I Get All The Dependencies To Install

末鹿安然 提交于 2019-12-24 20:10:02

问题


I am trying to install check_redis plugin and for that i need redis perl library but i don't have access to CPAN and internet.So Is there any way to install by downloading zip file and all the dependencies.I am using nagios core.Here is the plugin i am trying to install


回答1:


Because I had a similar problem at work I happened to write my personal Q&A on this topic. Here it is:

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.

To update your CPAN mirror go to your internet machine and repeat steps 3 and 4.

References:

  • 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

Some notes

Although CPAN says the initial mirror will only occupy around 1 GB it will need around 3.5 GB. I think their documentation is outdated in this regard.

The mirror will initially contain the latest versions of all modules on CPAN. Every time you update your mirror the then-latest versions will be downloaded (leaving the old versions on your disk), so the mirror will grow with each update as new versions arrive.

I updated my mirror three or four times and it now has 3.9 GB.




回答2:


You can install thing manually, of course, but it will be painful.

You can download the Redis distribution tarball from CPAN. But it might well require other modules that you don't have installed. You can see its list of requirements in its META.yml file. So you can download the distribution tarballs for each of those modules too. But, of course, each of those modules is likely to require other modules that you don't have. So you can look at all of their META.yml files. And so it goes on...

Honestly, it might be easier to work out how hard it would be to get the machine connected to the internet temporarily :-)




回答3:


You could fatpack all the dependencies you cannot install into the check_nagios.pl using App::FatPacker. I'll outline how to do that.

First, let's make sure that the Nagios plugin has a licence that allows us to do this.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

Ok, that's great. We're allowed to alter the source. Now let's clone it so we have the whole thing.

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

Now we need to install App::FatPacker to our local Perl. We need to do this on a machine were installing stuff from the internet is not a problem. You can do it on the machine you used to write your question.

$ cpanm App::FatPacker

Afterwards, we need to also install all the dependencies. We know this needs Redis, so

$ cpanm Redis

Now typically all you need to do is run the fatpack pack command, but that would pack everything. And we don't really need that. We do have core modules on the target system after all. So we will do this step by step.

First, we need to tell fatpack to find all the dependencies.

$ fatpack trace check_redis.pl

This will create a fatpacker.trace file.

$ 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

I would suggest removing everything that looks like a core module. You turn the file names back into module names by replacing / with :: and removing the .pm, and then pass that into the corelist utility that ships with Perl on the target machine. All the pragmata (the ones that start with small letters) can be ignored, they are part of the core.

Here is the list after I cut it down to what I think makes sense to include. This might not be complete, or incorrect, but I can't try on your machine. The file now looks like this.

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

Now we follow the manual in RECIPES in the fatpack documentation.

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

The packlists file contains a couple of paths for where to find the packlists for those modules. This is specific to your Perl installation.

$ fatpack tree `cat packlists`

This will create a directory fatlib that contains all the stuff we want to bundle.

$ tree fatlib/
fatlib/
├── Redis
│   ├── Hash.pm
│   ├── List.pm
│   └── Sentinel.pm
├── Redis.pm
└── Try
    └── Tiny.pm

2 directories, 5 files

Last, we need to run the actual packing command.

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

And now we have a file called check_redis.packed.pl that. If you open that and look at it, you'll see a BEGIN block that loads a bunch of stuff. That stuff is the dependencies that you could not install. They are now bundled into the script.

Move that script to the machine with your Nagios, and use it instead of the check_nagios.pl. It should now just work.

Please note that I have not actually tried if it works because I neither have a Redis nor a Nagios to try it. But it should work.




回答4:


This worked for me in centOs 7.

step 1: Download dependencies in a centOs7 that is connected to internet by these commands:

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

step 2: copy downloaded files from /etc/LinuxRepos/Redis and copy them to destination centOS 7.

step 3: Install packages by

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

NOTICE: The name of files in step 3 may be changed due to current last version.



来源:https://stackoverflow.com/questions/44542634/how-can-i-install-redis-perl-library-manually-i-e-offline-and-from-where-can-i-g

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!