[1] MLD-5.x / Development / Erforderliche Schritte für einzelnes Paket in neuer Entwicklungsumgebung
 

Offline maf

  • MLD-Tester
  • Member
  • ******
  • Posts: 92
    • View Profile
Hallo,

ich möchte einen Patch für das Plugin svdrpservice aus MLD 5.3 für den Raspberry Pi ausprobieren. Dazu habe ich nach der Anleitung ein Docker Image erstellt.

Im Container existiert nach dem Start das Verzeichnis vdr-plugin-svdrpservice noch nicht, also geht auch
Code: [Select]
cd vdr-plugin-svdrpservice
make
noch nicht.

Bei meinem Versuch, das Verzeichnis für das Plugin bereitzustellen, tritt allerdings ein Fehler auf:
Code: [Select]
root@1d8928adab15:/MLD# make checkout vdr-plugin-svdrpservice
Cloning into 'git-5'...
fatal: repository 'http://minidvblinux.de/git-5/.git/' not found
Makefile.git:111: recipe for target 'checkout' failed
make: *** [checkout] Error 128
Wenn ich Makefile.git richtig lese, dann kommt der Name des Pakets (Variable name) dort nicht an. Ich vermute, vor dem checkout muss ich noch etwas anderes tun.

Was ist die minimale Befehlsfolge nach dem Start des Containers, um ein einzelnes Paket zu bauen?

Gruß, maf

Offline maf

  • MLD-Tester
  • Member
  • ******
  • Posts: 92
    • View Profile
Ok, wer lesen kann, ist klar im Vorteil...

Mittlerweile weiß ich, dass ich beim checkout den Namen des Pakets als Parameter angeben muss:
Code: [Select]
root@1d8928adab15:/MLD# make checkout name=vdr-plugin-svdrpservice
Cloning into 'vdr-plugin-svdrpservice'...

Leider läuft beim nächsten Schritt noch etwas schief:
Code: [Select]
root@1d8928adab15:/MLD# cd vdr-plugin-svdrpservice/
root@1d8928adab15:/MLD/vdr-plugin-svdrpservice# make
Makefile:1: ../vdr/Makefile.plugin: No such file or directory
make: *** No rule to make target '../vdr/Makefile.plugin'.  Stop.

Also zunächst
Code: [Select]
root@1d8928adab15:/MLD# make checkout name=vdr
Cloning into 'vdr'...

Beim erneuten make im Verzeichnes des Plugins fehlen zunächst wget
Code: [Select]
root@1d8928adab15:/MLD/vdr-plugin-svdrpservice# make
/bin/sh: 1: wget: not found
/bin/sh: 1: wget: not found
/bin/sh: 1: wget: not found
/bin/sh: 4: wget: not found
../Makefile.getfile:18: recipe for target 'src/vdr.bz2' failed
make[2]: *** [src/vdr.bz2] Error 1
Makefile:47: recipe for target 'src/vdr.bz2' failed
make[1]: *** [src/vdr.bz2] Error 2
../vdr/Makefile.plugin:59: recipe for target '../vdr/src/vdr/config.h' failed
make: *** [../vdr/src/vdr/config.h] Error 2
und dann g++
Code: [Select]
root@1d8928adab15:/MLD/vdr-plugin-svdrpservice# make
--2019-06-11 12:22:02--  ftp://ftp.tvdr.de/vdr/vdr-2.4.0.tar.bz2
           => '/root/.cache/mld//vdr-2.4.0.bz2'
Resolving ftp.tvdr.de (ftp.tvdr.de)... 88.198.76.220
Connecting to ftp.tvdr.de (ftp.tvdr.de)|88.198.76.220|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /vdr ... done.
==> SIZE vdr-2.4.0.tar.bz2 ... 939441
==> PASV ... done.    ==> RETR vdr-2.4.0.tar.bz2 ... done.
Length: 939441 (917K) (unauthoritative)

vdr-2.4.0.tar.bz2   100%[===================>] 917.42K  4.59MB/s    in 0.2s

