\subsection{Provisionierung} \label{sub:provisionierung} \subsubsection{Vorbereitung} \begin{sloppypar} Für die Provisionierung wurde Clonezilla verwendet. Wir haben uns für dieses Verfahren entschieden. Bei einem Netzwerk-Boot beispielsweise, bei dem das gesamte Dateisystem per NFS eingebunden wird, wäre in unserem Fall ineffektiv, da auf den Festplatten der Compute-Nodes genügend Speicher für das Betriebssystem vorhanden ist und bei jedem Zugriff auf das Dateisystem unnötigen Latenzen entstehen würden. Um Clonezilla auf den Computenodes zu booten, haben wir den \emph{in.tftpd}-Server installiert und das Service-File für \emph{Systemd} angepasst (siehe \emph{aufgabe4.4/tftpd.service}). Außerdem haben wir die Konfiguration des DHCP-Servers so angepasst, dass nun jede Compute-Node eine eigene Konfigurationsdatei in \emph{/etc/dhcpd.d/} hat, die jeweils von \emph{/etc/dhcpd.d/all} inkludiert wird. Außerdem haben wir ein Script \emph{ cluster} geschrieben, mit dem die Computenodes verwaltet werden können. Mit \begin{lstlisting} cluster add \end{lstlisting} wird ein neuer Node hinzugefügt (DHCP- und DNS-Eintrag). Mit \begin{lstlisting} cluster set- \end{lstlisting} kann der Modus für den nächsten Boot des Nodes festgelegt werden. Hier kann zwischen \emph{local} (Boot von lokaler Festplatte), \emph{live} (Boot in das Clonezilla Image), \emph{clone} (Clonen nach Boot) und \emph{restore} (Image laden nach Boot) gewechselt werden. Um den Netzwerk-Boot zu ermöglichen, haben wir \emph{pxelinux} unter \emph{/srv/tftp/pxelinux} installiert und konfiguriert. In dieses Verzeichnis haben wir die Dateien \emph{vmlinuz}, \emph{initrd.img} und \emph{filesystem.squashfs} aus der Clonezilla-Live-ISO kopiert, sowie außerdem noch \emph{ldlinux.c32, libcom32.c32, libutil.c32, menu.c32, chain.c32} und \emph{pxelinux.0} aus der \emph{syslinux}-Installation. Die Konfigurationsdateien liegen in \emph{/srv/tftp/pxelinux/pxelinux.cfg}. \end{sloppypar} \subsubsection{Provisionierung der Computenodes} \begin{sloppypar} Um den Clone-Vorgang zu starten, führten wir nun mit dem Befehl \emph{sudo cluster set-clone } aus. Durch Neustart des Nodes wird das Clonezilla Live Image gebootet. Dieses holt sich nun vom Headnode ein Script und führt es aus. In diesem Script haben wir alle nötigen Befehle eingetragen, um das Clonen vorzubereiten und zu starten (siehe \emph{aufgabe4.4/clone.sh}). Dazu wird per NFS das \emph{/cluster}-Verzeichnis des Headnodes eingebunden und dort im Unterverzeichnis \emph{images} das Image der Festplatte abgelegt. Geclont werden nur die \emph{/}- und die \emph{/boot}-Partition. Zum Wiederherstellen des Images wird mit \emph{sudo cluster set-restore } wieder der entsprechende Boot-Modus gesetzt und der Node neugestartet. Dort wird nun ein anderes Script vom Headnode geholt (siehe \emph{ aufgabe4.4/restore.sh}) und die beiden Partitionen wiederhergestellt. Anschließend werden noch die Swap-Partition und die Daten-Partition für das verteilte Dateisystem neu formatiert und die alten UUIDs gesetzt. Da Clonezilla bei uns das Dateisystemformat \emph{ext4} nicht als solches erkannt hat. Es fiel auf das generische Programm \emph{partclone.dd} zurück, welches allerdings sehr langsam ist, weil es die komplette Partition klont und freie Blöcke nicht überspringt. Deswegen haben wir zwei kleine Wrapper-Scripts geschrieben.Diese Skripte verwenden stattdessen das schnellere \emph{partclone.ext4} (siehe \emph{aufgabe4.4/partclone.dd-clone} und \emph{partclone.dd-restore}). Da wir in unserem Cluster gemischte Boards haben (Intel und Zotac), mussten wir anschließend außerdem noch das Ziel-Root-Verzeichnis mounten und dort mit Befehl \emph{mkinitcpio -p linux} ein neue Init-Ramdisk erstellen lassen, welches die entsprechenden Treiber für Bootvorgang enthält. Um die automatische Umbenennung der Netzwerk-Interfaces vorzubeugen, haben wir außerdem einen Symlink \emph{/etc/udev/rules.d/80-net-name-slot.rules -> /dev/null} erstellt. Dadurch wird verhindert, dass Ethernet-Interface nicht nach dem neuen Schema enpXsY sondern fest den Namen eth0 erhalten. \end{sloppypar}