ÚISAV: HPC klaster v rámci projektu SIVVP

Návody (+) (-)

Vygenerovanie ssh kľúča pre prístup na klaster

Unix: spustite v shelli nasledovný príkaz:
ssh-keygen -b 2048 -t rsa

ktorý vyrobí kľúče štandardne v adresári ~/.ssh (privátny: id_rsa a verejný: id_rsa.pub).
Na ochranu kľúča si prosím zvoľte kvalitné heslo (aspoň 8 znakov, vrátane špeciálnych znakov).
Verejný kľúč (~/.ssh/id_rsa.pub) nám zašlite.
Ale Váš súkromný kľúč ~/.ssh/id_rsa chráňte a nikomu neposielajte. Pri podozrení, že ho má niekto iný k dispozícii okamžite nás informujte a my zablokujeme Vaše konto, aby ho nemohol zneužiť. Potom nám pošlete nový kľúč.
Aby všetko správne fungovalo, musia byť správne nastavené prístupové práva k privátnemu kľúču len pre Vás (-rw-r--r--).

Windows: použite PuTTYgen apikáciu z Putty balíka.

Počítanie na klastri

Vykonávanie úloh na klastri sa realizuje štandardne prostredníctvom dávkového systému PBS (Portable Batch System), ktorý je súčasťou viacerých nástrojov na manažovanie pracovného zaťaženia výpočtových prostriedkov (napr. TORQUE, Moab, Globus GRAM). Úlohou PBS je zaraďovanie výpočtových úloh do fronty kde zostávajú až kým nevzniknú podmienky na ich vykonanie, rozvrhovanie a spustenie úloh na dostupných uzloch klastra a monitorovanie úloh. Pre bežného používateľa PBS poskytuje služby, ktoré mu umožnia predloženie, zahájenie, sledovanie priebehu vykonávania a manažovanie úloh.

Nasledujúca tabuľka uvádza niekoľko najpoužívanejších klientských PBS príkazov.

qsub Predloženie úlohy na vykonanie a naštartovanie úlohy qstat Sledovanie priebehu vykonávania úlohy / fronty / servera qdel Odstránenie úlohy z fronty / predčasné ukončenie bežiacej úlohy qsig Zaslanie signálu úlohe qhold Podržanie úlohy vo fronte qrls Uvoľnenie úlohy

PBS batch-úloha

PBS batch-úloha reprezentuje úlohu vo forme nejakého vykonateľného skriptu popisujúceho aplikáciu, ktorú treba na klastri vykonať. Slúži ako vstupný argument pre príkaz qsub. Skript predstavuje poväčšine súbor v jazyku shell, python, perl, a pod., ktorý obsahuje vykonateľné príkazy, PBS direktívy a poznámky. Výstupom príkazu qsub je identifikátor, ktorý je pridelený danej úlohe a pomocou neho je možné v príkazoch pre monitorovanie a manažovanie úlohy sa na úlohu odvolávať. Vlastnosti aplikácie a jej požiadavky na výpočtové a úložné zdroje sa definujú atribútmi, ktoré sú uvedené buď ako voľby príkazu qsub alebo ako PBS príkazy vo vnútri batch-úlohy. Okrem toho, pomocou príkazu qsub a atribútov je možné definovať resp. rozšíriť platnosť niektorých premenných prostredia na oblasť aplikácie (viď. nasledujúce príklady).

PBS_JOBID Predstavuje identifikátor priradený úlohe batch systémom PBS_NODEFILE Špecifikuje meno súboru obsahujúceho zoznam výpočtových uzlov priradených úlohe PBS_O_WORKDIR Špecifikuje absolutnú cestu aktuálneho pracovného adresára príkazu qsub PBS_O_HOST Špecifikuje meno stroja, na ktorom beží qsub

PBS qsub: Najčastejšie používané voľby (options) a ich význam

