LCD4LINUX x86 Package

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.057
Punkte für Reaktionen
3.872
Punkte
488
Hallo @DKeppi
mit den neuen Security-Beschränkungen haben wohl viele Paketierer Probleme. Ich durfte mich kürzlich mit einem Paket herumschlagen, das eigentlich nur ein Kernel-Modul für meinen USB-2.5GBit-NIC laden sollte (s. hier). Das geht natürlich nur als root.

Für seine DSM7-Version hat der Entwickler (bb-qq) extra ein kleines C-Programm (spk_su.c) geschrieben, das wohl die conf/privilege-Datei im nachhinein umschreibt, wenn ich den Code richtig verstehe. Schau dir das Paket mal an. Vielleicht kannst du ja Teile davon nutzen.
 
  • Like
Reaktionen: DKeppi

DKeppi

Benutzer
Mitglied seit
01. Apr 2011
Beiträge
3.222
Punkte für Reaktionen
76
Punkte
114
Danke @Benares, werd mir das mal ansehen :)
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.057
Punkte für Reaktionen
3.872
Punkte
488
Ich finde aber, dass bb-qq das zu umständlich macht. Wenn man sich die Packages von Synology ansieht, nutzen die oft einen ctrl-script-Abschnitt in der conf/privilege, der wohl bewirkt, dass die genannten Scripte als root ausgeführt werden.

