Altes Paket auf neuem OS installieren?

brenner

Commander
Registriert
Apr. 2002
Beiträge
3.030
Moin,

ich habe einen alten Raspberry 3 laufen und dort ein compiliertes Programm laufen.


Jetzt habe ich einen neuen RapsberryPi 4 laufen mit aktuellen Raspberry Pi OS (64-bit).

Meine alte Installationsanleitung sagt aus das ich folgendes Paket brauche als Voraussetzung:
apt-get install libmysqlclient15off


Das gibt es aber anscheinend nicht mehr.

root@SRV-RPI-005:/usr/src# apt-get install libmysqlclient15off
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
E: Paket libmysqlclient15off kann nicht gefunden werden.



Gibt es eine Möglichkeit es auf dem neuen Pi OS trotzdem zum laufen zu kriegen?
 
du kannst dir die Lib ggf auch selbst kompilieren.

um welches kompiliertes programm geht es denn, was du eigentlich installieren möchtest? vll gibt's da alternativen für

Edit: evtl gibts auch ne neuere version

$ apt-cache search mysqlclient
default-libmysqlclient-dev - MySQL database development files (metapackage)
kbtin - tintin++ style text-based MUD client
libcrypt-mysql-perl - Perl module to emulate the MySQL PASSWORD() function
libglpk40 - linear programming kit with integer (MIP) support
python-mysqldb - Python interface to MySQL
python-mysqldb-dbg - Python interface to MySQL (debug extension)
python3-mysqldb - Python interface to MySQL
python3-mysqldb-dbg - Python interface to MySQL (debug extension)

vll passt eines von denen. auf meiner ubuntu x86 maschine gibt's bspw auch "libmysqlclient21"
 
Wenn es um MySQL geht, dann funktioniert sicher auch ein aktualisiertes Paket.
 
Prinzipiell gibts drei Möglichkeiten:
  • die betroffene Bibliothek selbst auf den Rechner kopieren, was wegen Folgeabhängigkeiten schwierig werden kann
  • das betroffene Programm statisch kompilieren, so das es gar nicht darauf angewiesen ist das die passenden Bibliotheken auf dem System sind
  • das betroffene Programm mit allen Abhängigkeiten in einen Container packen
Um welches Programm handelt es sich eigentlich? Vielleicht kann man bei Kenntnis da viel gezielter helfen.
 
Vielen Dank für eure Antworten. Dann versuche ich es so kurz wie möglich zu erklären.

  • An der Heizung hängt ein Interface (SystaInterface von Emsystech)
  • Das Interface ist via USB am Raspberry, die Kommunikation läuft aber Seriell
  • Auf dem Raspi ist ein Programm (welches ich gerade versuche wieder zum laufen zu bekommen) namens "siloader".
  • Wenn ich Siloader aufrufe (z.B. siloader -s) bekomme ich alle Werte meiner Heizung angezeigt, die Werte verarbeite ich dann mittels Script weiter damit sie in der Homeautomation landen.

Die Anleitung (pdf siehe Anhang) hat früher super funktioniert, aber das ist schon Jahre her. Das Linuxpaket gab es nie vom Hersteller selber sondern von eifrigen User.

In kurz sagt das Script, installiere ein paar Abhängigkeiten, kopiere alles nach /usr/scr und lasse ein MAKE laufen, fertig.