2019-06-11 12:22:03 (4.59 MB/s) - '/root/.cache/mld//vdr-2.4.0.bz2' saved [939441]
...
  vdr-plugin-svdrpservice:
Failed to open '../../../vdr.pc': No such file or directory
No package '../../../vdr.pc' found
Failed to open '../../../vdr.pc': No such file or directory
No package '../../../vdr.pc' found
Failed to open '../../../vdr.pc': No such file or directory
No package '../../../vdr.pc' found
Failed to open '../../../vdr.pc': No such file or directory
No package '../../../vdr.pc' found
Failed to open '../../../vdr.pc': No such file or directory
No package '../../../vdr.pc' found
Failed to open '../../../vdr.pc': No such file or directory
No package '../../../vdr.pc' found
Failed to open '../../../vdr.pc': No such file or directory
No package '../../../vdr.pc' found
/bin/sh: 1: g++: not found
Failed to open '../../../vdr.pc': No such file or directory
No package '../../../vdr.pc' found
Failed to open '../../../vdr.pc': No such file or directory
No package '../../../vdr.pc' found
Package freetype2 was not found in the pkg-config search path.
Perhaps you should add the directory containing `freetype2.pc'
to the PKG_CONFIG_PATH environment variable
No package 'freetype2' found
Package fontconfig was not found in the pkg-config search path.
Perhaps you should add the directory containing `fontconfig.pc'
to the PKG_CONFIG_PATH environment variable
No package 'fontconfig' found
/bin/sh: 1: g++: not found
make[3]: *** Deleting file '.dependencies'

*** Plugin svdrpservice:
/bin/sh: 1: g++: not found
make[4]: g++: Command not found
Makefile:74: recipe for target 'svdrpservice.o' failed
make[4]: *** [svdrpservice.o] Error 127

*** failed plugins: svdrpservice

Makefile:229: recipe for target 'plugins' failed
make[3]: *** [plugins] Error 1
../vdr/Makefile.plugin:49: recipe for target 'src/svdrpservice/libvdr-svdrpservice.so' failed
make[2]: *** [src/svdrpservice/libvdr-svdrpservice.so] Error 2
grep: ../broken_packages.lst: No such file or directory

Mit wget und g++:
Code: [Select]
root@1d8928adab15:/MLD/vdr-plugin-svdrpservice# make
  vdr-plugin-svdrpservice:
Package freetype2 was not found in the pkg-config search path.
Perhaps you should add the directory containing `freetype2.pc'
to the PKG_CONFIG_PATH environment variable
No package 'freetype2' found
Package fontconfig was not found in the pkg-config search path.
Perhaps you should add the directory containing `fontconfig.pc'
to the PKG_CONFIG_PATH environment variable
No package 'fontconfig' found
font.c:19:10: error: #include expects "FILENAME" or <FILENAME>
 #include FT_FREETYPE_H
          ^~~~~~~~~~~~~
make[3]: *** Deleting file '.dependencies'

*** Plugin svdrpservice:
po/it_IT.po:8: warning: header field 'Language' still has the initial default value
po/sk_SK.po:7: warning: header field 'Language' still has the initial default value
po/de_DE.po:8: warning: header field 'Language' still has the initial default value
find: '../vdr/src/vdr/locale': No such file or directory
    Build package: vdr-plugin-svdrpservice
Das für vdr benötigtes Debian Paket libjpeg-dev fehlt.
Das für vdr benötigtes Debian Paket libcap-dev fehlt.
Das für vdr benötigtes Debian Paket libfontconfig1-dev fehlt.
Das für vdr benötigtes Debian Paket libtinyxml-dev fehlt.
Das für vdr benötigtes Debian Paket libglibmm-2.4-dev fehlt.
Sie können es durch folgende Eingabe installieren:
sudo apt-get install libjpeg-dev libcap-dev libfontconfig1-dev libtinyxml-dev libglibmm-2.4-dev