Beispiel FileStation:
Code:
{
        "defaults":{
                "run-as": "package"
        },
...
        "ctrl-script":[{
                "action": "postinst",
                "run-as": "root"
        }, {
                "action": "preinst",
                "run-as": "root"
        }, {
                "action": "postuninst",
                "run-as": "root"
        }, {
                "action": "postupgrade",
                "run-as": "root"
        }, {
                "action": "preupgrade",
                "run-as": "root"
        }, {
                "action": "start",
                "run-as": "root"
        }, {
                "action": "stop",
                "run-as": "root"
        }, {
                "action": "status",
                "run-as": "root"
        }],
...
Dass Pakete nicht mehr als root "laufen" dürfen (Abschnitt defaults) scheint bei DSM7 ja nun Pflicht zu sein.
Aber damit müsste man Teile, die root-Rechte brauchen, auch z.B. in das postinst-Script oder in das start-stop-status-Script packen können.
 
  • Like
Reaktionen: DKeppi

DKeppi

Benutzer
Mitglied seit
01. Apr 2011
Beiträge
3.222
Punkte für Reaktionen
76
Punkte
114
Hätte es mal mit dem ctrl-script versucht, bringt leider dann wieder folgenden Fehler:

1629697355528.png
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.057
Punkte für Reaktionen
3.872
Punkte
488
Ich dachte, das passiert nur, wenn man im defaults-Abschnitt ein "run-as":"root" hat. Deshalb ja die ganzen Workarounds.
bb-qq hat nur den defaults-Abschnitt mit "package" und schreibt das später mit seinem spk_su-Programm auf "root" um.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.396
Punkte
234
Um es erst einmal lauffähig zu bekommen, könntest du ein Installskript schreiben, welches der User als root einmalig ausführen muss (wie es z.B. bei Autorun ist). Ich kann mir kaum vorstellen, dass es uns gelingt Automatismen zum Rooten von SPKs zu bauen, die Synology aufgrund der DSM7-Philosophie in Zukunft nicht unterbinden wird. Es wäre natürlich umso schöner, wenn sich doch eine Möglichkeit fände.
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.057
Punkte für Reaktionen
3.872
Punkte
488
So hat es bb-qq bei seinem Paket ja gemacht. Er hat wohl auch keine andere, bessere Lösung gefunden:
Note:
  • The installation will fail the first time. After that, run the following command from the SSH terminal:
    sudo install -m 4755 -o root -D /var/packages/r8152/target/r8152/spk_su /opt/sbin/spk_su
Ich dachte, das ginge auch einfacher, als mir die privilege/script-Beispiele aus den Standard-Synology-Paketen mal angesehen hatte.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.569
Punkte für Reaktionen
1.396
Punkte
234
Achso, dann hatte ich das falsch verstanden.

Soweit ich weiß, erlaubt Synology unter bestimmten Umständen den Rootzugriff (muss man prüfen lassen). Ich gehe aber davon aus, dass diese genehmigten SPKs nur über deren Server ausgeliefert werden, was ja deren SPKs von vornherein einschließt.

Ich dachte, das ginge auch einfacher, als mir die privilege/script-Beispiele aus den Standard-Synology-Paketen mal angesehen hatte.
Hast du es inzwischen geschafft, DSM7-SPK von Synology entpacken zu lassen?
 
Zuletzt bearbeitet:

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.057
Punkte für Reaktionen
3.872
Punkte
488
OT: Nein. Mit 7Zip geht das bei den DSM7-Paketen von Synology nicht mehr. Bei den selbst erstellten DSM7-Paketen geht das aber noch.
 

DKeppi

Benutzer
Mitglied seit
01. Apr 2011
Beiträge
3.222
Punkte für Reaktionen
76
Punkte
114
Danke für eure Hilfe, dann wird das wohl nichts mit dem autom. Symlink erstellen aus dem Paket.

Lege ich nach der Installation des Pakets via ssh die 9 Symlinks an, dann bekomme ich trotzdem beim Start des Pakets noch folgenden Fehler:

security error: owner and/or group of '/usr/local/etc/lcd4linux.conf' don't match
Error reading configuration. Exit!

Die Datei wird über das conf/privilege mit Rechten und User/Gruppe ausgestattet und die sind danach auch identisch

Auszug aus der conf/privilege:
Code:
"tool": [{
        "relpath": "etc/lcd4linux.conf",
        "user": "package",
        "group": "package",
        "permission": "0700"
        }]


Ergebnis:
Code:
-rwx------ 1 lcd4linux lcd4linux 8777 Aug  2  2020 lcd4linux.conf
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.057
Punkte für Reaktionen
3.872
Punkte
488
Und was hast du momentan in der privilege-Datei bei "start" drin? Auch "package"? Oder nur den defaults-Abschnitt mit "package"?
Ich vermute, der tool-Abschnitt steuert nur die Dateieinstellungen bei der Installation.
 

DKeppi

Benutzer
Mitglied seit
01. Apr 2011
Beiträge
3.222
Punkte für Reaktionen
76
Punkte
114
Sonst habe ich in der /conf/privilege nur das hier drinnen:

Code:
{
  "defaults": {
    "run-as": "package"
  }

Habe ein start-stop-status Script für den Start von lcd4linux was folgendes ausführt:

Code:
/usr/local/bin/lcd4linux -f /usr/local/etc/lcd4linux.conf -vv
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.057
Punkte für Reaktionen
3.872
Punkte
488
und das start-stop-status-Script und auch /usr/local/bin/lcd4linux gehört alles auch dem/r Benutzer/Gruppe lcd4linux ?
Ich denke, das muss alles zusammenpassen, dass DSM nicht mault.
 

DKeppi

Benutzer
Mitglied seit
01. Apr 2011
Beiträge
3.222
Punkte für Reaktionen
76
Punkte
114
und das start-stop-status-Script und auch /usr/local/bin/lcd4linux gehört alles auch dem/r Benutzer/Gruppe lcd4linux ?
Ich denke, das muss alles zusammenpassen, dass DSM nicht mault.
Die Skripte hatten root:root, hab das mal geändert aber auch das ändert nichts...
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.057
Punkte für Reaktionen
3.872
Punkte
488
Also ich hab's mal installiert, und es startet auch, wenn ich die Links anlege und die /var/packages/lcd4linux/target/etc/lcd4linux.conf wieder auf root:root setze.
Code:
...
lcd4linux.c: going background...

Nur beendet sich der Prozess wieder, vermutlich, weil der kein Display findet.
/var/log/messages:
Code:
2021-08-23T15:24:00+02:00 DS415 LCD4Linux[31073]: dpf: cannot open dpf device usb0
2021-08-23T15:24:00+02:00 DS415 LCD4Linux[31073]: Error initializing driver DPF: Exit!

Die Security-Meldung kommt übrigens nicht vom DSM, sondern von lcd4linux selbst:
Code:
2021-08-23T15:20:00+02:00 DS415 LCD4Linux[19898]: security error: owner and/or group of '/usr/local/etc/lcd4linux.conf' don't match
2021-08-23T15:20:00+02:00 DS415 LCD4Linux[19898]: Error reading configuration. Exit!

Eigentlich müsstest du nur noch einen Weg finden, wie man die Links über die postinst- und postuninst-Scripte anlegt/löscht. Hast du mal den vorgeschlagenen Weg über den ctrl-script-Abschnitt probiert?
 

DKeppi

Benutzer
Mitglied seit
01. Apr 2011
Beiträge
3.222
Punkte für Reaktionen
76
Punkte
114
Kann ich bestätigen, Symlinks anlegen und manuelle Anpassung der conf auf root:root und dann gehts! :)

Das mit dem ctrl-script hab ich probiert.
Sobald im privilege was mit root vorkommt, kommt der Fehler aus dem Post
https://www.synology-forum.de/threads/lcd4linux-x86-package.64077/post-959055

Das conf nur auf 0700 setzen (und somit User/Group auf root belassen) im privilege geht auch nicht, ich brauche user&group dazu.
Gebe ich hier aber root an, bringt er wieder obigen Fehler :( 0700 muss aber sein, da sonst lcd4linux wieder meckert.

Happert irgendwie an den fehlenden root Berechtigungen und den Parametern der Conf...
 
Zuletzt bearbeitet:

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.057
Punkte für Reaktionen
3.872
Punkte
488
Also ....

Ich hab jetzt nochmal dein Paket installiert, ein Display angeschlossen (musste ich erst suchen), die .conf wieder auf root:root gesetzt und das privilege und das start-stop-status-Script etwas angepasst.

conf/privilege:
Code:
{
  "defaults": {
    "run-as": "package"
  },
  "ctrl-script":[{
                "action": "start",
                "run-as": "root"
        }, {
                "action": "stop",
                "run-as": "root"
        }, {
                "action": "status",
                "run-as": "root"
        }],
  "tool": [{
                "relpath": "etc/lcd4linux.conf",
                "user": "package",
                "group": "package",
                "permission": "0700"
                }]
}
Mit den crtl-script-Einträgen in der privilege klappt das Erstellen der SymLinks dann auch, ohne nicht, da dazu die Rechte fehlen.
Nimm den "tool"-Teil besser raus, oder setze auf root:root und permission 0600

Dann hab ich das start-stop-status-Script angepasst, so dass die Symlinks dort gesetzt bzw. entfernt werden
Code:
#!/bin/sh

case $1 in
start)
        ln -s /var/packages/lcd4linux/target/lib/libusb-0.1.so.4.4.4 /lib32/libusb-0.1.so.4
        ln -s /var/packages/lcd4linux/target/lib/libgd.so.2 /lib32/libgd.so.2
        ln -s /var/packages/lcd4linux/target/lib/libsqlite3.so.0 /lib32/libsqlite3.so.0
        ln -s /var/packages/lcd4linux/target/lib/libjpeg.so.62 /lib32/libjpeg.so.62
        ln -s /var/packages/lcd4linux/target/lib/libfontconfig.so.1 /lib32/libfontconfig.so.1
        ln -s /var/packages/lcd4linux/target/lib/libfreetype.so.6 /lib32/libfreetype.so.6
        ln -s /var/packages/lcd4linux/target/lib/libpng12.so.0 /lib32/libpng12.so.0
        ln -s /var/packages/lcd4linux/target/lib/libz.so.1 /lib32/libz.so.1
        ln -s /var/packages/lcd4linux/target/lib/libexpat.so.1 /lib32/libexpat.so.1

        /usr/local/bin/lcd4linux -f /usr/local/etc/lcd4linux.conf -vv
        exit 0
;;
stop)
        killall lcd4linux

        rm -f /lib32/libusb-0.1.so.4
        rm -f /lib32/libgd.so.2
        rm -f /lib32/libsqlite3.so.0
        rm -f /lib32/libjpeg.so.62
        rm -f /lib32/libfontconfig.so.1
        rm -f /lib32/libfreetype.so.6
        rm -f /lib32/libpng12.so.0
        rm -f /lib32/libz.so.1
        rm -f /lib32/libexpat.so.1
        exit 0
