[solved] skindesigner: skins können nur einmalig installiert und benutzt werden

  • Im aktuellen Skindesigner (git von heute, aber auch in älteren Versionen kein Erfolg) habe ich folgendes Problem:
    Nach Installation eines skins wird dieser per git gecloned, installiert und ist auswählbar in Setup->OSD.


    Nach einem Neustart ist diese Auswahl nicht mehr möglich, der skin fehlt. Auch metrixhd steht übrigens nicht zur Auswahl. Eine Neuinstallation scheitert daran, daß die Dateien noch im Verzeichnis liegen:

    Code
    vdr skindesigner # cat /tmp/gitclone_shady_1460495573.out
    fatal: Zielpfad '/etc/vdr/etc/plugins/skindesigner/installerskins/shady' existiert bereits und ist kein leeres Verzeichnis.


    Lösche ich dieses Verzeichnis, wird es genau so wieder angelegt und ich kann den Skin wieder genau 1x benutzen.


    Berechtigungen passen, VDR läuft unter User vdr:


    Im log sieht das dann so aus:


    Wo kann ich noch schauen?


    Christian

  • Moin,


    auf den ersten Blick fällt mir das auf:


    Code
    /etc/vdr/etc/plugins/skindesigner/


    Ist dieser Pfad so beabsichtigt? Oder steht da ggf. irgendwie ein Symlink schief?


    Ciao Louis

  • Der Pfad passt so. Das hatte ich mal irgendwann vor vielen, vielen Jahren so installiert und nie behoben...
    Optisch unschön, aber in sich stimmig.



    Mir scheint mein Problem identisch zu diesem hier zu sein.
    Nur, daß ich auf ein komplett neues Aufsetzen wenig Lust habe. Das kommt ja einer Kapitulation gleich...


    Christian

  • Hm, keine Ahnung...laut Log findet er bei dir die Skins nicht, obwohl er eigentlich die korrekten Pfade benutzt. Hab ich jetzt erst mal auch keine Idee mehr.


    Ciao Louis

  • Ich habe noch ein wenig debug eingebaut.



    Die Verzeichnisse werden korrekt gefunden, aber anscheinend nicht als 'passend' erkannt.


    Was könnte ich als debug noch mit reinnehmen?


    Christian

  • Hi Hopsi,


    ok, bei dir werden die Verzeichnisse mit dem als Typ "0" erkannt. Ich benutze ja das Member "unsigned char d_type" aus dem struct dirent, um Verzeichnisse zu erkennen. Ich Vergleiche dann den type gegen "DT_DIR" (die passende Stelle im Code hast du ja offensichtlich schon gefunden).


    Was für ein OS und was für ein Filesystem genau setzt du eigentlich ein? Ich meine mich zu erinnern, dass das auf einem Derivat schonmal schwierigkeiten gemacht hat (war es Fedora?). Du könntest mal den Wert von DT_DIR ausgeben lassen, der ist wohl nicht 0. Dann ist klar, dass das bei dir nicht funktioniert.


    Du könntest mal das "|| (dirEntryType != DT_DIR && dirEntryType != DT_LNK)" am Ende der Zeile 102 entfernen, dann wird es wohl funktionieren. Dann darf allerdings kein Blödsinn in deinen Skin Verzeichnissen liegen... ;) Wäre schon interessant herauszufinden, woran das genau liegt.


    Ciao Louis

  • Hi,


    ok, könnte wirklich mit xfs und der fehlenden Unterstützung für d_type zusammenhängen. Das wäre dann ein bisschen blöd, da müsste ich mir dann eine andere Variante einfallen lassen, um Verzeichnisse zuverlässig zu erkennen ;)


    Haste mal meinen Workaround getestet? Damit sollte es zumindest mal funktionieren...


    Ciao Louis

  • Mache es wie der vdr:

    Code
    bool DirectoryOk(const char *DirName, bool LogErrors)
    {
      struct stat ds;
      if (stat(DirName, &ds) == 0) {
         if (S_ISDIR(ds.st_mode)) {
    ...


    https://projects.vdr-developer…vdr.git/tree/tools.c#n449


    Lars.

  • ok, könnte wirklich mit xfs und der fehlenden Unterstützung für d_type zusammenhängen. Das wäre dann ein bisschen blöd, da müsste ich mir dann eine andere Variante einfallen lassen, um Verzeichnisse zuverlässig zu erkennen ;)


    Haste mal meinen Workaround getestet? Damit sollte es zumindest mal funktionieren...


    Das war's vermutlich:


    Die Funktion sieht momentan so aus:

  • Hi,


    ok, xfs unterstützt d_type wirklich nicht :( Mit dem Fix würde Müll herauskommen, falls in einem der beiden Skin Verzeichnisse noch irgendwelche Dateien rumliegen würden...


    Ich muss da wohl auf "stat" zurückgreifen, um herauszufinden, ob es sich um ein Verzeichnis handelt. Das scheint auch mit xfs zu funktionieren...werde ich demnächst mal anpassen.


    Ciao Louis

  • Danke, teste ich heute Abend. Kann grad nicht an die Kiste.


    Müsste nicht auch in extensions/skinrepo.c das DT_DIR entsprechend umgangen werden? Weiß aber nicht, wann das aufgerufen wird, hatte wohl noch keine Probleme damit...
    Braucht's das in der Abfrage in config.c eigentlich überhaupt noch, ist das nicht mit DirectoryOk doppelt gemoppelt?


    Christian

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!