HTML

Az élet kódjai

Csináld maga. Senki nem csinálja meg helyetted.

Friss topikok

Zsonglőrködés környezeti változókkal

2020.07.14. 17:41 Travis.CG

Szuperszámítógépes környezetben gyakran találkozunk a module load paranccsal, ha egy szoftver komponenst akarunk használni. Mi ez a parancs, mire tudjuk használni és hogyan fordíthatjuk saját hasznunkra?

A program nem csinál mást, csak a kiadott utasításoknak megfelelően kicseréli a környezeti változókat. Ez talán elsőre nem tűnik nagy dolognak, hiszen ott a Docker, Conda, de sok esetben egy virtualizációs megoldások csak elbonyolítják a helyzetet. Például képzeljünk el azt a felállást, amikor két olyan környezetet kell használnunk, ami két különböző Docker képfájlban van. De az is elképzelhető, hogy nem akarunk rendszergazdai jogokkal felruházni futó folyamatokat, mint ami a HPC környezetek esetén is tapasztalható.

A környezetek összevonása nagyon egyszerűen megy modules-al, de rosszul megtervezett modulok esetén továbbra is előfordulhatnak ütközések, míg Docker használatával ennek az esélye minimális.

A rendszer egyik gyengesége a Tcl/Tk környezethez való ragaszkodás, aminek történelmi okai vannak. Ez is csak azoknak jelenthet problémát, akik nem szeretik ezt az archaikus megoldást. Szerencsére létezik több alternatív rendszer, ami ezt lecseréli, például Lua-ra. Ebben a bejegyzésben csak a Tcl/Tk verziós megoldással foglalkozom.

Mivel elég régóta fejlesztett programoról van szó, az összes ismert csomagkezelőben megtalálható environment modules néven. Telepítés ezért gyerekjáték. Minden környezetet egy fájl reprezentál, amit Ubuntu esetén például az /usr/share/modules/modulefiles könyvtárban találunk alapértelmezetten. Általában nem érdemes nulláról kezdve megírni a fájlokat, inkább valamelyik, már létező fájlt kell módosítani, hogy a fájlok váza egységes legyen.

Milyen módon épül fel egy ilyen fájl? Először is kell egy #%Module, ami kínosan emlékeztet egy linuxos szkript fejlécre. Ez nem a véletlen műve. Utána jöhet egy verziószám.

A konvenció szerint ezután kommentek formájában érdemes egy rövid leírást adni magáról a modulról. Mivel csak ritkán olvassuk magukat a modul fájlokat, célszerű egy ModulesHelp függvényt is definiálni, ami szintén kiírja a szükséges információkat. Ezeket a modules help paranccsal jeleníthetjük meg.

Az összes többi bejegyzés szabványos Tcl/Tk utasítás. Készíthetünk ciklusokat, feltételes elágazásokat, bármit. A nyelv bemutatása túlmutat a cikk határain, ezért itt csak a legfontosabb dologra, a környezeti változók kezelésére koncentrálunk.

Bioinformatikai programok esetén az egyik legfontosabb környezeti változó, az elérési út, vagy "PATH". Amennyiben új elemet akarunk hozzáadni, az append-path parancsra lesz szükségünk. Utána a változó nevét kell megadni, amit Bash esetén a PATH, majd a hozzáadandó értéket, ami az elérési út.

append-path PATH "/home/user/mysoftware/bin"

Az adott modul eltávolítása után a bejegyzés is eltűnik. Tehát ha több környezetet használunk, és mindegyiknek saját bejegyzése van a PATH-ban, akkor a modul megszűnése csak az adott környezet bejegyzését törli.

A másik fontos parancs, az új környezeti változó felvétele, hiszen sok program azok alapján találja meg a konfigurációs állományokat vagy adatokat. A setenv parancs segítségével ezt érhetjük el. Szintaxisa nagyon hasonló az append-path-nál megismerthez. Először a parancs, majd a beállítandó környezeti változó neve, végül az értéke. A következő példa a STAR-Fusion számára állítja be az indexelt genom és a hozzátartozó annotációt tartalmazó könyvtár nevét:

setenv CTAT_GENOME_LIB "/usr/share/molbio/rna-seq"

Amennyiben készen vagyunk a fájlokkal, azonnal használhatjuk őket. A module load parancs segítségével betölthetjük az adott környezetet, csak a modul fájl nevét kell megadnunk. Ha már nincs szükségünk az adott környezetre, a module unload segítségével eltávolíthatjuk azt. Az elérhető modulok listáját a module avail mutatja meg.

Végezetül szeretnék pár megjegyzést tenni, amivel én szembesültem, amikor telepítettem és konfiguráltam a rendszert. Bash esetén nem szokott gond lenni, de más parancsértelmezők alkalmazásakor figyelni kell, hogy a modules inicializálása megfelelő legyen. Az /etc/profile.d könyvtárban található fájlok nem minden esetben futnak le, például zsh esetén. Nem megfelelő inicializálás esetén hiába vannak a modul fájlok a megfelelő helyen, azokat mégsem látja a felhasználó.

Ha több környezetet szeretnénk használni, akkor az environment-modules siet a segítségünkre. Segítségével átláthatóvá tehető a környezeti változók kezelése. Telepítése egyszerű, használata szintén. HPC környezetben előszeretettel használják, de saját rendszerünkre is telepíthetjük. Ez a bejegyzés nem érintett mindent, a program sokkal több lehetőséget rejt magában (például akár hierarhikusan is felépíthetjük a modulokat).

Szólj hozzá!

Címkék: rendszergazda

A bejegyzés trackback címe:

https://cybernetic.blog.hu/api/trackback/id/tr8215904774

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása