= Definition File = Ein Defnition-File ist wie eine Blaupause zu verstehen für den Bau eines Containers. Immer absolute Pfade angeben bzw. Umgebungsvariablen benutzen! <> == Was ist ein Definition File? == '''Es legt fest:''' * auf welchem OS bzw. Container basierend * welche Pakete installiert werden sollen * Umgebungsvariablen zur Laufzeit * benötigte Files vom Host * Metadaten und Beschreibung des Containers == Komponenten == * Header: * beschreibt KernOS bzw. Container mit Quelle * konfigurieren von KernOS-Features * Linuxdistribution, genaue Version, Pakete die Teil der Installation sein müssen * Sections: * optional * kann mehrere Instanzen vorhandener Sections enthalten * /bin/sh interpreter und akzeptieren /bin/sh optionen * ausgeführt zur "build time" oder runtime == Header == * Bootstrap: Gibt den bootstrap agent an der zum erstellen den Kernsystems genutzt wird * möglich: library, docker, shub, localimage, yum, debootstrap, arch, busybox, zypper (genaueres in Doku: https://www.sylabs.io/guides/3.2/user-guide.pdf) * Beispiel für einen Header: {{{ Bootstrap: library From: debian:7 }}} oder {{{ Bootstrap: library From: ubuntu:18.04 }}} == Sections == * wenn ein Befehl fehlschlägt, wird der build-Prozess gestoppt * es gibt verschiedenste sections: %setup, %files, %post, %runscript, %startscript, %test, %labels, %help === %setup === * Befehle, die außerhalb den Containers auf dem Host-System ausgeführt werden * werden ausgeführt, nachdem das KernOS den Container installiert worden ist * ContainerFS kann durch Umgebungsvariabe referenziert werden: {{{$SINGULARITY_ROOTFS}}} * Beispiel: {{{ %setup touch /file1 touch${SINGULARITY_ROOTFS}/file2 }}} * file1 wird auf dem Host erstellt (/) * file2 wird im Container erstellt (/) * für das Kopieren von Files wird %files empfohlen, da %setup mit erweiterten Privilegien (root) ausgeführt wird