8.2.2. 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.

Bemerkung

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.

8.2.2.1. Erstellen der Partition

Um das zu bewerkstelligen, muss zunächst die Partition selbst auf der Target Disk erstellt werden:

parted -a optimal "${TARGET}" mkpart primary 0% 100%

Dieser Befehl erstellt eine neue Primary Partition, welche den Rest der Disk einnimmt.

8.2.2.2. 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:

mkfs.ext4 -L persistence "${TARGET}"

Bemerkung

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.

8.2.2.3. Kopieren der Konfigurationsdateien

Zuletzt müssen noch die Konfigurationsdateien auf das neue Target kopiert werden.

Dazu werden zuerst die beiden Persistenz Partitionen gemountet:

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:

cp -r \
    $SOURCE_MNT/etc \
    $SOURCE_MNT/usr \
    $SOURCE_MNT/var \
    /etc/eduxos-installer/persistence.conf \
    $TARGET_MNT

Bemerkung

/etc/eduxos-installer/persistence.conf ist Teil des EduxOS Installer Debian Paketes und wird der persistence.conf von $SOURCE vorgezogen.

Wichtig

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:

sync

umount $SOURCE_MNT
umount $TARGET_MNT

rm -rf $SOURCE_MNT $TARGET_MNT
unset SOURCE_MNT
unset TARGET_MNT

8.2.2.4. Implementierung

Nun, da die basische Funktionsweise beleuchtet wurde, kann die Implementierung im EduxOS Installer selbst betrachtet werden.

Installation Diagramm

Abb. 8.1 Ablauf der Installation

Abb. 8.1 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 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.

Bemerkung

Zur Sicherheit wurde im EduxOS Installer nach parted und mke2fs Operationen ein partprobe durchgeführt, um das Betriebssystem über Partitions Änderungen zu informieren.