Device::SerialPort auf Synology NAS installieren

Begonnen von freetz, 27 Dezember 2019, 13:14:25

Vorheriges Thema - Nächstes Thema

freetz

Hallo zusammen,

nachdem ich es bisher zwar geschafft habe, über die Synology Toolchain einige Pakete (wie z.B. "make") zu erstellen, mit denen man dann zumindest einfache Perl-Module über CPAN installieren kann, waren komplexere Module, die einen C-Compiler voraussetzen, wie z.B. Device::SerialPort, bisher nicht möglich, da es auf der Synology keinen gcc gibt und ich auch nirgendwo die Möglichkeit gefunden habe, diesen über die Synology Toolchain zu "crosscompilen".

Es ist leider auch nicht so einfach möglich, ein Perl-Modul auf einem Rechner zu kompilieren und dann auf die NAS hinüberzukopieren, denn bei Perl müssen nicht nur die Versionen übereinstimmen, sondern auch die relevanten Optionen, mit denen Perl selber kompiliert wurde. Hier muss man auf der Synology die entsprechenden Optionen mittels "perl -V" mit denen auf dem System vergleichen, auf denen man das Perl-Modul erstellt.

Abhilfe schafft hier "perlbrew", mit dem man sich ohne große Admin-Rechte verschiedene Perl-Versionen in seinem Home-Verzeichnis erstellen kann:
https://perlbrew.pl/

Nun reichte es leider nicht, einfach nur mit
perlbrew install 5.24.0
die gleiche Perl-Version wie auf meiner DS218+ zu installieren, denn nach längerer Suche hatte ich feststellen müssen, dass die Option "USE_ITHREADS" nicht in perl -V enthalten war, also dass kein Thread-Support eingebaut war. Auch eine Installation mittels der Option "--both threads" hatte nicht den gewünschten Erfolg gebracht.

Erst als ich mit perlbrew install 5.24.0 -Dusethreads explizit Threads habe einkompilieren lassen, konnte ich die dann über perl -MCPAN -e 'install Device::SerialPort' installierten Verzeichnisse auf die DS218 kopieren und nun läuft alles prima.
Wichtig ist dabei allerdings vermutlich, dass das Quell- und Zielsystem die gleiche Prozessorarchitektur verwenden. Bei den neueren DiskStations, die eine Intel-64-Bit-Architektur verwenden, ist das aber kein Problem.

Um zu schauen, wohin man die erstellten Verzeichnisse kopieren muss, braucht man auf der DS nur den Befehl perl -e "use Device::Serial" einzugeben. Wenn das Modul nicht installiert ist, werden in der nachfolgenden Fehlermeldung die möglichen Verzeichnisse angezeigt. Es empfiehlt sich, das "site_perl" Verzeichnis zu verwenden.

Für alle, die eine DS218+ oder wo ebenfalls eine Intel-64-Bit-Architektur mit Perl 5.24.0 werkelt, hänge ich das fertige Modul einmal an.

Viel Erfolg,

F.
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/bsb_lan

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

freetz

Schön, wenn man auf der Suche nach einer Problemlösung nach Jahren über den eigenen Post stolpert ;)...

Mit dem Umstieg auf DSM 7 ist die obige Anleitung in Teilen obsolet, in anderen Punkten gibt es aber neue Probleme:
DSM 7.0.1 bringt nun Perl 5.28.3 mit - das hat USE_ITHREADS einkompiliert, so dass man nun einfach
perlbrew install 5.28.3
laufen lassen könnte.

Könnte - denn leider schlägt (zumindest auf meinem Mac) die Installation wegen nicht bestandener Tests fehl. Dies scheint aber kein größeres Problem zu sein, denn man kann (relativ zum Verzeichnis, in dem man perlbrew ausgeführt hat) die Datei
./perl5/perlbrew/build/perl-5.28.3/perl-5.28.3/t/porting/libperl.t
und ändert dort in Zeile 577 (derzeit zumindest) diese Zeile:
if (/nm: no name list/ && $^O eq 'darwin') {
in diese hier:
if ((/nm: no name list/ || /^no symbols$/) && $^O eq 'darwin') {
Danach muss man in ./perl5/perlbrew/perl-5.28.3 noch
make; make test; make install
ausführen, und dann wie oben beschrieben mit der Installation der gewünschten Module weiter fortfahren.
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/bsb_lan

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan