Speicherzugriffsfehler HomeMatic BidCoS

Ja, so würde ich es machen.

Gibt es feste Zeiten wann die nightlys bei github gebaut werden?
Teilweise sind die 2522er schon da, teilweise sind noch die 2519 da :confused:

Die werden auf 2 Servern in drei Prozessen (Raspbian, Debian und Ubuntu) reihum kompiliert. Es gab einen Fehler in einem der letzten Commits, welcher das Kompilieren mit GCC < 7 verhindert hat, daher gibt es ein paar Lücken. Jetzt funktioniert aber alles wieder.

Nachtrag: Es wird aus verschiedenen Gründen nicht kreuzkompiliert, daher dauert das Kompilieren für ARM sehr lange (~ 8 Stunden).

Kurzes Status-Update:
Auch nach dem Update auf die nightly (als sie nun endlich mal da war :smiley: ) ist immer noch das gleiche Problem.

02/13/19 08:24:29.960 Info: Calling init methods on server "http://127.0.0.1".
02/13/19 08:24:29.983 RPC Server (Port 2001): Debug: Connection to client number 12 closed.
02/13/19 08:24:29.983 RPC Server (Port 2001): Debug: Connection to client number 12 closed (1).
02/13/19 08:24:30.460 RPC client: Debug: Calling RPC method "system.listMethods" on server 127.0.0.1.
02/13/19 08:24:30.460 RPC client: Parameters:
02/13/19 08:24:30.460 Debug: Calling getFileDescriptor...
02/13/19 08:24:30.461 Debug: Connecting to host 127.0.0.1 on port 43709...
02/13/19 08:24:30.462 Signal 11 received.
02/13/19 08:24:30.462 Signal 11 received.
Speicherzugriffsfehler (Speicherabzug geschrieben)
root@Terminus:/home/dietpi# homegear -v
Homegear version 0.8.0-2524
Copyright (c) 2013-2019 Homegear GmbH

Git commit SHA of libhomegear-base: -
Git branch of libhomegear-base:     -
Git commit SHA of Homegear:         -
Git branch of Homegear:             -

PHP (License: PHP License):
This product includes PHP software, freely available from <http://www.php.net/software/>
Copyright (c) 1999-2019 The PHP Group. All rights reserved.

root@Terminus:/home/dietpi#

Ich werde mich dann bei Gelegenheit mal ans compilieren machen. Die oben genannten 8h Compilierzeit machen da echt Mut… :smiley:

@sathya Gibt es wie InstallNightly.sh auch nen Script um alles wieder vom System zu entfernen, also “frisch” anzufangen?

UND sehe ich das richtig, dass das manuelle Compilieren dem fertigen Docker-Container vorzuziehen ist., weil der Docker das Bibliotheksproblem nicht lösen würde?

Mfg
Frank

Hallo @FrankW

das Skript installiert nur Debian-Pakete. Diese kannst du mit dem Paketmanager einfach wieder deinstallieren, also:

apt remove --purge libhomegear-base libhomegear-node libhomegear-ipc

Da alles von libhomegear-base, libhomegear-node und libhomegear-ipc abhängt, werden alle Homegear-Pakete deinstalliert.

Viele Grüße

Sathya

1 Like

Hallo @FrankW,

ich schreibe nach den PMs mal hier weiter. Ich habe Homegear jetzt unter DietPi auf dem Pine A64 am Laufen. Zunächst einmal läuft es stabil, ich werde die Tage aber noch einmal HomeAssistant darauf installieren.

Mir ist noch eine Sache in deinem Dump aufgefallen:

#3  0x007b3f6a in Homegear::Rpc::RpcClient::sendRequest (this=0x0, 
    this@entry=0x156ef18, server=server@entry=0x83c03090, 
    data=std::vector of length 100, capacity 184 = {...}, 
    responseData=<error reading variable: Cannot access memory at address 0x4>, insertHeader=insertHeader@entry=true, retry=@0x82afe670: false)
    at RPC/RpcClient.cpp:417

