Vsebniki
Vsebniki predstavljajo individualno enoto z ustreznim naborom programske opreme, vključno z ustreznimi knjižnicami in nastavitvami za učinkovito delovanje v okolju. Tehnologija omogoča zanesljivost, prenosljivost, izolacijo, varnost in zagon programske opreme vsebnikov znotraj ali izven ukazne vrstice. Slednje omogoča, da se programska oprema prilagodi okolju superračunalnika. Posamezne distribucije omogočajo različne pristope in mehanizme, ki zagotavljajo fleksibilnost in konfiguracijo okolja. Gruča Vega že ima platformo za vsebnike Apptainer nameščeno in prilagojeno delu na superračunalnikih (HPC).
Na HPC Vega so vsebniki na voljo na $PATH: /ceph/hpc/software/containers/singularity
Vsebniki Apptainer
Apptainer je platforma, namenjena ustvarjanju in zaganjanju vsebnikov znotraj superračunalniškega okolja. Vsebniki imajo dostop do skupne operacijskega sistema, datotečnega sistema in programske opreme, nameščene na vozliščih. Slednja upošteva privilegije operacijskega sistema (v našem primeru je to RHEL), ki omogoča uporabo in prenos ustreznih pravic sistemskega uporabniškega računa. Če se odločimo za namestitev lastnega vsebnika, lahko namestimo programsko opremo, knjižnice in prilagodimo okolje v njem tako, da ustreza našim potrebam. Zaradi omejene izolacije, ni treba upoštevati ustreznosti, skladnosti okolja, ki ga vzpostavite. Sicer vsebnik ne bo deloval pravilno ali pa sploh ne bo deloval. Apptainer nudi visoko ravne prenosljivosti – Singularity Image Format (SIF) in ponovljivost vsebnikov s pomočjo datotek z definicijo ali opisom (.def/.dsc).
Apptainer (prej Singularity) je odprtokodni fork programa Singularity. Večinoma sta medsebojno zamenljiva, zato lahko svoje delovne tokove v Singularityju enostavno prilagodite, da bodo delovali tudi z Apptainerjem.
Več informacij najdete v uradni dokumentaciji
Ukazi Apptainer
Prenesite predhodno pripravljene vsebnike – prenos vsebnika z ukazom "pull" iz repozitorijev (klnjižnica, docker, sbub itd.):
$ apptainer pull <image-name>.sif <hub>://<image>[:tag]
$ apptainer pull container.sif docker://tensorflow/tensorflow:latest
Za zagon vsebnika:
$ apptainer run container.sif
Za zagon ukaza v lokalnem vsebniku:
$ apptainer exec container.sif <command>
Lupina lokalnega vsebnika:
$ apptainer shell container.sif
Tiskanje podatkov lokalnega vsebnika:
$ apptainer inspect container.sif
$ apptainer inspect --runscript container.sif
$ apptainer inspect --deffile container.sif
Tiskanje razdelka "Pomoč":
$ apptainer run-help container.sif
Dodatne ukaze najdete v razdelku "Pomoč":
$ apptainer help
Lastni vsebnik lahko pripravite na več načinov, lahko tudi tako, da jih združite. Uporabite lahko tudi predhodno pripravljene vsebnike, jih razporedite in jih prilagodite svojim potrebam. Če pa vam to ne ustreza, lahko ustvarite lastni vsebnik s pomočjo datoteke z definicijo. Slednja vam omogoča višjo raven ponovljivosti vsebnika samega (vedno dobite isti rezultat, morate pa biti previdni, da ne uporabite najnovejših oznak).
Predloge so na voljo v različnih repozitorijih za zagon (angl. bootstrap repositories), kot so:
- Knjižnica vsebnikov Singularity: https://cloud.sylabs.io/library
- Docker Hub: https://hub.docker.com/
- Singularity Hub: https://singularity-hub.org/
- Yum
Celotni seznam repozitorijev je na voljo na spletni strani: Navodila za uporabnike
Dodatne funkcionalnosti in uporaba različnih stikal:
Singularity Image Format (SIF) je vsebnik samo za branje, ki omogoča prenosljivost. Če so potrebne spremembe v vsebniku, se lahko pretvori v "sandbox" ali uporabi dodatna funkcionalnost "Persistent Overlays", ki je na voljo s stikalom --overlay.
Več informacij najdete povezavi.
Če je vsebnik pripravljen s stikalom --sandbox, se lahko vsebnik sam ureja neposredno s stikalom --writable.
Sistemske direktorije lahko vpnete v vsebnik z uporabo stikala --bind $PATH.
Več informacij najdete povezavi.
Graditev
Pripravljanje lastnega vsebnika:
$ apptainer build --sandbox --fix-perms container/ docker://centos:latest
Lupina
$ apptainer shell container.sif
$ apptainer shell --writable --fakeroot container/
Izvršitev
$ apptainer exec --fakeroot container/ whoami
Predpomnilnik
$ apptainer cache list
$ apptainer cache clean --type=all
Priprava datoteke z definicijo
$ vim example.def
bootstrap: docker
from: ubuntu:latest
%environment
export LC_ALL=C
%runscript
echo "This is what happens when you run the container.."
%post
apt-get -y update
apt-get -y install <package-name>
apt-get clean
%labels
Maintainer Y
Version 1.0
%help
Description of help section.
Fakeroot je funkcionalnost, ki omogoča uporabnikokm brez privilegijev, da pridobijo ustrezne pravice "root" znotraj vsebnikov s stikalom -–fakeroot. Pravice gostiteljskih sistemov datotek (FS) so ustrezno preslikane znotraj vsebnika. Poleg tega se priporoča, da uporabite stikalo --fix-perms, ki ustrezno uravnava in prilagaja pravice znotraj vsebnika.
Več informacij najdete povezavi
$ apptainer build --fix-perms --sandbox --fakeroot container/ example.def
Vsebnik samo za branje (stisnjen squashfs) je format SIF (Singularity Image Format), ki se lahko pretvori v sliko s stikalom --writable ali stikalom sandbox na direktorije sandbox. Zapisljivo stikalo (za razliko od direktorijev sandbox) ne omogoča stalnih/trajnih sprememb.
$ apptainer build --sandbox --fakeroot container/ container.sif
$ apptainer build --sandbox --fakeroot container.simg container.sif
Opomba
Fakeroot za vse uporabnike je privzeto nastavljen na način root-mapped user namespace. Če za namen izdelave lastnih vsebnikov potrebujete rootless mode, pošljite zahtevo za omogočitev na support@sling.si