Zgradimo prvi vsebnik
Prvi poskus
Zgradili bomo enostavno različico vsebnika, s katerim smo se zabavali v prejšnjem poglavju. Za osnovo bomo vzeli operacijski sistem Linux Ubuntu, različico , in v vsebnik namestili programček fortune
.
$ apptainer build modrec.sif docker://ubuntu
apptainer build modrec.sif docker://ubuntu
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
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
...
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 apt
z ukazom apt 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 docker://ubuntu
INFO: Starting build...
...
INFO: Creating sandbox directory...
INFO: Build complete: modrec.sb
$ ls modrec.sb
bin dev etc lib lib64 media opt root sbin srv tmp var
boot environment home lib32 libx32 mnt proc run singularity sys usr
apptainer build --sandbox modrec.sb docker://ubuntu
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
Apptainer> apt update
...
1 package can be upgraded. Run 'apt list --upgradable' to see it.
Apptainer> apt install fortune
...
The following NEW packages will be installed:
fortune-mod fortunes-min librecode0
0 upgraded, 3 newly installed, 0 to remove and 1 not upgraded.
Need to get 762 kB of archives.
After this operation, 2154 kB of additional disk space will be used.
...
Apptainer> /usr/games/fortune
It's always darkest just before it gets pitch black.
Apptainer> exit
$ apptainer exec modrec.sb /usr/games/fortune
Never eat more than you can lift.
$ apptainer run modrec.sb
Singularity> exit
apptainer shell --fakeroot --writable modrec.sb
apt update
apt install fortune
/usr/games/fortune
apptainer exec modrec.sb /usr/games/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 |
|
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 /usr/games/fortune "$@"') > modrec.sb/singularity
$ cat modrec.sb/singularity
#!/bin/sh
exec /usr/games/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 /usr/games/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 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 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