Moduly

Linuxové počítače v síti FI používají ke správě nainstalovaného software systém modulů. Díky němu

  • lze používat stejné programové vybavení napříč fakultními linuxovými stroji,
  • lze provozovat vedle sebe různé verze téhož softwaru,
  • studenti a vyučující mohou instalovat a ostatním zpřístupňovat libovolný software (samozřejmě pouze pokud to jeho licence umožňuje).

Modul je sada software, který k sobě logicky patří. Například modul ghc obsahuje kromě překladače ghc také interpret ghci, generátor dokumentace haddock a balíčkovací nástroj cabal.

Používání

Většinu práce s moduly zprostředkovává příkaz module, který má několik povelů. Nejdůležitějším je add pro připojování modulů – programy v modulu nejsou snadno přístupné, dokud modul nepřipojíme.

  • Připojení modulu:

      $ module add ‹name›
    
  • Vypsání dostupných modulů:

      $ module avail
      -------- /packages/run/modules-3.1.6/modulefiles --------
      binhex         gnuplot        modules        tcl-tk
      devel          info-services  plan           texlive
      eclipse        maple          snns           viewers
    
  • Seznam aktuálně připojených modulů:

      $ module list
      Currently Loaded Modulefiles:
              1) modules
    

    Modul modules musí být přítomen vždy; pokud není, je zapotřebí ho přidat standardním způsobem: module add modules.

Chci přidat modul

Výborně! Postupujte následovně:

  1. Neexistuje starší verze? Neexistuje distribuční balíček?

    Pokud chcete vytvořit novou verzi nějakého existujícího modulu, je dobrý nápad nejprve kontaktovat správce současné verze. Je jím vlastník souboru /packages/run.64/modules/modulefiles/‹pkg›-‹current version›.

    Je také dobré zkontrolovat, zda neexistuje daný software (v pro vás dostatečné verzi) v distribučním balíčku. Pokud ano, stačí napsat na unix@fi.muni.cz, a pokud v tom nebude problém, nainstalujeme jej.

  2. Založte modul pomocí aplikace ve Fakultní administrativě.

    Zadejte jméno a verzi softwarového balíku. Dále je budeme označovat ‹pkg› a ‹version›.

    Při založení vznikne prázdná kostra modulu:

    • /packages/run.64/‹pkg›-‹version›/ (sem se bude instalovat)
    • /packages/run.64/modules/modulefiles/‹pkg›-version› (konfigurace modulu)

    (Ve skutečnosti je toho víc; zájemce odkazujeme na pokročilou sekci níže.)

  3. Nainstalujte software do /packages/run.64/‹pkg›-‹version›/.

    To se liší podle softwaru; typicky to spočívá v nastavení prefixu při konfiguraci, sestavování a/nebo instalaci na tento adresář. Pátrejte po volbě --prefix, CMAKE_INSTALL_PREFIX apod.

    Instalaci provádějte na jednom z následujících počítačů:

    aisa, anxur, aura, nymfe01,

    a to tam, kde plánujete modul využívat (jinak můžete narazit na problémy např. s verzemi systémových knihoven). Nejedná-li se o program s grafickým rozhraním, je jistější instalovat na Aise nebo Auře – program pak zpravidla bude možné spustit i na grafických stanicích. Zejména pokud překládáte modulem gcc nebo llvm, půjdou binárky sestavené na Aise pravděpodobně spustit na Nymfách, rozhodně však ne naopak.

  4. Nastavte modul souborem /packages/run.64/modules/modulefiles/‹pkg›-‹version›.

    Bude potřeba zjistit, kam přesně se nainstalovaly spustitelné soubory a v konfiguračním souboru tuto cestu přidat do proměnné prostředí PATH. Slušností je také zpřístupnit manuálové stránky.

    Zde je krátký příklad z modulu ghc-8.10.2:

     #%Module1.0
     #!
     #! Title: ghc
     #! Version: 8.10.2
     #! Description: The Glasgow Haskell Compiler
    
     prepend-path PATH     /packages/run.64/ghc-8.10.2/bin
     prepend-path MANPATH  /packages/run.64/ghc-8.10.2/share/man
    

    Podobně může být potřeba nastavit třeba LD_LIBRARY_PATH nebo jiné proměnné prostředí. Zde můžete také modulu nastavit závislosti na jiných modulech nebo konflikty s jinými moduly. Podrobnosti najdete v samostatné sekci níže a v man 4 modulefile.

  5. Vyzkoušejte funkčnost.

     $ module add ‹pkg›-‹version›
    

    a ověřte, že vše funguje tak, jak má.

  6. Napište nám ohledně výchozí verze.

    Všechny moduly musí mít uvedeno číslo verze. Jméno balíku bez verze je jen zkratkou pro nějakou výchozí verzi. Pokud chcete, aby se váš modul dal připojovat kratším příkazem

     $ module add ‹pkg›
    

    je potřeba vaši verzi modulu označit jako výchozí. To sice sami udělat nemůžete, ale můžete nám napsat na unix@fi.muni.cz.

