8.1.2. EduxOS Konfiguration (MaSt)

Nun, da die Basis-Konfiguration aufgesetzt wurde, kann mit der Anpassung begonnen werden. Dazu gehören Komponenten, wie Display- und Window-Manager, extra Pakete, hooks und Dateien, die es im Zielverzeichnis der Distribution geben soll.

Unter run.sh lässt sich eine Funktion lb_config finden, welche alle Dateien aus config/ in live-build/config verschiebt (merged). config/ beinhaltet zwei Verzeichnisse: debug/ und default/, wobei config/default/ alle standard Konfigurationen fasst und config/debug/ alles debugging spezifische. config/debug/ wird dabei immer über config/default/ gelegt, sodass debug Konfigurationen default Konfigurationen überschreiben. Ein beispiel für eine debug Konfiguration ist config/debug/package-lists/debug.list.chroot, welches die Paketliste für das Debug Image bereitstellt. Pakete, welche in dieser Datei gelistet sind, werden nicht auf das Release Image installiert.

Die für dieses Projekt wichtigen Verzeichnisse unter live-build/config sind bootloaders, hooks, includes.chroot_after_packages, package-lists und packages.

8.1.2.1. bootloaders

Unter config/bootloaders/ befinden sich Bootloader-spezifische Konfigurationen:

bootloaders
├── extlinux
├── grub-legacy
├── grub-pc
├── isolinux
├── pxelinux
├── syslinux
└── syslinux_common

In unserem Fall wurde hier in allen Bootloadern ein ein-sekündiges Delay eingebaut, sodass nach einer Sekunde automatisch das Live-System gebootet wird. Dies hat den Vorteil, dass Benutzer nicht mit zu viel Input überfordert werden.

8.1.2.2. hooks

Hooks sind Skripts, die während des Builds ausgeführt werden. Genaueres dazu wird später erläutert.

Hier werden in EduxOS Benutzer, Fonts und die Lokalen hinzugefügt. Als Beispiel hat die Hook 0801-adduser.hook.chroot Priorität 801 und fügt den edu Benutzer hinzu. Ebenso werden dem edu Nutzer die nötigen Rechte gegeben, um das System herunterzufahren, zu rebooten und zu halten:

Quellcode 8.2 config/default/hooks/normal/0801-adduser.hook.chroot
 1#!/bin/sh
 2
 3set -e
 4
 5#Create user "edu" with password "edu" and uid:gid edu:edu (1000:1000)
 6useradd \
 7    -m \
 8    --uid 1000 \
 9    --gid 1000 \
10    --user-group \
11    --password '$6$wYbDF9m00OsS5AjV$QM4GgrLcuOLf.m15hXiscyAJA2H9L0/YvS6sRUAwzA95GgvFi5U5eufBnaH8u/PqxrW0RpjQ06lairUX7iQFX.' \
12    --shell /usr/bin/bash \
13    edu
14
15# Make the normal user able to shutdown the system
16mkdir -p /etc/sudoers.d
17echo 'edu ALL=NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff' >> /etc/sudoers.d/edu-nopasswd
18
19exit 0

8.1.2.3. includes.chroot_after_packages

Dieses Verzeichnis existiert, um später alle Inhalte in das Target Image zu mergen. Alle Dateien und Verzeichnisse, die hier existieren, werden auch auf dem Target zu finden sein. Hier halten wir die Window Manager Konfiguration, das Skeleton Verzeichnis und andere Systemweite Konfigurationen:

includes.chroot_after_packages/etc
├── firefox
│   └── policies
│       └── policies.json
├── lightdm
│   └── lightdm.conf
├── polybar
│   └── config.ini
├── skel
│   ├── .bash_aliases
│   ├── .bashrc
│   ├── .xinitrc
│   └── firefox-profile
│       └── ...
└── xdg
    └── awesome
        └── rc.lua

8.1.2.4. package-lists

Paketlisten können hier in .list.chroot Dateien abgelegt werden. EduxOS hat drei verschiedene Paketlisten:

  • pkgs.list.chroot

  • desktop.list.chroot

  • debug.list.chroot

Diese drei Listen existieren, um Pakete in verschiedene Kathegorien einteilen zu können. Alle Basispakete liegen in pkgs.list.chroot, alle Pakete, die etwas mit dem Desktop Environment zu tun haben in desktop.list.chroot und alle Pakete, die es nur auf dem Debug Image geben soll in debug.list.chroot.

Die Listen sind einfach die Namen der Debian Pakete, separiert mit einer Newline:

Quellcode 8.3 desktop.list.chroot
1awesome
2awesome-extra
3lightdm
4lightdm-gtk-greeter
5polybar
6xorg
7xserver-xorg-video-all
8xserver-xorg-core

8.1.2.5. packages

Die letzte Directory, die hier benötigt wird, ist config/packages/. Hier können Debian Pakete reingelegt werden, die nich aus den angegebenen APT Mirrors geholt, sondern direkt installiert werden. Unsere eigenen Pakete, wie der sync-server oder der eduxos-installer werden zuerst gebaut und anschließend hier rein verschoben:

packages
├── eduxos-installer_0.2.1_arm64.deb
├── python-edu-linux-server-doc_0.3.1_all.deb
├── python3-edu-linux-server_0.3.1_all.deb
├── python3-edux-com-doc_0.1.0_all.deb
└── python3-edux-com_0.1.0_all.deb

Pakete werden im run.sh Skript der build-configuration in der Funktion add_custom_packages gebaut. Die Funktion ruft unter scripts/ alle deploy* Skripts auf, welche zuerst Git Repositories aus dem Upstream holen und anschließend bauen. Danach werden die fertigen Debian Pakete in die config/packages/ Directory verschoben.

Das Klonen über Git funktioniert über SSH, sodass der Nutzer nicht im Hochschulvpn sein muss, um das Projekt zu bauen.