–l Definuje zdroje, ktoré úloha vyžaduje a rôzne obmedzenia (napr. na kapacitu pamäti, dobu vykonávania úlohy, atď.) –N Deklaruje meno úlohy –o Definuje cestu pre štandardný výstupný prúd batch úlohy –e Definuje cestu pre štandardný chybový prúd batch úlohy –q Definuje adresu fronty, servera alebo fronty na serveri –w Definuje cestu pracovného adresára úlohy (štandardne: aktuálny adresár, nastaví premennú PBS_O_WORKDIR) –d Definuje cestu pracovného adresára úlohy (štandardne: domovský adresár, nastaví premennú PBS_O_INITDIR) –v Expanduje premenné prostredia, ktoré sú exportované pre batch-úlohu –V Deklaruje, že všetky premenné prostredia majú byť exportované pre batch-úlohu –I Deklaruje, že úloha má bežať interaktívne –W Umožňuje špecifikovať ďalšie atribúty napr. definovať závislosti medzi vykonávaním viacerých úloh

Sekvenčné a paralelné OpenMP úlohy

OpenMP úlohy vyžadujú zadefinovanie premenných prostredia „OMP_*“, inak sa zoberú štandardné hodnoty definované implementáciou.

export OMP_NUM_THREADS=12
export OMP_THREAD_LIMIT=12
#export OMP_DYNAMIC="true"
export OMP_DYNAMIC="false"
#export OMP_NESTED="false"
export OMP_NESTED="true"
#export OMP_WAIT_POLICY= "passive"
export OMP_WAIT_POLICY="active"
#export OMP_SCHEDULE
#export OMP_MAX_ACTIVE_LEVELS
export OMP_PLACES="cores"
export OMP_PROC_BIND="true"
export OMP_DISPLAY_ENV="verbose"
# Hodnota nasledujúcej premennej závisí od typu aplikácie:
#export OMP_STACKSIZE=16M


Pri predkladaní úlohy do dávkového spracovania (PBS) spúšťací (batch) skript by mal obsahovať riadok:

#PBS -v OMP_NUM_THREADS,OMP_THREAD_LIMIT,OMP_DYNAMIC,OMP_NESTED,OMP_WAIT_POLICY,\
        OMP_PLACES,OMP_PROC_BIND


Nižšie uvedené príklady shell-skriptov reprezentujú batch-úlohy popisujúce sekvenčnú a paralelnú OpenMP aplikáciu.

jobscript-seq.sh (Serial job)
#!/bin/sh # # Number of nodes and processors per node (ppn) #PBS -l nodes=1:ppn=1 # Job name #PBS -N exam-seq # File name for stdout #PBS -o std.out # File name for stderr #PBS -e std.err # Queue name #PBS -q long echo "JobID=$PBS_JOBID" echo "Job runs on processors:" cat $PBS_NODEFILE" # Job's working directory cd $PBS_O_WORKDIR # Job executable EXEC="exam-seq" # Job inputs INPUT="matrix.dat 100" # Job output OUTPUT="${EXEC}.output" # Job std output/error streams STDOE="${EXEC}.stdout" echo "Start serial job: "`date` echo "------------------------------------" ${EXEC} ${INPUT} ${OUTPUT} 1>${STDOE} 2>&1 excode=$? echo "------------------------------ -----" echo "Finish job: "`date` echo "Exit code: $excode" exit $excode
jobscript-omp.sh (OpenMP job)
#!/bin/sh # # Number of nodes and processors per node (ppn) #PBS -l nodes=1:ppn=12 # Job name #PBS -N exam-omp # File name for stdout #PBS -o std.out # File name for stderr #PBS -e std.err # Queue name #PBS -q long echo "JobID=$PBS_JOBID" echo "Job runs on processors:" cat $PBS_NODEFILE" # Job's working directory cd $PBS_O_WORKDIR # Number of OpenMP threads NTH=12 # Environment variables for OpenMP export OMP_NUM_THREADS=$NTH export OMP_THREAD_LIMIT=$NTH export OMP_DYNAMIC="false" export OMP_NESTED="true" export OMP_WAIT_POLICY="active" export OMP_PLACES="cores" export OMP_PROC_BIND="true" export OMP_DISPLAY_ENV="verbose" #PBS -v OMP_NUM_THREADS, OMP_THREAD_LIMIT, \ OMP_DYNAMIC,OMP_NESTED, MP_WAIT_POLICY, \ OMP_PLACES, OMP_PROC_BIND, OMP_DISPLAY_ENV # Job executable EXEC="exam-omp" # Job inputs INPUT="matrix.dat 100" # Job output OUTPUT="${EXEC}.output" # Job std output/error streams STDOE="${EXEC}.stdout" echo "Start OpenMP job: "`date` echo "------------------------------------" ${EXEC} ${INPUT} ${OUTPUT} 1>${STDOE} 2>&1 excode=$? echo "------------------------------------" echo "Finish job: "`date` echo "Exit code: $excode" exit $excode