../Makefile.tools:688: recipe for target 'dep' failed
make[5]: *** [dep] Error 1
        Build vdr-plugin-svdrpservice...
          Füge Abhängigkeit hinzu: libstdc++6
            Benötigt von: /data/usr/lib/vdr/libvdr-svdrpservice.so.2.4.0
          Create lib package libstdc++6
          Add lib /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 to package libstdc++6
          Füge Abhängigkeit hinzu: libc6
            Benötigt von: /data/usr/lib/vdr/libvdr-svdrpservice.so.2.4.0
          Create lib package libc6
          Add lib /lib/arm-linux-gnueabihf/libm.so.6 to package libc6
          Füge Abhängigkeit hinzu: libgcc1
            Benötigt von: /data/usr/lib/vdr/libvdr-svdrpservice.so.2.4.0
          Create lib package libgcc1
          Add lib /lib/arm-linux-gnueabihf/libgcc_s.so.1 to package libgcc1
          Add lib /lib/arm-linux-gnueabihf/libc.so.6 to package libc6
        libstdc++6:
          Build package: libstdc++6
          Füge Abhängigkeit hinzu: libc6
            Benötigt von: /data/usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.22
          Füge Abhängigkeit hinzu: libgcc1
            Benötigt von: /data/usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.22
        libc6:
          Build package: libc6
        libgcc1:
          Build package: libgcc1
          Füge Abhängigkeit hinzu: libc6
            Benötigt von: /data/lib/arm-linux-gnueabihf/libgcc_s.so.1

Ergebnis:
Code: [Select]
root@1d8928adab15:/MLD/vdr-plugin-svdrpservice# ls -l
total 32
-rw-r--r-- 1 root root  109 Jun 11 12:08 Makefile
-rw-r--r-- 1 root root   74 Jun 11 12:20 Makefile.version
drwxr-xr-x 2 root root 4096 Jun 11 12:08 control
-rw-r--r-- 1 root root   29 Jun 11 12:26 depends
drwxr-xr-x 4 root root 4096 Jun 11 12:26 package
lrwxrwxrwx 1 root root   69 Jun 11 12:26 package.deb -> ../.packages/vdr-plugin-svdrpservice_1.0.0-7+2.4.0.218+root_armhf.deb
drwxr-xr-x 3 root root 4096 Jun 11 12:08 src
drwxr-xr-x 4 root root 4096 Jun 11 12:08 template

Darf ich denn trotz all der Warnungen und Fehlermeldungen, der fehlenden Bibliotheken und Verzeichnisse dem Paket vertrauen?

Aber vor allem: Da habe ich ja offensichtlich ein Plugin für VDR 2.4.0 gebaut. Und in MLD 5.3 läuft doch VDR 2.2.0, oder?

Die Entwicklungsumgebung ist auf Stand 5.3:
Code: [Select]
root@1d8928adab15:/MLD# git status
HEAD detached at 5.3
nothing to commit, working tree clean

Trotzdem wurde für vdr beim make das Archiv für Version 2.4.0 heruntergeladen. Wie kann ich erreichen, dass das Archiv für Version 2.2.0 heruntergeladen wird?
« Last Edit: June 11, 2019, 15:11:47 by maf »

Online clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20117
    • View Profile
    • ClausMuus.de
Die meisten Deiner Probleme rühren daher, dass wir die MLD Entwicklungsumgebung bisher nicht genutzt haben um einzelne Pakete zu bauen. Von daher sind die benötigten Abhängigkeiten bei unseren Builds bereits durch andere Pakete bereitgestellt. Aus selbigen Grund sind auch nicht alle Abhängigkeiten im Makefile des Plugins eingetragen.

Aufgrund der vielen Meldungen das Libs fehlen, gehe ich davon aus, dass das Plugin nicht vollständig funktionieren wird, auch wenn der Build komplett durchgelaufen ist. Unabhängig davon wirst Du in einer MLD-5.4 Entwicklungsumgebung keine MLD-5.3 Pakete bauen können, da die für den Build verwendeten Libs nicht zu denen passen, die bei der 5.3 verwendet wurden. ALso selbst der Wechsel zu VDR 2.2 in der Build Umgebung wird Dir nicht weiter helfen.

