Dans un article précédent nous avons vu comment démarrer freevo de façon automatique via l’auto-login d’un utilisateur et l’utilisation du fichier bash_profil.


Dans cet article nous allons parvenir au même résultat mais sans loguer d’utilisateur.

Pour cela on va créer un script d’init (init.d) qui va lancer freevo au démarrage comme un service.


Les scripts présentés ici sont ceux qui tournent actuellement sur ma version de prod (freevo 1.8.3 / Gutsy) de freevo sur sweetBox.

Ces scripts sont issus des sources de freevo (répertoire contrib/debian)


Création du fichier de configuration

Ce fichier permet de déterminer les processus freevo à lancer (recordserver, werserver, etc).

Créer ce fichier dans /etc/freevo et le nommer boot_config.


# $Id: boot_config 5071 2004-01-29 15:48:31Z mikeruelle $
 
# where freevo shell script lives. used to call freevo
FREEVO_HOME="/usr/bin"
 
# a log used to catch errors when freevo startsup
FREEVO_LOG="/var/log/freevo/main.log"
 
# Mode to start Freevo itself. Possible values are
#
# no:     don't start Freevo
# yes:    start Freevo on startup. You should only use this when the
#         computer is for Freevo only or you use Freevo with a DXR3
# daemon: start Freevo in daemon mode. The daemon will wait for you to
#         press QUIT or POWER on your remote and will than start
#         Freevo. After Freevo shut down, the daemon will wait again.
#
# You don't need a X server running to start Freevo from init. If
# needed, Freevo will start a X server on its own. Make sure your X
# server can handle the resolution defined in /etc/freevo/freevo.conf
FREEVO="yes"
 
# Mode the start the webserver. Possible values are "no" and "yes".
# If you start the webserver with Freevo itself, you should say "no" here.
WEBSERVER="no"
 
# Mode the start the recordserver. Possible values are "no" and "yes".
RECORDSERVER="yes"
 
# Do we have a mouse and/or keyboard attached to this pc.
# this sets SDL variables for smooth operation if no keyboard or mouse.
# Possible values are "no" and "yes".
HAVEMOUSE="yes"
HAVEKEYBOARD="yes"
 
# The SDL video driver to use. common values are x11 or fbcon.
# for a full list see:
# http://www.libsdl.org/faq.php?action=listentries&category=9#9
SDL_VIDEODRIVER="x11"
 
# Set the root USER and HOME variables. Some distros need this to work.
# Possible values are "no" and "yes".
ROOTUSERINFO="no"
 
# Use setleds to set numlock before starting freevo. THis is necessary
# for some SDL fbcon setups.
# Possible values are "no" and "yes".
SETNUMLOCK="no"



Création du scripts d’init

Ce script est celui qui sera lancé au démarrage, il reprend la structure des scripts d’init comme défini ici.

Il va lire le fichier de configuration et lance les processus demandés.

Créer ce fichier dans /etc/init.d et le nommer freevo



#! /bin/bash
# chkconfig: 234 99 00
# description: A boot script for the Freevo package
#
# Enhanced boot script for freevo
#
# $Id: freevo 5489 2004-03-13 15:13:36Z mikeruelle $
 
# Get startup config file
test -f /etc/freevo/boot_config || exit 0
. /etc/freevo/boot_config
 
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/games
DAEMON=$FREEVO_HOME/freevo
NAME=freevo
DESC=freevo
 
if [ "$ROOTUSERINFO" == "yes" ]; then
    USER=root
    HOME=/root/
    export USER HOME
fi
 
test -f $DAEMON || exit 0
 
freevoserver() {
    # $1 is the server
    # $2 is the action
    $DAEMON $1 $2 2>&1 > /dev/null
}
 
case "$1" in
  start)
        echo -n "Setting up RTC: "
        sysctl -w dev.rtc.max-user-freq=1024 > /dev/null
        echo "sysctl."
        if [ "$RECORDSERVER" == "yes" ]; then
            echo -n "Starting Freevo Recordserver: "
            freevoserver "recordserver" "start"
            echo "Recordserver."
        fi
        if [ "$WEBSERVER" == "yes" ]; then
            echo -n "Starting Freevo Webserver: "
            freevoserver "webserver" "start"
            echo "Webserver."
        fi
        if [ "$SETNUMLOCK" == "yes" ]; then
            echo -n "Setting NUMLock on: "
            setleds +num
            echo "setleds."
        fi
        if [ "$HAVEKEYBOARD" == "no" ]; then
       export SDL_NOKEYBOARD=true
        fi
        if [ "$HAVEMOUSE" == "no" ]; then
            export SDL_NOMOUSE=true
        fi
 export SDL_VIDEODRIVER=$SDL_VIDEODRIVER
 export LANG=fr_FR.UTF-8
        if [ "$FREEVO" == "daemon" ]; then
     echo -n "Starting deamon  $DESC: "
            freevoserver "daemon" "start"
     echo "$NAME."
        elif [ "$FREEVO" == "yes" ]; then
     echo -n "Starting $DESC: "
            if egrep -q '^display.*(x11|dga)' /etc/freevo/freevo.conf ; then
                PATH=$PATH:/usr/X11R6/bin
           $DAEMON -fs >> $FREEVO_LOG 2>&1 &
            else
           $DAEMON >> $FREEVO_LOG 2>&1 &
            fi
     echo "$NAME."
        fi
 ;;
  stop)
 echo -n "Stopping $DESC: "
        $DAEMON stop >> $FREEVO_LOG 2>&1 &
        sleep 5
        kill `pgrep -f "python src/main.py" -d" "` &> /dev/null
 kill `pgrep -f "python main.py" -d" "` &> /dev/null
 echo "$NAME."
        if [ "$RECORDSERVER" == "yes" ]; then
            echo -n "Starting Freevo Recordserver: "
            freevoserver "recordserver" "stop"
            echo "Recordserver."
        fi
        if [ "$WEBSERVER" == "yes" ]; then
            echo -n "Starting Freevo Webserver "
            freevoserver "webserver" "stop"
            echo "Webserver."
        fi
        echo -n "Hard kill to be sure: "
        ps aux | grep python | grep main.py | awk '{ print "kill -9 " $2 }' | sh
        echo "kill."
 ;;
  restart|force-reload)
 echo "Restarting..."
 $0 stop
 sleep 1
 $0 start
 ;;
  *)
 N=/etc/init.d/$NAME
 echo "Usage: $N {start|stop|restart|force-reload}" >&2
 exit 1
 ;;
esac
 
exit 0



Installation du script

on installera ce script avec  :

sudo update-rc.d deluge-daemon defaults 99


Puis on pourra démarrer freevo en faisant :

sudo /etc/init.d/freevo start


 

Conclusion :

Cette méthode est à mon avis mieux que la précédente puisque :

  • Il n’y pas d’utilisateur de loggué
  • Les « différents » processus freevo à lancer sont paramétrés dans un fichier de configuration

Mais avec ce mécanisme les processus sont lancés en root…


On verra dans un autre article comment remédier à ce problème en utilisant la commande start-stop-deamon su.



Les commentaires sont fermés.