Paralelné MPI a kombinované MPI+OpenMP úlohy

Na zahájenie vykonávania paralelných MPI úloh cez PBS je nutné použiť príkaz "mpiexec", ktorý je súčasťou balíka MPI. Predstavuje mechanizmus pre inicializovanie MPI procesov využívajúci PBS na manažovanie úloh. Medzi jeho hlavné funkcie patrí: vygenerovanie súboru obsahujúceho zoznam alokovaných výpočtových uzlov, naštartovanie definovaného počtu kópií aplikačného kódu, mapovanie MPI procesov na fyzické procesory podľa rôznych stratégií a požiadaviek a presmerovanie štandardného vstupného, výstupného a chybového prúdu programu na skript, z ktorého bol príkaz "mpiexec" vyvolaný. Pre kombinované MPI+OpenMP úlohy je potrebné zvoliť takú stratégiu mapovania aby každý MPI proces mal k dispozícii dostatočný počet alokovaných jadier na vytvorenie OpenMP vlákien.

Nižšie uvedené príklady shell-skriptov reprezentujú batch-úlohy popisujúce paralelnú MPI a kombinovanú MPI+OpenMP aplikáciu.

jobscript-mpi.sh (MPI job)
#!/bin/sh # # Number of nodes and processors per node (ppn) #PBS -l nodes=2:ppn=10 # Job name #PBS -N exam-mpi # File name for stdout #PBS -o std.out # File name for stderr #PBS -e std.err # Queue name #PBS -q long # Unload all loaded modulefiles module purge # Load MPI version which the program was compiled by # and should be used for the job execution module load openmpi-gcc/1.10.7 export MPI_HOME="/shared/software/openmpi/1.10.7-gcc" echo "JobID=$PBS_JOBID" echo "Job runs on processors:" cat $PBS_NODEFILE" # Job's working directory cd $PBS_O_WORKDIR # Number of MPI processes NPR=`wc -l < $PBS_NODEFILE` # Allocation strategy for MPI processes ALLOC="--map-by socket" #PBS -v MPI_HOME # Job executable EXEC="exam-mpi" # Job inputs INPUT="matrix.dat 100" # Job output OUTPUT="${EXEC}.output" # Job std output/error streams STDOE="${EXEC}.stdout" echo "Start MPI job: "`date` echo "--------------------------------------------" mpiexec -np $NPR ${ALLOC} --output-filename ${STDOE} \ ${EXEC} ${INPUT} ${OUTPUT} excode=$? cat ${STDOE}.* >${STDOE} rm ${STDOE}.* echo "--------------------------------------------" echo "Finish job: "`date` echo "Exit code: $excode" exit $excode
jobscript-mix.sh (MPI+OpenMP job)
#!/bin/sh # # Number of nodes and processors per node (ppn) #PBS -l nodes=4:ppn=12 # Job name #PBS -N exam-mix # File name for stdout #PBS -o std.out # File name for stderr #PBS -e std.err # Queue name #PBS -q long # Unload all loaded modulefiles module purge # Load MPI version which the program was compiled by # and should be used for the job execution module load openmpi-gcc/1.10.7 export MPI_HOME="/shared/software/openmpi/1.10.7-gcc" echo "JobID=$PBS_JOBID" echo "Job runs on processors:" cat $PBS_NODEFILE" # Job's working directory cd $PBS_O_WORKDIR # Number of MPI processes NPR=4 # Number of OpenMP threads NTH=10 # Allocation strategy for MPI processes ALLOC="--map-by node:PE=$NTH" # Environment variables for OpenMP export OMP_NUM_THREADS=$NTH export OMP_THREAD_LIMIT=$NTH export OMP_DYNAMIC="false" export OMP_NESTED="true" export OMP_WAIT_POLICY="active" export OMP_PLACES="cores" export OMP_PROC_BIND="true" export OMP_DISPLAY_ENV="verbose" #PBS -v MPI_HOME, OMP_NUM_THREADS, OMP_THREAD_LIMIT, \ OMP_DYNAMIC, OMP_NESTED, MP_WAIT_POLICY, \ OMP_PLACES, OMP_PROC_BIND, OMP_DISPLAY_ENV # Job executable EXEC="exam-mix" # Job inputs INPUT="matrix.dat 100" # Job output OUTPUT="${EXEC}.output" # Job std output/error streams STDOE="${EXEC}.stdout" echo "Start MPI+OpenMP job: "`date` echo "-----------------------------------------------" mpiexec -np $NPR ${ALLOC} --output-filename ${STDOE} \ --map-by node ${EXEC} ${INPUT} ${OUTPUT} excode=$? cat ${STDOE}.* >${STDOE} rm ${STDOE}.* echo "-----------------------------------------------" echo "Finish job: "`date` echo "Exit code: $excode" exit $excode