Aus dem Handbuch:
Es ist zudem möglich das grafische Auswertungsprogramm sigrafic auf einen anderen Rechner
als wo der Datenlogger siloader läuft zu installieren, da sigrafic die Daten ja vom SQL Server
abholt oder per IPC mit dem Datenlogger kommuniziert.
Wie man sieht, sind viele Varianten möglich, das muss jeder selber entscheiden.
Voraussetzung für den korrekten Start der Programme ist das Vorhandensein folgender
Libraries:
siloader MySQL Client Librarie
sigrafic MySQL Client Librarie
Grafische Librarie GD
PNG & JPG Librarie
Zum übersetzen der Programme sollte eine entsprechende Entwicklungsumgebung auf dem
Linux Rechner vorhanden sein, dazu zählen unter anderem der GNU C Compiler und
entsprechende Tools wie make usw.
Außer den Libraries die für den Betrieb der Programme nötig sind, werden auch die
Development Sourcen der Libraries benötigt.
Unter Debian Linux 5.0 (Etch) kann dies mit Hilfe des Packet Programms apt-get realisiert
werden.
Folgende Kommandos sollten als User 'root' ausgeführt werden um die entsprechenden Pakete
zu installieren:
apt-get install libmysqlclient15off
apt-get install libgd2-xpm
apt-get install libpng12-0
apt-get install libjpeg62

zusätzlich nötige Pakete in der Entwicklungsumgebung:
apt-get install libmysqlclient15-dev
apt-get install libgd2-xpm-dev
apt-get install libpng12-dev
apt-get install libjpeg62-dev


Ich brauche nur den siloader, ich will ja nur die Daten aus der Heizung angezeigt haben, nicht speichern, nicht dort visualisieren.
Ergänzung ()

Im zweiten makefile steht das fall es wichtig ist.


# __ _ _ ___ __ _
# | _ \ | () / ___| / _| |
# | |) | __ | |_ _ _ __ | (_ ___ | || |
# | _ < / _ \| | |/ _ \ '_ \ \___ \ / _ \| | _|
# | |) | () | | | / | | | __) | () | | | |
# |__/ \_/|||\|| || |__/ \/|| \|
#
# siloader -- SystaInterface Data Loader
#
# Makefile
#
CFLAGS =
CC = gcc
INC =
LDLIBS = -lmysqlclient

#
# Modules
#

SRC = siloader.c globals.c serial.c config.c lockfile.c database.c timer.c socket.c

OBJ = $(SRC:.c=.o)

#
# Rules
#

all: siloader

siloader: $(OBJ)
$(CC) $(OBJ) $(INC) $(LDLIBS) -o siloader

clean:
$(RM) *.o siloader
 

Anhänge

  • Systainterface_Data_Loader.pdf
    327,9 KB · Aufrufe: 253
Zuletzt bearbeitet:
Es ist nicht unwahrscheinlich, dass das auch gegen eine neuere Version baut. Ansonsten stehen nach wie vor alle genannten Wege zur Verfügung.
 
Aus dem makefile geht keine Abhängigkeit zu genau der von Dir (Deiner Installationsanleitung) genannten Version hervor (wie Du wohl durch die fette Schrift in der LDLIBS-Zeile selber festgestellt haben solltest).

Probier doch einfach, ob das kompilieren funktioniert, nachdem Du default-libmysqlclient-dev einmal installiert hast (das zugehörige Metapackage).
Alternativ sollte auch libmariadbclient-dev Aussicht auf Erfolg haben; s. dazu apt show default-libmysqlclient-dev.
 
Danke. die libmariadbclient-dev scheint wohl veraltet zu sein. die default-libmysqlclient-dev ging.

mit dem apt show... weiß ich nicht was ich mit der Ausgabe anfangen soll.


Wenn ich jetzt ein make mache sieht es so aus

root@SRV-RPI-005:/usr/src# make
-------------------------------------------------------
siloader
-------------------------------------------------------
make -C ./siloader
make[1]: Verzeichnis „/usr/src/siloader“ wird betreten
gcc -c -o siloader.o siloader.c
gcc -c -o globals.o globals.c
globals.c: In function ‘exec_program’:
globals.c:1374:9: warning: implicit declaration of function ‘waitpid’ [-Wimplicit-function-declaration]
1374 | if (waitpid (pid, &status, 0) != pid) status = -1;
| ^~~~~~~
gcc -c -o serial.o serial.c
gcc -c -o config.o config.c
gcc -c -o lockfile.o lockfile.c
gcc -c -o database.o database.c
gcc -c -o timer.o timer.c
gcc -c -o socket.o socket.c
gcc siloader.o globals.o serial.o config.o lockfile.o database.o timer.o socket.o -lmysqlclient -o siloader
make[1]: Verzeichnis „/usr/src/siloader“ wird verlassen
root@SRV-RPI-005:/usr/src#
Ergänzung ()

