Na UN*Xových strojích v doméně fi.muni.cz je nainstalován systém modulů. Ten umožňuje jednodušší používání nainstalovaného software. Sjednocuje totiž přístup k programům na různých platformách.

Jak je používat?

Za prvé je nutno moduly inicializovat. To je provedeno v systémových souborech /etc/profile, nebo (pro X window) *[xX]session. Potom lze seznam dostupných modulů vypsat příkazem

$ module avail
Výstup bude vypadat například takto:
--------- /packages/run/modules-2.0/modulefiles ---------
binhex         gnuplot        modules        tcl-tk
devel          info-services  plan           texlive
eclipse        maple          snns           viewers
Potom je nutné si potřebné moduly připojit příkazem:
$ module add jméno
Seznam aktuálně připojených modulů získáme
$ module list
Currently Loaded Modulefiles:
          1) modules
Stručnou nápovědu o čem je konkrétní modul získáme
$ module help jméno
Modul modules musí být připojen vždy. Pokud není, uděláme to příkazem
$ module add modules
Podobně přidáme i ostatní, např.
module add texlive
Modul je souhrn software, který k sobě logicky patří. Připojením modulu si tyto programy zpřístupníme. Například po posledně uvedeném příkazu máme k dispozici nejen vlastní TeX, ale i prohlížeč .dvi souborů (xdvi), konvertor (dvips), manuálové stránky, a další.

Jak je to uděláno?

Příkazem

$ module add jméno
dojde ke změně v nastavení proměnných prostředí shellu, typicky proměnných PATH, MANPATH a XUSERFILESEARCHPATH. Vlastní příkaz module je implementován jako funkce shellu, která má ale tu vlastnost, že se nedědí. Proto je vhodné její inicializaci dát do ~/.kshrc či jiného souboru, který se provádí při spuštění shellu. Například implicitní /etc/kshrc obsahuje řádek
. /packages/run/modules-2.0/init/ksh
Další podrobnosti viz též:
man module

Jak psát moduly?

Dále jsou k dispozici informace pro ty, které systém zajímá podrobněji, nebo pro ty kteří chtějí nainstalovat všem dostupný balík programů.

O co jde?

Moduly slouží pro sjednocení přístupu k instalovanému SW na jednotlivých platformách, určují jediné místo pro instalaci SW, které je sdílené mezi různými počítači a v neposlední řadě dává možnost mít současně nainstalováno více verzí jednoho balíku programů.

Jak to funguje?

Moduly jsou na všech UN*Xových platformách dostupné v adresáři /packages. Zde jsou podadresáře run (run64), share a share_rw. V těchto adresářích jsou jednotlivé balíky instalovány do adresářů jméno_balíku-verze, například gcc-3.4.1.

Adresář run obsahuje na platformě závislé věci, obvykle to co se nachází v adresářích bin či lib. Proto je run sdílen mezi podobnými stroji -- například všechny Linuxy na i386, všechny Solarisy, všechny MacOS X.

Adresář share je určen pro data a programy nezávislé na platformě. Analogie je s daty v /etc (konfigurační soubory), man a info. Měly by zde být i programy napsané např. v perlu, sedu nebo pythonu. Tento adresář je sdílen mezi všemi platformami.

Adresář share_rw je jako jediný dostupný i pro zápis. Proto by v něm měly být ty části instalace, ke které se i během práce musí přistupovat pro zápis. Pro běžné programy to není potřeba, ty si data ukládají buď v /tmp nebo v domovském adresáři uživatele která si program pouští.

