EIBD Init Script

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
sharkx
Beiträge: 26
Registriert: 11.03.2010 21:19:03

EIBD Init Script

Beitrag von sharkx » 06.01.2011 20:12:57

Hallo und Guten Abend,

ich habe irgendwo im Netz dieses Init Script für EIBD gefunden. Allerdings startet dieses mein EIBD nicht automatisch. Ich bin nicht derjenige, der scripten kann. Geschweigedenn habe ich viel Ahnung von debian. Ich hoffe daher, das sich jemand das Problem anschaut und mir das ganze lauffähig abändert.

Code: Alles auswählen

#! /bin/sh
### BEGIN INIT INFO
# Provides: eibd
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start eibd service at the end of boot
# Description: This services is for communications with knx/eib.
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Description of the service"
NAME=eibd
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="-D -T -S -d -i --pid-file=/var/run/eibd.pid usb:4:2:1:0:0"
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.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
# 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
# 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()
In den Startparametern des EIBD Dienstes wird eine USB Schnittstelle übergeben. Die Adresse dazu finde ich mittels

Code: Alles auswählen

findknxusb
. Toll wäre es, wenn zuerst die Adresse ermittelt wird, und dann als Parameter übergeben wird. So muss ich nicht immer die Adresse von Hand ändern.


Vielen Dank.

Torsten

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: EIBD Init Script

Beitrag von cosmac » 06.01.2011 22:49:12

hi,

so wie du es hier gepostet hast, ist es nur ein halbes Init-Script, lade es bitte mal als Datei nach NoPaste rauf. Die Hälfte scheint aber gut zu Debian zu passen, also besteht Hoffnung ;)

Für die USB-Parameter wäre im Prinzip diese Zeile

Code: Alles auswählen

DAEMON_ARGS="-D -T -S -d -i --pid-file=/var/run/eibd.pid usb:4:2:1:0:0"
durch etwas in dieser Art zu ersetzen:

Code: Alles auswählen

USBID=$(findknxusb | cut -d' ' -f2)
DAEMON_ARGS="-D -T -S -d -i --pid-file=/var/run/eibd.pid usb:$USBID"
Falls findknxusb mehr als eine Zeile ausgibt, wird es komplizierter, poste auf jeden Fall mal seine Ausgabe.
Beware of programmers who carry screwdrivers.

sharkx
Beiträge: 26
Registriert: 11.03.2010 21:19:03

Re: EIBD Init Script

Beitrag von sharkx » 07.01.2011 12:25:32

So, das Script liegt hier http://debianforum.de/forum/pastebin.ph ... ew&s=35193.
Die Ausgabe von findknxusb ist folgende:

Code: Alles auswählen

root@obelix:/home/torsten# findknxusb
Possible addresses for KNX USB devices:
device: 4:2:1:0:0 (Merten GmbH & Co. KG:KNX-USB Data Interface)
root@obelix:/home/torsten#
Es können theoretisch mehrere USB Device gefunden werden. Es ist aber unwahrscheinlich, das sich jemand mehrere zulegt. Weil Quatsch. Mehr als mit einer kannste eh nix machen. Von daher würde das erste device reichen.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: EIBD Init Script

Beitrag von cosmac » 07.01.2011 16:31:14

also, das Script selbst funktioniert wohl, aber mangels EIB-Hardware läuft hier nicht wirklich viel. Was passiert denn, wenn du den eibd von Hand startest (als root)? Die vielen "-D -T usw." stimmen schon für deine Anwendung?

Code: Alles auswählen

eibd -D -T -S -d -i usb:4:2:1:0:0
Wenn das funktionieren sollte, probier mal diese beiden:

Code: Alles auswählen

eibd -D -T -S -d -i --pid-file=/var/run/eibd.pid  usb:4:2:1:0:0
eibd -D -T -S -d --pid-file=/var/run/eibd.pid  -i usb:4:2:1:0:0
Wenn es nicht funktioniert und trotzdem keine Fehlermeldung ausgegeben wird, kannst du in /var/log/syslog nachschauen und/oder den eibd so starten und dann die Datei /tmp/eibd-strace nach NoPaste rauf laden:

Code: Alles auswählen

strace -f -o /tmp/eibd-strace eibd -D ...usw.
Beware of programmers who carry screwdrivers.

sharkx
Beiträge: 26
Registriert: 11.03.2010 21:19:03

Re: EIBD Init Script

Beitrag von sharkx » 07.01.2011 16:40:35

Die Parameter stimmen schon. Derzeit starte ich mein eibd ja so von Hand. Er startet eben nur nicht automatisch nach einem systemstart.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: EIBD Init Script

Beitrag von cosmac » 07.01.2011 16:46:54

startest du ihn denn von Hand mit der Option "--pid-file"? Ich vermute nämlich, dass diese Option im Script vor das "-i" gehört, so wie im 2. code-Block im vorigen Posting.
Beware of programmers who carry screwdrivers.

sharkx
Beiträge: 26
Registriert: 11.03.2010 21:19:03

Re: EIBD Init Script

Beitrag von sharkx » 07.01.2011 17:00:34

Ich habe den Parameter pid-file mit -i getauscht. Startet trotzdem nicht beim Systemstart. und Strace gibts bei mir nicht?!

sharkx
Beiträge: 26
Registriert: 11.03.2010 21:19:03

Re: EIBD Init Script

Beitrag von sharkx » 07.01.2011 17:05:38

apt-get install strace :)

http://debianforum.de/forum/pastebin.ph ... ew&s=35194Hier das eibd strace ding ;)

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: EIBD Init Script

Beitrag von cosmac » 07.01.2011 17:23:45

wird das Script beim Systemstart überhaupt ausgeführt? Hat das Script die richtigen Rechte ("-rwxr-xr-x 1 root root") und ist in /etc/rc2.d/ richtig verlinkt?

Code: Alles auswählen

S99eibd -> ../init.d/eibd
Falls nicht: wenn du lenny benutzt, wird der Link so erstellt:

Code: Alles auswählen

cd /etc/rc2.d
ln -s ../init.d/eibd S99eibd
oder wenn du squeeze hast, so (dabei wird eine kleinere Zahl als 99 automatisch erzeugt):

Code: Alles auswählen

insserv
beides darf keine Fehlermeldung geben.
Beware of programmers who carry screwdrivers.

sharkx
Beiträge: 26
Registriert: 11.03.2010 21:19:03

Re: EIBD Init Script

Beitrag von sharkx » 07.01.2011 22:31:42

Das script liegt in /etc/init.d/eibd, es hat die richtigen Rechte. Ich habe es mit insserv eingepflegt. Trotzdem startet eibd nach einem systemstart nicht :/

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: EIBD Init Script

Beitrag von cosmac » 08.01.2011 10:33:01

dann fällt mir nur noch eine Notlösung ein. Schreib den Aufruf, so wie er von Hand funktioniert, in /etc/rc.local vor das "exit". Diese Datei muss auch ausführbar sein, braucht aber keine Links und keine sonstigen Tricks.
Beware of programmers who carry screwdrivers.

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: EIBD Init Script

Beitrag von bmario » 08.01.2011 13:32:05

mal ein

Code: Alles auswählen

update-rc.d eibd defaults
ausgeführt?

Und funktioniert es denn, wenn du /etc/init.d/eibd start aufrufst?
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

sharkx
Beiträge: 26
Registriert: 11.03.2010 21:19:03

Re: EIBD Init Script

Beitrag von sharkx » 08.01.2011 17:30:10

Code: Alles auswählen

update-rc.d eibd defaults
ausgeführt. Nix.

Code: Alles auswählen

/etc/init.d/ eibd start
händisch ausgeführt. Eibd startet wie gewollt.

Ich bin ratlos :/

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: EIBD Init Script

