rilpoint_mw113

Glite:howto

Cuprins

Utilizare certificat digital

Spre exemplu un utilizator a realizat o cerere către o autoritate de certificare recunoscută şi a primit certficatul sub forma Ana-Maria Lepar.p12. Pentru ca acesta să opereze ca utilizator în mediul Grid, trebuie mai întâi să creeze pe maşina UI directorul ~/.globus, unde trebuie să sa fie copiate certificatul şi cheia privată :

[testbed002] /home/ana110287 > mkdir .globus
[testbed002] /home/ana110287 > cp Ana-Maria Lepar.p12  /home/ana110287/.globus
[testbed002] /home/ana110287 > $openssl pkcs12 -nocerts -in Ana-Maria Lepar.p12 -out userkey.pem
[testbed002] /home/ana110287 > $openssl pkcs12 -clcerts -nokeys -in Ana-Maria Lepar.p12 -out usercert.pem

Pentru siguranţă trebuie schimbate drepturile asupra celor două fişiere din directorul .globus, şi anume userkey.pem şi usercert.pem , mai precis pentru primul trebuie dat dreptul 400 , repsectiv pentru al doilea 444, după cum se poate vedea mai jos:

[testbed002] /home/ana110287/.globus > chmod 444 usercert.pem
[testbed002] /home/ana110287/.globus > chmod 400 userkey.pem
[testbed002] /home/ana110287/.globus > ls -l 
total 8
-r--r--r--  1 ana110287 ana110287 3462 Jul 17 14:13 usercert.pem
-r--------  1 ana110287 ana110287 1140 Jul 17 14:12 userkey.pem

Pentru a verifica dacă certificatul făcut este valid şi integru, se foloseşte comanda grid-cert-info, care , în exemplul nostru întoarce un output de forma :

[testbed002] /home/ana110287/.globus > grid-cert-info
Certificate:
   Data:
       Version: 3 (0x2)
       Serial Number: 3 (0x3)
       Signature Algorithm: sha1WithRSAEncryption
       Issuer: C=RO, O=GridMOSI, OU=ICI, CN=GridMOSI CA
       Validity
           Not Before: Jul 16 00:00:01 2008 GMT
           Not After : Jul 25 23:59:59 2008 GMT
       Subject: C=RO, O=GridMOSI, OU=Ana-Maria, CN=Ana-Maria Lepar

Dacă dorim să aflăm numele celui care deţine certificatul (DN-ul sau subiectul certificatului), folosim opţiunea -subject, care pentru exemplul nostru va avea ca output :

[testbed002] /home/ana110287/.globus > grid-cert-info -subject
/C=RO/O=GridMOSI/OU=Ana-Maria/CN=Ana-Maria Lepar

Pentru a afla ce autoritate a emis certificatul se foloseşte opţiunea -issuer , care are ca output în cazul dat:

[testbed002] /home/ana110287/.globus > grid-cert-info -issuer
/C=RO/O=GridMOSI/OU=ICI/CN=GridMOSI CA 

Pentru a afla data de expirare a certificatului , se foloseşte comanda grid-cert-info -enddate , care în cazul dat are ca output :

[testbed002] /home/ana110287/.globus > grid-cert-info -enddate
Jul 25 23:59:59 2008 GMT

Pentru a afla consistenţa dintre cheia privată şi certificat, se foloseşte comanda grid-proxy-init -verify, astfel :

[testbed002] /home/ana110287/.globus > grid-proxy-init -verify
Your identity: /C=RO/O=GridMOSI/OU=Ana-Maria/CN=Ana-Maria Lepar
Enter GRID pass phrase for this identity:
Creating proxy ...................................................... Done
Proxy Verify OK
Your proxy is valid until: Tue Jul 22 02:22:59 2008

In acest fel, se poate crea şi proxy (a se vedea Crearea unui proxy), care după cum se observa are o valabilitate de 12 ore.

