Skoči na vsebino

Zgradimo prvi vsebnik

Prvi poskus

Zgradili bomo enostavno različico vsebnika, s katerim smo se zabavali v prejšnjem poglavju. Za osnovo bomo vzeli linux alpine, minimalistično različico operacijska sistema Linux, in v vsebnik namestili programček fortune.

$ apptainer build modrec.sif library://library/default/alpine:3
apptainer build modrec.sif library://library/default/alpine:3

Vsebnik zaženimo v interaktivnem načinu

$ apptainer shell modrec.sif
apptainer shell modrec.sif

in poglejmo verzijo operacijskega sistema

Singularity> cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.15.5
PRETTY_NAME="Alpine Linux v3.15"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
cat /etc/os-release

Če želimo vsebnik spreminjati, moramo imeti skrbniške pravice. Na lastnem računalniku uporabimo ukaz sudo (angl. super user do) ali stikalo --fakeroot, na večuporabniškem sistemu pa stikalo --fakeroot. Seveda nam mora skrbnik pred tem dati dovoljenje za njegovo uporabo. V nadaljevanju bomo uporabljali stikalo --fakeroot. Z dodatnimi pravicami vsebnik spet zaženimo v interaktivnem načinu.

$ sudo apptainer shell modrec.sif         # Uporaba sudo

$ apptainer shell --fakeroot modrec.sif   # Uporaba stikala --fakeroot
sudo apptainer shell modrec.sif

apptainer shell --fakeroot modrec.sif

Če poskusimo v vsebniku posodobiti namestitveni program apk (angl. Alipne linux PacKage manager) z ukazom apk update, dobimo opozorilo, da gre za datotečni sistem, namenjen samo za branje (angl. Read-only file system). Z ukazom exit se vrnemo na gostitelja.

Nespremenljivi in spremenljivi vsebniki

Ogrodje Apptainer pozna nespremenljive (angl. immutable) in spremenljive (angl. mutable) vsebnike.

  • Nespremenljive vsebnike spoznamo po datoteki s končnico sif. Običajno delamo z njimi.
  • Spremenljive vsebnike potrebujemo predvsem med razvojem (gradnjo). Spremenljiv vsebnik zahtevamo s stikalom --sandbox. Tak vsebnik je na gostitelju predstavljen z mapo, v kateri so shranjene vse datoteke vsebnika. Po zaključeni gradnji spremenljiv vsebnik pretvorimo v nespremenljivega.

Na lokalnem računalniku nespremenljive vsebnike ustvarimo z ukazoma apptainer pull ali apptainer build. Za pripravo spremenljivega vsebnika moramo obvezno uporabiti ukaz apptainer build.

Drugi poskus

Zdaj imamo dovolj znanja, da bi morale stvari teči gladko. Spremenljiv vsebnik bomo označevali s končnico sb (angl. SandBox).

$ apptainer build --sandbox modrec.sb library://library/default/alpine:3
INFO:    Starting build...
...
INFO:    Creating sandbox directory...
INFO:    Build complete: modrec.sb

$ ls modrec.sb
bin  dev  environment  etc  home  lib  media  mnt  opt  proc  root  run  sbin  
singularity  srv  sys  tmp  usr  var
apptainer build --sandbox modrec.sb library://library/default/alpine:3
ls modrec.sb

Ukaz ls -l modrec.sb nam razkrije, da je spremenljiv vsebnik dejansko mapa, v kateri so shranjene vse datoteke vsebnika.

Vstopimo v vsebnik in še enkrat namestimo program fortune. Pazimo, da vstopimo kot skrbnik in da vsebnik pripravimo za pisanje.

$ apptainer shell --fakeroot --writable modrec.sb

Singularity> apk update
...
OK: 11282 distinct packages available

Singularity> apk add fortune
...
OK: 9 MiB in 16 packages

Singularity> fortune
It's always darkest just before it gets pitch black.

Singularity> exit

$ apptainer exec modrec.sb fortune
Never eat more than you can lift.

$ apptainer run modrec.sb

Singularity> exit
apptainer shell --fakeroot --writable modrec.sb

apk update

apk add fortune

fortune

apptainer exec modrec.sb fortune

apptainer run modrec.sb

exit

Veliko bolje. Ukaz apptainer exec deluje, spremembe smo tokrat uspešno shranili. Le ukaz apptainer run še ne vrne modre misli. V osnovni mapi vsebnika najdemo datoteko singularity. Gre za skripto, ki se izvede ob zagonu vsebnika. Za naše potrebo v skripti singularity potrebujemo zgolj dve vrstici.

1
2
#!/bin/sh
exec fortune "$@"

Vrstici lahko zapišemo v datoteko singularity s pomočjo poljubnega urejevalnika besedil (vi, nano) ali pa ju kar izpišemo na standardni izhod in preusmerimo v datoteko singularity.

$ (echo '#!/bin/sh'; echo 'exec fortune "$@"') > modrec.sb/singularity    
$ cat modrec.sb/singularity
#!/bin/sh
exec fortune "$@"

$ apptainer run modrec.sb
There has been an alarming increase in the number of things you know nothing about.
(echo '#!/bin/sh'; echo 'exec fortune "$@"') > modrec.sb/singularity    
cat modrec.sb/singularity

apptainer run modrec.sb

Super! Zdaj, ko smo s spremenljivim vsebnikom zadovoljni, ga pretvorimo v nespremenljivega. Seveda lahko prepišemo neuspešen prvi poskus. Tokrat bomo nespremenljiv vsebnik modrec.sif zgradili kar iz spremenljivega vsebnika modrec.sb.

$ apptainer build --fakeroot modrec.sif modrec.sb
Build target 'modrec.sif' already exists and will be deleted during the build process. 
Do you want to continue? [N/y]y
INFO:    Starting build...
INFO:    Creating SIF file...
INFO:    Build complete: modrec.sif

$ ./modrec.sif
Computers are not intelligent. They only think they are.
apptainer build --fakeroot modrec.sif modrec.sb

./modrec.sif

Spremenljivega vsebnika modrec.sb ne bomo več potrebovali. Če želimo, ga lahko z ukazom rm -rf modrec.sb pobrišemo.

Preveri svoje znanje

Vaja

Vaja 02