[HOWTO]: Installation eines VDR innerhalb von CoreElec (Amlogic only)

  • Ich starte hier ein neues Howto für die Installation von VDR unter CoreElec. Ich habe das auf dem Odroid N2+ getestet (mit SD-Karte, es sollte aber auch auf einem eMMC funktionieren) mit einer Amlogic S222X-CPU. Es sollte auch eine S905X3 funktionieren (z.B. Odroid C4). Bitte gebt mir ein paar Tage, bis das HOWTO vollständig ist, ich werde noch ein paar Nachrichten reservieren.


    Stand April 2022 empfehle ich die CoreElec-Version 19.3 zu verwenden, da diese gegenüber der aktuellen 19.4-Version einige Vorteile hat, z.B. Umrechnung von HDR->SDR, was mit der 19.4 nicht funktioniert. Ich habe alles sowohl auf einem Full-HD TV als auch auf einem UHD-TV getestet. Mein Dank gehört unter anderem jojo61 für das Ausgabe-Plugin und die Idee mit den Looper-Skripten. Danke auch an hape60 für die Idee des chroot unter CoreElec.


    Bei der Installation bin ich wie folgt vorgegangen.


    1. Ich habe mir zunächst ein Ubuntu Minimal heruntergeladen. Das gibt es z.B. hier: https://wiki.odroid.com. Je nach CPU C4 oder N2+ auswählen.

    2. Das Image auf eine SD-Karte schreiben (ich nutze 64GB, 32 sollten aber für alles ausreichend sein).

    3. Das Image sollte konfiguriert werden, damit z.B. das Netzwerk stimmt. Danach Rechner anhalten.

    4. Die SD-Karte enthält 2 Partitionen, boot und root-Filesystem. SD-Karte in einem LINUX-System mounten und ein tar-Archiv der Root-Partition anfertigen:

    Code
    1. cd
    2. tar cvf verzeichnis_zum_speichern/ubuntu.tar *

    5. Auf dieselbe SD-Karte CoreElec 19.3 installieren, starten und konfigurieren. Das überschreibt das Ubuntu, das vorher als tar-file gesichert wurde. Wichtig ist auch die Konfiguration des Netzwerks und der shh-Zugang.

    6. Das CoreElec enthält 2 Partitionen, boot und storage. Nach Installation CE Rechner ausschalten und die STORAGE-Partition in einem anderen LINUX-Rechner mounten.

    7. Im STORAGE-Verzeichnis ein Verzeichnis UBUNTU anlegen und da ubuntu.tar hinein kopieren.

    8. ubuntu.tar auspacken:

    Code
    1. sudo su
    2. mount /dev/mmcblk1p2 /mnt
    3. cd /mnt/storage
    4. mkdir UBUNTU
    5. cd UBUNTU
    6. tar xvf ubuntu.tar
    7. rm ubuntu.tar

    9. Eine Datei namens ubuntu.sh direkt im storage-Verzeichnis erstellen mit dem Inhalt

    10. Fehlende Verzeichnisse anlegen

    Code
    1. mkdir /storage/UBUNTU/ce
    2. mkdir /storage/UBUNTU/storage

    11. Karte un-mounten und CoreElec starten

    12. Per ssh in CoreElec einwählen und folgende Befehle eingeben

    Code
    1. cd /storage
    2. chmod 775 ubuntu.sh
    3. ./ubuntu.sh
    4. cd UBUNTU
    5. chroot . /bin/bash
    6. export PATH='/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'

    13. Der Pfad sollte in der .bashrc gespeichert werden, damit man ihn nicht jedes Mal exportieren muss. Dafür in der chroot Umgebung eingeben: cd RETURN, und die Datei .bashrc editieren:

    Code
    1. export PATH='/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'
    2. export LS_OPTIONS='--color=auto'
    3. eval "`dircolors`"
    4. alias ls='ls $LS_OPTIONS'
    5. alias ll='ls $LS_OPTIONS -l'
    6. alias l='ls $LS_OPTIONS -lA'
    7. PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w \$\[\033[00m\] '

    14. Im verzeichnis /etc muss noch die der Nameserver angegeben werden (cd /etc, rm resolv.conf und edit resolv.conf). Für dhcp sieht das bei mir so aus:

    Code
    1. nameserver 192.168.178.1

    Für eine feste IP so:


    Das rm resolv.conf ist erforderlich, da resolv.conf ein symlink ist, der erst entfernt werden muss.


    15. Nach einem Reboot:

    Code
    1. cd /storage
    2. ./ubuntu.sh
    3. cd UBUNTU
    4. chroot . /bin/bash

    16. Ab hier funktionieren dann Befehle wie apt update oder apt install. Ich empfehle das De-Installieren des packagekit (apt purge packagekit), da in der chroot kein systemd funktioniert.

    17 Um KODI zu stoppen, bitte außerhalb der chroot-Umgebung folgendes aufrufen:

    Code
    1. systemctl stop kodi


    Jetzt kann man den VDR aus github auschecken, das Ausgabe-Plugin von jojo61 und alle weiteren benötigen Plugins und Abhängigkeiten. Sobald ich ein wenig Zeit habe, beschreibe ich den Installations-Prozess sowie die Skripte zum Umschalten von VDR/Kodi oder Ein-/Ausschalten von Ambilight. Auf dem Odroid N2+ funktioniert übrigens WOL, wake on timer und wake per Fernbedienung, doch dazu später mehr.


    Viel Spaß,

    Rudi

  • Die Installation von VDR in der chroot-Umgebung ist denkbar einfach. ich beschreibe das hier für den VDR selbst und das Ausgabe-Plugin. Die Vorgehensweise für andere Plugins ist aber identisch bis auf die Abhängigkeiten, die noch installiert werden müssen.


    Ich habe für mich in der chroot-Umgebung (Achtung: Man arbeitet hier als root!) ein Homeverzeichnis /home/rudi angelegt, in das ich alles installieren. Ihr könnte das gerne entsprechend ändern.

    In der chroot-Umgebung (siehe 1. Post) folgendes eingeben:

    Ich habe in meinem home-Verzeichnis (/home/rudi die folgende Datei runvdr angelegt):

    Da das chroot kein systemd kennt, ich aber den at-Dämon für meine commands.conf benötige, starte ich den Dämon einfach in der der runvdr nach Installation mit (apt install atd). Ebenso starte ich hier auch den vdradmin. Der benötigt ein weiteres Verzeichnis, das aber in chroot gemounted ist. Darum lege ich das Verzeichnis in der runvdr an. Natürlich könnt ihr die Plugins weglassen, die nicht benötigt werden. Meine /usr/local/bin/vdrshutdown.sh-Datei sieht so aus:


    Bitte nicht vergessen, die Dateien ausführbar zumachen (chmod 775 name_der_datei). Zu den Looper-Skripten schreibe ich später mehr. Die dienen dazu, Aktionen in der chroot-Umgebung auszuführen, die eigentlich außerhalb der chroot-Verantwortung liegen, z.B. reboot, Ambilight an/aus oder KODI starten.


    Außerhalb der chroot, also unter CoreElec habe ichin .config/system.d habe ich eine Datei namens vdr.service angelegt, die so aussieht:


    Den service muss man unter Kodi mit "systemctl enable vdr.service" starten. Der Start von KODI muss beim ersten VDR-Start maskiert sein ("systemctl mask kodi.service").


    Die Datei vdr.sh sieht bei mir so aus:



    Es wird auch eine Datei vdr.sh benötigt (in UBUNTU/vdr) mit folgendem Inhalt:


    Shell-Script
    1. #!/bin/sh
    2. export PATH='/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'
    3. chroot /storage/UBUNTU ./usr/local/bin/svdrpsend "$@"


    Man benötigt noch einen looper-Service namens softoggle.service in .config/system.d:



    Das softoggle sieht bei mir so aus (im Verzeichnis /storage/UBUNTU/vdr)



    Die kodi-send-Befehle spielen bei mir 1s einen Interlaced-Video-Schnipsel ab, da ich sonst Kamm-Artefakte in Amazon VOD habe.

    EDIT: Mit der neuesten Version von jojo61 's Plugin ist das nicht mehr erforderlich (danke, jojo61 ). Das gilt auch für das Umschalten beim zurückkehren von KODI zu VDR. Darum habe ich das auch auskommentiert.


    Und looper so:


    Shell-Script
    1. #!/bin/bash
    2. while true;
    3. do sleep 300
    4. done


    Ich nutze den external-Player, um zwischen VDR und KODI umzuschalten (/var/lib/vdr/plugins/externalplayer.conf):


    Code
    1. {
    2. MenuEntry = "KODI";
    3. Command = "/usr/bin/killall looper";
    4. OutputMode = extern;
    5. InputMode = normal; # XBMC should be configured for LIRC.
    6. }


    Mit diesen looper-Scripten kann man auch ein reboot oder halt in der chroot-Umgebung von VDR aus realisieren oder Ambilight ein- und ausschalten.

  • Für die Fernbedienung von VDR kann die Konfiguration von CoreELEC genutzt werden. In .config muss die Datei rc_keymps.cfg angelegt werden, in der die Fernbedienungen eingetragen werden. Meine Datei sieht so aus:


    Code
    1. meson-ir * odroid.toml


    Es sind auch mehrere Einträge gültig. Im Unterverzeichnis rc_keymaps muss dann die Datei name.toml existieren, in meinem Fall also odroid.toml. Die sieht so aus:


    für die originale Odroid Fernbedienung. Die VDR remote.conf ordnet das dann beim Anlernen automatisch zu,

    Der Odroid kann per Fernbedienung gestartet werden. Hierzu sind folgende aufzurufen (außerhalb der chroot):

    Code
    1. systemctl stop kodi
    2. systemctl stop eventlircd
    3. ir-keytable -u

    Die Werte müssen notiert und in die Datei boot.ini eingetragen werden. Dazu muss /flash zunächst schreibbar gemounted werden:


    Code
    1. mount -o remount,rw /flash

    Meine boot.ini sieht so aus;



    Ich habe hier gleich auch noch für mein KKSB-Gehäuse den Wakeup per Power-Knopf eingetragen. Wir will, kann dann gleichzeitig in der Datei config.ini noch WOL aktivieren, das funktioniert auch beim Odroid N2+.


    Für das Ambilight (KODI und VDR) nutze ich hyperion.ng, das einfach unter KODI installiert werden kann. In der VDR commands.conf habe ich folgenden Eintrag, um das Ambilight an- und auszuschalten:


    Code
    1. Ambilight an/aus : killall looperambi


    Die Datei looperambi befindet sich in /storage/UBUNTU/vdr und sieht so aus


    Shell-Script
    1. #!/bin/bash
    2. while true;
    3. do
    4. sleep 300
    5. done


    Dort gibt es auch die Datei ambitoggle mit de folgenden Inhalt:



    Diese Datei wird initialisiert durch einen CoreELEC-Service (.config/system.d/ambitoggle.service) mit folgendem Inhalt



    Diese Datei muss außerhalb der chroot-Umgebung einmalig als service initialisiert werden:


    Code
    1. systemctl enable ambitoggle.service


    Danach kann das Ambilight im VDR unter Befehle an- oder ausgeschaltet werden. Auf ähnliche Weise habe ich unter VDR ein "halt" oder ein "reboot" realisiert, z.B. für vdrshutdown.sh.


    Um das Ambilight unter Kodi ein- und auszuschalten, habe ich ein kleines Plugin geschrieben. Der Download ist hier möglich: ambilight3.zip. Ich habe hierzu das "hello world"-Plugin missbraucht. Das Plugin funktioniert mit CE 19.3, also Kodi Matrix mit Python3.

  • Hier packe ich noch ein paar Hinweise rein, die mir wichtig erscheinen:


    1.

    Wer das emuelec-Addon installieren möchte (aktuell ist die Version 3.7) sollte wie folgt vorgehen.

    Im zip-File muss in der Datei addon.xml die Python-Version von 2.1.0 auf 3.0.0 geändert werden.

    Weiterhin muss im toggle-Skrip die entsprechende Zeile so erweitert werden:

    Code
    1. while ps axg | grep -vw grep | grep -w kodi.bin > /dev/null || ps axg | grep -vw grep | grep -w emulationstation > /dev/null ; do sleep 2; done


    2.

    Ich habe bei meiner TBS5580 mit CI-Interface gemerkt, dass die Reihenfolge der Plugins wichtig ist, damit das CAM funktioniert.

    Ich muss das ddci2-Plugin vor softhdodroid laden. Bei mehreren CAMs kann in im chroot im Verzeichnis /var/cache/vdr in der Datei cam.data eingestellt werden, welches CAM für einen Sender zum entschlüsseln benutzt wird.


    3.

    Wenn man im hyperion.ng backend die Konfiguration ändert, kann es sein, dass das Ambilight unter VDR nicht mehr funktioniert, weil die Auflösung des Buffers nicht passt. In diesem Fall hilft das folgende Skript:

    Code
    1. sed -i 's/3839/1920/g' /storage/.kodi/userdata/addon_data/service.hyperion.ng/db/hyperion.db
    2. sed -i 's/2159/1080/g' /storage/.kodi/userdata/addon_data/service.hyperion.ng/db/hyperion.db


    4.

    Wenn man zusätzliche Kernel-Module benötigt, kann man die in der build-Umgebung von CE bauen. Ich habe das z.B. fpr HelmutB 's usb2ci-Treiber gemacht. Die package.mk-Datei sieht so aus:


    Im Unterverzeichnis sources muss dann der Source-Code abgelegt werden. Wichtig bei diesem Modul: Es werden 2 header-Dateien beim Übersetzen angemeckert (dvbdev.c und dvb_ringbuffer.h). Diese beiden Header müssen vom crazycat github genommen werden (auch innerhalb des CE Githubs zu finden).

  • jojo61 Das ist damit nicht mehr nötig. Ich habe oben schon ein edit gemacht. Und auch das Problem mit dem OSD im Ruhemodus ist erledigt und ich muss beim Zurückkommen von Kodi nicht mehr den Sender umschalten. Das läuft perfekt! Ich danke Dir.

  • zwei kleine Korrekturen zu dem tollen Howto:

    In Schritt 8 muss vor dem Entpacken des ubuntu.tar erstmal mit cd UBUNTU in das neu angelegte Verzeichnis gewechselt werden. Oder man gibt dem tar-Befehl einen Parameter für den Pfad mit, wo es entpackt werden soll.

    In Schritt 12 Ziffer 6 bitte noch das abschließende kleine Anführungszeichen (') am Ende ergänzen.

    ACT-620, Asrock B75 Pro3-M, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

  • Damit komme ich nicht zurecht (Schritt 13:)

    Quote

    Dafür in der chroot Umgebung eingeben: cd RETURN, und die Datei .bashrc editieren:

    Ist hier cd /root gemeint, um die .bashrc der (jetzt als chroot-Umgebung aktiven) Ubuntu-Installation zu ändern?


    Nachtrag: nein, das funktioniert so nicht. Dann hat man in der chroot-Umgebung nach dem reboot (Schritt 15) keine bash-Befehle mehr. Wenn man die export-Zeile wie in Schritt 12 händisch in der chroot-Umgebung eingibt, tritt das Problem hingegen nicht auf.

    ACT-620, Asrock B75 Pro3-M, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    The post was edited 1 time, last by Dr. Seltsam: ausprobiert und Erfahrung ergänzt ().

  • Schritt 14: Die resolv.conf ist bei mir ein Symlink:

    root@CoreELEC:/etc# ls -l resolv.conf

    lrwxrwxrwx 1 root root 39 Nov 22 2018 resolv.conf -> ../run/systemd/resolve/stub-resolv.conf


    Ich kann die Datei zwar mit nano aufrufen, aber beim Versuch, die Änderung abzuspeichern, kommt "Error writing resolv.conf: No such file or directory"


    Nachtrag: Habe den Symlink jetzt gelöscht und eine neue resolv.conf als Datei angelegt. Scheint zu funktionieren, denn ich habe in der chroot-Umgebung ein funktionierendes Netzwerk. Ein "rm resolv.conf" sollte in Schritte 14 vor dem edit noch ergänzt werden.

    ACT-620, Asrock B75 Pro3-M, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    The post was edited 2 times, last by Dr. Seltsam ().

  • Ich habe dort aber keine .bashrc:

    ACT-620, Asrock B75 Pro3-M, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

  • Quote

    Außerhalb der chroot, also unter CoreElec habe ichin .config/service.d habe ich eine Datei namens vdr.service angelegt, die so aussieht:

    hier ist wahrscheinlich .config/system.d gemeint?

    ACT-620, Asrock B75 Pro3-M, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

  • kannst Du bitte auch nochmal in die vdr.sh schauen:

    Quote

    chroot /storage/UBUNTU /home/rudi/runvdr &

    muss das nicht mit Zeilenumbruch?

    Code
    1. chroot /storage/UBUNTU
    2. /home/rudi/runvdr &

    ACT-620, Asrock B75 Pro3-M, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

  • o.k., danke.


    Die Datei looper liegt auch in storage/UBUNTU/vdr/ ?


    Was ist mit der im shutdown-script aufgeführten Datei loopershutdown ? wo liegt die, und welchen Inhalt hat sie?

    ACT-620, Asrock B75 Pro3-M, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

  • Ja. liegt sie. Alle looper-Dateien liegen in UBUNTU/vdr und haben denselben Inhalt:


    Shell-Script
    1. #!/bin/bash
    2. while true;
    3. do
    4. sleep 300
    5. done


    Sie beenden/starten halt nur verschiedene services. Analog zu dieser Datei gibt es dann in .config/service.d die Datei shutdown.service:




    Die Datei shutdown.sh (UBUNTU/vdr) sieht so aus:



    So kannst Du das mit allen services machen (root, shutdown, ambilight etc.). Ich habe einfach die ambilight-toggle-Datei missbraucht, um das halt -p aus VDR heraus hinzubekommen. Man kann nämlich keine halt oder reboot im chroot machen - so wie oben beschrieben dann aber schon.

  • wie müsste denn die shutdown.sh aussehen, wenn man kein ambilight hat?

    ACT-620, Asrock B75 Pro3-M, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

  • ich fürchte, ich habe komplett den Überblick verloren. Eigentlich habe ich alles so gemacht, wie Du geschrieben hast (bzw. wie ich es verstanden habe), aber nach einem reboot habe ich nun nur noch ein blinkendes CoreElec Logo, das auch beim Wechsel in die chroot nicht verschwindet.

    ACT-620, Asrock B75 Pro3-M, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.