Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - eibd Error "initilization of the EIBnet/IP server failed" (eibd unter Debian)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    KNX/EIB - √ - eibd Error "initilization of the EIBnet/IP server failed" (eibd unter Debian)

    Hallo zusammen,

    mein eibd startet beim init nicht zuverlässig unter Debian (HW: Alix1.D).
    Ca. bei jedem 2. Booten bricht der eibd gleich nach dem Starten mit
    Code:
    initilization of the EIBnet/IP server failed
    ab.

    Alle Ausgaben aus dem Log:
    Code:
    Layer 7(00000000,4F8887CD) EIBD should not run as root
    Layer 2(0823F668,4F8887CD) Open
    Layer 2(0823F668,4F8887CD) Openend
    Layer 3(0824FAC0,4F8887CD) Open
    Layer 2(0823F668,4F8887CD) open-reset(001): 01
    Layer 8(0823F768,4F8887CD) OpenInetSocket 6720
    Layer 8(0823F768,4F8887CD) InetSocket opened
    Layer 8(082701A8,4F8887CD) OpenLocalSocket
    Layer 8(082701A8,4F8887CD) LocalSocket opened
    Layer 8(08280540,4F8887CD) Open
    Layer 0(082809B8,4F8887CD) Open
    Layer 0(082809B8,4F8887CD) Openend
    Layer 0(082809B8,4F8887CD) Close
    initilization of the EIBnet/IP server failed
    Gestartet wird er via /etc/init.d/eibd:
    Code:
    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          eibd
    # Required-Start:    $remote_fs $syslog
    # Required-Stop:     $remote_fs $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Initscript of EIB deamon
    # Description:       The EIB deamon handles the communication for the
    #                    KNX home automation bus.
    ### END INIT INFO
    
    # Author: Olaf Seidel
    #
    
    # Do NOT "set -e"
    # For bugfixing only:
    # set -x
    # exec >> /tmp/eibd_start.log 2>&1
    # echo "****************  EIBD Init Startscript beginnt hier *****************"
    # date
    
    # PATH should only include /usr/* if it runs after the mountnfs.sh script
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    DESC="EIB deamon"
    NAME=eibd
    DAEMON=/usr/bin/$NAME
    # Olaf Seidel, 14.04.2012: -S disabled. Servermode leads to error "initilization of the EIBnet/IP server failed"
    # sometimes during init
    # DAEMON_ARGS=" -D -T -S -i -c -t1023 --daemon=/var/log/eib.log -u --pid-file=/var/run/eibd.pid tpuarts:/dev/ttyS0"
    DAEMON_ARGS=" -D -T -i -c -t1023 --daemon=/var/log/eib.log -u --pid-file=/var/run/eibd.pid tpuarts:/dev/ttyS0"
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    
    # Exit if the package is not installed
    [ -x "$DAEMON" ] || exit 0
    
    # Read configuration variable file if it is present
    [ -r /etc/default/$NAME ] && . /etc/default/$NAME
    
    # Load the VERBOSE setting and other rcS variables
    . /lib/init/vars.sh
    
    # Define LSB log_* functions.
    # Depend on lsb-base (>= 3.2-14) to ensure that this file is present
    # and status_of_proc is working.
    . /lib/lsb/init-functions
    
    #
    # Function that starts the daemon/service
    #
    do_start()
    {
            # necessary pause (reason unknown)
            sleep 1
            setserial /dev/ttyS0 uart none
            setserial /dev/ttyS0 autoconfig
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
            || return 1
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
            $DAEMON_ARGS \
            || return 2
            # set the access rights for the unix socket /tmp/eib, so that the webbrowser (in detail: comet visu)
            # is able to write to it.
            sleep 1   # give the deamon time for the socket creation
            chmod a+w /tmp/eib
        # Add code here, if necessary, that waits for the process to be ready
        # to handle requests from services started subsequently which depend
        # on this one.  As a last resort, sleep for some time.
    }
    
    #
    # Function that stops the daemon/service
    #
    do_stop()
    {
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        # If the above conditions are not satisfied then add some other code
        # that waits for the process to drop all resources that could be
        # needed by services started subsequently.  A last resort is to
        # sleep for some time.
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return "$RETVAL"
    }
    
    #
    # Function that sends a SIGHUP to the daemon/service
    #
    do_reload() {
        #
        # If the daemon can reload its configuration without
        # restarting (for example, when it is sent a SIGHUP),
        # then implement that here.
        #
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
        return 0
    }
    
    case "$1" in
      start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
            0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
            2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
      stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
            0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
            2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
      status)
           status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
           ;;
      #reload|force-reload)
        #
        # If do_reload() is not implemented then leave this commented out
        # and leave 'force-reload' as an alias for 'restart'.
        #
        #log_daemon_msg "Reloading $DESC" "$NAME"
        #do_reload
        #log_end_msg $?
        #;;
      restart|force-reload)
        #
        # If the "reload" option is implemented then remove the
        # 'force-reload' alias
        #
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
            do_start
            case "$?" in
                0) log_end_msg 0 ;;
                1) log_end_msg 1 ;; # Old process is still running
                *) log_end_msg 1 ;; # Failed to start
            esac
            ;;
          *)
              # Failed to stop
            log_end_msg 1
            ;;
        esac
        ;;
      *)
        #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
        exit 3
        ;;
    esac
    
    :
    Das Problem scheint eine Race-Condition zu sein.
    Denn:
    Nach dem Booten kann ich den eibd mit dem Startscript starten und stoppen wie ich lustig bin, ohne den oben genannten Fehler reproduzieren zu können.
    Da funktionierts dann einfach zuverlässig.

    Es klappt auch zuverlässig beim init, wenn ich beim Starten die Option -S (Server part) weglasse.

    Was macht denn der Server-Part eigentlich?
    Geht ohne den Server-Part Tunneling / Routing?

    Ich möchte einerseits eine Visu drauf laufen haben.
    Andererseits möchte ich vom Windows aus mittels der ETS auf den Bus zugreifen.
    Für letzteres brauche ich Tunneling, oder?

    Vielleicht kann mich ja auch der Martin Koegler ein wenig aufschlauen, damit ich die Zusammenhänge besser verstehen.

    Wünsch Euch allen jedenfalls noch ein schönes Wochenende!
    Ciao
    Olaf
    Nichts ist so gerecht verteilt, wie der Verstand.
    Jeder meint, genug davon zu haben.

    #2
    Hoi

    http://www.auto.tuwien.ac.at/~mkoegler/eib/sdkdoc-0.0.5.pdf
    Manual: S163
    Grüsse Bodo
    Fragen gehören ins Forum, und nicht in mein Postfach;
    EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

    Kommentar


      #3
      Hi Olaf

      Die üblichen Verdächtigen:

      1. Bei Required-Start: mal $network einfügen, könnte helfen
      2. /etc/rc2.d und die anderen rc.. überprüfen, und evtl. für den eibd die Zahl erhöhen (z.B. @S17eibd auf @S50eibd)
      3. Im Startscript mal mit sleep 5 oder so experimentieren
      4. Mit cat /etc/network/interfaces mal nachsehen ob das Interface beim Booten aktiviert wird. Sollte das enthalten:

      auto lo eth0

      Das hatte ich alles schon mal.

      Gruß, Martin

      Kommentar


        #4
        Mahlzeit,

        Der Bodo wieder!
        Vielen Dank für den Link.
        Das ist ja ein sehr interessantes Doc. Muss ich mir bei Gelegenheit mal auf der Zungen zergehen lassen.

        Zitat von Sipple Beitrag anzeigen
        Hi Olaf

        Die üblichen Verdächtigen:

        1. Bei Required-Start: mal $network einfügen, könnte helfen
        Macht keine Unterschied. Der Fehler tritt genauso weiterhin auf.

        Zitat von Sipple Beitrag anzeigen
        2. /etc/rc2.d und die anderen rc.. überprüfen, und evtl. für den eibd die Zahl erhöhen (z.B. @S17eibd auf @S50eibd)
        Ich hatte @S98eibd und @S99linknx.
        Hab vorsichtshalber nochmal geprüft:
        Das LINKNX steht noch auf 99, aber den EIBD hat wer auf 18 zurück gestellt. Kann das das rcconf gewesen sein?
        Ok, wieder auf @S98eibd umgestellt:
        Bringt auch keine Abhilfe. Fehler tritt weiterhin auf.

        Zitat von Sipple Beitrag anzeigen
        3. Im Startscript mal mit sleep 5 oder so experimentieren
        Bei start hab ich nen
        Code:
        sleep 5
        eingefügt.
        Das behebt den Fehler. Nach ca. 10 Reboots wage ich zu behaupten, das System läuft stabil hoch.

        Zitat von Sipple Beitrag anzeigen
        4. Mit cat /etc/network/interfaces mal nachsehen ob das Interface beim Booten aktiviert wird. Sollte das enthalten:

        auto lo eth0
        Puuuh, jetzt kommen wir in Regionen, wo ich nicht mehr den Hauch von Ahnung hab.

        Hier mal meine /etc/network/interfaces
        (eth0 fehlt bei auto)

        Code:
        # The loopback network interface
        auto lo
        iface lo inet loopback
        
        # The primary network interface
        allow-hotplug eth0
        iface eth0 inet dhcp
        Hab mich schnell mal ein bisschen eingelesen.

        eth0 wird bei mir also nicht beim Booten gestartet.
        Ich vermute mal, hier liegt das Problem.

        Kann es sein, dass man eth0 gar nicht beim Booten starten kann, wenn es auf DHCP steht?
        Ist das DHCP das Problem? Sollte ich lieber eine statische IP verwenden?

        Leg ich mir ein Ei mit dem DHCP, weil der Eibnet Server Part nicht starten kann, bevor ich eine DHCP-Adresse zugewiesen bekommen habe?

        Jetzt bin ich schon wieder einen Riesenschritt weiter!
        Vielen Dank für die Hilfe!!!
        Ciao
        Olaf
        Nichts ist so gerecht verteilt, wie der Verstand.
        Jeder meint, genug davon zu haben.

        Kommentar


          #5
          Hab jetzt trotz DHCP
          Code:
          auto lo eth0
          eingetragen und gleichzeitig den
          Code:
          sleep 5
          wieder rausgenommen.

          Funktioniert!!!
          Ciao
          Olaf
          Nichts ist so gerecht verteilt, wie der Verstand.
          Jeder meint, genug davon zu haben.

          Kommentar


            #6
            Servus

            eth0 wird bei mir also nicht beim Booten gestartet.
            Ich vermute mal, hier liegt das Problem.

            Kann es sein, dass man eth0 gar nicht beim Booten starten kann, wenn es auf DHCP steht?
            Ist das DHCP das Problem? Sollte ich lieber eine statische IP verwenden?
            Da haben wir es- mein Lieblingsproblem

            Also DHCP macht bei mir keinerlei Probleme. Hast Du webmin installiert? Sehr zu empfehlen!
            Wenn ja, kannst du das ganz einfach machen.
            Links im Menü auf
            Netzwerk->Netzwerkkonfiguration
            dann auf das Netzwerkschnittstellen Icon
            und danach auf Schnittstellen, die beim Booten aktiviert werden.
            Da dann auf eth0 klicken und in dem Dialog der da auftaucht
            den Haken setzen bei Aktiviere beim Booten.
            Das hat bei mir bisher IMMER das Problem gelöst. Mache ich schon aus Routine.
            Ansonsten schreibst halt in der /etc/network/interfaces hinter auto auch noch eth0. Bei mir sieht das so aus, auch alix1d:

            Code:
            # The loopback network interface
            auto lo eth0
            iface lo inet loopback
            
            # The primary network interface
            allow-hotplug eth0
            iface eth0 inet dhcp
            Gruß, Martin

            Mist, zu langsam :-)

            Kommentar


              #7
              Hallo Martin,

              Zitat von Sipple Beitrag anzeigen
              Da haben wir es- mein Lieblingsproblem
              Schön, dass ich dir eine Freude machen konnte.

              Zitat von Sipple Beitrag anzeigen
              Hast Du webmin installiert? Sehr zu empfehlen!
              Nein, hab ich nicht. Bin aber schwer am überlegen. Makki packt das ja aufs Wiregate mit drauf - kann also nicht schlecht sein.
              Und jetzt empfiehlst du das auch - werd ich es mal installieren.


              Zitat von Sipple Beitrag anzeigen
              Mist, zu langsam :-)

              Und vielen Dank nochmal für die Superhilfe!
              Ciao
              Olaf
              Nichts ist so gerecht verteilt, wie der Verstand.
              Jeder meint, genug davon zu haben.

              Kommentar

              Lädt...
              X