Der 5.3 Tag im Status des MLD Ordners, ist der letzte 5.3 Checkin im MLD Repositorie. Alles danach ist MLD 5-4 spezifisch. Du müsstest also bei allen Paketen einen Stand auschecken, der vor dem datum des 5.3 Tags liegt. Aber auch das zugrunde liegende Debian müsste halt die selbe Version haben, die wir damals eingesetzt hatten.
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 5.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 12TB HDD - Lian Li PC-C37B - Samsung LE40A559

Offline maf

  • MLD-Tester
  • Member
  • ******
  • Posts: 92
    • View Profile
Danke für die Erklärung.

Wenn ich Dich richtig verstehe, habe ich keine realistische Chance, ein einzelnes Paket zu erstellen. Wäre dann folgende Vorgehensweise erfolgversprechend, um einen Patch für eine Paket für MLD 5.3 zu testen:
  • RPi mit Raspbian Jessie aufsetzen,
  • Entwicklungsumgebung aufsetzen und initialisieren wie in Einführung in den Bau der MLD 5.4 beschrieben, allerdings wo angebracht 5.4 durch 5.3 ersetzen,
  • make checkout_all
  • in allen Git-Repositorys die letzte Version auschecken, die vor dem Commit für MLD 5.3 eingecheckt wurde,
  • meinen Patch im fraglichen Paket ablegen,
  • nochmal apt-get install -y $(make deps)?
  • make all
  • (sehr geduldig sein)

Sollte ich es noch einmal mit Docker versuchen wollen, dann statt der beiden ersten Schritte oben
  • unter Raspbian ein Docker Image von arm32v7/debian:jessie ableiten,
  • Entwicklungsumgebung aufsetzen und initialisieren wie in Einführung in den Bau der MLD 5.4 beschrieben, allerdings wo angebracht 5.4 durch 5.3 ersetzen,
  • Raspbian-spezifische Paketquellen wie im Forum beschrieben und zugehörige Schlüssel für APT ergänzen,
  • zusätzliche Pakete installieren, zumindest soweit bislang bekannt (wget, g++, gnupg, ...),

Wie lange dürfte es auf einem RPi 3 dauern, alle Pakete zu erstellen?

Oder ist doch eine Vereinfachung möglich, z.B.:
  • (Entwicklungsumgebung einrichten wie oben),
  • make all (nach dem checkout_base, d.h. nur für bereits vorhandenen Pakete)
  • checkout für vdr und das eine Plugin
  • meinen Patch im Plugin-Paket ablegen,
  • nochmal apt-get install -y $(make deps)?
  • make all
  • (etwas weniger geduldig sein)
« Last Edit: June 11, 2019, 20:47:43 by maf »

Online clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20117
    • View Profile
    • ClausMuus.de
Der letzte Vorschlag dürfte der vielversprechendste sein. Allerdings glaube ich nicht, dass Du für Debian Jessie aalle Pakete in den passenden Versionen bekommst. Da gab esja inzwischen auch diverse Updates die Möglichwerweise nicht mehr MLD-5.3 kompatibel sind.

Warum willst Du überhaupt die 5.3 nehmen und nicht die 5.4?
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 5.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 12TB HDD - Lian Li PC-C37B - Samsung LE40A559

Offline maf

  • MLD-Tester
  • Member
  • ******
  • Posts: 92
    • View Profile
Der letzte Vorschlag dürfte der vielversprechendste sein.
Sind denn aus Deiner Sicht die einzelnen Aufrufe von make in Ordnung, oder habe ich was ausgelassen?