Kompilovanie programov sekvenčných, OpenMP, MPI a MPI+OpenMP

Kompilovanie GNU kompilátormi:

   Set MPI version (for example: 1.10.7) for models MPI and MPI+OpenMP
module load openmpi-gcc/1.10.7

   Model: Serial
gcc      -o exam-seq exam-seq.c
gfortran -o fexam-seq fexam-seq.f90

   Model: OpenMP
gcc      -fopenmp -o exam-omp exam-omp.c
gfortran -fopenmp -o fexam-omp fexam-omp.f90

   Model: MPI
mpicc  -o exam-mpi exam-mpi.c
mpif90 -o fexam-mpi fexam-mpi.f90

  Model: MPI+OpenMP
mpicc  -fopenmp -o exam-mix exam-mix.c
mpif90 -fopenmp -o fexam-mix fexam-mix.f90

Kompilovanie Intel kompilátormi:

   Set MPI version (for example: 1.10.7) for models MPI and MPI+OpenMP
module load intel
module load openmpi-intel/1.10.7

   Model: Serial
icc   -o exam-seq exam-seq.c
ifort -o fexam-seq fexam-seq.f90

   Model: OpenMP
icc   -openmp -o exam-omp exam-omp.c
ifort -openmp -o fexam-omp fexam-omp.f90

   Model: MPI
mpicc  -o exam-mpi exam-mpi.c
mpif90 -o fexam-mpi fexam-mpi.f90

   Model: MPI+OpenMP
mpicc  -openmp -o exam-mix exam-mix.c
mpif90 -openmp -o fexam-mix fexam-mix.f90

Kompilovanie PGI kompilátormi:

   Set MPI version (for example: 1.10.7) for models MPI and MPI+OpenMP
module load pgi
module load openmpi-pgi/1.10.7

   Model: Serial
pgcc      -o exam-seq exam-seq.c
pgfortran -o fexam-seq fexam-seq.f90

   Model: OpenMP
pgcc      -mp -o exam-omp exam-omp.c
pgfortran -mp -o fexam-omp fexam-omp.f90

   Model: MPI