###








Ich habe es trotzdem mal versucht aufzurufen. Es funktioniert zwar final nicht, aber wenn es soweit kommt, ist eher eher gut?

root@SRV-RPI-005:/# ./usr/src/siloader/siloader
--------------------------------------------------------------------------
SystaInterface Data Loader

siloader v0.1,
--------------------------------------------------------------------------
Usage :

siloader -s Show SystaInterface Overview & Info (also in daemonize mode)
siloader -x Fetch SystaInterface Data into DB and/or Exportfile
siloader -d Start the program in daemonize mode
siloader -k Stop the program if in daemonize mode
siloader -r Store all Data immediately (only in daemonize mode)
siloader -u Execute update program immediately (only in daemonize mode)
siloader -c Reload the config file (only in daemonize mode)
siloader -f additional parameter to set config file
(e.g. -f /home/siloader/siloader.conf)
siloader -? Display this help

root@SRV-RPI-005:/# ./usr/src/siloader/siloader -f /etc/siloader.conf -s
Error - Timeout !

root@SRV-RPI-005:/#
 
Zuletzt bearbeitet:
Das klingt eher nach einer Inkompatibilität bzgl. der waitpid()-Funktion; hast Du schon Doku unter der angegebenen URL gesucht/gelesen? Du hast eine E-Mail-Adresse in der Ausgabe (bitte den Post editieren!!) - darunter ist der Autor erreichbar, der weiss bestimmt mehr zu dem Problem.
 
hab es anonymisiert. Der Hersteller bietet das Gerät nicht mehr an und hat nur Windows Software entwicklet.

Der "Siloader" Autor hat nicht geantwortet.
 
Danke für den Edit.
Schau mal in der globals.c, ob die richtigen Header für waitpid() gesetzt sind:
C:
#include <sys/types.h>
#include <sys/wait.h>
Falls nein, probier mal zu kompilieren, nachdem Du diese #include(s) eingefügt hast.
 
  • Gefällt mir
Reaktionen: andy_m4
Danke, auch wenn ich quasi keine Ahnung habe von dem was du schreibt.

Ganz unten in der globals.c findet sich ein waitpid Eintrag

/* ------------------------------------------------------------------------------ */
/* Execute a external program */
/* ------------------------------------------------------------------------------ */

int exec_program (const char *command)
{
int status;
pid_t pid;

if ((pid = fork()) == -1) return(-1); // failed to fork
if (pid == 0)
{
// This is the child process. Execute the shell command
execl (SHELL, SHELL, "-c", command, NULL);
_exit (1);
}
else if (pid < 0)
status = -1;
else
// This is the parent process. Wait for the child to complete
if (waitpid (pid, &status, 0) != pid) status = -1;

return status;
}
Ergänzung ()

###

mit deinen includes gibt es keine Fehlermeldung mehr:

root@SRV-RPI-005:/usr/src# make
-------------------------------------------------------
siloader
-------------------------------------------------------
make -C ./siloader
make[1]: Verzeichnis „/usr/src/siloader“ wird betreten
gcc -c -o siloader.o siloader.c
gcc -c -o globals.o globals.c
gcc -c -o serial.o serial.c
gcc -c -o config.o config.c
gcc -c -o lockfile.o lockfile.c
gcc -c -o database.o database.c
gcc -c -o timer.o timer.c
gcc -c -o socket.o socket.c
gcc siloader.o globals.o serial.o config.o lockfile.o database.o timer.o socket.o -lmysqlclient -o siloader
make[1]: Verzeichnis „/usr/src/siloader“ wird verlassen
root@SRV-RPI-005:/usr/src#
 
