# 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](https://gitlab.informatik.hs-augsburg.de/edu-linux/hardware/build-configuration/-/blob/main/run.sh) lässt sich eine Funktion `lb_config` finden, welche alle Dateien aus [config/](https://gitlab.informatik.hs-augsburg.de/edu-linux/hardware/build-configuration/-/blob/main/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](https://gitlab.informatik.hs-augsburg.de/edu-linux/hardware/build-configuration/-/blob/main/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*. ## bootloaders Unter *config/bootloaders/* befinden sich Bootloader-spezifische Konfigurationen: ```text 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. ## 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: ```{code-block} bash --- caption: config/default/hooks/normal/0801-adduser.hook.chroot lineno-start: 1 --- #!/bin/sh set -e #Create user "edu" with password "edu" and uid:gid edu:edu (1000:1000) useradd \ -m \ --uid 1000 \ --gid 1000 \ --user-group \ --password '$6$wYbDF9m00OsS5AjV$QM4GgrLcuOLf.m15hXiscyAJA2H9L0/YvS6sRUAwzA95GgvFi5U5eufBnaH8u/PqxrW0RpjQ06lairUX7iQFX.' \ --shell /usr/bin/bash \ edu # Make the normal user able to shutdown the system mkdir -p /etc/sudoers.d echo 'edu ALL=NOPASSWD: /sbin/halt, /sbin/reboot, /sbin/poweroff' >> /etc/sudoers.d/edu-nopasswd exit 0 ``` ## 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: ```text 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 ``` ## 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*: ```{code-block} text --- caption: desktop.list.chroot lineno-start: 1 --- awesome awesome-extra lightdm lightdm-gtk-greeter polybar xorg xserver-xorg-video-all xserver-xorg-core ``` ## 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: ```text 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/](https://gitlab.informatik.hs-augsburg.de/edu-linux/hardware/build-configuration/-/blob/main/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.