Da steht this=0x0 - Schande über mein Haupt, das hätte ich sehen müssen. Allerdings kann ich das nicht ganz nachvollziehen. Beim Vorfunktionsaufruf (#4) existiert der Zeiger noch, die Objektinstanz scheint also zwischenzeitlich gelöscht worden zu sein. Es passiert also irgendetwas ganz Komisches. Der normale Programmfluss kann diesen Fehler auf den ersten Blick nicht verursacht haben.

Homegear stürzt bei dir ja durch das Verbinden von HomeAssistant ab. Funktioniert denn RPC generell ohne Absturz, z. B. das Ausführen von:

curl -X POST -d '{
    "jsonrpc": "2.0",
    "method": "runScript",
    "id": 123,
    "params": ["Test.php", "param1 param2"]
}' http://localhost:2001 --header "Content-Type: application/json"

Viele Grüße

Sathya

1 Like

Hallo @FrankW,

kleiner Zwischenbericht: Ich kann das Problem auf dem Pine A64 reproduzieren!

Viele Grüße

Sathya

Generell oder in Verbindung mit Homeassistent?

Was sollte bei dem curl Aufruf rauskommen?

  1. Es stürzt nicht ab
  2. Ich sehe, dass Homegear irgendwie drauf reagiert (also in der Shell wo homegear gestartet ist ist ein Response-JSON)
  3. Ich krieg auf der Shell wo ichs ausführe kein Ergebnis

Generell oder in Verbindung mit Homeassistent?

Generell.

Es stürzt nicht ab

Genau das sollte rauskommen. Der Befehl führt das Skript “Test.php” in Homegears Skriptverzeichnis aus.

Kleiner Zwischenstand: Homegear auf dem Raspberry Pi und auf meinem Entwicklungsrechner stürzt beim Verbindungsaufbau von HomeAssistant nicht ab. Auf dem Pine A64 aber zuverlässig mit jedem Verbindungsaufbau.

Viele Grüße

Sathya

Auch der Coredump sieht gleich aus, außer, dass bei mir kein Nullzeiger aufgeführt ist:

(gdb) where
#0  0x0000ffffae57561c in BaseLib::TcpSocket::getConnection (this=this@entry=0xffff6c008a60) at Sockets/TcpSocket.cpp:1653
#1  0x0000ffffae577144 in BaseLib::TcpSocket::getSocketDescriptor (this=this@entry=0xffff6c008a60) at Sockets/TcpSocket.cpp:1455
#2  0x0000ffffae5773f0 in BaseLib::TcpSocket::open (this=0xffff6c008a60) at Sockets/TcpSocket.cpp:1060
#3  0x0000aaaad8d10840 in Homegear::Rpc::RpcClient::sendRequest (this=0xaaaae56ac4f0, server=0xffff6c004960, data=std::vector of length 100, capacity 184 = {...}, 
    responseData=<error reading variable: Cannot access memory at address 0x8>, insertHeader=insertHeader@entry=true, retry=<error reading variable>) at RPC/RpcClient.cpp:417
#4  0x0000aaaad8d17724 in Homegear::Rpc::RpcClient::invoke (this=this@entry=0xaaaae56ac4f0, server=server@entry=0xffff6c004960, methodName="system.listMethods", 
    parameters=std::shared_ptr (count -1441594400, weak -1811935393) 0xffff787fe530) at RPC/RpcClient.cpp:274
#5  0x0000aaaad8d03714 in Homegear::Rpc::RemoteRpcServer::invoke (this=0xffff6c004960, methodName="system.listMethods", parameters=std::shared_ptr (count 2, weak 0) 0xffff700009a0)
    at RPC/RemoteRpcServer.cpp:204
