Quiero instalar módulos de Perl en un servidor compartido en el que no tengo acceso de root. ¿Cómo puedo hacer esto? También parecen tener una versión anterior de CPAN (se queja de eso cuando se ejecuta el comando), ¿es posible actualizar el comando CPAN que se usa desde mi cuenta sin requerir acceso de root?
81
Respuestas:
El método más fácil que he encontrado hasta ahora es decir
wget -O- http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib` echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile
Esto supone que su perfil se denomina
.profile
, es posible que necesite cambio que sea.bash_profile
,.bashrc
, etc. Después de que se puede instalar módulos diciendoy simplemente utilícelos de la misma manera que lo haría si estuvieran instalados en los directorios raíz.
Lo que sigue es una breve explicación de lo que hacen los comandos anteriores.
wget -O- http://cpanmin.us
obtiene la última versión decpanm
y la imprime a laSTDOUT
que luego se canalizaperl - -l ~/perl5 App::cpanminus local::lib
. El primero-
diceperl
que esperemos que el programa se activeSTDIN
, esto hace que seperl
ejecute la versióncpanm
que acabamos de descargar.perl
pasa el resto de los argumentos acpanm
. El-l ~/perl5
argumento dicecpanm
dónde instalar los módulos de Perl, y los otros dos argumentos son dos módulos para instalar.[App::cpanmins
] 1 es el paquete que se instalacpanm
.local::lib
es un módulo auxiliar que gestiona las variables de entorno necesarias para ejecutar módulos en el directorio local.Una vez instalados esos módulos, ejecutamos
eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`
para configurar las variables de entorno necesarias para usar los módulos locales y luego
echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.profile
para asegurarnos de que podremos usarlos la próxima vez que iniciemos sesión.
echo 'export MANPATH=$HOME/perl5/man:$MANPATH' >> ~/.profile
con suerte hará que el hombre encuentre las páginas de manual para sus módulos locales.
fuente
perl -I ~/perl5/lib/perl5 -Mlocal::lib
ossh-agent
que necesitan establecer variables de entorno para un proceso principal imprimen los comandos que deben ejecutarse en el proceso principal y luego ustedeval
. Sineval
embargo, en realidad no los necesitas . Se podría decirperl -I ~/perl5/lib/perl5 -Mlocal::lib > /tmp/commands; source /tmp/commands
, pero el método eval es más limpio (no hay archivos para limpiar o sobrescribir accidentalmente).http://web.archive.org/web/20120427144232/http://perl.jonallen.info/writing/articles/install-perl-modules-without-root
http://novosial.org/perl/life-with-cpan/non-root/
El paso principal en ambos conjuntos de instrucciones involucra el módulo local :: lib
AFAIK, la lógica CPAN está contenida en el módulo Perl (CPAN.pm) lo que significa que también puede instalar fácilmente el más nuevo en su directorio local como lo haría con cualquier otro módulo Perl.
Además, una vez que instale sus módulos en una ubicación no estándar, consulte estas dos preguntas sobre la carga de bibliotecas desde ubicaciones no estándar (parte de la información ya está disponible en el enlace anterior):
¿Cómo sabe un programa Perl dónde encontrar el archivo que contiene el módulo Perl que utiliza?
¿Cómo se construye el @INC de Perl? (también conocido como ¿Cuáles son todas las formas de afectar dónde se buscan los módulos Perl?)
fuente
cpan
), elCPANPLUS
módulo (y su equivalente en la línea de comandoscpanp
) y la nueva distribución App :: cpanminus que se instalacpanm
. De estos, creocpanm
que es el más fácil de instalar y usar.cpan
ycpanp
están instalados de forma predeterminada, pero requieren una configuración significativa para funcionar correctamente.Para completar, este es el proceso de instalación de
cpanm
OSX si desea mantenerloperl5
bajo~/Library
.curl -L http://cpanmin.us | perl - -l ~/Library/perl5 App::cpanminus local::lib eval `perl -I ~/Library/perl5/lib/perl5 -Mlocal::lib=~/Library/perl5` echo 'eval `perl -I ~/Library/perl5/lib/perl5 -Mlocal::lib=~/Library/perl5`' >> ~/.bash_profile
fuente
Si también desea poder leer las páginas de manual de los módulos instalados por cpanminus, también debe asegurarse de que el subdirectorio correcto de la ruta de la biblioteca elegida esté en MANPATH. Entonces, la solución anterior que muestra el proceso de instalación de cpanm necesita el siguiente comando adicional:
export MANPATH=$HOME/Library/perl5/man:$MANPATH' >> ~/.bash_profile
fuente
nosotros hemos estado usando la siguiente función durante los últimos 6 meses en más de 20 implementaciones implementaciones automatizadas exitosas en aws ... llamado desde el aprovisionamiento principal de la siguiente manera , que es básicamente una copia y pegado de las respuestas anteriores, pero en una sola repetición script bash utilizable:
#! /usr/bin/env bash │·· │·· # a bash wrapper for check-installing required perl modules as non-root main(){ │·· doSetVars │·· doCheckInstallPreReqs │·· perl $PRODUCT_INSTANCE_DIR/src/perl/my-perl-script.t │·· } │·· │·· doSetVars(){ │·· #set -x │·· umask 022 ; │·· set -u -o pipefail │·· run_unit_bash_dir=$(perl -e 'use File::Basename; use Cwd "abs_path"; print dirname(abs_path(@ARGV[0]));' -- "$0") │·· export PRODUCT_INSTANCE_DIR=$run_unit_bash_dir/../.. │·· } │·· │·· doCheckInstallPreReqs(){ │·· eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib` │·· perl -e ' │·· use JSON ; │·· use Data::Printer; │·· use Test::Most ; │·· use Test::Mojo; │·· use Data::Printer ; │·· use FindBin; │·· use JSON::Parse ; │·· use IPC::System::Simple ; │·· use Mojolicious ; │·· ' || { │·· curl -L http://cpanmin.us | perl - -l ~/perl5 App::cpanminus local::lib │·· eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib` │·· echo 'eval `perl -I ~/perl5/lib/perl5 -Mlocal::lib`' >> ~/.bashrc │·· cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib) │·· export PERL_MM_USE_DEFAULT=1 │·· cpanm JSON Data::Printer Test::Most Test::Mojo Data::Printer FindBin JSON::Parse \ │·· IPC::System::Simple │·· sudo curl -L cpanmin.us | perl - Mojolicious │·· } │·· │·· } │·· │·· main
fuente