mpicc  -o exam-mpi exam-mpi.c
mpif90 -o fexam-mpi fexam-mpi.f90

   Model: MPI+OpenMP
mpicc  -mp -o exam-mix exam-mix.c
mpif90 -mp -o fexam-mix fexam-mix.f90

Počítanie na Gride

Gridové počítanie vyžaduje od aplikácií uplatnenie hybridného programovacieho modelu, ktorý kombinuje technológie pre klastrové počítanie a technológie webových a gridových služieb. Spúšťanie úloh na gridovej infraštruktúre EGI sa vykonáva prostredníctvom gridového midlvéru UMD/EMI. Všeobecne, gridový midlvér predstavuje špecifickú softvérovú vrstvu medzi infraštruktúrou a používateľskou aplikáciou, ktorá umožňuje zdieľanie heterogénnych gridových zdrojov – poskytuje služby pre plánovanie, vykonávanie a monitorovanie výpočtových úloh, sprístupnenie a prenos dát a získavanie informácií o gridovej infraštruktúre a o gridových aplikáciach.

Služby pre manažment úloh v gride

Služby pre manažment úloh zabezpečujú spúšťanie úloh a realizáciu všetkých operácií spojených s ich vykonávaním. V gridovej terminológii vstupnou bránou do gridu je UI (User Interface). UI predstavuje ľubovoľný stroj, na ktorom je nainštalovaný gridový midlvér a používateľ tam má zavedené vlastné konto a uložené svoje certifikáty. UI poskytuje klientské nástroje CLI (Command Line Interface) a API (Application Programming Interface), ktoré umožňujú pristupovanie ku gridovým zdrojom a vykonávanie gridových operácií. Výpočtový element CE (Computing Element) predstavuje virtuálny výpočtový zdroj – množinu výpočtových prostriedkov umiestnených v jednom gridovom uzle, typicky, počítačový klaster. CE pozostáva z troch hlavných komponentov: množiny výpočtových uzlov WN (Worker Nodes) klastra, dávkového systému LRMS (Local Resource Management System) a generického rozhrania klastra (Grid Gate), ktorého funkciou je úlohu akceptovať a prideliť ju prostredníctvom LRMS výpočtovým uzlom na vykonanie.

Za distribúciu a manažment úloh na výpočtové a úložné zdroje gridu je zodpovedný softvérový systém WMS (Workload Management System), ktorý poskytuje vstup k službám ošetrujúcim požiadavky úlohy. Služba WMProxy predstavuje hlavnú službu, ktorá sprístupňuje WMS a cez klientské rozhranie CLI inicializuje gridové operácie (viď. nasledujúcu tabuľku).

WMProxy Client Commands:

glite-wms-delegate-proxy Delegovanie a obnovenie proxy-dokladov glite-wms-job-list-match Výpis všetkých dostupných zdrojov gridu vhodných na vykonanie danej úlohy glite-wms-job-submit Predloženie úlohy na vykonanie glite-wms-job-status Zaznamenávanie stavu predložených/bežiacich úloh glite-wms-job-output Preberanie výsledkov dokončených úloh glite-wms-job-cancel Predčasné ukončenie úloh v ľubovoľnom čase glite-wms-job-loging-info Preberanie protokolu a vykonávaní úloh glite-wms-job-info Získanie informácií o bežiacich úlohach glite-wms-job-perusal Riadenie funkcionality "perusal" pre bežiacu úlohu

Služby pre manažment údajov majú za úlohu realizovať bezpečný a spoľahlivý prenos dátových súborov v gridovom prostredí, replikovanie súborov na úložných zdrojoch, interakciu s gridovými katalógmi a rôzne iné manipulačné operácie s údajmi.

Gridové úlohy

