Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [gelöst] mal wieder: No connection to databases possible ...

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] mal wieder: No connection to databases possible ...

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      DGR @wendy2702 last edited by

      @wendy2702
      habe jetzt y gegeben:

      Migrating the objects database will overwrite all objects! Are you sure that this is not a slave host and you want to migrate the data? [y/N]: y

      Connecting to previous DB "jsonl"...
      No connection to databases possible ...

      wendy2702 D 2 Replies Last reply Reply Quote 0
      • wendy2702
        wendy2702 @DGR last edited by

        @dgr sagte in mal wieder: No connection to databases possible ...:

        jsonl

        OK.

        Dann gehen mir die Ideen aus.

        Vielleicht nochmal den JS-Controller neu installieren:

        cd /opt/iobroker/
        sudo -H -u iobroker npm install iobroker.js-controller
        

        Wenn es dann nicht geht würde ich iobroker neu installieren und ein Restore mit dem Backup machen.

        1 Reply Last reply Reply Quote 0
        • D
          DGR @DGR last edited by

          @dgr bleibt wohl doch nur
          iob restore /opt/iobroker/iobroker_2021_12_29-02_00_10_backupiobroker.tar.gz

          ist die Syntax so korrekt ?

          muß mich jetzt erstmal bist nachmittags abmelden. Danke bis hier.

          wendy2702 1 Reply Last reply Reply Quote 0
          • wendy2702
            wendy2702 @DGR last edited by

            @dgr Die Syntax ist richtig aber ob du mit einem einfachen Restore in der bestehenden "fehlerhaften" Installation gut bedient bist weiß ich nicht.

            D 1 Reply Last reply Reply Quote 0
            • D
              DGR @wendy2702 last edited by

              @wendy2702 ok.

              1. mache dann wie vorgeschlagen den JS-Controller neu
              2. versuche den restore, wenn nicht ok., dann 3.
              3. iobroker neu und restore

              sehe gerade: 1. bringt viele Fehler, mache dann nachmittags mit 2. bzw. 3. weiter.

              Erbitte vielleicht noch einen Hinweis für die Neuinstallation von iobroker.
              Vorher irgendwas von der Altinstallation löschen ?
              Vielleicht ein Link mit der Vorgehensweise für Neuinstallation

              wendy2702 1 Reply Last reply Reply Quote 0
              • wendy2702
                wendy2702 @DGR last edited by

                @dgr Zeig mal die "Fehler" also das logfile.

                D 1 Reply Last reply Reply Quote 0
                • AlCalzone
                  AlCalzone Developer @DGR last edited by AlCalzone

                  @dgr sagte in mal wieder: No connection to databases possible ...:

                  ... 153825 states saved
                  ... 305278 objects saved

                  WOW, ist das wirklich ein so großes System? Oder hat da ggf. der BLE-Adapter unkontrolliert zu viele Objekte angelegt?
                  Bei den Datenmengen kann es durchaus etwas länger dauern, bis die Datenbank durchstartet.

                  In /opt/iobroker/iobroker-data solltest du eine Datei iobroker.json finden. Bearbeite die mit einem Texteditor und stelle unter objects das connectTimeout auf einen höheren Wert, z.B. 30000. Das gleiche dann auch unter states.

                  D 1 Reply Last reply Reply Quote 0
                  • D
                    DGR @AlCalzone last edited by

                    @alcalzone
                    aktuell gibt es bei mir die objects.jsonl (167,8 MiB), die states.jsonl (169,9 MiB) und die iobroker.json (4,3 KiB)
                    können die auch so bearbeitet werden ?

                    AlCalzone 1 Reply Last reply Reply Quote 0
                    • AlCalzone
                      AlCalzone Developer @DGR last edited by

                      @dgr Die iobroker.json kannst du mit einem Texteditor bearbeiten. Die anderen am besten in Ruhe lassen, das sind die eigentlichen Datenbanken.

                      1 Reply Last reply Reply Quote 0
                      • D
                        DGR @wendy2702 last edited by

                        @wendy2702 habe gerade das wiederholt:
                        sudo -H -u iobroker npm install iobroker.js-controller
                        Fehler sind gleich
                        log-Datei soll angeblich stehen in
                        npm ERR! /home/iobroker/.npm/_logs/2022-03-15T14_26_58_342Z-debug.log

                        aber auch für diese Zeile wird "npm ERR!" am Anfang ausgegeben. Die log-Datei gibt es auch nicht.

                        AlCalzone Thomas Braun 2 Replies Last reply Reply Quote 0
                        • AlCalzone
                          AlCalzone Developer @DGR last edited by AlCalzone

                          @dgr Mach mal nicht zu viel gleichzeitig. Bearbeite die iobroker.json wie von mir oben beschrieben und schau ob dein Problem damit schon behoben ist. Außer natürlich du hast jetzt irgendwie die Controller-Installation gefetzt, dann musst du die natürlich zuerst gerade biegen.

                          D 1 Reply Last reply Reply Quote 0
                          • Thomas Braun
                            Thomas Braun Most Active @DGR last edited by

                            @dgr

                            Standst du im richtigen Verzeichnis?
                            Mit welchen Meldugen ist das durchgelaufen?
                            Und die log-Datei liegt mit Sicherheit dort. Kann es sein, dass du da mit einem graphischen Dateimanager rumhantierst? .npm ist ein 'verstecktes' Verzeichnis.

                            D 1 Reply Last reply Reply Quote 0
                            • D
                              DGR @Thomas Braun last edited by

                              @thomas-braun
                              /home $ cd /iobroker
                              -bash: cd: /iobroker: Datei oder Verzeichnis nicht gefunden

                              Thomas Braun 2 Replies Last reply Reply Quote 0
                              • Thomas Braun
                                Thomas Braun Most Active @DGR last edited by

                                @dgr

                                Richtige Meldung. /iobroker gibt es nicht.

                                1 Reply Last reply Reply Quote 0
                                • Thomas Braun
                                  Thomas Braun Most Active @DGR last edited by

                                  @dgr

                                  cd /opt/iobroker
                                  sudo -H -u iobroker npm install iobroker.js-controller
                                  
                                  D 1 Reply Last reply Reply Quote 0
                                  • D
                                    DGR @AlCalzone last edited by

                                    @alcalzone wurde geändert:
                                    "objects": {
                                    "type": "jsonl",
                                    "typeComment": "Possible values: 'file' - [port 9001], redis - [port 6379], couch - [port 5984].",
                                    "host": "127.0.0.1",
                                    "port": 9001,
                                    "user": "",
                                    "pass": "",
                                    "noFileCache": false,
                                    "connectTimeout": 30000,
                                    "options": {
                                    "auth_pass": null,
                                    "retry_max_delay": 2000
                                    },

                                    Ergebnis:
                                    /opt/iobroker $ iobroker start
                                    internal/modules/cjs/loader.js:905
                                    throw err;
                                    ^

                                    Error: Cannot find module '/opt/iobroker/node_modules/iobroker.js-controller/iobroker.js'
                                    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15)
                                    at Function.Module._load (internal/modules/cjs/loader.js:746:27)
                                    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12)
                                    at internal/main/run_main_module.js:17:47 {
                                    code: 'MODULE_NOT_FOUND',
                                    requireStack: []
                                    }

                                    1 Reply Last reply Reply Quote 0
                                    • D
                                      DGR @Thomas Braun last edited by

                                      @thomas-braun wie kann ich das Ergebnis hier besser posten ?

                                      Thomas Braun 1 Reply Last reply Reply Quote 0
                                      • Thomas Braun
                                        Thomas Braun Most Active @DGR last edited by

                                        @dgr

                                        CodeTags verwenden:

                                        code_text
                                        

                                        7fccdd42-a74e-403d-8393-e5ef80f678d8-image.png

                                        Text zwischen die Steuerzeichen kopieren, code_text ersetzend.

                                        D 1 Reply Last reply Reply Quote 0
                                        • D
                                          DGR @Thomas Braun last edited by Homoran

                                          @thomas-braun

                                          sudo -H -u iobroker npm install iobroker.js-controller
                                          npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
                                          
                                          > iobroker.js-controller@4.0.21 preinstall /opt/iobroker/node_modules/iobroker.js-controller
                                          > node lib/preinstallCheck.js
                                          
                                          NPM version: 6.14.16
                                          
                                          > authenticate-pam@1.0.2 install /opt/iobroker/node_modules/authenticate-pam
                                          > node-gyp rebuild
                                          
                                          make: Verzeichnis „/opt/iobroker/node_modules/authenticate-pam/build“ wird betreten
                                            CXX(target) Release/obj.target/authenticate_pam/authenticate_pam.o
                                          In file included from ../authenticate_pam.cc:23:
                                          ../../nan/nan.h: In function ‘void Nan::AsyncQueueWorker(Nan::AsyncWorker*)’:
                                          ../../nan/nan.h:2298:62: warning: cast between incompatible function types from ‘void (*)(uv_work_t*)’ {aka ‘void (*)(uv_work_s*)’} to ‘uv_after_work_cb’ {aka ‘void (*)(uv_work_s*, int)’} [-Wcast-function-type]
                                               , reinterpret_cast<uv_after_work_cb>(AsyncExecuteComplete)
                                                                                                        ^
                                          ../authenticate_pam.cc: In function ‘void after_doing_auth(uv_work_t*, int)’:
                                          ../authenticate_pam.cc:107:87: warning: ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated [-Wdeprecated-declarations]
                                             Nan::MakeCallback(Nan::GetCurrentContext()->Global(), Nan::New(m->callback), 1, args);
                                                                                                                                 ^
                                          In file included from ../authenticate_pam.cc:23:
                                          ../../nan/nan.h:1024:46: note: declared here
                                             NAN_DEPRECATED inline v8::Local<v8::Value> MakeCallback(
                                                                                        ^~~~~~~~~~~~
                                          ../authenticate_pam.cc:107:87: warning: ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated [-Wdeprecated-declarations]
                                             Nan::MakeCallback(Nan::GetCurrentContext()->Global(), Nan::New(m->callback), 1, args);
                                                                                                                                 ^
                                          In file included from ../authenticate_pam.cc:23:
                                          ../../nan/nan.h:1024:46: note: declared here
                                             NAN_DEPRECATED inline v8::Local<v8::Value> MakeCallback(
                                                                                        ^~~~~~~~~~~~
                                          ../authenticate_pam.cc: In function ‘Nan::NAN_METHOD_RETURN_TYPE Authenticate(Nan::NAN_METHOD_ARGS_TYPE)’:
                                          ../authenticate_pam.cc:147:83: error: no matching function for call to ‘v8::Array::Get(v8::Local<v8::String>)’
                                             Local<Value> res = options->Get(Nan::New<String>("serviceName").ToLocalChecked());
                                                                                                                             ^
                                          In file included from /home/iobroker/.cache/node-gyp/14.19.0/include/node/node.h:67,
                                                           from ../../nan/nan.h:54,
                                                           from ../authenticate_pam.cc:23:
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3717:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
                                             V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                                                                     ^~~
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3717:43: note:   candidate expects 2 arguments, 1 provided
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3720:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
                                             V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                                                                     ^~~
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3720:43: note:   candidate expects 2 arguments, 1 provided
                                          ../authenticate_pam.cc:150:69: error: no matching function for call to ‘v8::String::WriteUtf8(char [128], unsigned int)’
                                              serviceName->WriteUtf8(m->serviceName, sizeof(m->serviceName) - 1);
                                                                                                               ^
                                          In file included from /home/iobroker/.cache/node-gyp/14.19.0/include/node/node.h:67,
                                                           from ../../nan/nan.h:54,
                                                           from ../authenticate_pam.cc:23:
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3037:7: note: candidate: ‘int v8::String::WriteUtf8(v8::Isolate*, char*, int, int*, int) const’
                                             int WriteUtf8(Isolate* isolate, char* buffer, int length = -1,
                                                 ^~~~~~~~~
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3037:7: note:   no known conversion for argument 1 from ‘char [128]’ to ‘v8::Isolate*’
                                          ../authenticate_pam.cc:152:69: error: no matching function for call to ‘v8::Array::Get(v8::Local<v8::String>)’
                                             res = options->Get(Nan::New<String>("remoteHost").ToLocalChecked());
                                                                                                               ^
                                          In file included from /home/iobroker/.cache/node-gyp/14.19.0/include/node/node.h:67,
                                                           from ../../nan/nan.h:54,
                                                           from ../authenticate_pam.cc:23:
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3717:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
                                             V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                                                                     ^~~
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3717:43: note:   candidate expects 2 arguments, 1 provided
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3720:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
                                             V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
                                                                                     ^~~
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3720:43: note:   candidate expects 2 arguments, 1 provided
                                          ../authenticate_pam.cc:155:66: error: no matching function for call to ‘v8::String::WriteUtf8(char [128], unsigned int)’
                                              remoteHost->WriteUtf8(m->remoteHost, sizeof(m->remoteHost) - 1);
                                                                                                            ^
                                          In file included from /home/iobroker/.cache/node-gyp/14.19.0/include/node/node.h:67,
                                                           from ../../nan/nan.h:54,
                                                           from ../authenticate_pam.cc:23:
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3037:7: note: candidate: ‘int v8::String::WriteUtf8(v8::Isolate*, char*, int, int*, int) const’
                                             int WriteUtf8(Isolate* isolate, char* buffer, int length = -1,
                                                 ^~~~~~~~~
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3037:7: note:   no known conversion for argument 1 from ‘char [128]’ to ‘v8::Isolate*’
                                          ../authenticate_pam.cc:160:58: error: no matching function for call to ‘v8::String::WriteUtf8(char [128], unsigned int)’
                                            username->WriteUtf8(m->username, sizeof(m->username) - 1);
                                                                                                    ^
                                          In file included from /home/iobroker/.cache/node-gyp/14.19.0/include/node/node.h:67,
                                                           from ../../nan/nan.h:54,
                                                           from ../authenticate_pam.cc:23:
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3037:7: note: candidate: ‘int v8::String::WriteUtf8(v8::Isolate*, char*, int, int*, int) const’
                                             int WriteUtf8(Isolate* isolate, char* buffer, int length = -1,
                                                 ^~~~~~~~~
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3037:7: note:   no known conversion for argument 1 from ‘char [128]’ to ‘v8::Isolate*’
                                          ../authenticate_pam.cc:161:58: error: no matching function for call to ‘v8::String::WriteUtf8(char [128], unsigned int)’
                                            password->WriteUtf8(m->password, sizeof(m->password) - 1);
                                                                                                    ^
                                          In file included from /home/iobroker/.cache/node-gyp/14.19.0/include/node/node.h:67,
                                                           from ../../nan/nan.h:54,
                                                           from ../authenticate_pam.cc:23:
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3037:7: note: candidate: ‘int v8::String::WriteUtf8(v8::Isolate*, char*, int, int*, int) const’
                                             int WriteUtf8(Isolate* isolate, char* buffer, int length = -1,
                                                 ^~~~~~~~~
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/v8.h:3037:7: note:   no known conversion for argument 1 from ‘char [128]’ to ‘v8::Isolate*’
                                          ../authenticate_pam.cc: At global scope:
                                          ../authenticate_pam.cc:170:11: error: variable or field ‘init’ declared void
                                           void init(Handle<Object> exports) {
                                                     ^~~~~~
                                          ../authenticate_pam.cc:170:11: error: ‘Handle’ was not declared in this scope
                                          ../authenticate_pam.cc:170:11: note: suggested alternative: ‘rand_r’
                                           void init(Handle<Object> exports) {
                                                     ^~~~~~
                                                     rand_r
                                          ../authenticate_pam.cc:170:24: error: expected primary-expression before ‘>’ token
                                           void init(Handle<Object> exports) {
                                                                  ^
                                          ../authenticate_pam.cc:170:26: error: ‘exports’ was not declared in this scope
                                           void init(Handle<Object> exports) {
                                                                    ^~~~~~~
                                          In file included from ../../nan/nan.h:54,
                                                           from ../authenticate_pam.cc:23:
                                          ../authenticate_pam.cc:175:31: error: ‘init’ was not declared in this scope
                                           NODE_MODULE(authenticate_pam, init);
                                                                         ^~~~
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/node.h:793:36: note: in definition of macro ‘NODE_MODULE_X’
                                                 (node::addon_register_func) (regfunc),                          \
                                                                              ^~~~~~~
                                          ../authenticate_pam.cc:175:1: note: in expansion of macro ‘NODE_MODULE’
                                           NODE_MODULE(authenticate_pam, init);
                                           ^~~~~~~~~~~
                                          ../authenticate_pam.cc:175:31: note: suggested alternative: ‘int’
                                           NODE_MODULE(authenticate_pam, init);
                                                                         ^~~~
                                          /home/iobroker/.cache/node-gyp/14.19.0/include/node/node.h:793:36: note: in definition of macro ‘NODE_MODULE_X’
                                                 (node::addon_register_func) (regfunc),                          \
                                                                              ^~~~~~~
                                          ../authenticate_pam.cc:175:1: note: in expansion of macro ‘NODE_MODULE’
                                           NODE_MODULE(authenticate_pam, init);
                                           ^~~~~~~~~~~
                                          make: *** [authenticate_pam.target.mk:109: Release/obj.target/authenticate_pam/authenticate_pam.o] Fehler 1
                                          make: Verzeichnis „/opt/iobroker/node_modules/authenticate-pam/build“ wird verlassen
                                          gyp ERR! build error
                                          gyp ERR! stack Error: `make` failed with exit code: 2
                                          gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
                                          gyp ERR! stack     at ChildProcess.emit (events.js:400:28)
                                          gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:282:12)
                                          gyp ERR! System Linux 5.10.103-v7l+
                                          gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
                                          gyp ERR! cwd /opt/iobroker/node_modules/authenticate-pam
                                          gyp ERR! node -v v14.19.0
                                          gyp ERR! node-gyp -v v5.1.0
                                          gyp ERR! not ok
                                          
                                          > iobroker.js-controller@4.0.21 install /opt/iobroker/node_modules/iobroker.js-controller
                                          > node iobroker.js setup first
                                          
                                          No connection to databases possible ...
                                          npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.3.2 (node_modules/chokidar/node_modules/fsevents):
                                          npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"})
                                          npm WARN optional SKIPPING OPTIONAL DEPENDENCY: osx-temperature-sensor@1.0.7 (node_modules/osx-temperature-sensor):
                                          npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for osx-temperature-sensor@1.0.7: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"})
                                          npm WARN optional SKIPPING OPTIONAL DEPENDENCY: authenticate-pam@1.0.2 (node_modules/authenticate-pam):
                                          npm WARN optional SKIPPING OPTIONAL DEPENDENCY: authenticate-pam@1.0.2 install: `node-gyp rebuild`
                                          npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1
                                          
                                          npm ERR! code ELIFECYCLE
                                          npm ERR! errno 22
                                          npm ERR! iobroker.js-controller@4.0.21 install: `node iobroker.js setup first`
                                          npm ERR! Exit status 22
                                          npm ERR!
                                          npm ERR! Failed at the iobroker.js-controller@4.0.21 install script.
                                          npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
                                          
                                          npm ERR! A complete log of this run can be found in:
                                          npm ERR!     /home/iobroker/.npm/_logs/2022-03-15T14_56_11_790Z-debug.log
                                          
                                          mikeal created this issue in request/request

                                          open Request’s Past, Present and Future #3142

                                          Thomas Braun D 2 Replies Last reply Reply Quote 0
                                          • Thomas Braun
                                            Thomas Braun Most Active @DGR last edited by Thomas Braun

                                            @dgr

                                            Deinstallier den Adapter 'terminal'.

                                            Und verwende CodeTags!

                                            D 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            929
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            connection database
                                            7
                                            93
                                            10247
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo