====== Einführung in den Bau der MLD 5 (noch nicht fertig) ======
===== 1 Vorwort =====
Da wir immer nach neuen Mitstreitern suchen und einige sicher von der MLD angetan sind, aber doch verschreckt von der Entwicklungsumgebung, möchte ich hiermit mal ein Step-by-Step How-to build for MLD-5.x zusammen tippen. Dieser Teil richtet sich nicht nur an potentielle Entwickler, sondern kann von jedem neuen User Schritt für Schritt nachgestellt werden, um selbst die bereitgestellten Addons zu bauen.
===== 2 Vorbereitung =====
Im Folgenden gehen wir auf den neuesten MLD-Entwicklungszweig ein, bei dem wir als Basis Debian 8 (Jessie) einsetzen.
==== 2.1 Debian 8 (Jessie) installieren ====
Wie man ein System installiert muss ich hoffentlich nicht beschreiben, ansonsten ist man wohl falsch im Wiki abgebogen oder muss sich z. B. [[https://www.debian.org/releases/stable/installmanual.de.html|hier]] durchwühlen.
==== 2.2 System vorbereiten ====
Um die MLD-Entwicklerumgebung nutzen zu können sind noch ein paar Schritte nötig. Diese müssen als root ausgeführt werden.
* System auf den neuesten Stand bringen
su
apt-get update
apt-get dist-upgrade
* Pakete installieren die für die Entwicklungsumgebung nötig sind:
apt-get install subversion make mercurial git-core software-properties-common cvs squashfs-tools ipsvd gettext expect rsync apt-transport-https debian-keyring htop vim sudo apt-file mc
* Inhalt der /etc/apt/sources.list mit folgendem Inhalt ersetzen(auf der Konsole die Datei mit "vi" oder "nano" öffnen):
#######################################################
# Customized sources.list for MLD 5.x Buildsystem #
#######################################################
deb http://ftp.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.debian.org/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main
# jessie-updates, previously known as 'volatile'
deb http://ftp.debian.org/debian/ jessie-updates main
deb-src http://ftp.debian.org/debian/ jessie-updates main
# deb-multimedia.org repository
deb http://www.deb-multimedia.org jessie main non-free
# spotify repository
deb http://repository.spotify.com/ stable non-free
# plexhometheater repository
deb http://www.preining.info/debian/ jessie pht
# kodi repository
deb https://people.debian.org/~rbalint/ppa/xbmc-ffmpeg xbmc-ffmpeg-unstable/
# kodi pvr-addons repository
deb http://ppa.launchpad.net/team-xbmc/ppa/ubuntu/ trusty main
# unstable repository
deb http://ftp.debian.org/debian/ unstable main
* Paketlisten updaten(Fehlermeldungen wegen fehlender Publickeys ignorieren):
apt-get update
* deb-multimedia-keyring installieren und Publickey's für die zusätzlichen Repository's in der Shell oder im Terminal hinzufügen:
apt-get install deb-multimedia-keyring (mit j bestätigen)
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0x860CDC13
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D2C19886
gpg --keyring /usr/share/keyrings/debian-keyring.gpg -a --export 21E764DF | apt-key add -
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 91E7EE5E
* Die /etc/apt/preferences anlegen mit folgendem Inhalt:
Package: mencoder libmp3lame0 libmp3lame-dev
Pin: release o=Unofficial Multimedia Packages,a=stable,n=jessie,l=Unofficial Multimedia Packages
Pin-Priority: 500
Package: *
Pin: release o=Unofficial Multimedia Packages,a=stable,n=jessie,l=Unofficial Multimedia Packages
Pin-Priority: 70
Package: kodi-pvr-*
Pin: release v=14.04,o=LP-PPA-team-xbmc,a=trusty,n=trusty,l=Kodi stable,c=main
Pin-Priority: 990
Package: *
Pin: release v=14.04,o=LP-PPA-team-xbmc,a=trusty,n=trusty,l=Kodi stable,c=main
Pin-Priority: 50
Package: libwebp5 mpv libass5 libass-dev libxkbcommon0 libmpv1 libmpv-dev libavcodec* libavfilter* libavformat* libavutil* libavfilter* libavresample* libswresample* libswscale* libpostproc* libdvdnav4 libdvdnav-dev
Pin: release o=Debian,a=unstable,n=sid,l=Debian
Pin-Priority: 500
Package: *
Pin: release o=Debian,a=unstable,n=sid,l=Debian
Pin-Priority: 10
Nachdem das alles gemacht wurde, gibt man auf der Konsole oder Terminal ein **//exit//** ein, um sich als root abzumelden.
==== 2.3 Userspezifische Anpassungen ====
Mit einem Editor die versteckte Datei .profile im Homeverzeichnis des bei der Installation angelegten Users erweitern, und folgendes am Ende einfügen:
# change PATH before you can build MLD
if ! echo $PATH | grep -q sbin; then
PATH=$PATH:/usr/sbin:/sbin:/usr/local/sbin
fi
Dem bei der Installation angelegten User noch die Gruppe sudo zuweisen(muss als root gemacht werden):
su
usermod -aG sudo USERNAME
exit
Logout/Login (damit diese Änderung auch wirksam wird)
===== 3 MLD Entwicklungsumgebung installieren =====
==== 3.1 Holen der Entwicklungsumgebung ====
So nun haben wir unser System soweit vorbereitet und können anfangen die Entwicklungsumgebung zu holen. Die folgenden Befehle wieder in einer Shell oder Terminal ausführen. Als erstes clonen wir die Entwicklungsumgebung.
git clone http://minidvblinux.de/git-4/MLD.git MLD
Wenn dabei etwas schief geht, hat man sicherlich etwas beim vorbereiten seines Systems vergessen.
Nun wechseln wir in den Ordner MLD, und holen uns die ganzen Pakete:
cd MLD
make checkout_all
|^ Hinweis | Es kann vorkommen, dass man bei manchen Paketen einen error bekommt und sie nicht heruntergeladen werden können. Ein Grund dafür kann der Internetanbieter sein - und zwar die Telekom (Deutschland auch Österreich) - einfach den Befehl noch ein paar mal durchlaufen lassen, bis alles Pakete heruntergeladen worden sind und dann mit dem nächsten Schritt fortfahren. |
Derzeit (Juli 2015) gibt es keinen über den Paketmanager installierbaren Plexmediaserver. Damit das Folgende funktioniert, muss dieser vorher noch heruntergeladen und installiert werden:
DOWNLOAD=$(wget --load-cookies /tmp/kaka --save-cookies /tmp/kaka --keep-session-cookies "https://plex.tv/downloads" -O - 2>/dev/null | grep ".deb" | grep -m 1 "64-bit" | sed "s/.*href=\"\([^\"]*\\.deb\)\"[^>]*>64-bit.*/\1/")
FILE=$(echo $DOWNLOAD|cut -d"/" -f6)
wget $DOWNLOAD
sudo dpkg -i $FILE
Jetzt müssen noch alle zum Bau der Pakete benötigten Abhängigkeiten installiert werden, und das macht ihr folgendermaßen:
sudo apt-get update
sudo apt-get install $(make deps)
Wenn ihr alle Schritte befolgt habt, solltet ihr nun eine fertig eingerichtete MLD-Entwicklungsumgebung haben.
==== 3.2 Bauen der Entwicklungsumgebung ====
|^ Hinweis |Bei einem "make all" wurde bei mir 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. Möchte man nur ausgecheckte Pakete bauen und keine Änderungen im GIT ablegen, kann das umgangen werden, wenn im MLD-Ordner ein "make Makefile.config" durchführt wird. Die Diskussion zum Thema gibt es [[http://www.minidvblinux.de/forum/index.php/topic,5681.msg41068/topicseen.html|hier]] |
Einzelnes Paket bauen (Beispiel hier nun dvb):
cd dvb
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. server)
==== 3.3 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-get install $(make deps)
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-4 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 Konfig in der MLD ====
Eigene Anpassungen der Konfiguration werden in der Datei Makefile.config vorgenommen.
==== 5.2 Migdnight Comander ====
mc anpassen, damit er opk Dateien (Pakete) öffnen/anzeigen kann:
Im mc im Menü "Befehl / Erweiterungsdatei bearbeiten" aufrufen.
Nach "regex/\.u?deb$" suchen und durch "regex/\.(u?deb|opk)$" ersetzen.
==== 5.3 GIT ====
Ein kleines Tutorial findest du [[mld:tutorials:git|hier]]
===== 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 erforderlch 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 ====
In der MLD-4.x wurde der Ordner !_addons durch den Ordner .packages ersetzt.
|^ 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.|
Im Ordner .packages/4.0.0/ befinden sich die erstellten ISOs sowie 2 Ordner mit Namen base und libs.
=== 6.2.1 Ordner base ===
In diesem befinden sich 2 Ordner:
|control|=> Hier befindet sich die control Datei aus dem jeweiligen Paketordner ({PACKAGES}/control/control) nur dass sie hier nicht als control sondern unter dem Namen-Version des Paketes abgelegt ist (z. B. alsa-1.0.25-3)|
|packages|=> Darin befinden sich die ganzen Standardpakete (z. B. kernel, alsa, vdr...)|
=== 6.2.2 Ordner libs ===
|control|=> (siehe base)|
|packages|=> Darin befinden sich alle von den Paketen benötigten libs|