Allerdings glaube ich nicht, dass Du für Debian Jessie aalle Pakete in den passenden Versionen bekommst. Da gab esja inzwischen auch diverse Updates die Möglichwerweise nicht mehr MLD-5.3 kompatibel sind.
Ich vermute, Du meinst Raspbian Jessie? Was die Versionen betrifft: Mit Kompatibilitätsproblemen hast Du sicherlich mehr Erfahrung als ich. Ich hätte gehofft, dass es keine Schwierigkeiten geben sollte, solange ich "nur" Programme oder Bibliotheken erstelle, die Shared Libraries benutzen. Unter Debian zumindest habe ich noch nie Konflikte erlebt zwischen "alten" Programmen, die Bestandteil der Distribution (wie Jessie) waren, und "neuen" Programmen, die ich kurz vor Ende der Lebensdauer der Distribution erstellt habe. Was könnte Deiner Erfahrung nach schief gehen?

Warum willst Du überhaupt die 5.3 nehmen und nicht die 5.4?
Mein Server läuft unter Debian Stretch, d.h. mit VDR 2.2.0. Auf einem Client mit MLD 5.4 hätte ich kein Plugin remotetimers mehr zur Verfügung. Und noch scheue ich davor zurück, eTobis Pakete für VDR 2.4.0 zu installieren. Denn dann müsste ich eine ganze Reihe von Plugins neu bauen und hoffen, das sie auch mit VDR 2.4.0 kompatibel sind.

Online clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20117
    • View Profile
    • ClausMuus.de
Das mit den Make sollte so passen.
Und was die Kompatibilität betrifft, musst Du's halt versuchen. Im neu ausgecheckten Jessi (Raspbian) könnten halt neuere Libs sein, als die in den MLD Paketen enthaltenen. Dann könnte es Probleme geben. Ein versuch wäre es wert.
Ansonsten hast Du ja noch die Möglichkeit den VDR 2.2 für die MLD-5.4 zu bauen und Halt den (inklusive der dazu passend gebauten Plugins) in der MLD 5.4 zu verwenden.
Ein kompletter Build aller (RPI) MLD Pakete dauert übrigens mehrere Tage (3-4).
Und dann gibt's noch die Option das remotetimers Plugin für den VDR-2.4 zu patchen. Ich habe aber keinen entsprechenen Patch (oder angepasste Sourcen) gefunden, und wollte mir das erstellen eines eigenen Patches nicht antun...
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 5.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 12TB HDD - Lian Li PC-C37B - Samsung LE40A559

Offline maf

  • MLD-Tester
  • Member
  • ******
  • Posts: 92
    • View Profile
Ich habe mich entschieden, mein Glück mit der "vereinfachten" Prozedur auf einem RPi unter Raspbian Jessie zu versuchen. Und ich will gerne berichten, ob das funktioniert hat.

Eine Frage noch vorab: Wie groß sollte die SD-Karte sein, wenn ich für alle Fälle - d.h. einen kompletten Build - gewappnet sein will? Reichen 32 GB? Oder reichen sogar16 GB?

Offline Walter

  • Adv. Member
  • ***
  • Posts: 173
    • View Profile
Moin
für vdr und paar plugins komme ich hier unter Raspbian stretch und der MLD-5.4 Entwicklungsumgebung bisher auf lediglich
Code: [Select]
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/root        29G    6,1G   22G   22% /
devtmpfs        459M       0  459M    0% /dev
tmpfs           464M       0  464M    0% /dev/shm
tmpfs           464M     12M  452M    3% /run
tmpfs           5,0M    4,0K  5,0M    1% /run/lock
tmpfs           464M       0  464M    0% /sys/fs/cgroup
/dev/mmcblk0p1   43M     23M   21M   53% /boot
tmpfs            93M       0   93M    0% /run/user/1000
Vorher mit einer 16 GB Karte gab es aber auch kein Platzmangel
Habe aber allerdings auch nie alles bauen lassen.
mfg

Offline maf

  • MLD-Tester
  • Member
  • ******
  • Posts: 92
    • View Profile