Aplikačné úlohy určené pre vykonávanie na gridovej infraštruktúre musia byť popísané v jazyku JDL (Job Description Language). JDL predstavuje flexibilný, vysoko-úrovňový jazyk, ktorý umožňuje popísať jednu úlohu alebo skupinu úloh s ľubovoľnými vzájomnými závislosťami a špecifikovať požiadavky a obmedzenia kladené na výber výpočtových a úložných zdrojov a nainštalovaného softvéru. Vo všeobecnosti, JDL atribúty obsahujú pre požiadavku špecifické informácie označujúce istým spôsobom činnosti, ktoré je nutné vykonať.

Nasledujúci príklad znázorňuje JDL súbor „job-simple.jdl“ pre vykonanie jednoduchej gridovej úlohy. V príklade sa predpokladá, že vyvolanie aplikácie „test.exe“ sa uskutoční vo vnútri shell-skriptu „start-test.sh“ so vstupnými parametrami „input.dat“ a „output.dat“. JDL súbor sa uvádza ako posledný zo vstupných argumentov v príkaze glite-wms-job-submit.

job-simple.jdl Popis atribútov

Type = "Job"; Typ požiadavky JobType = "Normal"; Typ úlohy CpuNumber = 1; Počet alokovaných CPU jadier Executable = "start-test.sh"; Meno vykonateľnej ulohy/príkazu Arguments = "test.exe input.dat output.dat"; Vstupné parametre úlohy StdOutput = "std.out"; Meno štandardného výstupného prúdu StdError = "std.err"; Meno štandardného chybového prúdu InputSandbox = Zoznam súborov, ktoré je nutné preniesť z UI   {"start-test.sh","test.exe","input.dat"};   na CE pred naštartovaním úlohy OutputSandbox = Zoznam súborov, ktoré sa prenesú z CE na UI   {"std.out","std.err","output.dat"};   po ukončení úlohy RetryCount = 0; Počet spustení úlohy pri výskyte chyby v úlohe ShallowRetryCount = 3; Počet spustení úlohy pri výskyte chyby     v gridovom komponente Requirements = Požiadavka na dobu vykonávania úlohy "other.GlueCEPolicyMaxWallClockTime >= 2880";   (čas uvedený v minútach)

Počítanie na Cloud-e

Klaudové počítanie predstavuje inovatívny spôsob počítania, pri ktorom sú výpočtové zdroje (často virtualizované) a IT infraštruktúry poskytované prostredníctvom siete ako služba na požiadavku. Medzi základné prednosti klaudového počítania patrí jednoduchý prístup k výpočtovým zdrojom, flexibilita, spoľahlivosť, okamžitá dostupnosť a nízke (prakticky nulové) investičné náklady pre používateľa. Vo všeobecnosti, klaudové počítanie ponúka svoje služby ako tri základné modely:
  1. infraštruktúra ako služba IaaS (Infrastructure as a service),
  2. platforma ako služba PaaS (Platform as a service) a
  3. softvér ako služba SaaS (Software as a service).

V modeli IaaS sú poskytované virtuálne stroje, dátové úložiská a sieťové spojenie ako služby, pričom používateľ má k strojom plný prístup, má možnosť sám ich administrovať a inštalovať na ne softvér podľa vlastnej potreby. Tento model je vhodný na uplatnenie pre existujúce aplikácie (tzv. „legacy“ softvér). Model PaaS poskytuje softvérové platformy (knižnice, API) v rámci ktorých môže používateľ vyvíjať svoje aplikačné programy a nasadiť ich do klaudu bez toho aby potreboval hlbšie znalosti a skúsenosti s administráciou stroja na nižších úrovniach. V modeli SaaS je poskytovaný kompletný softvér ako služba, ktorú používateľ môže po registrácii okamžite využívať (napr. Google Maps). Pre implementáciu IaaS existuje v súčastnosti niekoľko midlvérov. Medzi najznámejšie patrí komerčný produkt Amazon EC2 a z voľne dostupných sú to OpenStack, OpenNebula a Eucalyptus.

