Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. [Problem] Install ioBroker in Raspbian Jessie geht nicht weiter, Fehler

    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

    [Problem] Install ioBroker in Raspbian Jessie geht nicht weiter, Fehler

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators last edited by

      Wo hast du die uralte Version von nodejs her, du benötigst mindestens 4.xx

      http://www.iobroker.net/?page_id=5106&lang=de

      Gruß

      Rainer

      1 Reply Last reply Reply Quote 0
      • eric2905
        eric2905 last edited by

        Hallo und Willkommen an Bord,

        der Fehler steht doch im Log drin:

        npm WARN engine request@2.81.0: wanted: {"node":">= 4"} (current: {"node":"0.12.6","npm":"2.11.2"})
        npm WARN engine har-validator@4.2.1: wanted: {"node":">=4"} (current: {"node":"0.12.6","npm":"2.11.2"})
        npm WARN engine har-schema@1.0.5: wanted: {"node":">=4"} (current: {"node":"0.12.6","npm":"2.11.2"})
        

        Du verwendest eine zu alte Version von ppm und node.js.

        Schau Dir mal diese Anleitung an - da steht erklärt, wie Du node.js updates ==> http://www.iobroker.net/?page_id=5106&lang=de

        Bitte achte drauf, das Du den Abschnitt für Raspberry 1 verwendest!!!

        Gruß,

        Eric

        PS: Rainer war schneller 😄

        1 Reply Last reply Reply Quote 0
        • H
          hajo48 last edited by

          @Homoran:

          Wo hast du die uralte Version von nodejs her, du benötigst mindestens 4.xx

          http://www.iobroker.net/?page_id=5106&lang=de

          Gruß

          Rainer `

          Hallo Rainer,

          vielen Dank für die Antwort, hilft mir nur nicht wirklich weiter, habe die Installation genau nach dieser, von dir genannten

          Url/Seite vorgenommen.

          Habe auch Node.js wie angegeben, nur für Raspberry 1 genommen.

          Was muss ich denn nun laut Installationsanleitung Node.js Raspberry 1 anders machen?

          Gruss

          Joachim

          1 Reply Last reply Reply Quote 0
          • H
            hajo48 last edited by

            @eric2905:

            Hallo und Willkommen an Bord,

            der Fehler steht doch im Log drin:

            npm WARN engine request@2.81.0: wanted: {"node":">= 4"} (current: {"node":"0.12.6","npm":"2.11.2"})
            npm WARN engine har-validator@4.2.1: wanted: {"node":">=4"} (current: {"node":"0.12.6","npm":"2.11.2"})
            npm WARN engine har-schema@1.0.5: wanted: {"node":">=4"} (current: {"node":"0.12.6","npm":"2.11.2"})
            

            Du verwendest eine zu alte Version von ppm und node.js.

            Schau Dir mal diese Anleitung an - da steht erklärt, wie Du node.js updates ==> http://www.iobroker.net/?page_id=5106&lang=de

            Bitte achte drauf, das Du den Abschnitt für Raspberry 1 verwendest!!!

            Gruß,

            Eric

            Hallo Eric,

            vielen Dank für die Antwort, hilft mir nur nicht wirklich weiter, habe die Installation genau nach dieser, von dir genannten

            Url/Seite vorgenommen.

            Habe auch Node.js wie angegeben, nur für Raspberry 1 genommen.

            Was muss ich denn nun laut Installationsanleitung Node.js Raspberry 1 anders machen?

            Das selbe habe ich auch Rainer geschrieben.

            PS: Rainer war schneller 😄 `

            1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators last edited by

              @hajo48:

              Was muss ich denn nun laut Installationsanleitung Node.js Raspberry 1 anders machen? `
              Mit dem Pi1 wirst du nicht lange glücklich werden.

              Geh mal auf diese Seite

              http://www.iobroker.net/?page_id=2563&lang=de

              Dort habe ich ein Image für den Pi1 mit nodejs 6.xx gemacht.

              Wie weiß ich im Moment selber nicht :oops:

              Gruß

              Rainer

              1 Reply Last reply Reply Quote 0
              • H
                hajo48 last edited by

                Hallo Rainer,

                entschuldige meine späte Antwort, das Image hatte ich schon mal installiert und ließ sich auch starten aber die vorgeschlagenen Update's lassen sich nicht installieren bzw. erst garnicht herrunterladen. Es kommen immer Errors.

                Mein Vorhaben ist es eigendlich mit den Raspbi und einen nano CUL Bausatz CC1101 433Mhz CUL 433 USB-Stick für FHEM

                meine Somfy Markiese zu steuern / bedienen.

                Hast du da einen guten und nachvollziehbaren Vorschlag für einen Anfänger?

                Vielen Dank im Voraus für deine Mühe.

                Gruß

                Joachim 😐

                1 Reply Last reply Reply Quote 0
                • kmxak
                  kmxak Most Active last edited by

                  Für den Pi1 brauchst du armv6 hatte auch probleme mit der installation auf einem zero.

                  Der Code siehe unten müsste theoretisch gehen. Habe ich aber noch nicht getestet.

                  Node v4.8.3 Installieren

                  wget https://nodejs.org/dist/v4.8.3/node-v4.8.3-linux-armv6l.tar.gz
                  tar -xvf node-v4.8.3-linux-armv6l.tar.gz 
                  cd node-v4.8.3-linux-armv6l
                  sudo cp -R * /usr/local/
                  

                  Version Prüfen
                  > node -v

                  ggf fall es noch nicht geht folgendes ausführen

                  sudo ln -s /usr/local/bin/nodejs /usr/bin/node
                  

                  Wenn es immer noch nicht geht meld dich einfach nochmal

                  (@ Mod wir sollten die Installation für den pi1 oder zero und zero w mal anpassen. Die Anleitung für den Pi 1 geht bzw ging bei mir auch nicht.)

                  1 Reply Last reply Reply Quote 0
                  • H
                    hajo48 last edited by

                    Hallo Alex,

                    vielen Dank für deinen Tip, die v4.8.3 habe ich installiert aber bei der Insallation von ioBroker

                    kommen Fehler über Fehler, die ich als Anfänger im Moment nicht einordnen kann.

                    Hier mal der Ablauf:

                    pi@raspberrypi:~ $ node -v

                    v4.8.3

                    pi@raspberrypi:~ $ sudo mkdir /opt/iobroker

                    mkdir: das Verzeichnis ▒/opt/iobroker▒ kann nicht angelegt werden: Die Datei existiert bereits

                    pi@raspberrypi:~ $ sudo chmod 777 /opt/iobroker

                    pi@raspberrypi:~ $ cd /opt/iobroker

                    pi@raspberrypi:/opt/iobroker $ sudo npm install iobroker –unsafe-perm

                    /

                    iobroker@0.9.0 install /opt/iobroker/node_modules/iobroker

                    node lib/setup.js

                    npm install iobroker.js-controller --production --prefix /opt/iobroker

                    npm install iobroker.admin --production --prefix /opt/iobroker

                    npm install iobroker.discovery --production --prefix /opt/iobroker

                    In file included from ../src/dns_sd.cpp:1:0:

                    ../src/mdns.hpp:32:20: fatal error: dns_sd.h: Datei oder Verzeichnis nicht gefunden

                    #include <dns_sd.h>^

                    compilation terminated.

                    make: *** [Release/obj.target/dns_sd_bindings/src/dns_sd.o] Error 1

                    gyp ERR! build error

                    gyp ERR! stack Error: make failed with exit code: 2

                    gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)

                    gyp ERR! stack at emitTwo (events.js:87:13)

                    gyp ERR! stack at ChildProcess.emit (events.js:172:7)

                    gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:211:12)

                    gyp ERR! System Linux 4.9.24+

                    gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"

                    gyp ERR! cwd /opt/iobroker/node_modules/iobroker.discovery/node_modules/mdns

                    gyp ERR! node -v v4.8.3

                    gyp ERR! node-gyp -v v3.4.0

                    gyp ERR! not ok

                    npm WARN optional dep failed, continuing mdns@2.3.3

                    node-pre-gyp ERR! Tried to download(404): https://github.com/EmergingTechnologyAd … arm.tar.gz

                    node-pre-gyp ERR! Pre-built binaries not found for serialport@4.0.7 and node@4.8.3 (node-v46 ABI) (falling back to source compile with node-gyp)

                    Write "./iobroker start" to start the ioBroker

                    : Datei oder Verzeichnis nicht gefunden

                    Auto-start was enabled. Write "update-rc.d -f iobroker.sh remove" to disable auto-start

                    iobroker is started. Go to "http://ip-addr:8081" to open the admin UI.

                    iobroker@0.9.0 node_modules/iobroker

                    └── yargs@7.1.0 (get-caller-file@1.0.2, decamelize@1.2.0, camelcase@3.0.0, y18n@3.2.1, which-module@1.0.0, set-blocking@2.0.0, yargs-parser@5.0.0, require-main-filename@1.0.1, require-directory@2.1.1, string-width@1.0.2, cliui@3.2.0, os-locale@1.4.0, read-pkg-up@1.0.1)

                    pi@raspberrypi:/opt/iobroker $

                    pi@raspberrypi:/opt/iobroker $ The programs included with the Debian GNU/Linux system are free software;

                    -bash: The: Kommando nicht gefunden.

                    pi@raspberrypi:/opt/iobroker $ the exact distribution terms for each program are described in the

                    -bash: the: Kommando nicht gefunden.

                    pi@raspberrypi:/opt/iobroker $ individual files in /usr/share/doc/*/copyright.

                    -bash: individual: Kommando nicht gefunden.

                    pi@raspberrypi:/opt/iobroker $

                    pi@raspberrypi:/opt/iobroker $ Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

                    -bash: Debian: Kommando nicht gefunden.

                    pi@raspberrypi:/opt/iobroker $ permitted by applicable law.

                    -bash: permitted: Kommando nicht gefunden.

                    pi@raspberrypi:/opt/iobroker $ Last login: Fri May 5 20:21:37 2017 from winmac.fritz.box

                    -bash: Last: Kommando nicht gefunden.

                    pi@raspberrypi:/opt/iobroker $ pi@raspberrypi:~ $ node -v

                    -bash: pi@raspberrypi:~: Kommando nicht gefunden.

                    pi@raspberrypi:/opt/iobroker $ v4.8.3

                    -bash: v4.8.3: Kommando nicht gefunden.

                    pi@raspberrypi:/opt/iobroker $ pi@raspberrypi:~ $ sudo mkdir /opt/iobroker

                    -bash: pi@raspberrypi:~: Kommando nicht gefunden.

                    icht angelegt werden: Die Datei existiert bereitshnis ▒/opt/iobroker▒ kann n

                    -bash: mkdir:: Kommando nicht gefunden.

                    pi@raspberrypi:/opt/iobroker $ pi@raspberrypi:~ $ sudo chmod 777 /opt/iobroker

                    -bash: pi@raspberrypi:~: Kommando nicht gefunden.

                    pi@raspberrypi:/opt/iobroker $ pi@raspberrypi:~ $ cd /opt/iobroker

                    -bash: pi@raspberrypi:~: Kommando nicht gefunden.

                    pi@raspberrypi:/opt/iobroker $ pi@raspberrypi:/opt/iobroker $ sudo npm install iobroker --unsafe-perm

                    -bash: pi@raspberrypi:/opt/iobroker: Datei oder Verzeichnis nicht gefunden

                    pi@raspberrypi:/opt/iobroker $ /

                    -bash: /: Ist ein Verzeichnis

                    pi@raspberrypi:/opt/iobroker $ > iobroker@0.9.0 install /opt/iobroker/node_modules/iobroker

                    install: Fehlender Zieldatei-Operand hinter ▒/opt/iobroker/node_modules/iobroker▒

                    ▒install --help▒ liefert weitere Informationen.

                    pi@raspberrypi:/opt/iobroker $ > node lib/setup.js

                    -bash: lib/setup.js: Datei oder Verzeichnis nicht gefunden

                    pi@raspberrypi:/opt/iobroker $

                    pi@raspberrypi:/opt/iobroker $ npm install iobroker.js-controller --production --prefix /opt/iobroker

                    npm ERR! Linux 4.9.24+

                    npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "iobroker.js-controller" "--production" "--prefix" "/opt/iobroker"

                    npm ERR! node v4.8.3

                    npm ERR! npm v2.15.11

                    npm ERR! path /opt/iobroker/node_modules/.bin/iobroker

                    npm ERR! code EACCES

                    npm ERR! errno -13

                    npm ERR! syscall unlink

                    npm ERR! Error: EACCES: permission denied, unlink '/opt/iobroker/node_modules/.bin/iobroker'

                    npm ERR! at Error (native)

                    npm ERR! { [Error: EACCES: permission denied, unlink '/opt/iobroker/node_modules/.bin/iobroker']

                    npm ERR! errno: -13,

                    npm ERR! code: 'EACCES',

                    npm ERR! syscall: 'unlink',

                    npm ERR! path: '/opt/iobroker/node_modules/.bin/iobroker' }

                    npm ERR!

                    npm ERR! Please try running this command again as root/Administrator.

                    npm ERR! error rolling back Error: EACCES: permission denied, unlink '/opt/iobroker/node_modules/.bin/iobroker'

                    npm ERR! error rolling back at Error (native)

                    npm ERR! error rolling back { [Error: EACCES: permission denied, unlink '/opt/iobroker/node_modules/.bin/iobroker']

                    npm ERR! error rolling back errno: -13,

                    npm ERR! error rolling back code: 'EACCES',

                    npm ERR! error rolling back syscall: 'unlink',

                    npm ERR! error rolling back path: '/opt/iobroker/node_modules/.bin/iobroker' }

                    npm ERR! Please include the following file with any support request:

                    npm ERR! /opt/iobroker/npm-debug.log

                    pi@raspberrypi:/opt/iobroker $

                    pi@raspberrypi:/opt/iobroker $ npm install iobroker.admin –production --prefix /opt/iobroker

                    npm ERR! Linux 4.9.24+

                    npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "iobroker.admin" "--production" "--prefix" "/opt/iobroker"

                    npm ERR! node v4.8.3

                    npm ERR! npm v2.15.11

                    npm ERR! path /opt/iobroker/node_modules/iobroker.admin/node_modules/request/node_modules/.bin/uuid

                    npm ERR! code EACCES

                    npm ERR! errno -13

                    npm ERR! syscall unlink

                    npm ERR! Error: EACCES: permission denied, unlink '/opt/iobroker/node_modules/iobroker.admin/node_modules/request/node_modules/.bin/uuid'

                    npm ERR! at Error (native)

                    npm ERR! { [Error: EACCES: permission denied, unlink '/opt/iobroker/node_modules/iobroker.admin/node_modules/request/node_modules/.bin/uuid']

                    npm ERR! errno: -13,

                    npm ERR! code: 'EACCES',

                    npm ERR! syscall: 'unlink',

                    npm ERR! path: '/opt/iobroker/node_modules/iobroker.admin/node_modules/request/node_modules/.bin/uuid' }

                    npm ERR!

                    npm ERR! Please try running this command again as root/Administrator.

                    npm ERR! error rolling back Error: EACCES: permission denied, unlink '/opt/iobroker/node_modules/iobroker.admin/node_modules/request/node_modules/.bin/uuid'

                    npm ERR! error rolling back at Error (native)

                    npm ERR! error rolling back { [Error: EACCES: permission denied, unlink '/opt/iobroker/node_modules/iobroker.admin/node_modules/request/node_modules/.bin/uuid']

                    npm ERR! error rolling back errno: -13,

                    npm ERR! error rolling back code: 'EACCES',

                    npm ERR! error rolling back syscall: 'unlink',

                    npm ERR! error rolling back path: '/opt/iobroker/node_modules/iobroker.admin/node_modules/request/node_modules/.bin/uuid' }

                    npm ERR! Please include the following file with any support request:

                    npm ERR! /opt/iobroker/npm-debug.log

                    pi@raspberrypi:/opt/iobroker $

                    Gruß

                    Joachim</dns_sd.h>

                    1 Reply Last reply Reply Quote 0
                    • kmxak
                      kmxak Most Active last edited by

                      hast du auch folgenden code ausgeführt?

                      sudo apt-get install build-essential python python-rpi.gpio
                      
                      1 Reply Last reply Reply Quote 0
                      • H
                        hajo48 last edited by

                        Hallo Alex,

                        der code unter "Node.js neu installieren nur für Raspberry 1" unter Punkt 3 habe ich übersehen .

                        Was muß denn nun unter "Node.js neu installieren nur für Raspberry 1" wirklich in der Reihenfolge

                        eigegeben werden und was muß weggelassen oder geändert werden?

                        Gruß

                        Joachim

                        1 Reply Last reply Reply Quote 0
                        • kmxak
                          kmxak Most Active last edited by

                          node ist ja nun schon drauf dann noch

                          sudo apt-get install build-essential python python-rpi.gpio
                          

                          nachinstallieren.

                          Ich persönlich würde nochmals den (/opt/)iobroker ordner löschen neu anlegen chmod 777 setzen und nochmal die iobroker installation probieren

                          1 Reply Last reply Reply Quote 0
                          • H
                            hajo48 last edited by

                            @kmxak:

                            node ist ja nun schon drauf dann noch

                            sudo apt-get install build-essential python python-rpi.gpio
                            

                            nachinstallieren.

                            Hallo Alex,

                            vielen Dank für deinen Tip aber trotzdem kein Erfolg erst dauert es eine Ewigkeit bis ioBroker Installation startet, hier mein Logg:

                            login as: pi

                            pi@192.168.xxxxxx password:

                            pi@raspberrypi:~ $ sudo mkdir /opt/iobroker

                            mkdir: das Verzeichnis „/opt/iobroker“ kann nicht angelegt werden: Die Datei exi stiert bereits

                            pi@raspberrypi:~ $ sudo chmod 777 /opt/iobroker

                            pi@raspberrypi:~ $ cd /opt/iobroker

                            pi@raspberrypi:/opt/iobroker $ sudo npm install iobroker –unsafe-perm

                            |

                            iobroker@0.9.0 install /opt/iobroker/node_modules/iobroker

                            node lib/setup.js

                            npm install iobroker.js-controller --production --prefix /opt/iobroker

                            npm install iobroker.admin --production --prefix /opt/iobroker

                            npm install iobroker.discovery --production --prefix /opt/iobroker

                            In file included from ../src/dns_sd.cpp:1:0:

                            ../src/mdns.hpp:32:20: fatal error: dns_sd.h: Datei oder Verzeichnis nicht gefun den

                            #include <dns_sd.h>^

                            compilation terminated.

                            make: *** [Release/obj.target/dns_sd_bindings/src/dns_sd.o] Error 1

                            gyp ERR! build error

                            gyp ERR! stack Error: make failed with exit code: 2

                            gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_ modules/node-gyp/lib/build.js:276:23)

                            gyp ERR! stack at emitTwo (events.js:87:13)

                            gyp ERR! stack at ChildProcess.emit (events.js:172:7)

                            gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_proces s.js:211:12)

                            gyp ERR! System Linux 4.4.50+

                            gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_mod ules/node-gyp/bin/node-gyp.js" "rebuild"

                            gyp ERR! cwd /opt/iobroker/node_modules/iobroker.discovery/node_modules/mdns

                            gyp ERR! node -v v4.8.3

                            gyp ERR! node-gyp -v v3.4.0

                            gyp ERR! not ok

                            npm WARN optional dep failed, continuing mdns@2.3.3

                            node-pre-gyp ERR! Tried to download(404): https://github.com/EmergingTechnologyA dvisors/node-serialport/releases/download/4.0.7/serialport-v4.0.7-node-v46-linux -arm.tar.gz

                            node-pre-gyp ERR! Pre-built binaries not found for serialport@4.0.7 and node@4.8 .3 (node-v46 ABI) (falling back to source compile with node-gyp)

                            Write "./iobroker start" to start the ioBroker

                            : Datei oder Verzeichnis nicht gefunden

                            Auto-start was enabled. Write "update-rc.d -f iobroker.sh remove" to disable auto-start

                            iobroker is started. Go to "http://ip-addr:8081" to open the admin UI.

                            iobroker@0.9.0 node_modules/iobroker

                            └── yargs@7.1.0 (get-caller-file@1.0.2, decamelize@1.2.0, camelcase@3.0.0, y18n@3.2.1, wh ich-module@1.0.0, set-blocking@2.0.0, yargs-parser@5.0.0, require-main-filename@1.0.1, re quire-directory@2.1.1, cliui@3.2.0, os-locale@1.4.0, string-width@1.0.2, read-pkg-up@1.0. 1)

                            pi@raspberrypi:/opt/iobroker $</dns_sd.h>

                            1 Reply Last reply Reply Quote 0
                            • D
                              DeepCore last edited by

                              Diesen Fehler hatte ich heute auch bei einer Testinstallation in Virtualbox und Debian 8 …
                              ` > …

                              npm install iobroker.discovery --production --prefix /opt/iobroker

                              In file included from ../src/dns_sd.cpp:1:0:

                              ../src/mdns.hpp:32:20: fatal error: dns_sd.h: Datei oder Verzeichnis nicht gefun den

                              #include <dns_sd.h>^

                              compilation terminated.

                              ...</dns_sd.h> `

                              Meine Lösung war folgende, ausgehend von einem frisch installierten Debian 8 64-bit System:

                              # Using Debian, as root
                              apt-get update
                              apt-get upgrade
                              apt-get install build-essential python libavahi-compat-libdnssd-dev
                              
                              apt-get install curl
                              
                              curl -sL https://deb.nodesource.com/setup_4.x | bash -
                              apt-get install -y nodejs
                              
                              npm install node-gyp
                              npm install mdns
                              
                              mkdir /opt/iobroker
                              chmod 777 /opt/iobroker
                              cd /opt/iobroker
                              npm install --unsafe-perm iobroker
                              
                              

                              ioBroker muss dann trotzdem noch manuell gestartet werden

                              ./iobroker start
                              
                              1 Reply Last reply Reply Quote 0
                              • kmxak
                                kmxak Most Active last edited by

                                das wird nicht gehen mit

                                curl -sL https://deb.nodesource.com/setup_4.x | bash -
                                apt-get install -y nodejs
                                
                                

                                er hat nen pi1 da brauchst wie oben schon erwähnt ein anderes node

                                1 Reply Last reply Reply Quote 0
                                • D
                                  DeepCore last edited by

                                  @kmxak

                                  Meine Antwort bezog sich auf den Fehler bei der Installation von iobroker.discovery, wo eine fehlende Datei bemängelt wird

                                  ../src/mdns.hpp:32:20: fatal error: dns_sd.h: Datei oder Verzeichnis nicht gefunden
                                  

                                  Geht den libavahi-compat-libdnssd-dev auf dem Pi 1?

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  872
                                  Online

                                  31.9k
                                  Users

                                  80.1k
                                  Topics

                                  1.3m
                                  Posts

                                  6
                                  17
                                  3425
                                  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