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ě:
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
unixWH58E_8hk@fiXpfKXvBkz.munipQblRQMnH.cz
, a pokud v tom nebude problém, nainstalujeme jej.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.)
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
nebollvm
, půjdou binárky sestavené na Aise pravděpodobně spustit na Nymfách, rozhodně však ne naopak.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 vman 4 modulefile
.Vyzkoušejte funkčnost.
$ module add ‹pkg›-‹version›
a ověřte, že vše funguje tak, jak má.
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
unix0nJaPcgtL@fi=qugThf9U.munioO2G8FmBw.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čátekappend-path VARIABLE VALUE
– přidání dvojtečky a hodnoty na konecsetenv VARIABLE VALUE
– přepsání proměnné hodnotouunsetenv 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.