|
|
<span id="pagelocation"><a href="https://wiki.init.mpg.de/IT4Science/SingularityDefinitionFile?action=fullsearch&context=180&value=linkto%3A%22SingularityDefinitionFile%22" class="backlink" title="Hier klicken für eine Liste der Seiten, die auf diese verweisen">SingularityDefinitionFile</a></span>
|
|
|
<span id="top" class="anchor"></span> <span id="line-1" class="anchor"></span><span id="line-2" class="anchor"></span><span id="line-3" class="anchor"></span>
|
|
|
|
|
|
Definition File
|
|
|
===============
|
|
|
|
|
|
<span id="line-4" class="anchor"></span><span id="line-5" class="anchor"></span>
|
|
|
Ein Defnition-File ist wie eine Bauanleitung zu verstehen für den <a href="https://wiki.init.mpg.de/IT4Science/SingularityContainerBauen" class="https">Bau eines Containers</a>. <span id="line-6" class="anchor"></span>Immer absolute Pfade angeben bzw. Umgebungsvariablen benutzen! <span id="line-7" class="anchor"></span><span id="line-8" class="anchor"></span>
|
|
|
|
|
|
Inhaltsverzeichnis
|
|
|
|
|
|
1. [Definition File](#Definition_File)
|
|
|
1. [Was ist ein Definition File?](#Was_ist_ein_Definition_File.3F)
|
|
|
2. [Definition File eines Containers anzeigen](#Definition_File_eines_Containers_anzeigen)
|
|
|
3. [Beispiel für ein komplettes Definition-File](#Beispiel_f.2BAPw-r_ein_komplettes_Definition-File)
|
|
|
4. [Komponenten](#Komponenten)
|
|
|
5. [Header](#Header)
|
|
|
6. [Sections](#Sections)
|
|
|
1. [%setup](#A.25setup)
|
|
|
2. [%files](#A.25files)
|
|
|
3. [%environment](#A.25environment)
|
|
|
4. [%post](#A.25post)
|
|
|
5. [%runscript](#A.25runscript)
|
|
|
6. [%startscript](#A.25startscript)
|
|
|
7. [%test](#A.25test)
|
|
|
8. [%labels](#A.25labels)
|
|
|
9. [%help](#A.25help)
|
|
|
7. [Zeitliche Einordnung der Komponenten](#Zeitliche_Einordnung_der_Komponenten)
|
|
|
8. [Was sind Apps?](#Was_sind_Apps.3F)
|
|
|
9. [Beispiele für Definiton Files](#Beispiele_f.2BAPw-r_Definiton_Files)
|
|
|
|
|
|
<span id="line-9" class="anchor"></span><span id="line-10" class="anchor"></span>
|
|
|
|
|
|
Was ist ein Definition File?
|
|
|
----------------------------
|
|
|
|
|
|
<span id="line-11" class="anchor"></span>
|
|
|
**Es legt fest:** <span id="line-12" class="anchor"></span>
|
|
|
|
|
|
- welches OS bzw. Container als Basis dient <span id="line-13" class="anchor"></span>
|
|
|
- welche Pakete installiert werden sollen <span id="line-14" class="anchor"></span>
|
|
|
- Umgebungsvariablen zur Laufzeit <span id="line-15" class="anchor"></span>
|
|
|
- benötigte Files vom Host <span id="line-16" class="anchor"></span>
|
|
|
- Metadaten und Beschreibung des Containers <span id="line-17" class="anchor"></span><span id="line-18" class="anchor"></span>
|
|
|
|
|
|
Definition File eines Containers anzeigen
|
|
|
-----------------------------------------
|
|
|
|
|
|
<span id="line-19" class="anchor"></span>
|
|
|
- wird beim Bau eines Singularity Containers in diesen gesichert <span id="line-20" class="anchor"></span>
|
|
|
- Unter `/.singularity.d/bootstrap_history` im Container sind alle bisher für den Container genutzten Definition Files hinterlegt. <span id="line-21" class="anchor"></span>
|
|
|
|
|
|
- So ist es möglich, sich das Definition File eines Containers anzeigen zu lassen: <span id="line-22" class="anchor"></span>
|
|
|
|
|
|
<span id="line-23" class="anchor"></span><span id="line-24" class="anchor"></span>
|
|
|
|
|
|
$ singularity inspect -d CONTAINER.sif
|
|
|
|
|
|
<span id="line-25" class="anchor"></span><span id="line-26" class="anchor"></span>
|
|
|
|
|
|
Beispiel für ein komplettes Definition-File
|
|
|
-------------------------------------------
|
|
|
|
|
|
<span id="line-27" class="anchor"></span>
|
|
|
Folgend ist ein komplettes Definition File aufgeführt. Die einzelnen Abschnitte werden in den folgenden Abschnitten erläutert. Würde man daraus einen Container bauen, so würde diesem ein Ubuntu 18.04 zugrunde liegen und eine netcat-Installation enthalten. Für die praktische Anwendung ist dieser eher ungeeignet, da das Definition File nur zur Veranschaulichung zusammengestellt wurde. Praktikablere Beispiele sind im letzten Abschnitt zu finden. <span id="line-28" class="anchor"></span><span id="line-29" class="anchor"></span><span id="line-30" class="anchor"></span><span id="line-31" class="anchor"></span><span id="line-32" class="anchor"></span><span id="line-33" class="anchor"></span><span id="line-34" class="anchor"></span><span id="line-35" class="anchor"></span><span id="line-36" class="anchor"></span><span id="line-37" class="anchor"></span><span id="line-38" class="anchor"></span><span id="line-39" class="anchor"></span><span id="line-40" class="anchor"></span><span id="line-41" class="anchor"></span><span id="line-42" class="anchor"></span><span id="line-43" class="anchor"></span><span id="line-44" class="anchor"></span><span id="line-45" class="anchor"></span><span id="line-46" class="anchor"></span><span id="line-47" class="anchor"></span><span id="line-48" class="anchor"></span><span id="line-49" class="anchor"></span><span id="line-50" class="anchor"></span><span id="line-51" class="anchor"></span><span id="line-52" class="anchor"></span><span id="line-53" class="anchor"></span><span id="line-54" class="anchor"></span><span id="line-55" class="anchor"></span><span id="line-56" class="anchor"></span><span id="line-57" class="anchor"></span><span id="line-58" class="anchor"></span><span id="line-59" class="anchor"></span><span id="line-60" class="anchor"></span><span id="line-61" class="anchor"></span><span id="line-62" class="anchor"></span><span id="line-63" class="anchor"></span><span id="line-64" class="anchor"></span><span id="line-65" class="anchor"></span><span id="line-66" class="anchor"></span><span id="line-67" class="anchor"></span><span id="line-68" class="anchor"></span><span id="line-69" class="anchor"></span><span id="line-70" class="anchor"></span>
|
|
|
|
|
|
Bootstrap: library
|
|
|
From: ubuntu:18.04
|
|
|
|
|
|
%setup
|
|
|
touch /file1
|
|
|
touch${SINGULARITY_ROOTFS}/file2
|
|
|
|
|
|
%files
|
|
|
/file1
|
|
|
/file1 /opt
|
|
|
|
|
|
%environment
|
|
|
export LISTEN_PORT=12345
|
|
|
export LC_ALL=C
|
|
|
|
|
|
%post
|
|
|
apt-get update && apt-get install -y netcat
|
|
|
NOW=`date`echo "
|
|
|
export NOW=\"${NOW}\"" >> $SINGULARITY_ENVIRONMENT
|
|
|
|
|
|
%runscript
|
|
|
echo "Container was created $NOW"
|
|
|
echo "Arguments received: $*"exec echo "$@"
|
|
|
|
|
|
%startscript
|
|
|
nc -lp $LISTEN_PORT
|
|
|
|
|
|
%test
|
|
|
grep -q NAME=\"Ubuntu\"/etc/os-release
|
|
|
if[ $? -eq 0 ];then
|
|
|
echo "Container base is Ubuntu as expected."
|
|
|
else
|
|
|
echo "Container base is not Ubuntu."
|
|
|
fi
|
|
|
|
|
|
%labels
|
|
|
Author d@sylabs.io
|
|
|
Version v0.0.1
|
|
|
|
|
|
%help
|
|
|
This is a demo container used to illustrate a def file that uses allsupported sections.
|
|
|
|
|
|
<span id="line-71" class="anchor"></span><span id="line-72" class="anchor"></span>
|
|
|
|
|
|
Komponenten
|
|
|
-----------
|
|
|
|
|
|
<span id="line-73" class="anchor"></span>
|
|
|
- Header: <span id="line-74" class="anchor"></span>
|
|
|
- beschreibt KernOS bzw. Container mit Quelle <span id="line-75" class="anchor"></span>
|
|
|
- konfiguriert KernOS-Features <span id="line-76" class="anchor"></span>
|
|
|
- Linuxdistribution, genaue Version; Pakete, welche Teil der Installation sein müssen <span id="line-77" class="anchor"></span>
|
|
|
- Sections: <span id="line-78" class="anchor"></span>
|
|
|
- optional <span id="line-79" class="anchor"></span>
|
|
|
- kann mehrere Instanzen vorhandener Sections enthalten <span id="line-80" class="anchor"></span>
|
|
|
- Befehle werden von /bin/sh interpretiert und akzeptieren /bin/sh Optionen <span id="line-81" class="anchor"></span>
|
|
|
- ausgeführt zur Buildtime oder Runtime <span id="line-82" class="anchor"></span><span id="line-83" class="anchor"></span>
|
|
|
|
|
|
Header
|
|
|
------
|
|
|
|
|
|
<span id="line-84" class="anchor"></span>
|
|
|
- Bootstrap: Gibt den Bootstrap-Agent an der zum Erstellen des Kernsystems genutzt wird. <span id="line-85" class="anchor"></span>
|
|
|
- möglich: library, docker, shub, localimage, yum, debootstrap, arch, busybox, zypper (genaueres in Doku: <a href="https://www.sylabs.io/guides/3.2/user-guide.pdf" class="uri" class="https">https://www.sylabs.io/guides/3.2/user-guide.pdf</a>) <span id="line-86" class="anchor"></span>
|
|
|
|
|
|
- Beispiel für einen Header: <span id="line-87" class="anchor"></span><span id="line-88" class="anchor"></span>
|
|
|
|
|
|
<span id="line-89" class="anchor"></span><span id="line-90" class="anchor"></span><span id="line-91" class="anchor"></span>
|
|
|
|
|
|
Bootstrap: library
|
|
|
From: debian:7
|
|
|
|
|
|
<span id="line-92" class="anchor"></span>
|
|
|
oder <span id="line-93" class="anchor"></span><span id="line-94" class="anchor"></span><span id="line-95" class="anchor"></span><span id="line-96" class="anchor"></span>
|
|
|
|
|
|
Bootstrap: library
|
|
|
From: ubuntu:18.04
|
|
|
|
|
|
<span id="line-97" class="anchor"></span><span id="line-98" class="anchor"></span>
|
|
|
- Jeder Bootstrap-Agent bringt seine eigenen Quellen und Funktionen mit sich. Eine kurze Übersicht der Quellen gibt es <a href="https://wiki.init.mpg.de/IT4Science/SingularityContainerBauen#Quellen_f.2BAPw-r_Input" class="https">hier</a> und eine ausführliche Beschreibung der Funktionen ist <a href="https://www.sylabs.io/guides/3.0/user-guide/appendix.html#build-library-module" class="https">hier</a> zu finden. <span id="line-99" class="anchor"></span>
|
|
|
|
|
|
Sections
|
|
|
--------
|
|
|
|
|
|
<span id="line-100" class="anchor"></span>
|
|
|
- Wenn ein Befehl fehlschlägt, wird der Build-Prozess gestoppt. <span id="line-101" class="anchor"></span>
|
|
|
- Reihenfolge der Sections spielt keine Rolle <span id="line-102" class="anchor"></span>
|
|
|
- Es gibt verschiedenste Sections: %setup, %files, %post, %runscript, %startscript, %test, %labels, %help <span id="line-103" class="anchor"></span><span id="line-104" class="anchor"></span>
|
|
|
|
|
|
### %setup
|
|
|
|
|
|
<span id="line-105" class="anchor"></span>
|
|
|
- Befehle, die **außerhalb den Containers auf dem Host-System** ausgeführt werden, <span id="line-106" class="anchor"></span>
|
|
|
|
|
|
- werden ausgeführt, nachdem das KernOS den Container installiert worden ist, <span id="line-107" class="anchor"></span>
|
|
|
- Filesystem des Containers kann durch Umgebungsvariable referenziert werden: `$SINGULARITY_ROOTFS` <span id="line-108" class="anchor"></span>
|
|
|
|
|
|
- Beispiel: <span id="line-109" class="anchor"></span>
|
|
|
|
|
|
<span id="line-110" class="anchor"></span><span id="line-111" class="anchor"></span><span id="line-112" class="anchor"></span><span id="line-113" class="anchor"></span>
|
|
|
|
|
|
%setup
|
|
|
touch /file1
|
|
|
touch${SINGULARITY_ROOTFS}/file2
|
|
|
|
|
|
<span id="line-114" class="anchor"></span>
|
|
|
- file1 wird auf dem Host erstellt (/) <span id="line-115" class="anchor"></span>
|
|
|
- file2 wird im Container erstellt (/) <span id="line-116" class="anchor"></span>
|
|
|
- Für das Kopieren von Files wird %files empfohlen, da %setup als einzige Section mit **erweiterten Privilegien (Root)** ausgeführt wird. <span id="line-117" class="anchor"></span><span id="line-118" class="anchor"></span>
|
|
|
|
|
|
### %files
|
|
|
|
|
|
<span id="line-119" class="anchor"></span>
|
|
|
- zum **Kopieren von Dateien aus dem Host-System** in den Container <span id="line-120" class="anchor"></span>
|
|
|
|
|
|
- Jede Zeile besteht aus einem Paar von zwei Pfaden, welche den Quellpfad auf dem Host-System und den Zielpfad im Container angibt. <span id="line-121" class="anchor"></span>
|
|
|
- Der Zielpfad ist optional und ist gleich dem Quellpfad, falls dieser weggelassen werden sollte. <span id="line-122" class="anchor"></span>
|
|
|
- Beispiel: <span id="line-123" class="anchor"></span>
|
|
|
|
|
|
<span id="line-124" class="anchor"></span><span id="line-125" class="anchor"></span><span id="line-126" class="anchor"></span><span id="line-127" class="anchor"></span>
|
|
|
|
|
|
%files
|
|
|
/file1
|
|
|
/file1 /opt
|
|
|
|
|
|
<span id="line-128" class="anchor"></span><span id="line-129" class="anchor"></span>
|
|
|
|
|
|
### %environment
|
|
|
|
|
|
<span id="line-130" class="anchor"></span>
|
|
|
- Hier werden Umgebungsvariablen definiert, welche **während der Runtime** zur Verfügung stehen. <span id="line-131" class="anchor"></span>
|
|
|
|
|
|
- Variablen, die hier definiert werden, stehen **nicht** während der Buildtime zur Verfügung (%post wäre hier die Wahl). <span id="line-132" class="anchor"></span>
|
|
|
|
|
|
- Es gelten die selben Konventionen wie in den .baschrc oder .profile Files. <span id="line-133" class="anchor"></span>
|
|
|
- Beispiel: <span id="line-134" class="anchor"></span>
|
|
|
|
|
|
<span id="line-135" class="anchor"></span><span id="line-136" class="anchor"></span><span id="line-137" class="anchor"></span><span id="line-138" class="anchor"></span>
|
|
|
|
|
|
%environment
|
|
|
export LISTEN_PORT=12345
|
|
|
export LC_ALL=C
|
|
|
|
|
|
<span id="line-139" class="anchor"></span>
|
|
|
- Weitere Umgebungsvariablen können während der Runtime in %post definiert werden. <span id="line-140" class="anchor"></span>
|
|
|
- %environment schreibt die Umgebungsvariablen in `/.singularity.d/env/90-environment.sh` <span id="line-141" class="anchor"></span>
|
|
|
|
|
|
- In %post definierte Umgebungsvariablen landen in `/.singularity.d/env/91-environment.sh`. <span id="line-142" class="anchor"></span>
|
|
|
|
|
|
- %post-Umgebungsvariablen haben Vorrang gegenüber %environment-Variablen während der Laufzeit. <span id="line-143" class="anchor"></span><span id="line-144" class="anchor"></span>
|
|
|
|
|
|
### %post
|
|
|
|
|
|
<span id="line-145" class="anchor"></span>
|
|
|
- Befehle werden ausgeführt, **nachdem das KernOS installiert** wurde. <span id="line-146" class="anchor"></span>
|
|
|
|
|
|
- Hier werden Dateien heruntergeladen, neue Software und Libraries installiert, Config-Files erstellt, neue Verzeichnisse angelegt, usw. <span id="line-147" class="anchor"></span>
|
|
|
- Beispiel: <span id="line-148" class="anchor"></span>
|
|
|
|
|
|
<span id="line-149" class="anchor"></span><span id="line-150" class="anchor"></span><span id="line-151" class="anchor"></span><span id="line-152" class="anchor"></span><span id="line-153" class="anchor"></span>
|
|
|
|
|
|
%post
|
|
|
apt-get update && apt-get install -y netcat
|
|
|
NOW=`date`
|
|
|
echo "export NOW=\"${NOW}\"" >> $SINGULARITY_ENVIRONMENT
|
|
|
|
|
|
<span id="line-154" class="anchor"></span>
|
|
|
- Um neue Umgebungsvariablen zu definieren, wird hier `$SINGULARITY_ENVIRONMENT` benutzt. <span id="line-155" class="anchor"></span>
|
|
|
|
|
|
- %post-Umgebungsvariablen haben Vorrang gegenüber %environment-Variablen während der Laufzeit <span id="line-156" class="anchor"></span><span id="line-157" class="anchor"></span>
|
|
|
|
|
|
### %runscript
|
|
|
|
|
|
<span id="line-158" class="anchor"></span>
|
|
|
- Befehle werden **zur Runtime** ausgeführt (durch singularity run oder exec) <span id="line-159" class="anchor"></span>
|
|
|
|
|
|
- Argumente, welche beim Start mitgegeben werden, werden hier genutzt <span id="line-160" class="anchor"></span>
|
|
|
- Beispiel: <span id="line-161" class="anchor"></span>
|
|
|
|
|
|
<span id="line-162" class="anchor"></span><span id="line-163" class="anchor"></span><span id="line-164" class="anchor"></span><span id="line-165" class="anchor"></span><span id="line-166" class="anchor"></span>
|
|
|
|
|
|
%runscript
|
|
|
echo "Container was created $NOW"
|
|
|
echo "Arguments received: $*"
|
|
|
exec echo "$@"
|
|
|
|
|
|
<span id="line-167" class="anchor"></span>
|
|
|
- Konsolen-Output: <span id="line-168" class="anchor"></span>
|
|
|
|
|
|
<span id="line-169" class="anchor"></span><span id="line-170" class="anchor"></span><span id="line-171" class="anchor"></span><span id="line-172" class="anchor"></span>
|
|
|
|
|
|
$ ./my_container.sif
|
|
|
Container was created Thu Dec 6 20:01:56 UTC 2018
|
|
|
Arguments received:
|
|
|
|
|
|
<span id="line-173" class="anchor"></span>
|
|
|
oder <span id="line-174" class="anchor"></span><span id="line-175" class="anchor"></span><span id="line-176" class="anchor"></span><span id="line-177" class="anchor"></span><span id="line-178" class="anchor"></span><span id="line-179" class="anchor"></span>
|
|
|
|
|
|
$ ./my_container.sif this that and the other
|
|
|
Container was created Thu Dec 6 20:01:56 UTC 2018
|
|
|
Arguments received: this that and the other
|
|
|
this that and the other
|
|
|
|
|
|
<span id="line-180" class="anchor"></span><span id="line-181" class="anchor"></span>
|
|
|
|
|
|
### %startscript
|
|
|
|
|
|
<span id="line-182" class="anchor"></span>
|
|
|
- Befehle werden ausgeführt, wenn **instance start** Befehl genutzt wird, welcher eine Container-Instanz startet. <span id="line-183" class="anchor"></span>
|
|
|
|
|
|
- Beispiel: <span id="line-184" class="anchor"></span>
|
|
|
|
|
|
<span id="line-185" class="anchor"></span><span id="line-186" class="anchor"></span><span id="line-187" class="anchor"></span>
|
|
|
|
|
|
%startscript
|
|
|
nc -lp $LISTEN_PORT
|
|
|
|
|
|
<span id="line-188" class="anchor"></span>
|
|
|
- Container-Instanz lässt sich starten und stoppen mit: <span id="line-189" class="anchor"></span>
|
|
|
|
|
|
<span id="line-190" class="anchor"></span><span id="line-191" class="anchor"></span><span id="line-192" class="anchor"></span><span id="line-193" class="anchor"></span>
|
|
|
|
|
|
$ singularity instance start my_container.sif instance1
|
|
|
$ lsof | grep LISTEN
|
|
|
$ singularity instance stop instance1
|
|
|
|
|
|
<span id="line-194" class="anchor"></span><span id="line-195" class="anchor"></span>
|
|
|
|
|
|
### %test
|
|
|
|
|
|
<span id="line-196" class="anchor"></span>
|
|
|
- Befehle werden **am Ende des Build-Prozesses** ausgeführt. <span id="line-197" class="anchor"></span>
|
|
|
|
|
|
- alternativ auch über den test-Befehl ausführbar <span id="line-198" class="anchor"></span>
|
|
|
- Hier sollten Dinge wie BaseOS-Version, heruntergeladene Dateien und Softwarefunktionalität validiert werden. <span id="line-199" class="anchor"></span>
|
|
|
- Beispiel: <span id="line-200" class="anchor"></span>
|
|
|
|
|
|
<span id="line-201" class="anchor"></span><span id="line-202" class="anchor"></span><span id="line-203" class="anchor"></span><span id="line-204" class="anchor"></span><span id="line-205" class="anchor"></span><span id="line-206" class="anchor"></span><span id="line-207" class="anchor"></span><span id="line-208" class="anchor"></span>
|
|
|
|
|
|
%test
|
|
|
grep -q NAME=\"U buntu\"/etc/os-release
|
|
|
if[ $? -eq 0 ]; then
|
|
|
echo "Container base is Ubuntu as expected."
|
|
|
else
|
|
|
echo "Container base is not Ubuntu."
|
|
|
fi
|
|
|
|
|
|
<span id="line-209" class="anchor"></span>
|
|
|
- zum Überspringen des Testskripts beim Bauen eines Container den Parameter --notest benutzen: `$ sudo singularity build --notest my_container.sif my_container.def` <span id="line-210" class="anchor"></span><span id="line-211" class="anchor"></span>
|
|
|
|
|
|
### %labels
|
|
|
|
|
|
<span id="line-212" class="anchor"></span>
|
|
|
- Enthält **Metadaten**, welche in das File /.singularity.d/labels.json im Container abgespeichert werden. <span id="line-213" class="anchor"></span>
|
|
|
|
|
|
- Jede Zeile besteht auch einem Name-Value-Paar. <span id="line-214" class="anchor"></span>
|
|
|
- Beispiel: <span id="line-215" class="anchor"></span>
|
|
|
|
|
|
<span id="line-216" class="anchor"></span><span id="line-217" class="anchor"></span><span id="line-218" class="anchor"></span><span id="line-219" class="anchor"></span>
|
|
|
|
|
|
%labels
|
|
|
Author d@sylabs.io
|
|
|
Version v0.0.1
|
|
|
|
|
|
<span id="line-220" class="anchor"></span>
|
|
|
- Metadaten eines Containers (%labels) abrufbar mit: <span id="line-221" class="anchor"></span>
|
|
|
|
|
|
<span id="line-222" class="anchor"></span><span id="line-223" class="anchor"></span>
|
|
|
|
|
|
$ singularity inspect my_container.sif
|
|
|
|
|
|
<span id="line-224" class="anchor"></span><span id="line-225" class="anchor"></span>
|
|
|
|
|
|
### %help
|
|
|
|
|
|
<span id="line-226" class="anchor"></span>
|
|
|
- enthält einen beliebigen Text, welcher mit dem "run-help Befehl" aufgerufen werden kann: `$ singularity run-help my_container.sif` <span id="line-227" class="anchor"></span>
|
|
|
|
|
|
- Hier sollte eine Beschreibung des Containers, ähnlich einer Dokumentation, stehen. <span id="line-228" class="anchor"></span>
|
|
|
- Gerade im Sinne der Reproduzierbarkeit können hier die Versionen der Softwarekomponenten angegeben werden. <span id="line-229" class="anchor"></span>
|
|
|
- Es handelt sich also nur um einem Textbaustein, welcher keine weitere Funktion erfüllt, als als genau dieser angezeigt zu werden. Bei Änderungen des Containers sollte darauf geachtet werden, dass die $help-Section angepasst wird. <span id="line-230" class="anchor"></span>
|
|
|
- Beispiel: <span id="line-231" class="anchor"></span>
|
|
|
|
|
|
<span id="line-232" class="anchor"></span><span id="line-233" class="anchor"></span><span id="line-234" class="anchor"></span>
|
|
|
|
|
|
%help
|
|
|
This is a demo container used to illustrate a def file that uses allsupported sections.
|
|
|
|
|
|
<span id="line-235" class="anchor"></span><span id="line-236" class="anchor"></span>
|
|
|
|
|
|
Zeitliche Einordnung der Komponenten
|
|
|
------------------------------------
|
|
|
|
|
|
<span id="line-237" class="anchor"></span>
|
|
|
- Außen vor sind die für Metadaten zuständige Sections %help und %labels, da deren zeitliche Abfolge irrelevant sind. <span id="line-238" class="anchor"></span>
|
|
|
- Unterteilung in Build-Prozess und Runtime: <span id="line-239" class="anchor"></span>
|
|
|
- Build-Prozess: <span id="line-240" class="anchor"></span>
|
|
|
- Zuerst findet das Bootstrapping statt, also das Erstellen eines KernOS im Container. <span id="line-241" class="anchor"></span>
|
|
|
- Als nächstes wird das Skript der %setup-Section mit root-Rechten auf dem Host-System ausgeführt. <span id="line-242" class="anchor"></span>
|
|
|
- Anschließende Schritte beeinflussen nur noch den Container. <span id="line-243" class="anchor"></span>
|
|
|
- Schließlich wird der Build-Prozess mit den Skripten der %files- und %post-Section beendet, ab jetzt ohne erweiterte Privilegien. <span id="line-244" class="anchor"></span>
|
|
|
- An den Build-Prozess schließt das Skript der %test-Section an. <span id="line-245" class="anchor"></span>
|
|
|
- Runtime: <span id="line-246" class="anchor"></span>
|
|
|
- Zuerst werden die Umgebungsvariablen durch die %environment-Section definiert. <span id="line-247" class="anchor"></span>
|
|
|
- Je nach Befehl wird das Skript der %runscript-Section (exec, run) oder das Skript der %startscript-Section (start) ausgeführt. <span id="line-248" class="anchor"></span>
|
|
|
|
|
|
<img src="SingularityDefinitionFile%20-%20IT4Science_files/SingularityDefinitionFile.png" title="definitionFileTime.png" alt="definitionFileTime.png" class="attachment" /> <span id="line-249" class="anchor"></span><span id="line-250" class="anchor"></span>
|
|
|
|
|
|
Was sind Apps?
|
|
|
--------------
|
|
|
|
|
|
<span id="line-251" class="anchor"></span>
|
|
|
Durch die Nutzung von Sinularity-Apps baut man das Definition File modular auf. Somit kann man mehrere Skripte und Anwendungsfälle separat bearbeiten. <span id="line-252" class="anchor"></span>Für weitere Informationen siehe <a href="https://wiki.init.mpg.de/IT4Science/SingularityApps" class="https">Singularity-Apps</a>. <span id="line-253" class="anchor"></span><span id="line-254" class="anchor"></span>
|
|
|
|
|
|
Beispiele für Definiton Files
|
|
|
-----------------------------
|
|
|
|
|
|
<span id="line-255" class="anchor"></span>
|
|
|
Aus folgendem Definition File lässt sich ein Container bauen, welcher ein Ubuntu 14.04 enthält, sowie das x11-apps-Paket. Wird er gestartet, so wird xeyes ausgeführt. <span id="line-256" class="anchor"></span><span id="line-257" class="anchor"></span><span id="line-258" class="anchor"></span><span id="line-259" class="anchor"></span><span id="line-260" class="anchor"></span><span id="line-261" class="anchor"></span><span id="line-262" class="anchor"></span><span id="line-263" class="anchor"></span><span id="line-264" class="anchor"></span><span id="line-265" class="anchor"></span><span id="line-266" class="anchor"></span><span id="line-267" class="anchor"></span><span id="line-268" class="anchor"></span><span id="line-269" class="anchor"></span><span id="line-270" class="anchor"></span><span id="line-271" class="anchor"></span><span id="line-272" class="anchor"></span>
|
|
|
|
|
|
Bootstrap: library #Container stammt aus der Sylans.io Cloud Library
|
|
|
From:ubuntu:14.04 #Läd den ubuntu-Container der Version 14.04.
|
|
|
|
|
|
%post
|
|
|
apt-get update && apt-get install -y x11-apps #installiert das x11-apps-Paket aus dem ubuntu 14.04 Paketarchiv
|
|
|
|
|
|
%runscript
|
|
|
xeyes #startet xeyes, wenn der container mit "$ singularity run" ausgeführt wird
|
|
|
|
|
|
%labels
|
|
|
Author thunert@cbs.mpg.de
|
|
|
Version 1.0
|
|
|
|
|
|
%help
|
|
|
This container holds an ubuntu 14.04 and x11-apps version 7.7+2.
|
|
|
|
|
|
<span id="line-273" class="anchor"></span><span id="line-274" class="anchor"></span>
|
|
|
Folgender Container enthält ein Ubuntu 18.04 aus dem Docker-Hub und ein bonnie++ Paket aus dem Ubuntu-Paketarchiv in der Version 1.97.3. Wenn der Container gestartet wird, wird aus den von bonnie++ gemessenen Ergebnissen ein CSV-File erstellt. <span id="line-275" class="anchor"></span><span id="line-276" class="anchor"></span><span id="line-277" class="anchor"></span><span id="line-278" class="anchor"></span><span id="line-279" class="anchor"></span><span id="line-280" class="anchor"></span><span id="line-281" class="anchor"></span><span id="line-282" class="anchor"></span><span id="line-283" class="anchor"></span><span id="line-284" class="anchor"></span><span id="line-285" class="anchor"></span><span id="line-286" class="anchor"></span><span id="line-287" class="anchor"></span><span id="line-288" class="anchor"></span><span id="line-289" class="anchor"></span><span id="line-290" class="anchor"></span><span id="line-291" class="anchor"></span><span id="line-292" class="anchor"></span><span id="line-293" class="anchor"></span><span id="line-294" class="anchor"></span>
|
|
|
|
|
|
Bootstrap: docker
|
|
|
From: ubuntu:18.04
|
|
|
|
|
|
%post
|
|
|
echo "BaseOS created"
|
|
|
apt-get update && apt-get install -y bonnie++
|
|
|
|
|
|
%runscript
|
|
|
echo "Container started"
|
|
|
bonnie -r 2G -s 4G -f -b -n 0 > bonnieSingCont.csv
|
|
|
|
|
|
|
|
|
%labels
|
|
|
Author thunert@cbs.mpg.de
|
|
|
Version 1.0
|
|
|
|
|
|
%help
|
|
|
This container contains an ubuntu 18.04 and simply runs bonnie++. A CSV-File will be generated.
|
|
|
|
|
|
<span id="line-295" class="anchor"></span><span id="line-296" class="anchor"></span>
|
|
|
Der Container, welcher aus folgendem Definition File erstellt wird, enthält ein 18.04 Ubuntu mit Miniconda, Phyton und mne. Beim Starten des Containers wird eine bash gestartet in der man mit `$ conda activate mne` auf entsprechende mne-Tools zugreifen kann. <span id="line-297" class="anchor"></span><span id="line-298" class="anchor"></span><span id="line-299" class="anchor"></span><span id="line-300" class="anchor"></span><span id="line-301" class="anchor"></span><span id="line-302" class="anchor"></span><span id="line-303" class="anchor"></span><span id="line-304" class="anchor"></span><span id="line-305" class="anchor"></span><span id="line-306" class="anchor"></span><span id="line-307" class="anchor"></span><span id="line-308" class="anchor"></span><span id="line-309" class="anchor"></span><span id="line-310" class="anchor"></span><span id="line-311" class="anchor"></span><span id="line-312" class="anchor"></span><span id="line-313" class="anchor"></span><span id="line-314" class="anchor"></span><span id="line-315" class="anchor"></span><span id="line-316" class="anchor"></span><span id="line-317" class="anchor"></span><span id="line-318" class="anchor"></span><span id="line-319" class="anchor"></span><span id="line-320" class="anchor"></span><span id="line-321" class="anchor"></span><span id="line-322" class="anchor"></span><span id="line-323" class="anchor"></span><span id="line-324" class="anchor"></span><span id="line-325" class="anchor"></span><span id="line-326" class="anchor"></span><span id="line-327" class="anchor"></span><span id="line-328" class="anchor"></span><span id="line-329" class="anchor"></span><span id="line-330" class="anchor"></span><span id="line-331" class="anchor"></span><span id="line-332" class="anchor"></span>
|
|
|
|
|
|
Bootstrap: library
|
|
|
From:ubuntu:18.04
|
|
|
|
|
|
%post
|
|
|
export PATH=/opt/conda/bin:${PATH}
|
|
|
apt-get update -y
|
|
|
apt-get upgrade -y
|
|
|
apt-get install -y curl sudo nano libxt-dev libglu1-mesa.dev wget
|
|
|
wget -q https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O $HOME/miniconda.sh && bash $HOME/miniconda.sh -b -p $HOME/miniconda
|
|
|
$HOME/miniconda/bin/conda update -n base -c defaults conda
|
|
|
$HOME/miniconda/bin/conda init bash
|
|
|
echo 'conda activate mne' >> $HOME/.bashrc
|
|
|
|
|
|
curl -O https://raw.githubusercontent.com/blakecaldwell/mne-python/mayavi_linux/environment.yml
|
|
|
$HOME/miniconda/bin/conda env create -f environment.yml
|
|
|
$HOME/miniconda/envs/mne/bin/pip install https://api.github.com/repos/enthought/mayavi/zipball/226189a
|
|
|
mkdir $HOME/shared
|
|
|
|
|
|
%runscript
|
|
|
export PATH=/miniconda/bin:${PATH}
|
|
|
conda init bash
|
|
|
bash
|
|
|
|
|
|
%test
|
|
|
$HOME/miniconda/bin/conda --version
|
|
|
$HOME/miniconda/bin/python --version
|
|
|
|
|
|
%help
|
|
|
This container contains a version 4.6.14 of Miniconda, Version 3.7.3 of Python and mne based on a 18.04 Ubuntu.
|
|
|
$ conda activate mne #to start mne
|
|
|
|
|
|
%labels
|
|
|
Author thunert@cbs.mpg.de
|
|
|
Version v1.0
|
|
|
|
|
|
<span id="line-333" class="anchor"></span><span id="line-334" class="anchor"></span>
|
|
|
Ein mit folgendem Definition File gebauter Container baut auf einen schon vorhandenen Container (siehe x11-apps Definition File Beispiel) auf. Zusätzlich wird hier Vim installiert. Startet man den Container, wird wieder xeyes ausgeführt. <span id="line-335" class="anchor"></span><span id="line-336" class="anchor"></span><span id="line-337" class="anchor"></span><span id="line-338" class="anchor"></span><span id="line-339" class="anchor"></span><span id="line-340" class="anchor"></span><span id="line-341" class="anchor"></span><span id="line-342" class="anchor"></span><span id="line-343" class="anchor"></span><span id="line-344" class="anchor"></span><span id="line-345" class="anchor"></span><span id="line-346" class="anchor"></span><span id="line-347" class="anchor"></span><span id="line-348" class="anchor"></span><span id="line-349" class="anchor"></span><span id="line-350" class="anchor"></span><span id="line-351" class="anchor"></span>
|
|
|
|
|
|
Bootstrap: localimage #baut auf einem lokal vorhandenen Container auf
|
|
|
From: /path/to/container
|
|
|
|
|
|
%post
|
|
|
apt-get update && apt-get install -y vim
|
|
|
|
|
|
%runscript
|
|
|
xeyes
|
|
|
|
|
|
%labels
|
|
|
Author thunert@cbs.mpg.de
|
|
|
Version 1.1
|
|
|
|
|
|
%help
|
|
|
This container holds ubuntu 14.04 xtools and vim.
|
|
|
|
|
|
<span id="line-352" class="anchor"></span><span id="bottom" class="anchor"></span>
|
|
|
|
|
|
SingularityDefinitionFile (zuletzt geändert am 2019-06-18 15:24:25 durch <span title="thunert@cbs.mpg.de @ onyx.cbs.mpg.de[194.95.183.21]"><a href="https://wiki.init.mpg.de/IT4Science/thunert%40cbs.mpg.de" class="nonexistent" title="thunert@cbs.mpg.de @ onyx.cbs.mpg.de[194.95.183.21]">thunert@cbs.mpg.de</a></span>) |
|
|
\ No newline at end of file |