Bauen eines Singulartiy Container
Unter Bauen eines Containers versteht man das Zusammenstellen eines Singularity Containers aus verschiedensten Quellen. Das Tool zum Containerbau kann außerdem verwendet werden, um zwischen verschiedenen Containerformaten zu konvertieren. Neben dem Beziehen der Container aus verschiedenen Quellen kann man diesen auch mit Hilfe eines sog. Definition Files von Grund auf erstellen.
Inhaltsverzeichnis
build
- build ist der Befehl zum Bauen eines Containers
$ singularity build --OPTION /Zielpfad/CONTAINER.sif QUELLE
- Es wird ein Input (Quelle) und ein Output (Ziel und Format) benötigt.
- Bei Nutzung eines Definition Files sind root-Rechte oder die Verwendung eines externen Buildservice nötig.
Quellen für Input
library:// - Container Library
docker:// - Docker Hub
shub:// - Singularity Hub (Github-Login notwendig)
- Pfad eines lokal vorhandenen Containers
- Pfad zu einem Verzeichnis einer Sandbox
- Pfad zu einem Definition File
Containerformate
- Der Output gibt zunächst den Zielpfad für den Container an und dann das Format.
- Mögliche Formate sind:
- read-only Singularity-Image-File (SIF) Container, z.B.: xeyes.sif
- schreibbare Sandbox (Verzeichnis), z.B.: xeyes/
- Je nach Anwendungsfall ist zu entscheiden welches Format geeignet ist.
- Die Formate sind auch jederzeit ineinander konvertierbar.
Ein read-only Container im SIF-Format lässt sich nicht mehr abändern, ohne eben diese Konvertierung durchzuführen. Verändert man den Container, so muss aus darauf geachtet werden, dass die Installation nicht mit den Metadaten des Containers und der im Defintion File abgegebenen Beschreibungen im Konflikt steht. Um Reproduzierbarkeit zu gewährleisten sollte man read-only Container im SIF-Format bauen und bei Änderungswünschen mittels Definition File auf dem Container aufbauend einen neuen Bauen.
Optionen
- build
- --force - löscht und überschreibt existierenden Container, ohne Nutzerbestätigung
- --notest - baut den Container ohne die %test-Section zu berücksichtigen (bspw. bei fehlender Hardware)
- --sandbox oder -s - baut einen Container als Verzeichnis mit Schreibrechten
- --section - Gibt an welche Sections aus einem Definition File zum Bau eines Containers genutzt werden sollen (all,none,setup,post,files,environment,test,labels). Generell werden alle im Definition File angegebenen Sections beim Buildprozess berücksichtigt.
--remote - Container wird an anderer Stelle gebaut, per Standard beim Sylabs Remote Builder
- --detached - in Verbindung mit --remote, Container wird ohne Terminal-Output gebaut
- --builder - in Verbindung mit --remote, Container kann von einem externen Buildservice gebaut werden (URL angeben)
- --update - anstatt eines neuen Containers wird in einen vorhandenen (Sandbox only) Container gebaut, Header des Definition File wird übersprungen
Buildservice statt Root
Zum Bauen von Containern, speziell aus einem Definition File, werden Root-Rechte auf einem Linux-System benötigt. Wenn kein Zugriff auf ein Linuxsystem besteht, Alternativen wie virtuelle Maschinen fehlen oder nicht-administrativen Nutzern keine erweiterten Privilegien eingeräumt werden können, benötigt man eine Alternative.
Der Sylabs Remote Builder bietet eine Möglichkeit, Container zu bauen, ohne selbst über diese Rechte zu verfügen. Dazu folgende Schritte durchführen:
Anmelden auf Sylabs Remote Builder mit Google-, GitHub-, GitLab- oder Microsoft-Account
Bauen über Weboberfläche
- unter "Build a Recipe" das Definition File hochladen oder den Inhalt einfügen
- Titel und evtl Projektordner angeben
- Achtung, Container sind frei zugänglich, falls nicht vorher ein Projektordner "privat" erstellt wurde
- "Build"-Button anklicken
- fertigen Container über Weboberfläche oder über Kommandozeilenbefehl herunterladen
Bauen über Kommandozeilenbefehl
Token generieren unter Account Management (einmalig, solange Token gültig ist)
- Label eingeben
- "Create a New Access Token" anklicken
- "Download token file" anklicken
Token speichern unter ~/.singularity/sylabstoken
- alternativ kann man das generierte Token durch folgenden Befehl über singularity eingeben:
$ singularity remote login [SylabsCloud]
die Ergänzung "SylabsCloud" ist bei ab Version 3.3 nicht mehr notwendig
- Generell gibt der Parameter nach "login" den Endpunkt an, auf dem der Container gebaut werden soll.
- Container mithilfe des build-Befehls und der --remote-Option bauen:
$ singularity build --remote CONTAINER.sif DEFINTIONSFILE.def
