Build Note
Note sulle compilazione di StoRM
StoRM, è composto da 3 parti distinte:
- Il frontend, che si occuppa di accettare le richieste dai client
- Un DataBase che mantiene lo stato delle richieste [asyncrone] che verranno;' poi processatte dal Backend storm_db e un data base per la persistenza storm_db_ISAM
- Backend, si occuppa di processarre le richieste presenti nel database [asyncrone] si le richieste che arrivvano direttamente dal frontend, [syncrone] tramite comunicazione XML-RPC.
Installazione Frontend:
Per effettuare il build sono necessari i seguenti pacchetti:
automake-1.6.3-5 autoconf-2.57-3 libtool-libs-1.4.3-6 libtool-1.4.3-6
Effettuare il checkout del modulo storm/frontend:
export CVS_RSH=ssh export CVSROOT=:ext:utente@egrid-doc.egrid.it/home/cvs cvs co storm/backend
Seguire le istruzioni presenti nel file README
Attenzione, nel caso che l'installazzione del pachetto rpm di MySQL, fallisca potrebbe essere necessarrio modificare lo script di avvio /etc/init.d/mysql modificando la parte di start nelle seguente maniera:
su - mysql -c "$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file >/dev/null 2>&1 &"
poi lanciare i comandi:
/usr/bin/mysql_install_db cd /var/lib/mysql chown -R mysql:mysql mysql
Creazione pacchetti RPM
definire la variabiale PERLLIB
export PERLLIB=/opt/gpt/lib/perl
Editare i file srmv2-storm-client.spec srmv2-storm-server.spec per definire la versione
lanciare:
make rpm
I pachetti RPM si trovano in RPMS/i386/
Installazione Backend:
Installazzione di gpfs, http://www.egrid.it/sysadm/appunti/GPFS/view?searchterm=gpfs
Il build viene effettuato tramite ant bisogna installarlo la versione necessarria è la 1.6: http://ant.apache.org/bindownload.cgi:
cp apache-ant-1.6.5-bin.tar.bz2 /usr/local cd /usr/local/ tar xvfj apache-ant-1.6.5-bin.tar.bz2 ln -s apache-ant-1.6.5 ant
effettuare i checkout del sorgente:
export CVS_RSH=ssh export CVSROOT=:ext:utente@egrid-doc.egrid.it/home/cvs cvs co storm/backend
Installare i pachetti di swig, seguire le istruzioni presenti alla URL http://www.egrid.it/sw/storm/voms_lcmaps_interface/view
Definire la variabiale d'ambiente SWIG_LIB
NB: L'uso di differenti versioni di swig ha effetti diversi nei tipi statici, inoltre alcune versioni NON compilano con la versione CVS di StoRM. Per maggiori informazioni vedi nota [swig].
Compilazione tramite ant
Compilare la parte relativa a gpfs:
ant native
Compilare la parte relativa a GridUser:
ant swig
Compilare il backend:
ant compile
Aggiunta database, storm_be_ISAM contente i dati di persistenza
Editare il file config/grant_db_backend.sql sostituendo il proprio hostname al posto di testbed006
lanciare i comandi:
mysql -u root -p < tables_db_backend.sql mysql -u root -p < grant_db_backend.sql
Preparazione del file system
nella directory che monta il GPFS, creare le directory relative alle VO e StFNRoot presenti nel file config/namespace.cfg
StFNRoot
PFNRoot
VO
JustInTimeACL
MaxLifeTime
SpaceType
Storage Machine
Port
/egrid
/storage/egrid
EGRID
Y
0
Permanent
storage.egrid.it
13000
/cnaf
/storage/cnaf
CNAF
N
0
Permanent
storage.cnaf.infn.it
14000
/lcg
/storage/lcg
LCG
N
100
Volatile
storage.cnaf.infn.it
15000
/egrid/exp1
/gpfs/egrid/experiment1
EGRID
Y
0
Permanent
storage.egrid.it
13000
/test
/scratch
TEST
N
0
Permanent
storage.cnaf.infn.it
11000
Il significato dei vari campi è il seguente:
- StFNRoot
è il prefisso usato nella SURL
- PFNRoot
è la directory fisica con GPFS corrispondente alla VO.
- VO
la VO a cui appartiene
- JustInTimeACL
se la VO supporta le JIT
- MaxLifeTime
massima durata di vita del file per spazio Volatile. 0 = Permanente
- StorageMachine
Da definire
- Port
Da definire
Mapping utenti
per adesso il mapping degli utenti avvine tramite il file config/mapping.properties che la coppia CN del certificato e utente locale su cui e mappato lo stesso ad esempio:
Flavia\ Donno=storm *Importante* gli spazi devo essere escapati
Configurazione connessione al database (per chiamate asyncrone)
la configurazione avviene tramite il file config/strom.properties
Le configurazione della parte asincrona è definata dalle propietà del database storm_db che sono:
asynch.picker.db.driver = com.mysql.jdbc.Driver asynch.picker.db.host = egrid-7 asynch.picker.db.name = storm_db asynch.picker.db.username = storm asynch.picker.db.passwd = storm asynch.picker.db.pollingrateinsec = 5 asynch.picker.verbose = false
La configurazione della parte di persistenza è definita dalle propietà del database storm_db_ISAM:
persistence.db.vendor = mysql persistence.db.driver = com.mysql.jdbc.Driver persistence.db.prefix = jdbc:mysql: persistence.db.host = egrid-7 persistence.db.name = storm_be_ISAM persistence.db.username = storm persistence.db.passwd = storm persistence.db.pool = true persistence.db.pool.maxActive = 10 persistence.db.pool.maxWait = 50
Avvio del Server, l'avvio del server avviene in 2 parti distinte:
Avvio del server e del sistema di controllo:
cd bin ./storm_server
Il server logga le informazioni nel file log/storm_server.out
Il sistema di controllo è in ascolto sulla porta 4444
Avvio del picker e della parte asincrona:
telnet 127.0.0.1 4444 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. START
per fermare il picker dare STOP, per fermare il server SHUTDOWN
installando expect:
apt-get install expect
è possibile usare lo script storm.sh:
root@egrid-7:~/storm/backend/bin# ./storm.sh Usage: ./storm.sh {start|stop|shutdown}Lo stop blocca solamente il picker, quindi ad un ulteriore avvio dello stesso tramite start, il file di log log/storm_server.out riusulter' sporcato:
[java] PICKER STOPPED [java] PICKER STARTED [java] SpaceServer started... [java] java.net.BindException: Address already in use [java] at java.net.PlainSocketImpl.socketBind(Native Method) [java] at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:331) [java] at java.net.ServerSocket.bind(ServerSocket.java:318) [java] at java.net.ServerSocket.<init>(ServerSocket.java:185) [java] at org.apache.xmlrpc.WebServer.createServerSocket(WebServer.java:203) [java] at org.apache.xmlrpc.WebServer.setupServerSocket(WebServer.java:227) [java] at org.apache.xmlrpc.WebServer.start(WebServer.java:271) [java] at it.grid.storm.synchcall.SynchCallServer.createServer(SynchCallServer.java:420) [java] at it.grid.storm.StoRM.startXmlRpcServer(StoRM.java:65) [java] at it.grid.storm.StoRMCommandServer$CommandExecuterThread.run(StoRMCommandServer.java:73) [java] ERROR [Thread-10] synch_xmlrpc_server (createServer:478) - SynchCallServer java.lang.RuntimeException: Address already in use
Tale messaggio non influenza la funzionalità del server.
| [swig] | La versione di SWIG distribuita con LCG/glite non funziona con l'ultima versione di StoRM. Una versione testata e funzionante è la 1.3.24. Da notare che differenti versioni di SWIG hanno effetti diversi sulla traduzione da C a Java dei tipi enumerati, in particolare con la versione 1.3.24 l'accesso ai tipi static della classe fs_acl deve essere fatto tramite la classe permission_flags, mentre con precedenti versioni tale classe non esisteva. Quindi compilando con 1.3.24 si dovrà scrivere: fs_acl.permission_flags.PERM_EXECUTE mentre con SWIG 1.3.21 era necessario scrivere: fs_acl.PERM_EXECUTE |
