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;
| 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 *************************************************************
