2013-09-26 15 views
5

Ispirato a How can I use CPAN as a non-root user? mi piacerebbe sapere come installare cpanm per utenti non di accesso (come www)? Non c'è accesso, quindi non so come includere alcune dir a @INC.Come impostare i moduli Perl separati per gli utenti non di accesso?

Modifica: Come posso impostare una variabile di ambiente permanente come PERL5LIB per utente non di accesso? Non posso impostarlo da .bashrc (richiede l'accesso) e non da /etc/environment (impostato su tutti).

+0

Forse alcuni suggerimenti qui possono aiutare: http://unix.stackexchange.com/questions/88201/whats-the-best-distro-shell-agnostic-way-to-set-environment-variables/88229 –

+0

@SlavenRezic : Grazie, ma queste soluzioni implicano il log-in o l'impostazione di variabili per ogni utente. –

+0

Hai visto la soluzione '~/.pam_environment'? Nota il '~'. –

risposta

3

Metodi di cambiare @INC:

Su una base per-script:

Su una base per-processo:

  • Impostare la var PERL5LIB env dal processo genitore.
    • sh: export PERL5LIB=... ; perl ...
    • sh: PERL5LIB=... perl ...
    • apache: SetEnv PERL5LIB ...

Su una per- perl base:

  • Specifica del directorie s per @INC durante la configurazione di perl durante la creazione.
  • use lib ...; in uno script chiamato sitecustomize.pl nella directory restituita da perl -V:sitelib. [1]

Naturalmente, si potrebbe anche installare il proprio Perl locale, magari utilizzando perlbrew.


Note:

  1. Perl cerca solo sitecustomize.pl se il perl è stato configurato a che fare con -Dusesitecustomize. Verifica con perl -V:usesitecustomize per vedere se era.
+0

qualche riferimento a PERL5ENV? –

+0

Al di fuori dello script, come lo si ottiene per un utente non di accesso (di sistema)? –

+0

Link ai documenti aggiunti. È una var di 'PATH', cioè un percorso separato da due punti in cui cercare. (Sono aggiunti a '@ INC'.) Come' use lib' (e diversamente da '-I'), verranno aggiunti anche eventuali sottodirectory di arco. – ikegami

0

Effettuare la prima perl nel $ PATH uno script di shell che verifica la presenza di un file di nome dopo che l'utente che esegue il richiamo, fonti che di file, e quindi chiama il vero perl:

 
    $ cat /usr/local/etc/perl.user.d/www-data 
    PERL5LIB=/whatever/you/need 
    export PERL5LIB 
 
    $ cat /usr/local/bin/perl 
    #! /bin/sh 

    PERLBIN=/usr/bin/perl 

    USER_CUSTOMIZE=/usr/local/etc/perl.user.d/$(whoami) 

    [ -e "$USER_CUSTOMIZE" ] && source "$USER_CUSTOMIZE" 

    exec $PERLBIN "[email protected]" 

NB Non consiglio vivamente questo. E 'simile a sitecustomize.plsuggested elsewhere, ma più hacker.Come gli altri che hanno risposto, non penso sarebbe troppo arduo identificare tutti i processi genitore che ti interessano (apache, cron e ...?) E impostare PERL5LIB lì.