V adresáři run/links a zde v bin a lib se nacházejí linky na binárky v /packages/{run,share}, které by měly být dostupné i bez explicitního přidání modulu, který je obsahuje (ve skutečnosti jsou tyto adresáře přidány po zadání module add modules). Sem se obvykle dávají např. poštovní klienti (elm, mutt, pine,... nebo jiné užitečné nástroje (gtar, gzip,...). Umisťování linků sem by se mělo dít s rozvahou. V adresáři run/modules-2.0 je vše potřebné pro inicializaci a chod modulů. Zde v init jsou soubory pro inicializaci v jednotlivých shellech. Inicializace obvykle probíhá v profile nebo xsession (i v globálních) například voláním:

. /packages/run/modules-2.0/init/bash
a poté už je v shellu dostupný příkaz module. Jeho popis je v uživatelské části této stránky.

Dále v adresáři modulefiles je vlastní popis modulu (který se provádí při module add jméno) a v adresáři helpfiles je stručná nápověda ke každému balíku.

Jak postupovat při zakládání nového modulu

Nejprve je potřeba založit adresáře /packages/run/balík-verze (nejlépe na všech platformách) a /packages/share/balík-verze. K tomuto účelu slouží aplikace na vytváření modulů. Poté se provede kompilace balíku, která je nastavena tak, že --prefix (tj. kam se instaluje) je nastaven /packages/share/balík-verze a --bin-prefix a --lib-prefix (tj. binárky a knihovny) jsou nastaveny na /packages/run/balík-verze. Poté se provede instalace do těchto adresářů. Balík by se měl nainstalovat na všech platformách na FI (tj. Linux x86, Linux x86-64, Solaris a MacOS X).

Soubor /packages/run/modules-2.0/modulefiles/balík-verze se naplní potřebnou konfigurací a do souboru /packages/run/modules-2.0/helpfiles/balík-verze se umístí stručný text o obsahu a použití tohoto balíku.

Nyní by balík měl být viditelný v module avail a přístupný po zadání module add balík-verze.

V adresáři /packages/run/modules-2.0/modulefiles by každý balík měl mít i označení verze. Jedinou výjimkou je tzv. defaultní verze, která se tvoří pomocí symbolického linku na existující soubor balík-verze. Ten je pak dostupný pouhým zadáním module add balík.

Syntaxe souboru v modulefiles

Podrobnosti viz module(1) a modulefile(4). Stručně následuje i zde:

#%Module1.0
#!
#! Title:
#! Platforms: sun4
#! Version:
#! Description:
#!
#!
#!
proc ModulesHelp {} {
global ModulesCurrentModulefile
puts stdout "modulehelp $ModulesCurrentModulefile"
}
Takto by měl vypadat začátek souboru s tím, že je správně uveden Title = jméno balíku, Platforms = pro které platformy je určen (typicky jen jedna), Version a Description = verze a popis. Následovat může:
append-path JMÉNO HODNOTA
prepend-path JMÉNO HODNOTA
přidá HODNOTA na začátek nebo na konec proměnné JMÉNO. Např.:
append-path PATH /packages/run/gcc-3.4.1/bin
append-path LD_LIBRARY_PATH /packages/run/gcc-3.4.1/lib
setenv JMÉNO HODNOTA
unsetenv JMÉNO
Nastaví proměnnou JMÉNO na hodnotu HODNOTA. Smaže obsah proměnné.
conflict MODUL [MODUL ...]
Se kterými moduly je v konfliktu.
prereq MODUL [MODUL ...]
Které moduly potřebuje.
module PŘÍKAZ [ARG]
ty samé povely jako příkaz module a jiné, které jsou popsány v manové stránce.

Na kterých strojích lze instalovat?

Protože /packages jsou na většině strojů dostupné pouze pro čtení, je nutné sem zapisovat na vybraných strojích. Ty jsou:

  • anxur, aisa, aura, nymfe01 a nymfe86 pro platformu Linux x86
  • anxur, aisa, aura, nymfe01 a nymfe86 pro platformu Linux x86-64

Jak získám práva pro zápis do /packages

Pokud se rozhodnete nainstalovat program pro všechny, potřebné adresáře a soubory vytvoříte aplikací na vytváření modulů na Fakultní administrativě. Musíte zadat jméno balíku, verzi a pro které OS ho hodláte nainstalovat. Při zakládání nového modulu prosím dodržujte výše uvedené pokyny. Zjednodušíte a zpříjemníte tak situaci nejen nám, ale i spoustě studentů, kteří se rozhodnou váš balík používat. Také je potřeba dbát na licence instalovaných balíků. Rozhodně by zde neměly být nainstalované ty programy, jejichž licence to neumožňuje.

Stejně tak pokud chcete převzít správu nějakého balíku po svém předchůdci, můžete, pokud je to třeba, požádat unix@fi o přivlastnění existujícího balíku Vám.

A teď?

Teď už si jen vyberte jaký software chcete přiinstalovat a hurá do toho! Pokud chcete upgradovat stávající modul, kontaktujte prosím napřed toho kdo spravuje balík s nižší verzí -- zjistíte ho podle vlastníka příslušného adresáře.