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.