Ich habe nun doch Docker auf einem Raspberry Pi 3 unter Raspbian Stretch benutzt, um eine Enwicklungsumgebung für MLD 5.3 aufzubauen. Dazu benutze ich drei Dateien. Mit raspbian-jessie.Dockerfile wird ein Image für Jessie erstellt:
Code: [Select]
FROM arm32v7/debian:jessie
MAINTAINER MLD Team <team@minidvblinux.de>

ARG DEBIAN_FRONTEND=noninteractive

# Add Raspbian repositories
RUN apt-get update \
 && apt-get install -y wget \
 && wget -O - -q https://archive.raspbian.org/raspbian.public.key | apt-key add - \
 && echo 'deb http://raspbian.raspberrypi.org/raspbian/ jessie main' \
    > /etc/apt/sources.list.d/raspbian.list \
 && wget -O - -q https://archive.raspberrypi.org/debian/raspberrypi.gpg.key | apt-key add - \
 && echo 'deb http://archive.raspberrypi.org/debian/ jessie main ui' \
    >> /etc/apt/sources.list.d/raspbian.list

# Update and upgrade
RUN apt-get update \
 && apt-get dist-upgrade -y

Mit mld53-rpi.Dockerfile wird basierend auf dem Image mit Jessie ein Image für eine Entwicklungsumgebung für MLD 5.3 erstellt:
Code: [Select]
FROM maf/raspbian:jessie
MAINTAINER MLD Team <team@minidvblinux.de>

ARG DEBIAN_FRONTEND=noninteractive

# Update und benötigte Pakete installieren
RUN apt-get update \
 && apt-get dist-upgrade -y \
 && apt-get install -y \
    make git-core software-properties-common locales locales-all g++

# MLD Pakete holen und auf Version 5.3 umstellen
COPY Makefile.adjust /tmp/Makefile.adjust
RUN git clone http://minidvblinux.de/git-5/MLD.git MLD \
 && cd MLD \
 && echo ".SILENT:\nCLASS = stable" > Makefile.config \
 && git checkout 5.3 \
 && cat /tmp/Makefile.adjust >> Makefile.git \
 && rm /tmp/Makefile.adjust \
 && make checkout_base \
 && make adjust_version_all

# Abhängigkeiten der MLD Pakete installieren
RUN cd MLD \
 && apt-get install -y $(make deps)

# Platz freigeben
RUN apt-get autoremove -y \
 && apt-get autoclean -y

In das Image für MLD 5.3 geht noch die Datei Makefile.adjust ein:
Code: [Select]

# Version aller Module an Version von MLD anpassen
adjust_version_all:
        ls | while read package; do \
                if [ -e "$$package/.git" ]; then \
                        echo -e "$(color_green)$$package$(color_reset)"; \
                        $(MAKE) adjust_version name=$$package; \
                fi; \
        done

# Version eines Moduls an Version von MLD anpassen
adjust_version:
        if [ -e "$(name)/.git" ]; then \
                git -C $(name) rm --force --cached --ignore-unmatch .gitignore; \
                git -C $(name) checkout --force $$(git -C $(name) rev-list -n 1 --first-parent --before=$$(git log -1 --format='%at') master) &>/dev/null; \
        else \
                echo -e "$(color_red)unknown package $(name)$(color_reset)"; \
        fi
Die beiden Ziele in diesem Makefile werden an Makefile.git angefügt. Mit
Code: [Select]
make checkout_all; make adjust_version_all bzw.
Code: [Select]
make checkout name=PACKAGENAME; make adjust_version name=PACKAGENAME können dann alle oder ein einzelnes Paket auf den Versionsstand von MLD 5.3 zurückgesetzt werden. Dazu wird das letzte Commit eines Pakets vor dem aktuellen Commit von MLD ausgecheckt.

[1] MLD-5.x / Development / Erforderliche Schritte für einzelnes Paket in neuer Entwicklungsumgebung
 



Users Online Users Online

0 Members and 1 Guest are viewing this topic.