Časť klastra na ÚISAV bola vyčlenená na výskum klaudového počítania. Na experimentálne účely. tam bol nainštalovaný voľne dostupný klaudový midlvér OpenStack, ktorý sa teší širokej popularite aj v priemysle. Je podporovaný s IBM, HP, Cisco, AT&T, Intel, Redhat a mnohými inými významnými spoločnosťami. OpenStack sa nachádza v procese aktívneho vývoja. Pravidelne každý polrok vychádza nová verzia, posledná verzia Grizzly bola vydaná 4. apríla 2013.

OpenStack pozostáva z niekoľkých hlavných komponentov. Každý z komponentov treba skonfigurovať a inštalovať samostatne. Experimentálne boli nasadené na HP klastri s 3 uzlami, v ktorom každý uzol obsahuje dva 4-jadrové Xeon procesory a pevný disk s kapacitou 500 GB. Uzly sú navzájom prepojené sieťou Gigabit Ethernet.

Hlavný uzol„cloudmaster.ui.savba.sk“ je určený na riadenie a boli na ňom nainštalované komponenty: Glance (manažovanie obrazov virtuálnych strojov), Nova-volume (manažovanie virtuálnych diskov), MySQL databáza a Nova-API pre riadenie a komunikáciu s klientami.
Ostatné dva uzly sú výpočtové kde bežia virtuálne stroje a na nich boli nasadené Nova-compute a Nova-network. OpenStack obsahuje viaceré klientské nástroje vrátane rozhrania CLI, grafického webového rozhrania Dashboard, Firefox plugin HybridFox a rozhrania kompatibilného s Amazon EC2.

Návody pre Gridových používateľov

Návod na vytvorenie žiadosti o prvý osobný (user) certifikát (pre nového používateľa):


1. vygenerujte si nový pár kľúčov príkazom:	
	"grid-cert-request -int"
(ak nemáte nainštalovaný tento príkaz, môžete použiť môj 'user' skript ),
štandardne sa nové kľúče ukladajú v adresári „~/.globus“
	- ak sa najprv spýta na meno a priezvisko, vyplňte ich
	- zvoľte aspoň 12 znakovú passfrázu
	- potvrďte krajinu: "C=SK" a oblasť: "O=SlovakGrid"
	- vyplňte skratku názvu organizácie (zamestnávateľa alebo školu)
	- vyplňte meno aj priezvisko v plnom rozsahu (s medzerou)

2. skopírujte si sha1 hash žiadosti získany príkazom:
	"sha1sum usercert_request.pem"
 do formulára Ziadost.doc
 
3. vytlačte a osobne prineste túto žiadosť (formulár) 
	najbližšej registračnej autorite (informácie: ca.ui@savba.sk) a preukážte sa 
	jej platným identifikačným dokladom (občiansky preukaz, cestovný pas)

4. pošlite súbor "usercert_request.pem" navštívenej registračnej autorite.


Návod na znovu-vytvorenie žiadosti o osobný (user) certifikát (pre existujúceho používateľa):


Starý osobný certifikát môžete počas jeho platnosti použiť na podpísanie 
žiadosti o nový osobný certifikát (rekey request), a to nasledovným postupom:

1. odložte si adresár „~/.globus“ napr. do „~/.globus.bak“

2. vygenerujte si nový pár kľúčov príkazom: 
	"grid-cert-request -int"
(ak nemáte nainštalovaný tento príkaz, môžete použiť môj 'user' skript ),
štandardne sa nové kľúče ukladajú v adresári „~/.globus“
	- ak sa najprv spýta na meno a priezvisko, vyplňte ich
	- zvoľte aspoň 12 znakovú passfrázu
	- potvrďte krajinu: "C=SK" a oblasť: "O=SlovakGrid"
	- vyplňte skratku názvu organizácie (zamestnávateľa alebo školu)
	- vyplňte meno aj priezvisko v plnom rozsahu (s medzerou)