#6  0x0000aaaad8cef6b8 in Homegear::Rpc::Client::systemListMethods (this=this@entry=0xaaaae54c66e0, address=...) at RPC/Client.cpp:425
#7  0x0000aaaad8cf6394 in Homegear::Rpc::Client::initServerMethods (this=0xaaaae54c66e0, address=...) at RPC/Client.cpp:107
#8  0x0000aaaad8d7aa7c in std::__invoke_impl<void, void (Homegear::Rpc::Client::* const&)(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >), Homegear::Rpc::Client*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(std::__invoke_memfun_deref, void (Homegear::Rpc::Client::* const&)(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >), Homegear::Rpc::Client*&&, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&&) (__t=<optimized out>, __f=<optimized out>)
    at /usr/include/c++/6/functional:227
#9  std::__invoke<void (Homegear::Rpc::Client::* const&)(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >), Homegear::Rpc::Client*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(void (Homegear::Rpc::Client::* const&)(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >), Homegear::Rpc::Client*&&, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&&) (__fn=<optimized out>) at /usr/include/c++/6/functional:251
#10 std::_Mem_fn_base<void (Homegear::Rpc::Client::*)(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >), true>::operator()<Homegear::Rpc::Client*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(Homegear::Rpc::Client*&&, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&&) const (this=<optimized out>) at /usr/include/c++/6/functional:604
#11 std::_Bind_simple<std::_Mem_fn<void (Homegear::Rpc::Client::*)(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)> (Homegear::Rpc::Client*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) (this=<optimized out>) at /usr/include/c++/6/functional:1391
#12 std::_Bind_simple<std::_Mem_fn<void (Homegear::Rpc::Client::*)(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)> (Homegear::Rpc::Client*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)>::operator()() (this=<optimized out>) at /usr/include/c++/6/functional:1380
#13 std::thread::_State_impl<std::_Bind_simple<std::_Mem_fn<void (Homegear::Rpc::Client::*)(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)> (Homegear::Rpc::Client*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)> >::_M_run() (this=<optimized out>) at /usr/include/c++/6/thread:197
#14 0x0000ffffacf7c3bc in ?? () from /usr/lib/aarch64-linux-gnu/libstdc++.so.6
#15 0x0000ffffae7fd0a0 in start_thread (arg=0xffffacf7c3a0) at pthread_create.c:335
#16 0x0000ffffacd72eac in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:77
(gdb)

Fehler vermutlich gefunden:

// Save to test.cpp and compile with:
// g++ -o test -std=c++11 test.cpp
#include <iostream>
#include <netdb.h>

int main()
{
        auto protocol = getprotobyname("TCP");
        if(protocol) std::cout << protocol->p_proto;
        else std::cerr << "nullptr";
        return 0;
}

Dieses kleine Programm stürzt auf dem Pine A64 mit DietPi ab. getprotobyname() gibt einen Nullzeiger zurück. Ich habe getprotobyname() in der Basisbibliothek jetzt durch IPPROTO_TCP ersetzt. Das sollte das Problem lösen.

Viele Grüße

Sathya

Ich bin jetzt ne Woche im Urlaub. Wenn ich wieder zuhause bin könnte ich also den nightly-Installer nehmen und es sollte dann funktionieren??
Vielen Dank fürs Suchen…

Mfg
Frank

Hallo @FrankW,

ja, ab Version 0.8.0-2528 läuft es :slight_smile:. Vielen Dank an dich und für deine Geduld! Die Änderung in getprotobyname() wurde vor Ewigkeiten mal gemacht, um die BSD-Untersützung herzustellen. Vorher wurde SOL_TCP verwendet, welches unter BSD nicht zur Verfügung steht. Nach Dokumentation ist IPPROTO_TCP aber ohnehin die korrekte Wahl (beides sind #defines für die Zahl 6). Ich hoffe letzteres funktioniert auch unter BSD…

Viele Grüße

Sathya

Funktioniert :slight_smile:

Dankeschön.