Pentru a verifica identitatea utilizatorului care deţine un certificat, se foloseşte comanda:

[testbed002] /home/ana110287/.globus > openssl verify -CApath /etc/grid-security/certificates/ ~/.globus/usercert.pem
/home/ana110287/.globus/usercert.pem: OK


Crearea unui proxy

Acesta poate fi definit improrpiu ca un certificat cu o durată scurtă de viaţă (în general 12 ore) ce este semnat cu cheia privată a certificatului părinte. La trimiterea unui job, sunt trimise într-o primă etapă : certificatul proxy, cheia pentru certificatul proxy şi certificatul propriu-zis.

  • Crearea unui VOMS - proxy , se realizează cu ajutorul comenzii:
voms-proxy-init -voms nume_organizaţie_virtuala
  • Dacă doresc crearea unui proxy cu un anumit rol şi pentru un grup anume specificat, se foloseşte comanda:
voms-proxy-init -voms nume_vo:nume_grup Role=rolul_dorit
  • Dacă se doreşte tipărirea unor informaţii despre VOMS şi proxy-urile folosite, se utilizează comanda:
voms-proxy-info -all
  • Crearea unui proxy de durată mai lungă se face folosind coamanda :
myproxy-init -s myproxy_server -d -n

unde:

  • -s myproxy_server : seminifică host-name-ul maşinii ; dacă acesta nu este specificat , este folosit MYPROXY_SERVER (default)
  • -d : arata serverul asociat de către DN către proxy
  • -n : arata folosirea unei parole pentru a accesa proxy-ul pe durata mai lunga de timp
  • -c, -t : modifică durata de valabilitate a proxy-ului

Pentru a afla informaţii despre un proxy cu durată prelungită:

myproxy-info -s myproxy_server -d

Pentru a anula un proxy de lungă durată:

myproxy-destroy -s myproxy_server -d
  • Exemplu de utilizare/creare a proxy-urilor:

Crearea unui proxy, folosind comanda grid-proxy-init , care în exemplul dat, are outputul următor:

[testbed002] /home/ana110287/.globus > grid-proxy-init
Your identity: /C=RO/O=GridMOSI/OU=Ana-Maria/CN=Ana-Maria Lepar
Enter GRID pass phrase for this identity:
Creating proxy .................................... Done
Your proxy is valid until: Tue Jul 22 02:34:13 2008

În acest caz, proxy-ul va fi creat în /tmp/x509up_u25915, unde 25915 reprezintă id-ul userului respectiv.

Pentru tipărirea de informaţii despre proxy-uri, se foloseşte comanda grid-proxy-info, care pentru exemplu dat arată astfel :

testbed002] /home/ana110287 > grid-proxy-info
subject  : /C=RO/O=GridMOSI/OU=Ana-Maria/CN=Ana-Maria Lepar/CN=2031930773
issuer   : /C=RO/O=GridMOSI/OU=Ana-Maria/CN=Ana-Maria Lepar
identity : /C=RO/O=GridMOSI/OU=Ana-Maria/CN=Ana-Maria Lepar
type     : Proxy draft (pre-RFC) compliant impersonation proxy
strength : 512 bits
path     : /tmp/x509up_u25915
timeleft : 11:45:42

După cun se observă mai sus, această coamndă are ca rezultat afişarea : subiectului, autorităţii de certificare, identităţii, tipului de proxy, calea unde acesta se gaseşte şi timpul rămas pănă la expirare.

Dacă dorim să distrugem un proxy, se foloseşte comanda grid-proxy-destroy, care în exemplul dat :

[testbed002] /home/ana110287 > grid-proxy-destroy


Executia de job-uri

Componenta middleware-ului gLite care permite utilizatorilor să trimită joburi si să execute taskuri este WMS (Workload Management System). Datorită mecanismului folosit de WMS, utilizatorii realizează operaţiile mai sus amintite, fără a realiza complexitatea sistemului Grid. Pentru ca trimiterea unui job să se poată realiza, utilizatorul trebuie să descrie jobul respectiv, împreună cu cerinţele acestuia.

