# Implementierung im EduxOS Installer Die Implementierung der Persistenz Partition wurde bereits bei der basischen Erklärung des Installers angesprochen, sowie das einfache Kopieren der Root Disk auf ein neues Target. Es soll eine Möglichkeit geben, die Konfiguration des aktuellen Systems mit auf das neue System zu kopieren. :::{note} Im Folgenden werden Linux Shell (Bash) Befehle vorgeführt, die den Programmablauf grob beschreiben. Für die aktuelle Disk (mit EduxOS) wird `${SOURCE}` und für die Ziel Festplatte `${TARGET}` verwendet. ::: ## Erstellen der Partition Um das zu bewerkstelligen, muss zunächst die Partition selbst auf der Target Disk erstellt werden: ```bash parted -a optimal "${TARGET}" mkpart primary 0% 100% ``` Dieser Befehl erstellt eine neue Primary Partition, welche den Rest der Disk einnimmt. ## Formatieren Nun, da die Partition entstanden ist und in der Partitionstabelle steht, kann mit dem `mke2fs` Tool das Formatieren begonnen werden. Wie bereits erwähnt wurde, muss das Dateisystem, das für die Persistenz verwendet wird, das Label **persistence** haben: ```bash mkfs.ext4 -L persistence "${TARGET}" ``` :::{note} Hier ist `mkfs.ext4` verwendet worden, da unsere Partition ein ext4 Dateisystem haben soll. Das gleiche ist natürlich auch mit `mkfs.btrfs` möglich. ::: ## Kopieren der Konfigurationsdateien Zuletzt müssen noch die Konfigurationsdateien auf das neue Target kopiert werden. Dazu werden zuerst die beiden Persistenz Partitionen gemountet: ```bash SOURCE_MNT="/mnt/source" TARGET_MNT="/mnt/target" mkdir -p $SOURCE_MNT mkdir -p $TARGET_MNT mount -t ext4 -o ro "${SOURCE}" $SOURCE_MNT mount -t ext4 -o rw "${TARGET}" $TARGET_MNT ``` Anschließend können die wichtigsten Sachen kopiert werden: ```bash cp -r \ $SOURCE_MNT/etc \ $SOURCE_MNT/usr \ $SOURCE_MNT/var \ /etc/eduxos-installer/persistence.conf \ $TARGET_MNT ``` :::{note} */etc/eduxos-installer/persistence.conf* ist Teil des EduxOS Installer Debian Paketes und wird der persistence.conf von `$SOURCE` vorgezogen. ::: :::{important} Man beachte, dass */home/edu/.ssh* nicht mit kopiert wurde. Das liegt daran, dass der `sync-server` diesen Teil der Konfiguration übernimmt. SOURCE ssh Schlüssel, etc. sollen **nicht** auf dem Target liegen. ::: Zu guter Letzt werden ausstehende Schreib-Befehle durchgeführt und die Partitionen wieder unmounted: ```bash sync umount $SOURCE_MNT umount $TARGET_MNT rm -rf $SOURCE_MNT $TARGET_MNT unset SOURCE_MNT unset TARGET_MNT ``` ## Implementierung Nun, da die basische Funktionsweise beleuchtet wurde, kann die Implementierung im EduxOS Installer selbst betrachtet werden. ```{figure} ../../img/live_build/persistenzpartition.drawio.png :alt: Installation Diagramm :name: persistenzpartition Ablauf der Installation ``` {numref}`persistenzpartition` Zeigt den Groben Ablauf, den das Programm einschlägt, wenn der *Installieren* Knopf betätigt wird. Zuerst wird geprüft, ob es sich bei der Source um eine Disk oder ein Datenträgerabbild handelt. Ist die Source eine Datei (oder CD/DVD), so wird der erste `dd` Command direkt angewandt, ohne `count`. Das liegt daran, dass `lsblk` in CD/DVDs keine Partitionen erkennt und es zu Fehlern kommen würde. Das Diagramm macht diese feine Unterscheidung nicht, da es im Endeffekt auf das selbe Ziel hinausläuft. Hier wird dieser Prozess als "Kopiere die ersten beiden Partitionen auf das Target" beschrieben. Hat die Source Disk eine Persistenz Partition, so steht diese in der Partitionstabelle, egal was als `count` angegeben wurde. Um Klarheit darüber zu gewinnen, warum die ersten 64 Sektoren mit der Partitionstabelle überhaupt kopiert wurden und nicht einfach das `seek` Feature des `dd` Kommandos gebraucht wurde, sollte nochmal unter [Allgemeines in EduxOS Installer](../installer/eduxos_installer.md#allgemeines) nachgelesen werden. Die eben genannte Partition, die in der Partitionstabelle des Targets steht, wird im Folgeschritt entfernt, insofern sie vorhanden ist. Anschließend wird auf die jetzt nur noch zwei Partitionen eine weitere hinzugefügt und formatiert. Zu guter Letzt können die Dateien, sowie die *persistence.conf* auf der neuen Partition deployed werden und der Vorgang ist abgeschlossen. :::{note} Zur Sicherheit wurde im EduxOS Installer nach `parted` und `mke2fs` Operationen ein `partprobe` durchgeführt, um das Betriebssystem über Partitions Änderungen zu informieren. :::