CPAN: Si no tenemos los privilegios de administrador

En las versiones mas recientes de Perl que hacen uso de las versiones mas modernas de CPAN.pm esto no es un problema. Simplemente escriba perl -MCPAN -e shell y responda al interrogatorio para determinar la configuración que necesita.

En el caso de que la versión con la que trabajemos sea antigua y no tengamos los privilegios de administrador del sistema tendremos que trabajar un poco para usar el módulo CPAN:

 1	home/casiano[23]> uname -a
 2	Linux millo.etsii.ull.es 2.4.22-1.2188.nptl #1 \
    Wed Apr 21 20:36:05 EDT 2004 i686 i686 i386 GNU/Linux
 3	/home/casiano[5]> perl -MCPAN -e shell
 4	Terminal does not support AddHistory.
 5	
 6	Your configuration suggests "/root/.cpan" as your
 7	CPAN.pm working directory. I could not create this directory due
 8	to this error: mkdir /root/.cpan: Permiso denegado at \
              /usr/local/lib/perl5/5.8.5/CPAN.pm line 553
 9	
10	
11	Please make sure the directory exists and is writable.
12
Lo primero que obtenemos es un fracaso: Obviamente no podemos modificar el fichero /root/.cpan. Por tanto deberemos indicar que este no es el fichero de configuración:
13	/home/casiano[6]> mkdir .cpan
14	/home/casiano[7]> mkdir .cpan/CPAN
15	/home/casiano[9]> perl -MCPAN::Config -e 'print $INC{"CPAN/Config.pm"},"\n"'
16	/usr/local/lib/perl5/5.8.5/CPAN/Config.pm
En la línea 15 ejecutamos un guión interactivo (-e) que carga el módulo CPAN::Config (opción -M) y que hace uso del hash %INC .
17	/home/casiano[10]> cp /usr/local/lib/perl5/5.8.5/CPAN/Config.pm .cpan/CPAN/MyConfig.pm
18	/home/casiano[11]> cd .cpan/CPAN/
19	/home/casiano/.cpan/CPAN[12]> perl -ne 'print if /(build_dir|keep_source_where)/' MyConfig.pm
20	  'build_dir' => q[/root/.cpan/build],
21	  'keep_source_where' => q[/root/.cpan/sources],
La opción -n en la línea 19 envuelve en un bucle de lectura el guión interactivo. Muestra las líneas del fichero que casan con la expresión regular. Ahora editamos el fichero y cambiamos las líneas que hacen alusión al root:
/home/casiano/.cpan/CPAN[13]> vi MyConfig.pm
un poco después ...
23	/home/casiano/.cpan/CPAN[16]> perl -ne 'print if /(casiano)/' MyConfig.pm
24	  'build_dir' => q[/scratch/casiano/build],
25	  'cpan_home' => q[/scratch/casiano/.cpan],
26	  'histfile' => q[/scratch/casiano/.cpan/histfile],
27	  'keep_source_where' => q[/scratch/casiano/.cpan/sources],
El comando nos muestra que líneas fueron cambiadas en la edición. Ahora estamos en condiciones de ejecutar CPAN, pero tenemos que hacer aún algunos cambios en la configuración:
28	/home/casiano/.cpan/CPAN[19]> perl -MCPAN -e shell
29	Terminal does not support AddHistory.
30	
31	cpan shell -- CPAN exploration and modules installation (v1.7601)
32	ReadLine support available (try 'install Bundle::CPAN')
33	cpan> o conf makepl_arg PREFIX=/scratch/casiano/perl
34	    makepl_arg         PREFIX=/scratch/casiano/perl
35	cpan> o conf commit
36	commit: wrote /home/casiano/.cpan/CPAN/MyConfig.pm
En las líneas 33 y 35 le hemos indicado a CPAN donde debe dejar los módulos descargados. Deberemos asegurarnos que los programas que usen esos módulos tengan dicho directorio en su @INC. Ahora podemos instalar un módulo:
37	cpan> install Parse::Yapp
38	CPAN: Storable loaded ok
39	Going to read /scratch/casiano/.cpan/Metadata
40	....
41	Appending installation info to /scratch/casiano/perl/lib/perl5/5.8.5/i686-linux/perllocal.pod
42	  /usr/bin/make install  -- OK
Veamos la jerarquía creada por la instalacion de Parse::Yapp
$ tree /scratch/casiano/perl/
/scratch/casiano/perl/
|-- bin
|   `-- yapp
|-- lib
|   `-- perl5
|       |-- 5.8.5
|       |   `-- i686-linux
|       |       `-- perllocal.pod
|       `-- site_perl
|           `-- 5.8.5
|               |-- Parse
|               |   |-- Yapp
|               |   |   |-- Driver.pm
|               |   |   |-- Grammar.pm
|               |   |   |-- Lalr.pm
|               |   |   |-- Options.pm
|               |   |   |-- Output.pm
|               |   |   `-- Parse.pm
|               |   `-- Yapp.pm
|               `-- i686-linux
|                   `-- auto
|                       `-- Parse
|                           `-- Yapp
`-- share
    `-- man
        |-- man1
        |   `-- yapp.1
        `-- man3
            `-- Parse::Yapp.3

17 directories, 11 files
Aún mas secillo: use el módulo CPAN::FirstTime:
$ perl -MCPAN::FirstTime -e 'CPAN::FirstTime::init()'
CPAN is the world-wide archive of perl resources. It consists of about
100 sites that all replicate the same contents all around the globe.
Many countries have at least one CPAN site already. The resources
found on CPAN are easily accessible with the CPAN.pm module. If you
want to use CPAN.pm, you have to configure it properly.

If you do not want to enter a dialog now, you can answer 'no' to this
question and I'll try to autoconfigure. (Note: you can revisit this
dialog anytime later by typing 'o conf init' at the cpan prompt.)

Are you ready for manual configuration? [yes] yes


The following questions are intended to help you with the
configuration. The CPAN module needs a directory of its own to cache
important index files and maybe keep a temporary mirror of CPAN files.
This may be a site-wide directory or a personal directory.



I see you already have a  directory
    /root/.cpan
Shall we use it as the general CPAN build and cache directory?

CPAN build and cache directory? [/root/.cpan]
.... # etc.

Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19