mcpan - install perl modules ubuntu
¿Cómo puedo instalar módulos de CPAN localmente sin acceso de root(DynaLoader.pm línea 229 error)? (6)
¿Existe el archivo en cuestión (CSV_XS.so)?
¿Existe en la ubicación indicada?
Si lo haces:
set |grep PERL
¿Cuál es el resultado?
¿Has instalado con éxito otros módulos perl locales?
No funciona con otros módulos, sino para dar un ejemplo. Instalé Text :: CSV_XS con una configuración de CPAN:
''makepl_arg'' => q[PREFIX=~/lib],
Cuando intento ejecutar un script test.pl:
$ perl test.pl
#!/usr/bin/perl
use lib "/homes/foobar/lib/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi";
use Text::CSV_XS;
print "test";
yo obtengo
Can''t load ''/homes/foobar/lib/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/Text/CSV_XS/CSV_XS.so'' for module Text::CSV_XS: /homes/foobar/lib/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/Text/CSV_XS/CSV_XS.so: cannot open shared object file: No such file or directory at /www/common/perl/lib/5.8.2/i686-linux/DynaLoader.pm line 229. at test.pl line 6 Compilation failed in require at test.pl line 6. BEGIN failed--compilation aborted at test.pl line 6.
Remonté el error a DynaLoader.pm sucede en esta línea:
# Many dynamic extension loading problems will appear to come from
# this section of code: XYZ failed at line 123 of DynaLoader.pm.
# Often these errors are actually occurring in the initialisation
# C code of the extension XS file. Perl reports the error as being
# in this perl code simply because this was the last perl code
# it executed.
my $libref = dl_load_file($file, $module->dl_load_flags) or
croak("Can''t load ''$file'' for module $module: ".dl_error());
CSV_XS.so existe en el directorio de arriba
Cuando instaló el módulo, ¿miró la salida? ¿Dónde dijo que instaló el módulo? Mira en lib . ¿Ves el siguiente directorio que esperas?
Busque en ~ / lib para ver dónde terminó todo para verificar que tiene el nombre de directorio correcto en su declaración de use lib
:
% find ~/lib -name CSV_XS.so
Una vez que vea dónde está instalado, use ese nombre de directorio en su use lib
(o PERL5LIB o lo que sea).
Espero que tengas una lib/lib
allí de alguna manera. El PREFIX
es solo el, bueno, prefijo, y el instalador agrega otras porciones de directorio a esa ruta base. Eso incluye lib, man, bin, etc.
Le sugiero que instale su propio perl en su propio directorio personal, si tiene espacio. Luego puede mantener todo bajo su control y mantener su propio conjunto de módulos, así como escapar si los administradores lo mantienen en una versión anterior de Perl. (Por no mencionar que se debe preservar si actualizan algún día y omiten todos los módulos en los que confía).
Del mensaje de error ("at / www / common ...") se desprende que su script es un script CGI o mod_perl. El servidor web probablemente no se está ejecutando como el usuario ''foo'', bajo cuyo directorio de inicio ha instalado el módulo, lo que podría provocar que el servidor web no pueda leer ese directorio.
También puede estar ejecutándose en una " cárcel chroot ", lo que significaría que el directorio en el que instaló el módulo puede no ser visible para el script.
En otras palabras, solo porque pueda ver el módulo, no significa que el servidor web, y por lo tanto su script, puedan hacerlo. Debe verificar los permisos de archivos relevantes, y si el servidor está en chroot, si su directorio de módulos está montado dentro del sistema de archivos virtual.
Personalmente, sugeriría usar local :: lib . :)
Pruebe esto en su lugar:
''makepl_arg'' => q[PREFIX=~/]
PREFIX establece la base para todos los directorios en los que va a instalar (bin, lib, etc.).
También puede encontrarse con problemas de expansión de shell con su ''~''. Puede intentar expandirlo usted mismo:
''makepl_arg'' => q[PREFIX=/home/users/foobar]
También sería útil si incluyese los comandos que utilizó para obtener el error por el que está preguntando.