Fişierul JDL

Acest fişier , Job Description Language, descrie joburile care sunt trimise. În el, sunt specificate carcateristicile şi constrângerile joburilor . Apoi, joburile sunt luate în considerare de WMS pentru a selecta cea mai bună resursă pentru a le executa.

Formatul acestui fişier este de forma :

atribut = expresie;

Stringurile sunt mereu incluse între ghilimele (") , iar comentariile pot fi plasate pe o linie cu ajutorul # sau // sau pe mai multe linii , folosind /* */

Este foarte important de reţinut faptul că nu este permisă folosirea tab-urilor sau blank-urilor după ;

Exemple de fişiere .jdl:

  • presupunem că avem un job al cărui fisier de input este std.in, fisier de output este std.out şi fişier de eroare std.err, acesta apartine unui VO numit gridmosi
 StdInput = "std.in";
 StdOutput = "std.out";
 StdError = "std.err";
 VirtualOrganisation = "GridMOSI";
  • dacă pentru jobul specificat mai sus doresc retransmiterea automată a joburilor , atunci se folosesc atributele:
    • RetryCount - folosit în cazul în care jobul a eşuat după ce a fost lansat (deepresubmission) - în general este bine ca acest atribut să fie egal cu 0
    • ShallowRetryCount - folosit în cazul în care se doreşte trimiterea joburilor , chiar dacă acesta nu a eşuat
 StdInput = "std.in";
 StdOutput = "std.out";
 StdError = "std.err";
 VirtualOrganisation = "GridMOSI";
 RetryCount = 0;
 ShallowRetryCount = 3;
Comenzi necesare pentru utilizarea joburilor
Ceea ce doresc să fac Comanda gLite aferentă
Trimiterea unui job glite-wms-job-submit
Aflarea statusului unui job glite-wms-job-status id_job
Informaţiile despre un job glite-wms-job-logging-info id_job
Outputul unui job glite-wms-job-output id_job
Anularea unui job glite-wms-jpb-cancel id_job
Listarea resurselor disponibile glite-wms-job-list-match -a fişier jdl
Delegarea unui proxy glite-wms-job-delegate-proxy -d id_deleg

Dorim să trimitem un job care deschide două fişiere , într-o primă etapă, se editează fişierul JDL, care pentru exemplul nostru va arăta astfel :

[testbed002] /home/ana110287 > cat job_exemplu.jdl
#fisierul executabil este test.sh
Executable = "test.sh";
#argumentele pe care le primeste jobul sunt doua fisiere , numite fisierA si fisierB
Arguments = "fisierA fisierB";
#fisierul in care se salveaza outputul submitarii este std.out
StdOutput = "std.out";
#fisierul in care sunt salvate erorile care apar este std.err
StdError  = "std.err";
#fisierele de intrare : test.sh, fisierA, fisierB vor face parte dintr-un sandbox de intrare
InputSandbox = {"test.sh", "fisierA", "fisierB"};
#fisierele de iesire : std.out si std.err vor face parte dintr-un sandbox de iesire
OutputSandbox = {"std.out", "std.err"};
#organizatia virtuala din care fac parte este GridMOSI
VirtualOrganisation = "GridMOSI";

Scriptul pe care l-am folosit pentru testare este fişierul test.sh , care deschide cele două fişiere primite ca argumente . Conţinutul acestuia este :

[testbed002] /home/ana110287 > cat test.sh
#!/bin/sh
echo "Primul fisier :"
cat $1
echo "Al doilea fisier:"
cat $2

Înainte de a trece la trimiterea de joburi, utilizatorul trebuie să verifice dacă deţine un certificat proxy valabil (vezi secţiunea anterioară#Cum_creez_un_proxy?).

Dacă doresc să submitez un singur job, folosesc comanda glite-wms-job-submit -a nume_fişier_jdl , unde opţiunea -a este obligatorie. În cazul exemplului, vom avea următorul rezultat :

[testbed002] /home/ana110287 > glite-wms-job-submit -a job_exemplu.jdl
Connecting to the service
https://testbed003.grid.ici.ro:7443/glite_wms_wmproxy_server
====================== glite-wms-job-submit Success ======================
The job has been successfully submitted to the WMProxy
Your job identifier is:
https://testbed003.grid.ici.ro:9000/Qg4Q5bqkJixDGyenAAv9ag
==========================================================================

Dacă doriţi să vedeţi statusul jodului pe care l-aţi trimis, în linia de comandă tastaţi comanda glite-wms-job-status urmată de id-ul jobului, care în cazul nostru este https://testbed003.grid.ici.ro:9000/Qg4Q5bqkJixDGyenAAv9ag

[testbed002] /home/ana110287 > glite-wms-job-status  
https://testbed003.grid.ici.ro:9000/Qg4Q5bqkJixDGyenAAv9ag
*************************************************************
BOOKKEEPING INFORMATION:
Status info for the Job : https://testbed003.grid.ici.ro:9000
/Qg4Q5bqkJixDGyenAAv9ag
Current Status:     Running
Status Reason:      Job successfully submitted to Globus
Destination:        testbed001.grid.ici.ro:2119/jobmanager-pbs-gridmosi 
Submitted:          Thu Jul 24 20:01:20 2008 EEST
*************************************************************

După cum se observă, în urma acestei comenzi, se obţine ca rezultat statusul curent al jobului (care rulează), destinaţia (care in cazul nostru este testbed001.grid.ici.ro) şi ziua şi ora când jobul a fost trimis (în cazul de mai sus 24 iulie 2008, ora 20:01:20).

Dacă dorim să verifim informaţiile de loging ale jobului pe care l-am trimis, folosim comanda glite-wms-job-logging-info, urmată de id-ul jobului, în cazul nostru https://testbed003.grid.ici.ro:9000/Qg4Q5bqkJixDGyenAAv9ag .

[testbed002] /home/ana110287 > glite-wms-job-logging-info 
https://testbed003.grid.ici.ro:9000/Qg4Q5bqkJixDGyenAAv9ag 
       ---
Event: Transfer
- Destination                =    LogMonitor
- Result                     =    OK
- Source                     =    JobController
- Timestamp                  =    Thu Jul 24 20:02:55 2008 EEST
       ---
Event: Accepted
- Source                     =    LogMonitor
- Timestamp                  =    Thu Jul 24 20:02:55 2008 EEST
       ---
Event: Transfer
- Destination                =    LRMS
- Result                     =    OK
- Source                     =    LogMonitor
- Timestamp                  =    Thu Jul 24 20:03:07 2008 EEST
       ---
Event: Running
- Source                     =    LogMonitor
- Timestamp                  =    Thu Jul 24 20:05:43 2008 EEST
**********************************************************************

Pentru a vedea outputul unui job, se foloseşte comanda glite-wms-job-output urmat de id-ul jobului, în cazul de faţă, https://testbed003.grid.ici.ro:9000/Qg4Q5bqkJixDGyenAAv9ag . în concluzie, rulând această comandă în consolă, se obţine:

[testbed002] /home/ana110287 > glite-wms-job-output  
https://testbed003.grid.ici.ro:9000/Qg4Q5bqkJixDGyenAAv9ag
Connecting to the service https://testbed003.grid.ici.ro:7443
/glite_wms_wmproxy_server
Error - Output not yet Ready
Current Job Status is: Running

În contextul de faţă, jobul încă nu s-a executat, şi implicit, nu s-a obţinut niciun output.

Dacă dorim să aflăm resursele care sunt disponibile, folosim comanda glite-wms-job-list-match, urmată de id-ul jobului, care , în exemplu , este https://testbed003.grid.ici.ro:9000/Qg4Q5bqkJixDGyenAAv9ag .

[testbed002] /home/ana110287 > glite-wms-job-list-match -a test.jdl
Connecting to the service https://testbed003.grid.ici.ro:7443  
/glite_wms_wmproxy_server
==================== glite-wms-job-list-match failure ====================
No Computing Element matching your job requirements has been found!
==========================================================================

În cazul considerat, se observă că au aparut probleme cu WMS si BDII (mai precis comunicarea dintre ele nu este coerentă).

Când se obţin rezultate corecte, outputul comenzii va arăta ca mai jos :

[testbed002] /home/ana110287 > glite-wms-job-list-match -a test.jdl
Connecting to the service https://testbed003.grid.ici.ro:7443 
/glite_wms_wmproxy_server
==========================================================================
                    COMPUTING ELEMENT IDs LIST
The following CE(s) matching your job requirements have been found:
       *CEId*
- ce01.grid.info.uvt.ro:2119/jobmanager-pbs-gridmosi
- ce01.mosigrid.utcluj.ro:2119/jobmanager-pbs-gridmosi
- gw01.seegrid.grid.pub.ro:2119/jobmanager-lcgpbs-gridmosi
- testbed001.grid.ici.ro:2119/jobmanager-pbs-gridmosi
- ce.grid.tuiasi.ro:2119/jobmanager-lcgpbs-gridmosi
==========================================================================

Dacă dorim ştergerea unui job, folosim comanda glite-wms-job-cancel urmată de id-ul jobului pe care dorim sa îl ştergem, în cazul nostru, https://testbed003.grid.ici.ro:9000/Qg4Q5bqkJixDGyenAAv9ag .

[testbed002] /home/ana110287 > glite-wms-job-cancel  
https://testbed003.grid.ici.ro:9000/Qg4Q5bqkJixDGyenAAv9ag
Are you sure you want to remove specified job(s) [y/n]y : y
Connecting to the service https://testbed003.grid.ici.ro:74
/glite_wms_wmproxy_server
============= glite-wms-job-cancel Success =============================
The cancellation request has been successfully submitted for the following job(s):
- https://testbed003.grid.ici.ro:9000/Qg4Q5bqkJixDGyenAAv9ag
========================================================================

Tips & tricks

O metodă foarte utilă pentru a păstra id-urile unor joburi este utilizarea opţiunii -a -o pentru comanda glite-wms-job-submit , în care -o specifică un fişier output în care este memorat id-ul jobului respectiv, în exemplul dat fişierul este jobs.id

[testbed002] /home/ana110287 > glite-wms-job-submit -a -o jobs.id test.jdl
Connecting to the service https://testbed003.grid.ici.ro:7443
/glite_wms_wmproxy_server
====================== glite-wms-job-submit Success ======================
The job has been successfully submitted to the WMProxy
Your job identifier is:
https://testbed003.grid.ici.ro:9000/dLOLIdRiYxowvTn9jm3KEA
The job identifier has been saved in the following file:
/home/ana110287/jobs.id
==========================================================================

Folosind această metodă, putem afla statusul unui job folosind opţiunea -i pentru comanda glite-wms-job-status urmată apoi de numele fişierului unde am memorat id-ul jobului respectiv, de exemplu :

[testbed002] /home/ana110287 > glite-wms-job-status -i jobs.id
*************************************************************
BOOKKEEPING INFORMATION:
Status info for the Job : https://testbed003.grid.ici.ro:9000 
/1mxdoEFiavxLg7T_CMflvQ
Current Status:     Ready
Status Reason:      unavailable
Destination:        ce01.mosigrid.utcluj.ro:2119/jobmanager-pbs-gridmosi
Submitted:          Thu Jul 24 21:43:47 2008 EEST
*************************************************************
Skin by RIL Partner