Ja, das hatte ich verstanden. Damit die waitpid()-Funktion ausgeführt werden kann, muss die richtige Bibliothek dafür eingebunden sein; dafür müssen die von mir genannten Includes am Anfang der globals.c eingebunden sein (Quelle).
Einfach ein Backup der Datei machen, die beiden Zeilen an den Anfang der globals.c pasten und nochmal make, bitte.

Edit: Mid air collision... Und ist der Fehler bei Ausführung auch weg?
 
Leider nein, ich war aber kurzzeitig sehr großer Hoffnung...

root@SRV-RPI-005:/# ../usr/src/siloader/siloader -f /etc/siloader.conf -s
Error - Timeout !

root@SRV-RPI-005:/#
 
Mal sehr spekulativ:
Hast Du denn eine MySQL-Datenbank auf dem konfigurierten Rechner laufen? Keine Firewall dazwischen, die die Kommunikation zwischen siloader und der DB behindert? Woher kommt denn wohl der Timeout (falls nicht vom Versuch, auf die DB zuzugreifen)? Muss gestehen, hab nicht alle von Dir gepostete Doku gelesen...
 
Berechtigte Frage, aber habe ich tatsächlich nicht ,also eine mysql db laufen.



In der siloader.c steht zum Error folgendes:
/* ------------------------------------------------------------------------------ */
/* Display that we have a communication or data cache or DB error */
/* ------------------------------------------------------------------------------ */

void error_com (int error)
{
if (error == RS_TIMEOUT) fprintf (stderr,"Error - Timeout !\n\n");
if (error == RS_CHECKSUM) fprintf (stderr,"Error - Checksum !\n\n");
if (error == DC_FILE || error == DC_MEM) fprintf (stderr,"Error - Data Cache!\n\n");
if (error == DB_STORE_ERR) fprintf (stderr,"Error - DB store !\n\n");
}


In der siloader.conf steht zum Thema DB auch folgendes

#---------------------------------------------------------------------
#
# Definitions for Database connection (MySql)
#
# (if no DB is available comment it out)
#
#---------------------------------------------------------------------
#dbserver localhost
#dbname siloader
#dbuser siloader
#dbpass siloader


Uns dazu noch mein Altsystem auf dem 3 Mysql liegen, sie aber nie genutzt wurden. Ich denke daher das eine DB Installation für den reinen "siloader Betrieb" nicht notwendig ist.
 
Zumindest wissen wir nun, woher die Fehlermeldung kommt.
Demzufolge wäre das sogar ein gutes Zeichen, da das Kompilieren anscheinend funktioniert hat.
Jetzt müsstest Du Dich wohl einlesen, wie Du den Betrieb des Programms ohne DB (und auch ohne Fehlermeldung) konfigurieren kannst.

Ich bastel gerne selber mit dem Raspi (wenn ich Zeit habe), mache bislang keine Home Automation, finde das Thema aber sehr interessant und fänd es daher super, wenn Du Dein Ziel erreichst und das System an's Laufen kriegst.
 
Gute Nachricht, der Entwickler des Linuxpaketes hat unerwartet gerade geantwortet. Es besteht Hoffnung :-)


Ja, Raspi´s machen schon Spaß. Ich hätte zwar auch alle anderen Möglichkeiten, aber ich mag die Dinger. Anbei ein Screenshot wie die Visualisierung der Heizung wieder aussehen wird wenn alles wieder funktioniert oder ich den alten Pi notfalls weiter betreiben muss:

1649792222155.png
 
  • Gefällt mir
Reaktionen: Phrasendreher
So, um das Thema hier zu beenden.

Der Entwickler war fleissig und hat das Paket für 64 Bit Umgebung angepasst und noch diverse Programmbestandteile angepasst. Es läuft nun wieder wie eine 1 auf dem neuen Pi.

:-)
 
  • Gefällt mir
Reaktionen: Phrasendreher
Zurück
Oben