Exclusive Perl Archive Nook
This is what the cool guys probably call DPAN these days, but I found that the whole concept of DarkPAN revolves much around getting your private stuff into the "normal" Perl toolchain, while in this case I need to be able to easily install modules in machines that are out of Internet reach.
To start with an example, suppose you have to install Dancer and a couple of its plugins in a machine that - for good reasons - is not connected to the Internet. It's easy to get the distribution files for Dancer and the plugins... but what about the dependencies? It can easily become a nightmare, forcing you to go back and forth with new modules as soon as you discover the need to install them.
Thanks to cpanminus, this is quite easier these days: it can actually do what's needed with a single command:
# on the machine connected to the Internet or to a minicpan $ cpanm -L xxx --scandeps --save-dists dists \ Dancer Dancer::Plugin::FlashNote ...
which places all the modules in subdirectory
dists (thanks to option
--save-dists) with an arrangement similar to what you would expect
from a CPAN mirror. Alas, on the target machine, you still have to make
some work - e.g. you should collect the output from the invocation of
cpanm above to figure out the order to use for installing the distribution files.
Additionally, the directory structure that is generated lacks a proper
index file (located in
modules/02package.details.txt.gz) so it would be
difficult to use the normal toolchain.
epan aims at filling up the last mile to get the job done, providing you with a subdirectory that is ready for deployment, with all the bits in place to push automation as much as possible. So you can do this:
# on the machine connected to the Internet or to a minicpan $ epan create Dancer Dancer::Plugin::FlashNote ... $ tar cvzf epan.tar.gz epan
epan.tar.gz to the target machine and...
# on the target machine $ tar xvzf epan.tar.gz $ cd epan $ ./install.sh
optionally providing an installation target directory:
$ ./install.sh /path/to/local/perl
The epan directory that is generated should be compatible with other tools - in particular, the
modules/02package.details.txt.gz file is generated, so all the toolchain (including
cpan) should play nicely with it.