;;
status)
        PROCESS_NUM=$(ps -ef | grep "lcd4linux" | grep -v "grep" | wc -l)
        if [ $PROCESS_NUM -ge 1 ];
        then
                exit 0
        else
                exit 1
        fi
;;
esac
Beachte auch den ergänzten status-Teil, damit auch die Rückmeldung zum DSM klappt. Alternativ könnte man das auch am Vorhandensein von /var/run/lcd4linux.pid festmachen, aber das überlasse ich dir.

Richtig "schön" ist es noch nicht, denn die SymLinks gehören da m.E. nicht rein, aber damit klappt es soweit.
 
Zuletzt bearbeitet:

DKeppi

Benutzer
Mitglied seit
01. Apr 2011
Beiträge
3.222
Punkte für Reaktionen
76
Punkte
114
Hast du das alles nach der Installation angepasst oder?

Hätte deine Änderungen ins spk übernommen, den tool Teil aus der privilege entfernt und setze root:root bzw. 0600 über das Startscript
Selbes Problem wie vorher bei der Installation, durch das run-as: root kann man es nicht installieren...

Ohne Titel.jpeg
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.057
Punkte für Reaktionen
3.872
Punkte
488
Klar, hab ich alles erst nach der Installation angepasst. Das spk zu befummeln war mir zu aufwendig.
Ich frag mich, wie Synology selbst das macht. Ich hab bisher noch kein Paket von denen ohne den ctrl-script-Abschnitt gefunden.
Und die originalen spk-Dateien von denen lassen sich leider nicht mehr mit 7Zip öffnen.
 

DKeppi

Benutzer
Mitglied seit
01. Apr 2011
Beiträge
3.222
Punkte für Reaktionen
76
Punkte
114
Ja das frage ich mich auch :(
Danke für deine Hilfe @Benares
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat