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 |
|
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