Neue Struktur für NetCeiver Software

  • Beim Paketieren von minisatip (mit Netceiver-Support) und vdr-plugin-mcli bin ich auf eine zumindest unschöne Situation gestoßen das die von minisatip genutzte "libmcli" eigentlich nur als Bestandteil von vdr-plugin-mcli "abfällt". Wenn man also minisatip mit NetCeiver-Support bauen will, dann muss man entweder genau wissen wie man die Library einzeln im VDR-Plugin-Quellcode baut oder man muss VDR auch dann kompilieren wenn man eigentlich nur minisatip gebraucht hätte.

    Ich habe mich mal ein paar Tage mit dem Thema befasst und rausgekommen sind folgende neuen Projekte:

    https://github.com/vdr-projects/libnetceiver

    Ehemaliges "libmcli" mit "sprechenderem" Namen. Mit "mcli" bringt niemand den Netceiver in Verbindung und das Kürzel "cli" ist eigentlich auch schon für "Command Line Interface" belegt. "LibNetCeiver" kann nach Installation mit "pkg-config" gefunden werden und ist somit leicht in anderen Projekten nutzbar.

    https://github.com/vdr-projects/netcv2dvbip

    War ursprünglich auch beim VDR-Plugin dabei. Jetzt wegen der Komplexität als eigenes Projekt ausgelagert. Linkt gegen "libnetceiver".

    https://github.com/vdr-projects/v…ee/libnetceiver

    Variante des VDR-Plugins das auch gegen oben genannte "libnetceiver" dynamisch baut.

    Man kann "minisatip" unverändert gegen die neue "libnetceiver" bauen weil ich ein "install-legacy" in die Library gebaut habe. Dieser legt Symlinks an damit minisatip seine gewohnte Struktur wieder vorfindet.

    Über ein paar Rückmeldungen wäre ich dankbar.

  • >>Über ein paar Rückmeldungen wäre ich dankbar.

    libnetceiver ist als Name gut gewählt.

    Einen guten Namen zu einer guten Idee zu finden ist meist schwieriger als gedacht.

    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler
    Display Spoiler


    to spoil
    verderben
    beschädigen
    plündern
    behindern
    berauben
    vereiteln
    rauben
    zerstören [fig.] [verderben, verunstalten]
    vergällen
    verhageln [fig.]

  • Ich hab die Anpassung des vdr-plugin-mcli jetzt erstmal als Pull-Request dort stehen. Wenn pbrb vorher dazu kommen sollte einen Testlauf zu machen, dann wäre schön wenn er den PR direkt durchwinken könnte. Ich habe ihm auch jeweils eine "Maintainer"-Einladung für die neuen Repos geschickt damit er auch über das "neue Konstrukt" durchgehend Checkin-Rechte hat.

    Andernfalls sehe ich für mich als nächste Gelegenheit zum Test das kommende Wochenende. Ich habe selber keinen Netceiver und mache die ganze Anpass-Orgie hauptsächlich für einen Freund der die Hardware vor zig Jahren gekauft hat und jetzt weiter nutzen möchte. "Mal eben vorbeifahren" ist aber nicht. Da geht auf jeden Fall ein ganzer Tag für drauf.

  • Hm, kann jemand helfen

    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) * (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

  • von Repo-Root

    die lib wurde erstellt aber bei tools geht nichts

    make in /lib ist OK

    Code
    cc -c -O2 -fPIC -Wall -I../common -I../.. -DCLIENT -DLIBRARY -D_REENTRANT -D_GNU_SOURCE -DAPI_SOCK -I/usr/include/libxml2 -O3 -o logging.o logging.c
    cc  -shared mld_common.o mld_client.o mld_reporter.o mcast.o recv_tv.o recv_ccpp.o tools.o tca_handler.o tra_handler.o satlists.o interfaces.o api_server.o ciparser.o ci_handler.o mmi_handler.o logging.o -lxml2 -lpthread -lz -lm -Wl,-soname="libnetceiver.so.1" -o libnetceiver.so.1.0.0
    ln -sf libnetceiver.so.1.0.0 libnetceiver.so

    make in /tools kommt der Fehler wie aus der Repo-Root

    Code
    /usr/lib/gcc/x86_64-linux-gnu/11/include/stdbool.h:38: note: this is the location of the previous definition
       38 | #define true    1
          | 
    cc -lxml2 -L../lib -lnetceiver -pthread -o netcvdiag netcvdiag.o 
    /usr/bin/ld: netcvdiag.o: in function `show_stats':
    netcvdiag.c:(.text+0xdbd): undefined reference to `mcg_to_fe_parms'
    /usr/bin/ld: netcvdiag.c:(.text+0xdd5): undefined reference to `mcg_get_satpos'
    collect2: error: ld returned 1 exit status
    make: *** [Makefile:86: netcvdiag] Fehler 1

    make aus Repo-Root mit Fehler

    hier hängt er in /tools

    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) * (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

  • Komisch. Bei mir läuft das alles auf Anhieb.

    Mach mal in "lib":

    Code
    nm -D libnetceiver.so | grep ' T '

    um zu sehen ob "mcg_to_fe_parms" exportiert ist.

    Ansonsten: Welche Distribution und welcher Compiler. Wenn niemand vorher eine Lösung finden sollte, dann setze ich halt notgedrungen mal eine VM damit auf.

    Edited once, last by M-Reimer (May 28, 2023 at 7:52 PM).

  • ich be mal die tool(s) aus dem aktuellem MCLI Plugin (@pbrb )genommen damit geht es dann. Auch ab Repo-Root

    Ich habe alles mal angehängt

    Code
    /usr/lib/gcc/x86_64-linux-gnu/11/include/stdbool.h:38: note: this is the location of the previous definition 38 | #define true 1 | cc -pthread -o netcvlogview netcvlogview.o mcast.o tools.o strip netcvlogview
    make[1]: Verzeichnis „/usr/src/vdr/PLUGINS/libnetceiver/tools“ wird verlassen

    Komisch. Bei mir läuft das alles auf Anhieb.

    Mach mal in "lib":

    Code
    nm -D libnetceiver.so | grep ' T '

    um zu sehen ob "mcg_to_fe_parms" exportiert ist.

    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) * (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

    Edited once, last by cinfo (May 28, 2023 at 8:59 PM).

  • Die Tools vom alten Repo linken nicht gegen irgend eine Library. Das war also nicht Sinn der Übung. Ich hab aber keine Ahnung warum es bei mir einwandfrei läuft und bei dir nicht...

    Die Library passt auf jeden Fall. Eigentlich sollte es klappen.

    Problem ist halt: Weil es bei mir läuft kann ich nur schwer debuggen.

  • Die Tools vom alten Repo linken nicht gegen irgend eine Library. Das war also nicht Sinn der Übung. Ich hab aber keine Ahnung warum es bei mir einwandfrei läuft und bei dir nicht...

    Die Library passt auf jeden Fall. Eigentlich sollte es klappen.

    Problem ist halt: Weil es bei mir läuft kann ich nur schwer debuggen.

    naja die Lib sieht ja sehr gut aus und hat ja auch

    mcg_to_fe_parms

    mcg_get_satpos

    keine Ahnung was da die netcvdiag.c dagegen hat -- Aber da werde ich aber nicht der Einzige sein mit diesem Problem, also abwarten.

    Code
    cc -lxml2 -L../lib -lnetceiver -pthread -o netcvdiag netcvdiag.o 
    /usr/bin/ld: netcvdiag.o: in function `show_stats':
    netcvdiag.c:(.text+0xdbd): undefined reference to `mcg_to_fe_parms'
    /usr/bin/ld: netcvdiag.c:(.text+0xdd5): undefined reference to `mcg_get_satpos'
    collect2: error: ld returned 1 exit status
    make: *** [Makefile:86: netcvdiag] Fehler 1

    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) * (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

    Edited once, last by cinfo (May 29, 2023 at 7:52 AM).

  • Quote

    Man kann "minisatip" unverändert gegen die neue "libnetceiver" bauen weil ich ein "install-legacy" in die Library gebaut habe. Dieser legt Symlinks an damit minisatip seine gewohnte Struktur wieder vorfindet.

    wie sieht man, das minisatip gegen libnetceiver oder libmcli gebaut hat?

    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) * (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

  • wie sieht man, das minisatip gegen libnetceiver oder libmcli gebaut hat?

    Der Part ist einfach: Mach "ldd" auf das kompilierte "minisatip" und schaue ob dort "libnetceiver.so.1" gelinkt ist. Das minisatip-Makefile greift zwar über "-lmcli" drauf zu, aber über den "soname" in der Library wird das letztlich trotzdem korrekt auf die "richtige" Library verknüpft.

    Im Anhang ist ein angepasstes Makefile. Das ist zwar jetzt nur "Stochern im Dreck" aber vielleicht hilft das. Ich hab im Wesentlichen die Argumente am Linker umsortiert. Außerdem linke ich die Binaries nicht mehr gegen libxml2. Keines der Binaries nutzt Funktionen aus libxml2. Entsprechend muss auch nicht verlinkt werden.

    cinfo bitte mal ausprobieren. Umbenennen in "Makefile" und ablegen unter "tools".

  • cinfo bitte mal ausprobieren. Umbenennen in "Makefile" und ablegen unter "tools".

    war leider nicht die Lösung -- gleicher Fehler

    Code
    cc -L../lib -lnetceiver -pthread netcvdiag.o -o netcvdiag
    /usr/bin/ld: netcvdiag.o: in function `show_stats':
    netcvdiag.c:(.text+0xdbd): undefined reference to `mcg_to_fe_parms'
    /usr/bin/ld: netcvdiag.c:(.text+0xdd5): undefined reference to `mcg_get_satpos'
    collect2: error: ld returned 1 exit status
    make: *** [Makefile:74: netcvdiag] Fehler 1

    (VDR) NUC11PAH & GEEKOM MINI-IT11-11. Generation * BM2LTS * DD NET S2 Max * (Sound) Cinebar Lux Set * (Stream) Apple TV 4K (2022) * (Light) PHILIPS Hue Play HDMI Sync Box & Gradient Lightstrip * (OLED TV) LG OLED65G29LA

  • Ärgerlich. So ist genau die Struktur wie es auch bei graphlcd-base gemacht wird und da hat sich bisher nie jemand beschwert...

    An der Stelle bräuchte ich dann echt Infos wie Distribution und Compiler-Version um das potentiell in einer VM nachstellen zu können. Bei mir (Arch Linux) läuft alles ohne Fehler und vor allem auch ohne Warnungen.

    Edit: Ich hab mal meine alte Ubuntu-VM wieder ausgepackt und alle Updates installiert und dort sehe ich den Fehler.

    Edited once, last by M-Reimer (May 29, 2023 at 1:25 PM).

  • OK. Jetzt bitte nochmal testen. Die Reihenfolge der Linker-Parameter hat wohl tatsächlich immer noch nicht gepasst. Wenn das so jetzt immerhin kompiliert, dann tagge ich später nochmal ein "0.0.x" release. Sowie ich meine Tests abschließen konnte (nicht vor nächstem Wochenende) geht die Library dann auf Version 1.0.0.

  • Über ein paar Rückmeldungen wäre ich dankbar.

    Ich versuche die libnetceiver gerade für yaVDR zu paketieren. Ich würde mir ein install Target im Haupt-Makefile wünschen, damit dh_auto_install automatisch das Richtige tut:

    Außerdem gibt es etliche Warnungen wegen einer erneuten Definition von bool nach diesem Muster (vollständige Ausgabe ist im Anhang):

    Code
    cc -c -g -O2 -ffile-prefix-map=/build/libnetceiver-0.0.3+git20230529-5-6d9b7e6=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wall -I../common -I../.. -DCLIENT -DLIBRARY -D_REENTRANT -D_GNU_SOURCE -DAPI_SOCK -I/usr/include/libxml2 -O3 -o mld_client.o mld_client.c
    In file included from headers.h:20,
                     from mld_client.c:10:
    interfaces.h:13: warning: "bool" redefined
       13 | #define bool    int
          | 

    Files

    Meine VDRs

    VDR 1: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 24.04 (yavdr-ansible), VDR 2.7.4, CIR-Empfänger
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    Client 1: Raspberry Pi 2, Ubuntu 22.04 (yavdr-ansible), VDR 2.6.1

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • "make install" ist drin. Dachte eigentlich ich hätte das schon aber für Arch ist mir das nicht aufgefallen weil ich zwei Pakete baue. Einmal "libnetceiver" und einmal "libnetceiver-tools". Kann aber natürlich jeder selbst entscheiden wie er paketiert. Ich dachte mir nur das die wenigsten, die sich heute noch "libnetceiver" als Abhängigkeit für z.B. minisatip installieren wirklich auch die Tools brauchen. Wenn man minisatip dagegen baut, dann zieht es sich das halt als Abhängigkeit rein aber nur die wenigsten minisatip-Nutzer werden auch einen Netceiver haben.

    Wegen der vielen "redefined"-Meldungen. Hast du eine Ahnung wie man die triggert? Auf Arch bewirkt "-Wall" auf jeden Fall leider nicht das diese Meldungen kommen. Entsprechend hatte ich gedacht ich wäre an der Stelle sauber (keine Warnungen).

    Wie man das sauber löst weiß ich jetzt so spontan auch nicht. Eigentlich wollte ich keine großartigen Änderungen machen. Im Prinzip sagt mein Gefühl aber: "LibNetCeiver sollte weder "bool" noch "true" oder "false" definieren". Eventuell in ein "#ifndef" schachteln?

    Ist "bool", "true" und "false" nicht ganz regulärer Bestandteil der Sprache "C"?

    Edit: https://www.w3schools.com/c/c_booleans.php

    Wundert mich an der Stelle nur das "stdbool.h" bei deinem Build reingezogen wird. Die "libnetceiver" selbst nutzt aktuell kein "stdbool.h".

  • Einmal "libnetceiver" und einmal "libnetceiver-tools". Kann aber natürlich jeder selbst entscheiden wie er paketiert.

    Bei Debian-Paketen werden die Dateien erst nach der Installation in ein temporäres Verzeichnis (debian/tmp) mittels dh_install aufgeteilt, wenn aus einem Quellpaket mehrere Pakete entstehen sollen. Entsprechend der Gepflogenheiten unter Debian/Ubuntu kommt dann noch libnetceiver-dev Paket für die Header und die pkg-config Datei dazu.

    Meine VDRs

    VDR 1: Intel DH67BL, Celeron 540, 4 GB Ram, POV Geforce GT 1030, Ubuntu 24.04 (yavdr-ansible), VDR 2.7.4, CIR-Empfänger
    VDR 2: Acer Revo 3610, Pinnacle PCTV SAT 452e, Medion X10, yaVDR 0.6
    Client 1: Raspberry Pi 2, Ubuntu 22.04 (yavdr-ansible), VDR 2.6.1

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Die Fehlermeldung gibt es nur bei "true", merkwürdig.

    Und nur die Definition von "true" unterscheidet sich von der in der stdbool.h ( != 0 vs. 1 ).

    Die Umdefinition einfach raus zu schmeissen, könnte also Probleme machen.

    Die Fehlermeldung kommt wahrscheinlich vom fehlenden #undef, des alten "true".

    Korrekt wäre wohl so

    Code
    /* Booleans */
    #ifdef false
        #undef false
    #define false    0
    #ifdef true
        #undef true
    #define true    (!false)

    Gruss
    SHF

    Mein (neuer) VDR:

    Software:
    Debian Wheezy mit Kernel 3.14
    VDR 2.0.7 & div. Plugins aus YaVDR-Paketen
    noad 0.8.6

    Hardware:
    MSI C847MS-E33, onboard 2x1,1GHz Sandybridge Celeron 847, 4GiB RAM
    32GB SSD (System), 4TB 3,5" WD-Red HDD (Video)
    TT FF DVB-S 1.5 FullTS-Mod PWM-Vreg-Mod, DVB-Sky 852 Dual DVB-S2
    Das ganze im alten HP Vectra VLi8-Gehäuse versorgt von:
    PicoPSU-160-XT und Meanwell EPP-150 im ATX-NT-Gehäuse

    Edited once, last by SHF: Bugfix: #ifndef -> #ifdef (May 30, 2023 at 12:30 AM).

  • So wie ich das verstanden habe ist es ja auch "nur" eine Warnung und kein Fehler. Das war so seit Anfang an drin. Klar wäre es besser das irgendwie zu optimieren, aber an der Stelle lasse ich dann Leute vor die auch einen Netceiver direkt vor Ort haben um direkt zu testen ob eine Änderung negative Auswirkungen hat.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!