====== Einführung in den Bau der MLD 5.4 ======
===== 1 Vorwort =====
Da wir immer nach neuen Mitstreitern suchen und einige sicher von der MLD angetan sind, aber nicht wissen wie die Entwicklung von Paketen abläuft, möchte wir hiermit ein Step-by-Step How-to build for MLD-5.x zusammenstellen. Dieser Teil richtet sich nicht nur an Entwickler neuer Pakete, sondern kann von jedem User Schritt für Schritt nachgestellt werden, um selbst die bereitgestellten Pakete zu bauen.
===== 2 Vorbereitung =====
Im Folgenden gehen wir auf den 5.4 MLD-Entwicklungszweig ein, bei dem wir als Basis Debian 9 (Stretch) in einem Docker Container einsetzen.
|^ WICHTIG | Das Bauen von MLD Paketen kann viel Platz brauchen, was zu Problemen führt wenn die Entwicklungsumgebung unter MLD eingerichtet wird. Wer plant umfangreichere Arbeiten durchzuführen, sollte den Ordner /var/lib/docker auf eine große btrfs Partition verlegen. |
==== 2.1 Docker unter MLD installieren ====
Auf dem MLD System muss das Paket "docker" installiert werden.
apt install docker
==== 2.2 MLD-Devel Docker Image erstellen ====
Jetzt wird der Ordner /root/devel und das folgende Dockerfile /root/devel/Dockerfile erstellt:
mkdir /root/devel
cd /root/devel
nano Dockerfile
Das unten stehende in das Dockerfile einfügen und speichern:
FROM debian:stretch
MAINTAINER MLD Team
ARG DEBIAN_FRONTEND=noninteractive
# update und core Pakete installieren
RUN apt-get update \
&& apt-get dist-upgrade -y \
&& apt-get install -y \
make git-core software-properties-common locales locales-all
# MLD Pakete holen
RUN git clone http://minidvblinux.de/git-5/MLD.git MLD \
&& cd MLD \
&& make checkout_base
# MLD Paket Abhängigkeiten installieren
RUN cd MLD \
&& apt-get install -y $(make deps)
|^ TIPP | Wer nicht die testing Version sondern z.B. eine Entwicklungsumgebung für die MLD-5.3 Stable haben möchte, fügt im Dockerfile nach der Zeile '' && cd MLD \'' diese Zeilen ein: '' && git checkout 5.3 && echo ".SILENT:\nCLASS = stable" > Makefile.config \'' |
|^ TIPP | Wer nicht eine Entwicklungsumgebung für die MLD-5.4 sondern eine für die MLD-5.5 haben möchte, ersetzt im Dockerfile in der ersten Zeile das 'stretch' durch ein 'buster' und fügt nach der Zeile '' && cd MLD \'' diese Zeilen ein: '' && echo ".SILENT:\nDISTRI_VER = 5.5" > Makefile.config \'' |
Auf ARM Systemen (z.B. dem RPI 2) muss die erste Zeile des Dockerfile geändert werden:
uname -m | grep -q armv7l && sed "s|FROM .*|FROM arm32v7/debian:stretch|" -i Dockerfile
Anschließend das MLD Devel Docker Image erstellen:
docker build -t mld/devel:5.4 /root/devel
==== 2.3 Docker Container erstellen ====
Jetzt wird ein Docker Container auf Basis des mld/devel Images erstellt:
docker create -it --name MLD mld/devel:5.4
==== 2.4 Docker Container starten ====
Um den erstellten Container benutzen zu können muss dieser gestartet werden:
docker start MLD
==== 2.5 Docker Container verwenden ====
Zuerst wird der Container betreten:
docker exec -it MLD bash
Damit befindet man sich im Docker Container. Hier wird in den Ordner /MLD gewechselt und in diesem z.B. das MLD netinstall ISO Image erstellt:
cd /MLD
make
Nach getaner Arbeit wird der Container verlassen und gestoppt:
exit
docker stop MLD
===== 3 Entwicklungsumgebung nutzen =====
==== 3.1 Pakete bauen ====
|^ Hinweis |Beim ersten "make" wird nach dem Namen und der E-Mail-Adresse gefragt. Dies wird insbesondere benötigt, wenn man Änderungen einchecken möchte. Dann werden diese Informationen ins Logfile geschrieben. |
Einzelnes Paket bauen (Beispiel hier nun apt):
cd apt
make
Sämtliche verfügbaren Pakete werden so erstellt:
make all
So werden die vordefinierten ISOs erstellt:
make
|^ Tipp |Um gezielt nur ein bestimmtes ISO zu bauen, geht das so:|
cd ISO
make collection=NAME_DES_ISO #(z. B. netinstall)
==== 3.2 Aktualisieren der Entwicklungsumgebung ====
Alles auf den aktuellen Stand bringen lässt sich per:
make update_all
make all
Alles neu bauen lässt sich so:
make clean_all
make all
Abfragen welche Abhängigkeiten für die ausgecheckten MLD Pakete benötigt werden:
make deps
Wenn die benötigten Abhängigkeiten installiert werden sollen geht das so:
sudo apt install $(make deps)
|^ Hinweis | Leider funktionieren einige Debian Bibliotheken nicht korrekt auf dem RPI. Daher ist es erforderlich zusätzlich eine Raspbian Paketquelle hinzuzufügen: '' echo 'deb http://raspbian.raspberrypi.org/raspbian/ stretch main' >> /etc/apt/sources.list '' und anschließend ein '' apt update; apt upgrade '' auszuführen. |
Ein Paket neu kompilieren und bauen lassen (Beispiel dvb):
cd dvb
make clean
Ein Paket neu bauen ohne dass es neu kompiliert wird (Beispiel dvb):
cd dvb
make _clean
|^ Tipp |Beim Paket vdr und kernel ist es möglich, die vom vdr oder kernel abhängigen Pakete (z. B. beim vdr die plugins) neu bauen zu lassen, ohne dass diese neu kompiliert werden müssen (Beispiel vdr):|
cd vdr
make all_depends
===== 4 Einzelne Pakete erstellen =====
Ein einzelnes Paket lässt sich so auschecken:
make checkout name=PACKAGENAME
Es lassen sich auch alte MLD Addon auschecken und für die Verwendung unter der MLD-5 vorbereiten:
make checkout_old name=PACKAGENAME
Einzelne Pakete werden erstellt, indem in dem Ordner des Paketes ein make aufgerufen wird:
cd PACKAGENAME
make
Ein lokales Repository für ein neues Paket anlegen, nachdem es vorbereitet wurde, geht per:
make import name=PACKAGENAME
Ein neues Paket (für das zuvor ein locales Repository angelegt wurde) auf den Server stellen geht so (nur für registrierte Entwickler möglich):
make export name=PACKAGENAME
Zugangsdaten für Upload von Änderungen auf den MLD Server konfigurieren
(nur für registrierte Entwickler möglich):
make auth
===== 5 Tipps =====
==== 5.1 Eigene Config in der MLD ====
Eigene Anpassungen der Konfiguration werden in der Datei Makefile.config vorgenommen.
==== 5.2 GIT ====
Ein kleines Tutorial findest du [[mld:tutorials:git|hier]]
==== 5.3 Nicht als root arbeiten ====
Wer nicht als root arbeiten möchte, egal ob im Docker Container oder einer vollwertigen Debian Installation, muss sicher stellen, dass der PATH auch auf die sbin Verzeichnisse verweist. Das geht z.B. mit diesem Befehl:
echo 'export PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH' > /etc/profile.d/sbin.sh
===== 6 Änderungen und Neuerungen bei der MLD-5 =====
==== 6.1 Der Ordner control ====
Die Datei INSTALL gibt es nicht mehr und wird durch den Ordner control ersetzt.
In diesem Ordner befindet sich eine Datei control in der einige Informationen zum
Paket enthalten sind:
|Package:|=> Paketname|
|Version:| => Paketversion (wird normalerweise automatisch ermittelt)|
|Section:|=> Paketgruppe|
|Priority:|=> ???|
|Maintainer:|=> Name des Paketerstellers|
|Architecture:|=> auf welcher Umgebung das Paket laufen kann (z. B. i386)|
|Depends:|=> Abhängikkeiten (z. B. vdr)|
|Description:|=> Kurze Beschreibung des Paketes|
|=> Ausführliche Beschreibung, die über mehrere Zeilen gehen darf||
Des Weiteren findet man (wenn gebraucht) die Dateien postinst. Diese enthält das, was
sich vorher in der INSTALL unter install) befand.
Dann findet man (wenn gebraucht) die Dateien prerm. Diese enthält das, was sich vorher
in der INSTALL unter uninstall) befand.
|^ WICHTIG |Sofern im Paket ein init script existiert (/etc/init.d/NAME), muss dieses im controls/postinst Script per "start NAME" (z. B. start alsa) aufgerufen werden. Wenn auch ein stop erforderlich ist, wird der im controls/prerm Script aufgerufen (z. B. stop alsa). Das ist notwendig, damit Dienste nach dem Installieren sofort gestartet werden, und nicht erst beim nächsten Reboot. Dies ist natürlich nur für die Pakete notwendig, bei denen ein Aufruf des init Scripts erforderlich ist, z. B. alsa, wobei hier zwar das Starten erforderlich ist, das Stoppen aber nicht.|
Zu guter Letzt gibt es noch (wenn gebraucht) die Datei conffiles. Darin werden alle Datein eingetragen (z. B. /etc/vdr/setup.conf), die im Paket enthalten und Konfigurations-Dateien sind. Die werden dann bei einem Deinstallieren und vor allem beim Updaten besonders behandelt.
|^ Tipp |Im control Ordner werden beim checkout_old gerne einige prerm und postinst Dateien angelegt, die fast leer sind (11 Byte groß). Die können bedenkenlos gelöscht werden, bevor das neue Paket eingecheckt wird.|
==== 6.2 Der Ordner .packages ====
Dieser Ordner enthält die gebauten Pakete und Images. Im Ordner .packages/isos/ befinden sich die erstellten ISOs.
|^ Tipp |Je nach Einstellung eures Systems kann es passieren, dass ihr Ihn nicht seht. Dazu einfach im Dateimanager alle Dateien anzeigen einstellen und schon seht ihr ihn.|