2013-06-20 12 views
11

Sto provando ad installare la macchina DateTime su un server Linux. Sfortunatamente, questo server Linux ha dei criteri di accesso alla rete ristretti che mi impediscono di usare la shell CPAN direttamente per scaricare contenuti o installare cpanminus. Cambiare la politica di accesso è fuori dal mio controllo, quindi sto cercando una soluzione alternativa. Inoltre, non ho accesso root a questo server Linux.Installa i moduli Perl con molte dipendenze su una macchina senza accesso alla rete CPAN

Posso comunque scaricare qualsiasi cosa nella macchina Windows del mio lavoro e caricare su una condivisione di file su questo server. Così ho iniziato a tirare giù le dipendenze DateTime uno per uno. Vorrei scaricare un modulo, a volte avrà Makefile.PL, a volte avrà Build.PL. Ho quindi rebase ogni Build o Makefile al mio INSTALL_BASE, testare ogni modulo. L'ho fatto per circa 20 moduli, e gli alberi sembrano espandersi a classi sempre più piccole senza fine in vista ...

Spero che tu possa dirmi un modo migliore. C'è un modo per avviare un download da una macchina con accesso CPAN (cioè la mia casella di Windows) di tutte le dipendenze DateTime in un gigantesco pacchetto Perl, caricarlo sul server Linux ed eseguire CPAN lì (senza accesso alla rete) a mettere le cose nel posto giusto? Grazie.

+2

Avete fatto in modo che ci sia un ambiente di costruzione su questa macchina bloccata? Sarebbe un peccato se passassi un sacco di tempo a trasferire le distribuzioni se non ha gli strumenti per gestirle. – innaM

risposta

10

Il modo più efficace di gran lunga è di fare un minicpan, installare cpanm sulla macchina Linux e l'alias localcpanm qualcosa di simile:

alias localcpanm='cpanm --mirror file:///Users/Shared/cpan/ --mirror-only' 

Ho usato questa tecnica nei viaggi lunghi in treno con l'accesso alla rete a macchia di leopardo con grande successo.

+0

Grazie. Esiste un metodo per utilizzare minicpan per creare un mirror di solo un sottoinsieme di CPAN, ad es.a un singolo modulo DateTime e tutte le sue dipendenze? E più tardi, essere in grado di aggiungere a quel mirror solo i moduli aggiuntivi a cui siamo interessati? Penso che rispecchiare l'intero CPAN sia ok, ma essere in grado di fare meno dell'intera cosa sarebbe una buona opzione. – frank

+0

Sembra che CPAN :: Mini :: FromList possa farlo ma la recensione di cpanratings non ispira fiducia. – singingfish

+0

cpanm può creare il "minicpan" necessario, illustrato nella mia risposta a questa domanda –

1

Ci sono alcune soluzioni per questo problema, vedere ad esempio Carton che è come il bundle di Ruby oppure Pinto che mira ad essere il proprio CPAN privato (come ho capito).

1

Una soluzione che utilizzo al lavoro è avere un server di sviluppo con perlbrew, un modulo Perl + e l'app per app e tutto questo in un repository git. Nelle macchine di produzione l'accesso al repository git è tutto ciò che è necessario per distribuire l'app e passare da una versione all'altra utilizzando i tag.

7

Il primo passo è scaricare automaticamente tutte le dipendenze. È possibile utilizzare cpanm per fare questo sulla vostra macchina collegata in rete:

cpanm -L /dev/null --save-dists dists --scandeps DateTime

Questo genera sia un elenco di dipendenze, ma soprattutto li scarica nella directory dists. Lo -L /dev/null assicura che non presti attenzione ai moduli già installati.

Copia dists come nella casella riservata.

Quindi, utilizzare cpanm sulla propria macchina limitato per eseguire l'installazione locale:

cpanm --mirror file:///path/to/dists -L foo DateTime

dove /path/to/dists è il percorso assoluto della directory dists. Ciò installerà le cose nella directory foo.

+0

Grazie, questo è in linea con quello che stavo cercando. – frank

Problemi correlati