ejabberd Server neuerdings instabil

B

brudell

Grünschnabel
Hi Leute,

ich nutze auf meinem Raspberry Pi [Raspbian Linux wasar 3.10.23+ #608 PREEMPT Mon Dec 9 21:11:23 GMT 2013 armv6l GNU/Linux] einen ejabberd Server.

Heute früh, 14.12.2013 um 3 Uhr, crashte der Server. Seither konnte ich ihn noch einmal starten. Im ejabberd.log ist nichts zusehen. Ich poste euch daher mal das aktuelle "Problem". Beim Starten schien es so, als ob eine zweite Instanz aktiv wäre, dies war jedoch zu keinem Zeitpunkt der Fall.

Was läuft da schief?

Code:
 =ERROR REPORT==== 2013-12-14 12:07:10 ===
E(<0.276.0>:ejabberd_listener:512) : Failed to open socket:
  {5222,ejabberd_c2s,[inet,{ip,{0,0,0,0}}]}
Reason: IP address and port number already used: 0.0.0.0 5222

=INFO REPORT==== 2013-12-14 12:07:10 ===
I(<0.40.0>:cyrsasl_digest:44) : FQDN used to check DIGEST-MD5 SASL authentication: "wysar"

=ERROR REPORT==== 2013-12-14 12:07:10 ===
C(<0.40.0>:gen_mod:75) : Problem starting the module mod_adhoc for host "brudell.dyndns.org"
 options: []
 exit: {noproc,
           {gen_server,call,
               [ejabberd_iq_sup,
                {start_child,["brudell.dyndns.org",mod_adhoc,process_local_iq]},
                infinity]}}

=ERROR REPORT==== 2013-12-14 12:07:10 ===
C(<0.40.0>:gen_mod:80) : ejabberd initialization was aborted because a module start failed.

=ERROR REPORT==== 2013-12-14 12:07:52 ===
E(<0.255.0>:ejabberd_listener:512) : Failed to open socket:
  {5222,ejabberd_c2s,[inet,{ip,{0,0,0,0}}]}
Reason: IP address and port number already used: 0.0.0.0 5222

=INFO REPORT==== 2013-12-14 12:07:52 ===
I(<0.40.0>:cyrsasl_digest:44) : FQDN used to check DIGEST-MD5 SASL authentication: "wasar"

=ERROR REPORT==== 2013-12-14 12:07:52 ===
C(<0.40.0>:gen_mod:75) : Problem starting the module mod_adhoc for host "brudell.dyndns.org"
 options: []
 exit: {noproc,
           {gen_server,call,
               [ejabberd_iq_sup,
                {start_child,["brudell.dyndns.org",mod_adhoc,process_local_iq]},
                infinity]}}

=ERROR REPORT==== 2013-12-14 12:07:52 ===
C(<0.40.0>:gen_mod:80) : ejabberd initialization was aborted because a module start failed.

Code:
=CRASH REPORT==== 14-Dec-2013::12:07:52 ===
  crasher:
    initial call: supervisor:ejabberd_listener/1
    pid: <0.255.0>
    registered_name: ejabberd_listeners
    exception exit: {bad_return_value,{eaddrinuse,{5222,{0,0,0,0},tcp}}}
      in function  gen_server:init_it/6 (gen_server.erl, line 332)
    ancestors: [ejabberd_sup,<0.40.0>]
    messages: []
    links: [<0.219.0>]
    dictionary: []
    trap_exit: true
    status: running
    heap_size: 987
    stack_size: 24
    reductions: 614
  neighbours:

=SUPERVISOR REPORT==== 14-Dec-2013::12:07:52 ===
     Supervisor: {local,ejabberd_sup}
     Context:    start_error
     Reason:     {bad_return_value,{eaddrinuse,{5222,{0,0,0,0},tcp}}}
     Offender:   [{pid,undefined},
                  {name,ejabberd_listener},
                  {mfargs,{ejabberd_listener,start_link,[]}},
                  {restart_type,permanent},
                  {shutdown,infinity},
                  {child_type,supervisor}]

Ist die box geowned worden?
bye Brudell
 
Du solltest mal mittels 'netstat' oder 'lsof -i' schauen welcher Prozess dort den Port 5222 benutzt. Die Meldungen 'eaddrinuse' und 'IP address and port number already used: 0.0.0.0 5222' sind ja recht eindeutig.
 
Also ich habe das sofort getan. Jedoch zeigten beide nichts nennenswertes an:

Code:
 ~ $ sudo netstat -anv
Aktive Internetverbindungen (Server und stehende Verbindungen)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:6547            0.0.0.0:*               LISTEN
tcp        0    448 77.65.239.173:6547      77.65.207.89:33172      VERBUNDEN
udp        0      0 0.0.0.0:44834           0.0.0.0:*
udp        0      0 0.0.0.0:68              0.0.0.0:*
udp        0      0 77.65.239.173:123       0.0.0.0:*
udp        0      0 127.0.0.1:123           0.0.0.0:*
udp        0      0 0.0.0.0:123             0.0.0.0:*

Die eine offenen Verbindung oben ist SSH.

Code:
 ~ $ sudo lsof -iTCP -sTCP:LISTEN
COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
epmd    1837 ejabberd    3u  IPv4   2433      0t0  TCP *:epmd (LISTEN)
sshd    2579     root    3u  IPv4   3431      0t0  TCP *:6547 (LISTEN)

Code:
 ~ $ sudo lsof -i
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
epmd     1837 ejabberd    3u  IPv4   2433      0t0  TCP *:epmd (LISTEN)
ntpd     2402      ntp   16u  IPv4   2958      0t0  UDP *:ntp
ntpd     2402      ntp   17u  IPv4   2962      0t0  UDP localhost:ntp
ntpd     2402      ntp   19u  IPv4   3439      0t0  UDP 77-65-239-173.dynamic.pimacom.net:ntp
dhclient 2534     root    8u  IPv4   2473      0t0  UDP *:bootpc
dhclient 2534     root   20u  IPv4   2447      0t0  UDP *:44834
sshd     2579     root    3u  IPv4   3431      0t0  TCP *:6547 (LISTEN)
sshd     2643     root    3u  IPv4   3613      0t0  TCP 77-65-239-173.dynamic.pimacom.net:6547->77-65-207-89.dynamic.pimacom.net:33172 (ESTABLISHED)
sshd     2722       pi    3u  IPv4   3613      0t0  TCP 77-65-239-173.dynamic.pimacom.net:6547->77-65-207-89.dynamic.pimacom.net:33172 (ESTABLISHED)

Da ich nichts sehe, dachte ich die Box sei geowned worden. rkhunter, chkrootkit sagen jedoch nichts interessantes. Nur chkrootkit meinte eine Bindshell wäre aktiv. Dem ging ich via google nach und viele diskutierten in Foren über das "false positiv".

Zudem habe ich an dem Server, der vorher 4 Wochen total stabil lief, außer dist-upgrades, nichts weiter verändert. Daher wunderte mich der Crash des ejabberd Servers.
 
Zuletzt bearbeitet:
Aus den oberen logs hervorgehend, kann es ja kein Dienst auf dem Port 5222 sein. Ich suchte daher einmal weiter.

Im erl_crash.dump File stand als "Slogan" folgendes:

Code:
 Sun Dec 15 16:13:33 2013
Slogan: Kernel pid terminated (application_controller) ({application_terminated,mnesia,killed})
System version: Erlang R15B01 (erts-5.9.1) [source] [async-threads:0] [kernel-poll:false]
Compiled: Wed Feb 13 05:21:13 2013
Taints: crypto
Atoms: 12179

Ich googelte einmal den Slogan. Leider hatte niemand ein "passendes Problem" oder eine passende Lösung parat. Die Konfigurationen unterschieden sich sehr stark, weshalb mir deren Lösung so nicht half. Ich fand nur heraus, dass es wohl ein overload der mnesia Datenbank geben könnte. Komisch, ich habe auf meinem Server nur 4 User - daher unmöglich das es dieses Problem sein kann.

Ich starte den Server sonst immer über
Code:
sudo /etc/init.d/ejabberd start
und dabei enstanden die oben genannten Fehler.

Nun startete ich den Server einmal per
Code:
 sudo ejabberd -detached
und siehe da er läuft.

Nun kann es also auch das init-Skript sein, welches etwas "falsch macht". Ich habe es jedoch nicht verändert. Es wundert mich daher also, woher der Fehler stammt.

Ich kann leider kein Bash; sieht jemand etwas verdächtiges?

Code:
#! /bin/sh
#
# ejabberd        Start/stop ejabberd server
#

### BEGIN INIT INFO
# Provides:          ejabberd
# Required-Start:    $remote_fs $network $named $time
# Required-Stop:     $remote_fs $network $named $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts ejabberd jabber server
# Description:       Starts ejabberd jabber server, an XMPP
#                    compliant server written in Erlang.
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
EJABBERD=/usr/sbin/ejabberd
EJABBERDCTL=/usr/sbin/ejabberdctl
EJABBERDRUN=/var/run/ejabberd
EJABBERDUSER=ejabberd
NAME=ejabberd

test -f $EJABBERD || exit 0
test -f $EJABBERDCTL || exit 0

# Include ejabberd defaults if available
if [ -f /etc/default/ejabberd ] ; then
    . /etc/default/ejabberd
fi

ctl()
{
    action="$1"
    su $EJABBERDUSER -c "$EJABBERDCTL $action" >/dev/null
}

mkrundir()
{
    if [ ! -d $EJABBERDRUN ]; then
        mkdir -p $EJABBERDRUN
        if [ $? -ne 0 ]; then
            echo -n " failed"
            return
        fi
        chmod 0755 $EJABBERDRUN
        chown ejabberd:ejabberd $EJABBERDRUN
    fi
}

start()
{
    mkrundir

    cd /var/lib/ejabberd
    su $EJABBERDUSER -c "$EJABBERD -noshell -detached"

    cnt=0
    while ! (ctl status || test $? = 1) ; do
        echo -n .
        cnt=`expr $cnt + 1`
        if [ $cnt -ge 60 ] ; then
            echo -n " failed"
            break
        fi
        sleep 1
    done
}

stop()
{
    if ctl stop ; then
        cnt=0
        sleep 1
        while ctl status || test $? = 1 ; do
            echo -n .
            cnt=`expr $cnt + 1`
            if [ $cnt -ge 60 ] ; then
                echo -n " failed"
                break
            fi
            sleep 1
        done
    else
        echo -n " failed"
    fi
}

live()
{
    mkrundir

    echo '*******************************************************'
    echo '* To quit, press Ctrl-g then enter q and press Return *'
    echo '*******************************************************'
    echo

    cd /var/lib/ejabberd
    exec su $EJABBERDUSER -c "$EJABBERD"
}

case "$1" in
    start)
        echo -n "Starting jabber server: $NAME"
        if ctl status ; then
            echo -n " already running"
        else
            start
        fi
    ;;
    stop)
        echo -n "Stopping jabber server: $NAME"
        if ctl status ; then
            stop
        else
            echo -n " already stopped"
        fi
    ;;
    restart|force-reload)
        echo -n "Restarting jabber server: $NAME"
        if ctl status ; then
            stop
            start
        else
            echo -n " is not running. Starting $NAME"
            start
        fi
    ;;
    live)
        if ctl status ; then
            echo -n "ejabberd is already running"
        else
            live
        fi
    ;;
    *)
        echo "Usage: $0 {start|stop|restart|force-reload|live}" >&2
        exit 1
    ;;
esac

if [ $? -eq 0 ]; then
    echo .
else
    echo " failed."
fi

exit 0

Mein letzter Gedanke wäre sonst noch, dass der User "ejabberd" irgendwie andere Rechte / Gruppen zugeteilt bekommen hat. Auch hier habe ich aktiv nichts geändert. Wäre dies auch eine mögliche Ursache?
 

Ähnliche Themen

Debian Routing Problem

zwei Sambaserver binden

Pacemaker XEN HA

xrandr: cant open display

VPN verbindet nichtmehr

Zurück
Oben