Pokročilejší konfigurace modulů

Kromě prepend-path VARIABLE VALUE může modul měnit proměnné prostředí jinými způsoby:

  • prepend-path VARIABLE VALUE – přidání hodnoty a dvojtečky na začátek
  • append-path VARIABLE VALUE – přidání dvojtečky a hodnoty na konec
  • setenv VARIABLE VALUE – přepsání proměnné hodnotou
  • unsetenv VARIABLE VALUE – zrušení proměnné

Dále je možné nastavit závislosti a konfliktní moduly. Potřebuje-li váš modul využívat jiných modulů, vždy to v konfiguraci explicitně uveďte. Jinak můžeme časem některý potřebný modul vyhodnotit jako nevyužívaný a smazat jej.

conflict MODULE [MODULE ...]
prereq   MODULE [MODULE ...]

Konečně je možné moduly přímo připojovat nebo provádět jiné operace příkazu module.

module   COMMAND [ARGUMENT]

Potřebujete-li k modulu napsat nějakou krátkou nápovědu, můžete ji vepsat do souboru /packages/run/modules/helpfiles/‹pkg›-‹version›. Bude pak zobrazitelná příkazem modulehelp ‹pkg›-‹version›.

Více informací naleznete v manuálových stránkách module(1) a modulefile(4).

Jak to celé funguje?

Moduly jsou na všech linuxových počítačích dostupné v adresáři /packages. Kromě podadresáře run.64 je zde run se starými 32bitovými moduly. Ještě může být zajímavý podadresář share, do nějž se umisťují platformně nezávislé soubory (tedy to, co je obvykle v /usr/share). Myšlenka je taková, že adresář /packages/run.64 se sdílí mezi počítači se stejnou platformou a /packages/share mezi všemi počítači.

Jelikož je v současnosti jedinou moduly obdařenou platformou na FI Linux-amd64, není potřeba share využívat a celou instalaci můžete umístit do run.64 (kam by v multiplatformním návrhu spadaly jen binárky, knihovny apod.).

Z popisu instalace je asi patrné, že celé kouzlo přidávání modulů je vlastně jen přidávání cest do PATH (či dalších proměnných).

Aby to fungovalo, musí být příkaz module funkcí shellu, nikoli spustitelným programem. (Tato funkce se v shellu neobjeví sama od sebe; je zaváděna souborem /etc/profile.d/modules.sh.) V důsledku toho můžete sice příkaz module používat v shellových skriptech (typicky např. v ~/.bashrc), ne však v jiných programech. Na druhou stranu vám nic nebrání přistupovat k binárkám přímo absolutní cestou /packages/run.64/‹pkg›-‹version›/.... To s sebou ovšem při dlouhodobém používání nese riziko. Na rozdíl od module add tento způsob použití umíme detekovat pouze na serverech (Aisa, Anxur, Aura), nikoli na stanicích (Nymfe, Musa). Moduly používané pouze na stanicích je proto vhodné vždy přidávat přes module add, abychom je časem nevyhodnotili jako nepoužívané a neodstranili je. Totéž se týká modulů s knihovnami apod. – zatím detekujeme pouze spuštění binárky.

Existence modulu je „způsobena“ existencí správně naformátovaného konfiguračního souboru v /packages/run.64/modules/modulefiles/. Výchozí verze modulu (ta bez explicitního čísla verze) tak má v adresáři modulefiles také svůj konfigurační soubor – ve skutečnosti je ale jen symbolickým odkazem na soubor konkrétní verze. Výchozí verze modulů se tak dají zjistit příkazem readlink (nebo třeba i vypsáním adresáře modulefiles pomocí ls -l).

Lokální moduly na studentských stanicích

Na stanicích Nymfe a Musa se můžete setkat i s moduly končícími na -loc. Jedná se o stejné moduly jako jejich verze bez -loc, jen jsou umístěny na lokálním disku stanic Nymfe. Lokální moduly vytváří pouze unix@fi pro objemné moduly, jak kvůli jejich zrychlení, tak kvůli omezení datového toku po síti.