Beitrag von bmario » 08.01.2011 17:35:45

Dann liegt es definitiv an der Verlinkung in den Runleveln, such mal in den Ordnern /etc/rcS.d und /etc/rc2.d nach eibd...
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

sharkx
Beiträge: 26
Registriert: 11.03.2010 21:19:03

Re: EIBD Init Script

Beitrag von sharkx » 08.01.2011 18:24:47

in /etc/rc2.d/ gibt es den eintrag

Code: Alles auswählen

lrwxrwxrwx  1 root root   14  4. Jan 21:31 S17eibd -> ../init.d/eibd
Die Datei hat ja root Rechte, findknxusb braucht ebenfalls root Rechte. Gibt es da vllt ein Fehler im Script?

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: EIBD Init Script

Beitrag von bmario » 08.01.2011 19:39:31

Hm vlt. spinnt da die Reihenfolge der Init-Skripte... laut LSB-Headers sollte es zwar mit als letztes Skript beim Start ausgeführt werden, aber zeige mal die Ausgabe von

Code: Alles auswählen

ls /etc/rc.d
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

sharkx
Beiträge: 26
Registriert: 11.03.2010 21:19:03

Re: EIBD Init Script

Beitrag von sharkx » 08.01.2011 19:54:13

Code: Alles auswählen

/etc/rc.d
gibt es bei mir nicht.

Code: Alles auswählen

root@obelix:/etc# ls /etc/rc0.d
K01eibd     K02atd    K02nfs-kernel-server  K02proftpd  K02transmission-daemon  K02virtualbox-ose  K03sendsigs  K05umountnfs.sh  K06portmap     K07networking  K09umountfs  K11umountroot  README
K02apache2  K02exim4  K02openbsd-inetd      K02samba    K02urandom              K02winbind         K04rsyslog   K06nfs-common    K07hwclock.sh  K08ifupdown    K10lvm2      K12halt
root@obelix:/etc# #

Benutzeravatar
bmario
Beiträge: 1257
Registriert: 05.09.2007 12:15:47
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dresden

Re: EIBD Init Script

Beitrag von bmario » 08.01.2011 19:56:38

sharkx hat geschrieben:

Code: Alles auswählen

/etc/rc.d
gibt es bei mir nicht.
Oh natürlich, Tippfehler :oops:

Ich meinte /etc/rc2.d ;)
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse

sharkx
Beiträge: 26
Registriert: 11.03.2010 21:19:03

Re: EIBD Init Script

Beitrag von sharkx » 08.01.2011 20:00:52

Code: Alles auswählen

root@obelix:/etc# ls /etc/rc2.d
README      S01samba                S01virtualbox-ose  S03acpid  S03cron  S03exim4          S03proftpd        S03ssh      S05bootlogs  S15nfs-common         S17eibd      S17rmnologin
S01rsyslog  S01transmission-daemon  S02apache2         S03atd    S03dbus  S03openbsd-inetd  S03smartmontools  S03winbind  S14portmap   S16nfs-kernel-server  S17rc.local  S17stop-bootlogd
root@obelix:/etc#

sipple
Beiträge: 1
Registriert: 27.04.2011 17:17:12

Re: EIBD Init Script

Beitrag von sipple » 27.04.2011 17:32:19

Guten Abend

Ist ja schon etwas länger her, aber hier eine Lösung (die bei MIR hilft). Ich verwende Debian Squeeze 6.0.1a und EIBD 0.0.5.

Schreib mal in Dein Startscript, im Header, in der Zeile nach "SCRIPTNAME=/etc/init.d/$NAME" folgendes rein:

sleep 5

Das sollte reichen. Wenn's dann geht, kannst Du Dich an ne kürzere Pause rantasten. 5s "Schlaf" ist evtl. gar nicht nötig.

Gruß, Martin

P.S. Falls sich das eh erledigt hat und Du ne bessere Lösung hast, würde mich die interessieren.

Antworten