3. podpíšte žiadosť starým (ešte stále platným) certifikátom:
	cd ~/.globus
	openssl smime -sign -text -in usercert_request.pem -signer  \
	    ~/.globus.bak/usercert.pem -inkey ~/.globus.bak/userkey.pem -out rekey.smi

4. pošlite podpísanú žiadosť (súbor rekey.smi ) certifikačnej autorite: 
	ca.ui [AT] savba.sk

5. odložte si adresár „~/.globus“ napr. do „~/.globus.new“ a vráťte naspäť 
starý adresár „~/.globus.bak“ na „~/.globus“ až do času, kým nedostanete nový certifikát, 
ktorým potom prepíšete prázdny súbor ~/.globus.new/usercert.pem 
a potom adresáre znova zameňte



Návod na vytvorenie žiadosti o host certifikát:


1. vygenerujte si nový pár kľúčov pre host v nejakom adresári, napr. $HOME, 
	na tom stroji kde máte uložený svoj osobný certifikát príkazom:
	"grid-cert-request -dir . -int -host"
(ak nemáte nainštalovaný tento príkaz, môžete použiť môj 'host' skript ),
	- potvrďte krajinu: "C=SK" a oblasť: "O=SlovakGrid"
	- vyplňte skratku názvu organizácie (zamestnávateľa alebo školu)
	- vyplňte FQDN stroja (napr. ce.grid.skola.sk)

2. podpíšte žiadosť svojím platným user-certifikátom administrátora:
	openssl smime -sign -text -in hostcert_request.pem -out rekey.smi  \
	    -signer ~/.globus/usercert.pem -inkey ~/.globus/userkey.pem
	ak ste prihlásený ako root, zameňte "~/.globus" (2x) za adresár, 
	kde máte uložený osobný privátny kľúč a certifikát (alebo ich sem skopírujte)

3. doručte takto podpísanú žiadosť (súbor rekey.smi ) certifikačnej autorite: 
	ca.ui [AT] savba.sk 
	stačí obyčajným e-mailom (netreba ho už podpisovať)

4. po obdržaní nového certifikátu, prepíšte ním prázdny súbor hostcert.pem, 
	ktorý bol vygenerovaný v kroku 1 a spolu s privátnym kľúčom (hostkey.pem) 
	ich premiestnite do adresára „/etc/grid-security“

5. re-konfigurujte (yaim) všetky gridové služby nainštalované na danom hoste, 
	ktoré používajú certifikát (CE, SE, MON, …), 
	alebo nájdite všetky kópie starého kľúča+certifikátu (v rôznych adresároch aj 
	pod inými menami s príponou ".pem", ak majú rovnaký obsah) a 
	nahraďte ich novými kľúčami, potom reštartujte tieto služby (alebo rebootujte host)



Konverzia certifikátu z formátu „PEM“ do formátu „PKCS12“ a naopak (pre webový prezerač)

	Webové prezerače vyžadujú certifikáty vo formáte „PKCS12“ 
	zatiaľ čo gridové služby používajú certifikáty vo formáte „PEM“. 
	Na konverziu formátov je možné použiť príkaz: "openssl".

1. Konverzia z formátu „PEM“ do „PKCS12“:
	openssl pkcs12 -export -inkey userkey.pem -in usercert.pem -out usercred.p12 -name "certname"
	userkey.pem – osobný privátny kľúč (musí mať nastavené práva na čítanie iba pre vás)
	usercert.pem – osobný certifikát
	usercred.p12 – meno výstupného certifikátu vo formáte PKCS12
	"certname" – (nepovinné) meno certifikátu za účelom rozpoznania v prípade že 
		prehliadač má importovaných viacero certifikátov (napr. "SlovakGrid")

2. Konverzia z formátu „PKCS12“ do „PEM“:
	openssl pkcs12 -nocerts -in usercred.p12 -out userkey.pem

Užitočná linka: Manuál HPC na STU

Posledná úprava: 20.11.2020