==== Attention en cours d'écriture ====
===Création de la carte mémoire===
* Télécharger l'image de la carte mémoire:\\ Aller sur [[http://www.raspberrypi.org/downloads]] et télécharger le fichier:\\ **2012-07-15-wheezy-raspbian.zip**
* Déziper le fichier ce qui donne un fichier image de la carte mémoire:\\ **2012-07-15-wheezy-raspbian.img**
* Ecrire le fichier img sur la carte mémoire SD
^ Sur Mac OS X ^ Sur Windows ^
| Dans un terminal:\\ Faire une comparaison du résultat de:\\ **df -h**\\ Sans la carte et avec la carte pour avoir le nom du disque.\\ Par exemple /dev/disk1s1\\ Démonter la carte:\\ **diskutil unmount /dev/disk1s1**\\ Copier l'image sur la carte:\\ **sudo dd bs=1m if=2012-07-15-wheezy-raspbian.img of=/dev/rdisk1**\\ Attention /dev/rdisk1 et pas /dev/disk1s1 pour la copie de l'image\\ Ejection de la carte:\\ **diskutil eject /dev/rdisk1** | Télécharger l'outil [[http://www.softpedia.com/get/CD-DVD-Tools/Data-CD-DVD-Burning/Win32-Disk-Imager.shtml|Win32DiskImager]]\\ Insérer la carte SD dans le lecteur et bien noter sa lettre (par exemple E:)\\ Formater la carte si elle n'est pas vierge.\\ Lancer Win32DiskImager avec les droits administrateur\\ Sélectionner le fichier img: 2012-07-15-wheezy-raspbian.img\\ Sélectionner le lecteur correspondant à la carte !!! Attention pas d'erreur ici !!!\\ Cliquer sur Write et attendre la fin de l'écriture\\ Quitter Win32DiskImager\\ Ejecter la carte puis la retirer |
Pour les impatients - comme moi :-) - Prenez en compte les temps de téléchargement (~450Mo d'image !) et de flashage. Par expérience, préférez le téléchargement via torrent, environ 5 fois plus rapide lors de mon test.
Mettre la carte sur le Raspberry Pi et le brancher pour démarrer.
=== Mise à jour de l'OS et des packages du Raspberry Pi: ===
(Login/Password par défaut: pi/raspberry. Connectez vous en ssh avec putty par exemple)
* Mise à jour du clavier:\\ **sudo dpkg-reconfigure keyboard-configuration**\\ sélectionner: Generic 105-key (Intl) PC\\ sélectionner: French\\ puis sélectionner les valeurs par défaut
* Mise à jour du fuseau horaire:\\ **sudo dpkg-reconfigure tzdata**
* Mise à jour des locales:\\ **sudo dpkg-reconfigure locales**\\ Générer la locale: fr_FR.UTF-8 UTF-8\\ Et la sélectionner par défaut.
* Mise à jour des packages:\\ **sudo apt-get update**\\ **sudo apt-get dist-upgrade**
=== Installation d'eibd, linknx, lighttpd et php5 et enfin knxweb2: ===
* Installation de libxml et liblua:\\ **sudo apt-get install libxml2-dev liblua5.1-0-dev**
* Compilation de pthsem:\\ **wget http://www.auto.tuwien.ac.at/~mkoegler/pth/pthsem_2.0.8.tar.gz**\\ **tar xvfz pthsem_2.0.8.tar.gz**\\ **cd pthsem-2.0.8**\\ **./configure --with-mctx-mth=sjlj --with-mctx-dsp=ssjlj --with-mctx-stk=sas --disable-shared**\\ **make**\\ **sudo make install**\\ **cd ..**
* Compilation de eibd:\\ **wget http://www.auto.tuwien.ac.at/~mkoegler/eib/bcusdk_0.0.5.tar.gz**\\ **tar xvfz bcusdk_0.0.5.tar.gz**\\ **cd bcusdk-0.0.5**\\ **./configure --without-pth-test --enable-onlyeibd --enable-eibnetip --enable-eibnetiptunnel --enable-eibnetipserver --enable-groupcache --enable-usb**\\ **make**\\ **sudo make install**\\ **cd ..**
* Création du fichier de démarrage de eibd à copier dans /etc/init.d (voir le fichier en bas de page à coller dans le presse papier) avec la commande "vi /etc/init.d/eibd", puis tapez "i", puis copier le presse papier, puis touche "echap" puis ":wq" et enfin "chmod 755 /etc/init.d/eibd"
* (vous ferez la même chose plus bas avec /etc/init.d/linknx)
* Lancement automatique de eibd au démarrage:\\ **sudo update-rc.d eibd defaults**
* Configuration de eibd:\\ Créer le fichier /etc/default/eibd\\ DAEMON_ARGS="--daemon=/var/log/eibd.log --pid-file=/var/run/eibd.pid --listen-tcp"
EIBD_BACKEND="ipt"
EIBD_PORT_IPT=""
* Installation de libcurl (optionnel pour avoir envoyer des SMS avec linknx):\\ **sudo apt-get install libcurl4-openssl-dev**
* Installation de libesmtp (optionnel pour pouvoir envoyer des mails avec linknx):\\ **sudo apt-get install libesmtp-dev**
* Installation de mysql (optionnel pour pouvoir utiliser mysql avec linknx):\\ **sudo apt-get install mysql-server mysql-client libmysqlclient-dev**
* Installation de log4cpp (optionnel pour pouvoir utiliser log4cpp pour générer les logs):\\ **sudo apt-get install liblog4cpp5-dev**
* Compilation de linknx:\\ **wget http://downloads.sourceforge.net/project/linknx/linknx/linknx-0.0.1.30/linknx-0.0.1.30.tar.gz**\\ **tar xvfz linknx-0.0.1.30.tar.gz**\\ Si vous voulez utilisez mysql avec linknx:\\ **./configure --without-pth-test --with-mysql=/usr/bin/mysql_config**\\ Sinon:\\ **./configure --without-pth-test**\\ Puis:\\ **make**\\ **sudo make install**
* Création du fichier de démarrage de linknx à copier dans /etc/init.d (voir le fichier en bas de page)\\ Si vous faite une installation avec mysql ajouter en fin de cette ligne "mysql" pour que la base de données démarre avant linknx\\
# Required-Start: $local_fs $remote_fs eibd mysql
* Lancement automatique de linknx au démarrage:\\ **sudo update-rc.d linknx defaults**
* Installation de lighttpd et php5:\\ **sudo apt-get install lighttpd php5-cgi**\\ **sudo lighttpd-enable-mod cgi fastcgi fastcgi-php**
* Installation de knxweb2:\\ **cd /var/www/**\\ **sudo wget -O knxweb2.tar "http://linknx.cvs.sourceforge.net/viewvc/linknx/knxweb/knxweb2/?view=tar"**\\ **sudo tar xvf knxweb2.tar**\\ **sudo rm knxweb2.tar**\\ **sudo /etc/init.d/lighttpd restart**\\ **cd knxweb2** \\ **sudo chown -R www-data:www-data pictures**\\ **sudo chown -R www-data:www-data design**\\ **sudo chown -R www-data:www-data include**\\ **cd template**\\ **sudo mkdir template_c**\\ **sudo chown www-data:www-data template_c**
===Création de la base de données mysql (optionnel)===
**mysql -u root -p**
CREATE DATABASE linknx;
use linknx;
CREATE TABLE `log` (\\
`ts` timestamp NOT NULL default CURRENT_TIMESTAMP,\\
`object` varchar(256) NOT NULL,\\
`value` varchar(256) NOT NULL,\\
KEY `object` (`object`,`ts`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `persist` (
`object` varchar(256) NOT NULL,
`value` varchar(256) NOT NULL,
`ts` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`object`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE USER 'linknx'@'localhost' IDENTIFIED BY 'linknx';
GRANT SELECT,INSERT,UPDATE,DELETE ON linknx.* TO 'linknx'@'localhost';
exit
Lancer votre navigateur sur [[http:///knxweb2/]]
Fichier de démarrage d'eibd:
#!/bin/sh
### BEGIN INIT INFO
# Provides: eibd
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: eibd initscript
# Description: based on init-script from knx-user-forum.de and setup-eibd.sh from KNXlive-project
# Pending: check tpuarts, check KNXnet/IP-Response
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="EIB/KNX daemon"
NAME=eibd
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="-d -u --eibaddr=1.1.100 -c -DTS -R -i --pid-file=/var/run/$NAME.pid"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
# Default URL, config read from default later
# !!! DO NOT CHANGE DEFAULTS HERE - use /etc/default/eibd !!!
# AUTO scans and saves as default
EIBD_BACKEND="AUTO"
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
# Temp-fix! remove surrounding whitespaces from seperator '='
[ -r /etc/default/$NAME ] && cat /etc/default/$NAME | sed 's/ =/=/' | sed 's/= /=/' > /etc/default/$NAME.out
[ -r /etc/default/$NAME.out ] && . /etc/default/$NAME.out
# 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
do_init()
{
# Auto-Detection Backend-interface
if [ "$EIBD_BACKEND" = "AUTO" -o "$EIBD_BACKEND" = "usb" ]; then
[ "$VERBOSE" != no ] && log_daemon_msg "Autodetecting eibd-Backend"
echo -ne "\t *** $NAME: Autodetecting Interface ."
# try USB
# old EIBD_USBPORT=$(findknxusb | sed -e '1 d' -e 's/device //' | cut -d':' -f1-2)
EIBD_USBPORT=$(findknxusb | sed -e '1 d' -e 's/device //' | cut -d ' ' -f 2 | cut -d':' -f1-2); echo $EIBD_USBPORT
if [ -n "$EIBD_USBPORT" ]
then
EIBD_BACKEND=usb
EIBD_URL=$EIBD_BACKEND:$EIBD_USBPORT
[ "$VERBOSE" != no ] && log_daemon_msg " success on $EIBD_URL"
echo -e " success on $EIBD_URL"
fi
fi
if [ "$EIBD_BACKEND" = "AUTO" -a -e /dev/ttyS0 ]; then
# try FT1.2 on /dev/ttyS0
echo -n " ."
setserial /dev/ttyS0 autoconfig
if bcuaddrtab -T 10 ft12:/dev/ttyS0 >/dev/null ; then
EIBD_BACKEND=ft12
EIBD_URL=$EIBD_BACKEND:/dev/ttyS0
[ "$VERBOSE" != no ] && log_daemon_msg " success on $EIBD_URL"
echo -e " success on $EIBD_URL"
fi
fi
if [ "$EIBD_BACKEND" = "AUTO" -a -e /dev/eib0 ]; then
# try BCU1 Kernel-Driver on /dev/ttyS0
echo -n " ."
setserial /dev/ttyS0 uart none
if bcuaddrtab -T 10 bcu1:/dev/eib0 >/dev/null ; then
EIBD_BACKEND=bcu1
EIBD_URL=$EIBD_BACKEND:/dev/eib0
[ "$VERBOSE" != no ] && log_daemon_msg " success on $EIBD_URL"
echo -e " success on $EIBD_URL"
fi
fi
if [ "$EIBD_BACKEND" = "AUTO" ]; then
# try KNXnet/IP Routing with default Multicast 224.0.23.12
echo -n " ."
EIBNETTMP=`mktemp`
eibnetsearch - > $EIBNETTMP
EIBD_NET_MCAST=`grep Multicast $EIBNETTMP | cut -d' ' -f2`
EIBD_NET_HOST=`grep Answer $EIBNETTMP | cut -d' ' -f3`
EIBD_NET_NAME=`grep Name $EIBNETTMP | cut -d' ' -f2`
EIBD_MY_IP=`ifconfig eth0 | grep 'inet addr' | sed -e 's/:/ /' | awk '{print $3}'`
rm $EIBNETTMP
if [ "$EIBD_NET_MCAST" != "" -a "$EIBD_NET_HOST" != "$EIBD_MY_IP" ]; then
EIBD_BACKEND=ip
EIBD_URL=$EIBD_BACKEND:
[ "$VERBOSE" != no ] && log_daemon_msg "Found KNXnet/IP Router $EIBD_NET_NAME on $EIBD_NET_HOST with $EIBD_NET_MCAST"
echo -e "Found KNXnet/IP Router $EIBD_NET_NAME on $EIBD_NET_HOST with $EIBD_NET_MCAST"
fi
fi
if [ "$EIBD_BACKEND" = "AUTO" -a -e /dev/ttyS1 ]; then
# try FT1.2 on /dev/ttyS1
echo -n " ."
setserial /dev/ttyS1 autoconfig
if bcuaddrtab -T 10 ft12:/dev/ttyS1 >/dev/null ; then
EIBD_BACKEND=ft12
EIBD_URL=$EIBD_BACKEND:/dev/ttyS1
[ "$VERBOSE" != no ] && log_daemon_msg " success on $EIBD_URL"
echo -e " success on $EIBD_URL"
fi
fi
if [ "$EIBD_BACKEND" = "AUTO" -a -e /dev/eib1 ]; then
# try BCU1 Kernel-Driver on /dev/ttyS1
echo -n " ."
setserial /dev/ttyS1 uart none
if bcuaddrtab -T 10 bcu1:/dev/eib1 >/dev/null ; then
EIBD_BACKEND=bcu1
EIBD_URL=$EIBD_BACKEND:/dev/eib1
[ "$VERBOSE" != no ] && log_daemon_msg " success on $EIBD_URL"
echo -e " success on $EIBD_URL"
fi
fi
if [ "$EIBD_BACKEND" = "AUTO" ]; then
# Autodetect failed - bailout
echo -e "\t *** $NAME: Autodetect failed - exiting !"
exit 0
fi
# concat urls
if [ "$EIBD_BACKEND" = "ip" -a -n "$EIBD_PORT_IP" ]; then
EIBD_URL=$EIBD_BACKEND:$EIBD_PORT_IP
fi
if [ "$EIBD_BACKEND" = "ipt" -a -n "$EIBD_PORT_IPT" ]; then
EIBD_URL=$EIBD_BACKEND:$EIBD_PORT_IPT
fi
# init serial port accordingly
if [ "$EIBD_BACKEND" = "ft12" -a -n "$EIBD_PORT_SERIAL" ]; then
setserial $EIBD_PORT_SERIAL autoconfig
EIBD_URL=$EIBD_BACKEND:$EIBD_PORT_SERIAL
fi
if [ "$EIBD_BACKEND" = "bcu1" -a "$EIBD_PORT_SERIAL" = "/dev/eib0" ]; then
setserial /dev/ttyS0 uart none
EIBD_URL=$EIBD_BACKEND:$EIBD_PORT_SERIAL
fi
if [ "$EIBD_BACKEND" = "bcu1" -a "$EIBD_PORT_SERIAL" = "/dev/eib1" ]; then
setserial /dev/ttyS1 uart none
EIBD_URL=$EIBD_BACKEND:$EIBD_PORT_SERIAL
fi
if [ "$EIBD_BACKEND" = "tpuarts" -a -n "$EIBD_PORT_SERIAL" ]; then
setserial $EIBD_PORT_SERIAL autoconfig
EIBD_URL=$EIBD_BACKEND:$EIBD_PORT_SERIAL
fi
# concat EIBD_URL (obsolete!)
if [ -z "$EIBD_URL" -a -n "$EIBD_PORT" ]; then
EIBD_URL=$EIBD_BACKEND:$EIBD_PORT
fi
# check/write bcuaddrtab
if [ "$EIBD_BACKEND" = "usb" -o "$EIBD_BACKEND" = "ft12" -o "$EIBD_BACKEND" = "bcu1" -a -n "$EIBD_URL" ]; then
EIBD_BCUADDRTAB=`bcuaddrtab -T 10 $EIBD_URL | cut -d ' ' -f 2`
if [ "$EIBD_BCUADDRTAB" = "expected" -o "$EIBD_BCUADDRTAB" = "failed" -o "$EIBD_BCUADDRTAB" = "timed" ]; then
# retry 1
echo -n "Unable to read BCU address table - retrying 1"
sleep 2
EIBD_BCUADDRTAB=`bcuaddrtab -T 10 $EIBD_URL | cut -d ' ' -f 2`
if [ "$EIBD_BCUADDRTAB" = "expected" -o "$EIBD_BCUADDRTAB" = "failed" -o "$EIBD_BCUADDRTAB" = "timed" ]; then
# retry 2
echo -n " - retrying 2 .."
sleep 2
EIBD_BCUADDRTAB=`bcuaddrtab -T 10 $EIBD_URL | cut -d ' ' -f 2`
if [ "$EIBD_BCUADDRTAB" = "expected" -o "$EIBD_BCUADDRTAB" = "failed" -o "$EIBD_BCUADDRTAB" = "timed" ]; then
echo -n " - FAILED on $EIBD_BACKEND (url $EIBD_URL) (size $EIBD_BCUADDRTAB) ! "
# only fail on usb/FT12 as bcu1 might still be ok
if [ "$EIBD_BACKEND" = "bcu1" ]; then
EIBD_BCUADDRTAB=0
else
log_end_msg 2
exit 2
fi
fi
fi
fi
if [ "$EIBD_BCUADDRTAB" -gt 0 ]; then
echo "Resetting BCU address table length! Old value $EIBD_BCUADDRTAB"
bcuaddrtab -T 30 -w 0 $EIBD_URL
fi
# fix for broken ABB/BJ USB-If
USBNAME=`findknxusb | grep ^device | cut -d '(' -f 2,3`
if [ "$EIBD_BACKEND" = "usb" -a "$USBNAME" = "ABB STOTZ-KONTAKT GmbH:KNX-USB Interface (MDRC))" ]; then
echo "ABB-fix: Resetting BCU address table length! Old value $EIBD_BCUADDRTAB"
bcuaddrtab -T 30 -w 0 $EIBD_URL
fi
fi
# Concat ARGS
if [ -n "$EIBD_R" ]; then
DAEMON_ARGS=" -R $DAEMON_ARGS"
EIBD_I=y
fi
if [ -n "$EIBD_T" ]; then
DAEMON_ARGS=" -T $DAEMON_ARGS"
EIBD_I=y
fi
if [ -n "$EIBD_I" ]; then
DAEMON_ARGS=" -S -D -i $DAEMON_ARGS"
fi
if [ -n "$EIBD_C" ]; then
DAEMON_ARGS=" -c $DAEMON_ARGS"
fi
# use -e option to set address
if [ -n "$EIBD_BACKEND_ADDR" ]; then
DAEMON_ARGS=" -e $EIBD_BACKEND_ADDR $DAEMON_ARGS"
fi
DAEMON_ARGS="$DAEMON_ARGS $EIBD_ADDTL_ARGS $EIBD_URL"
}
#
# Function that starts the daemon/service
#
do_start()
{
route add 224.0.23.12 dev eth0
#echo "DEBUG args: $DAEMON_ARGS eibdi: $EIBD_I eibdt: $EIBD_T eibdr: $EIBD_R backend: $EIBD_BACKEND url: $EIBD_URL port: $EIBD_PORT addrtab: $EIBD_BCUADDRTAB"
# 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
do_init
echo "*** Starting $DESC: $NAME using $EIBD_URL"
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.
sleep 2
chmod a+rw /tmp/eib
}
#
# 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
route delete 224.0.23.12
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 using $EIBD_URL" "$NAME"
do_start
case "$?" in
0|1) log_end_msg 0 ;;
2) [ log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
echo "*** Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
2) [ log_end_msg 1 ;;
esac
;;
#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
#
echo "*** Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
sleep 2
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|restart|force-reload}" >&2
exit 3
;;
esac
Fichier de démarrage de linknx:
#!/bin/sh
### BEGIN INIT INFO
# Provides: linknx
# Required-Start: $local_fs $remote_fs eibd
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: linknx initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="service"
NAME=linknx
DAEMON=/usr/local/bin/$NAME
PIDFILE=/var/run/$NAME.pid
DAEMON_ARGS="-c/var/lib/linknx/linknx.xml -p $PIDFILE -d/var/log/linknx.log -w"
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
# Temp-fix! remove surrounding whitespaces from seperator '='
[ -r /etc/default/$NAME ] && cat /etc/default/$NAME | sed 's/ =/=/' | sed 's/= /=/' > /etc/default/$NAME.out
[ -r /etc/default/$NAME.out ] && . /etc/default/$NAME.out
# 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()
{
# 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
;;
#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|restart|force-reload}" >&2
exit 3
;;
esac