
Come molti di voi sapranno è possibile customizzare diversi aspetti del proprio account sui sistemi Unbit. Un'opzione importante che viene fornita è la possibilità di caricare versioni custom di ambienti o degli interpreti preferiti senza dover essere vincolati alle librerie e ai binari già presenti sul server.
Nel corso di questo howto viene mostrato come caricare una versione specifica dell'interprete Python non presente nell'account standard. Successivamente viene utilizzata in fase di test con il sistema uWSGI. La guida si sviluppa in diversi punti che invito a leggere attentamente sopratutto per gli utenti meno esperti o per quelli esperti che non hanno mai avuto modo di modificare il proprio ambiente Unbit. Prima di effettuare qualsiasi modifica, inoltre, accertatevi di aver effettuato una copia di backup dei dati o delle configurazioni precedenti.
Come sistema di riferimento viene considerato uno del tipo Debian/Ubuntu, le motivazioni di questa scelta sono facilmente intuibili anche in analogia con l'offerta Unbit. Un requisito fondamentale per poter proseguire è l'accesso FTP al proprio spazio mentre è opzionale (e quindi non vincolante) l'accesso SSH.
Tutte le operazioni suggerite in questa guida sono da eseguire sul proprio sistema locale. Il server remoto è un ambiente condiviso tra tutti gli utenti e non è quindi ottimizzato per compilare di grandi quantità di codice. Per questo motivo generando tutto il necessario in locale si risparmia tempo e fatica.
Per sviluppare questo howto è scelta l'ultima versione disponibile del ramo 2.6, questo, tuttavia, non è un requisito vincolante in quanto il sistema uWSGI offre il supporto a varie release dell'interprete (es. 2.5, 2.6, 3.0, ecc).
Per ottenere i binari è possibile percorrere due strade differenti:
Indipendentemente dalla soluzione è bene fare chiarezza sull'archittettura (x86/x86_64) da scegliere. Se non si hanno particolari motivazioni per caricare un ambiente x86_64 (a 64bit) è consigliabile la più classica architettura x86 (a 32 bit) più parca nell'utilizzo dell'address space disponibile.
Per chi utilizza i repository è necessario porre attenzione alla scelta dei pacchetti che dovranno essere scaricati. Per chi sceglie invece di ottenere i binari tramite ricompilazione è opportuno considerare che una compilazione con target x86 sotto un sistema x86_64 non è la scelta di default: in particolare se non si è configurato il sistema per una cross-compilazione oppure con una jail a 32 bit.
E' possibile scaricare dal sito ufficiale i sorgenti della versione prescelta in uno dei due formati disponibili: tar.gz o tar.bz2:
17dcac33e4f3adb69a57c2607b6de246 13322131 Python-2.6.4.tgz fee5408634a54e721a93531aba37f8c1 11249486 Python-2.6.4.tar.bz2
Prima di procedere con la build è opportuno assicurarsi di avere tutte le librerie e gli headers necessari alla corretta compilazione dell'interprete controllando il package manager della propria distrubuzione e marcando l'installazione delle opportune librerie.
Le opzioni di configurazione necessarie sono --enable-shared e --prefix=$DIR.
La prima permette di generare la libpython2.6.so necessaria per il funzionamento con uWSGI e la seconda specifica il prefix dove verranno installati i binari una volta generati. Infatti, $DIR è il path di una cartella che dovrà essere creata per accogliere i nuovi binari evitando così di sovrascriverli con quelli del sistema locale, tuttavia non è necessario utilizzare i diritti d'amministratore per compiere queste operazioni.
user@host:~$ wget http://www.python.org/ftp/python/2.6.4/Python-2.6.4.tar.bz2 user@host:~$ tar xjf Python-2.6.4.tar.bz2 user@host:~$ cd Python-2.6.4 user@host:~/Python-2.6.4$ ./configure --enable-shared --prefix=$DIR user@host:~/Python-2.6.4$ make user@host:~/Python-2.6.4$ make install
Ottenuti i binari nella $DIR specificata è possibile saltare al passo successivo.
Se non si è scelto di effettuare la ricompilazione dei sorgenti è possibile sfruttare i pacchetti binari messi a disposizione nei repository ufficiali Ubuntu. La versione prescelta (2.6.4) è disponibile nei repository della release Ubuntu Karmic (9.10) nel ramo karmic-updates. Per ottenere un ambiente completo è necessario scaricare i .deb dei tre pacchetti fondamentali: python2.6, python2.6-minimal e libpython2.6.
Ad esempio si puo' procedere in questa maniera, dove, come nel caso precedente, la variabile $DIR rappresenta una cartella creata per accogliere i binari estratti dagli archivi deb.
user@host:~$ wget http://de.archive.ubuntu.com/ubuntu/pool/main/p/python2.6/python2.6-minimal_2.6.4-0ubuntu3_i386.deb user@host:~$ wget http://de.archive.ubuntu.com/ubuntu/pool/main/p/python2.6/python2.6_2.6.4-0ubuntu3_i386.deb user@host:~$ wget http://de.archive.ubuntu.com/ubuntu/pool/main/p/python2.6/libpython2.6_2.6.4-0ubuntu3_i386.deb user@host:~$ dpkg -X python2.6-minimal_2.6.4-0ubuntu3_i386.deb $DIR user@host:~$ dpkg -X python2.6_2.6.4-0ubuntu3_i386.deb $DIR user@host:~$ dpkg -X libpython2.6_2.6.4-0ubuntu3_i386.deb $DIR
Ottenuti i binari nella $DIR specificata è possibile proseguire al passo successivo.
I binari generati sono disponibili nella $DIR indicata nel punto precedente: dell'intero albero contenuto in $DIR è necessario copiare tutti i file e subdirectory presenti in $DIR/usr/lib nella directory remota /accounts/<user>/lib. <user> rappresenta il nome del proprio account.
Se si effettua questa l'operazione tramite accesso FTP il path assoluto /accounts/<user>/lib viene indicato dal client come relativo a /accounts/<user>: è sufficiente quindi operare sulla cartella: /lib. Se quest'ultima non dovesse essere presente nell'account è buona norma creara prima di effettuare il caricamento.
Terminate le operazioni di upload nella directory remota lib sono presenti almeno due elementi: la directory python2.6 e il file libpython.2.6.so.1.0 che rappresentano rispettivamente l'interprete e la shared library utilizzabile da uWSGI. Per utilizzare altri moduli non contenuti nella standard library Python è possibile caricare i relativi binari nella cartella /accounts/<user>/lib/python2.6/site-packages.
Dopo aver effettuato l'upload della versione custom sul server è possibile testarla sfruttando uWSGI. Si utilizza per questo scopo una semplice applicazione WSGI che, invocata tramite uWSGI, fornirà informazioni sull'ambiente di esecuzione:
1 import sys
2 import os
3
4 def tester(environ, start_response):
5 status = b'200 OK'
6 headers = [(b'Content-Type:', b'text/plain')]
7 start_response(status, headers)
8
9 yield 'SYS.PATH:\n'
10 for s in sys.path:
11 yield ' {0}\n'.format(s)
12 else:
13 yield '\n'
14 yield 'OS.ENVIRON:\n'
15 for k,v in os.environ.items():
16 yield ' {0}:\t{1}\n'.format(k,v)
17 else:
18 yield '\n'
Assumendo di aver scritto l'applicazione in un file dal nome noto come testapp.py è possibile procede alla configurazione dell'account per servire richieste WSGI.
Dal panello di controllo è necessario abilitare la checkbox uWSGI, successivamente sotto la voce wsgi_mountpoints bisogna specificare mount path, modulo python e applicazione con cui servire le richieste. In modulo python bisogna inserire il nome del file senza specificare l'estensione .py in questo caso: testapp.
/test testapp tester
Non rimane quindi che richiamare l'applicazione appena configurata (http://<nomedominio>/test) e se tutto è stato configurato in modo corretto si ottiene un output simile al seguente:
SYS.PATH: . /accounts/<user>/lib/python2.6 /accounts/<user>/www/default /accounts/<user>/lib/python2.6/site-packages /accounts/<user>/lib/python /accounts/<user>/lib/python2.6/plat-linux2 /accounts/<user>/lib/python2.6/lib-tk /accounts/<user>/lib/python2.6/lib-old /accounts/<user>/lib/python2.6/lib-dynload /accounts/<user>/lib/python2.6/dist-packages OS.ENVIRON: LANG: C PYTHONPATH: /accounts/<user>/lib/python2.6:/accounts/<user>/www/default:/accounts/<user>/lib/python2.6/site-packages:/accounts/<user>/lib/python APACHE_RUN_USER: www-data APACHE_PID_FILE: /var/run/apache2.pid PWD: /etc/apache2 APACHE_RUN_GROUP: www-data HOME: /accounts/<user> PATH: /accounts/<user>/bin:/bin:/usr/bin LD_LIBRARY_PATH: /accounts/<user>/lib:/accounts/<user>/lib
In caso di errore, invece, bisognerà controllare il file stderr_log nella root del proprio account Unbit e ricercare la possibile causa del malfunzionamento. Se tutto ha funzionato correttamente l'ambiente custom Python è pronto da utilizzare con nuove e più corpose applicazioni.
Per eventuali dubbi o chiarimenti è possibile postare nella mailing list unbit-dev oppure, dopo aver ricontrollato tutti i log d'errore e le configurazioni, scrivere via email all'assistenza tecnica Unbit.
Per ottenere le dipendende di compilazione dell'interprete Python (2.6.x) in un ambiente Debian/Ubuntu è sufficente installare le build-dep dei pacchetti: python2.6 e libpython2.6. Terminata l'installazione delle librerie di sviluppo è possibile procedere con la compilazione manuale.
user@host:~$ sudo apt-get build-dep python2.6 libpython2.6
Per ottenere invece i sorgenti delle versioni binarie rilasciate in ambiente Debian/Ubuntu è sufficente utilizzare il gestore dei pacchetti. In questo caso è necessario installare (come per il caso precedente) le build-dep associate presenti negli stessi repository.
user@host:~$ sudo apt-get source python2.6 user@host:~$ sudo apt-get build-dep python2.6 libpython2.6
Per ulteriori informazioni sul deploy di applicazioni uWSGI è possibile consultare la pagina riguardante uWSGI.
Releases Python: http://www.python.org/download/releases/
Repository Ubuntu: http://packages.ubuntu.com/
HowtoCustomPython (l'ultima modifica è del 2010-02-07 18:48:39, fatta da ValerioDeCarolis)