Dernier article listant les possibilités pour démarrer freevo automatiquement au démarrage de votre HTPC.

Dans le premier article le démarrage se faisait via l’auto-login d’un utilisateur et l’utilisation du fichier bash_profil.

Enfin dans cet article, j’expliquai la mise en œuvre d’un script d’init, par contre freevo était lancé avec le user root et je concluais l’article en indiquant que j’expliqerai comment utiliser start-stop-deamon pour changer cet utilisateur.


Après pas mal d’essai je peux conclure que l’utilisation start-stop-deamon est un echec.

Pour des raisons qui m’échappent (surement des histoire de PID), on peut démarrer Freevo (et ses composants) avec start-stop-deamon mais pas l’arrêter.


Donc dans le script suivant j’ai contourné le problème à coup de su.


Création du fichier de configuration

Ce fichier permet de déterminer les processus freevo à lancer (recordserver, werserver, etc), le user réalisant ces lancements, et les option des différents composant.

Pour le différencier du précédent je l’ai nommé boot_freevo.conf et il est localisé dans /etc/freevo.


##############################################################################
# Component to start
##############################################################################
 
# 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"
 
# Mode the start the encodingserver. Possible values are "no" and "yes".
ENCODESERVER="no"
 
##############################################################################
# Options
 
##############################################################################
 
# User that freevo should be run as
# useless if ROOTUSERINFO=yes
FREEVO_USER="freevo"
 
# Set the root USER and HOME variables. Some distros need this to work.
# Possible values are "no" and "yes".
ROOTUSERINFO="no"
 
# 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"
 
# Use setleds to set numlock before starting freevo. THis is necessary
# for some SDL fbcon setups.
# Possible values are "no" and "yes".
SETNUMLOCK="no"
 
##############################################################################
# Internals Options
##############################################################################
# change this if you know what you are doing
 
## where freevo shell script lives. used to call freevo
FREEVO_HOME="/usr/local/bin"
 
## Options for freevo daemon
F_DAEMON_OP="daemon"
 
## Options for freevo not as daemon
F_OP="-fs"
 
## Options for freevo record server
F_RECORD_OP="recordserver"
 
## Options for freevo encoding server
F_ENCODE_OP="encodingserver"
 
## Options for freevo webserver
F_WEBSERVER_OP="webserver"


Création du scripts d’init

Comme dans  l’article précédent créer ce fichier dans /etc/init.d et le nommer freevo

#! /bin/bash
 
### BEGIN INIT INFO
# Provides:          freevo
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4
# Default-Stop:      0 1 6
# Short-Description: starts Freevo
# Description:       starts the open source HTPC media centre software Freevo
### END INIT INFO
 
# Get startup config file
test -f /etc/freevo/boot_freevo.conf || exit 0
. /etc/freevo/boot_freevo.conf
 
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
 
case "$1" in
  start)
 # Let configure environment
 if [ "$SETNUMLOCK" == "yes" ]; then
  echo "Setting NUMLock on"
  setleds +num
 fi
 if [ "$HAVEKEYBOARD" == "no" ]; then
  echo "Setting no keyboard"
  export SDL_NOKEYBOARD=true
 fi
 if [ "$HAVEMOUSE" == "no" ]; then
  echo "Setting no mouse"
  export SDL_NOMOUSE=true
 fi
 
 # Let start freevo and components
 if [ "$FREEVO" == "daemon" ]; then
  echo "Freevo start as a deamon..."
  su -l ${FREEVO_USER} -c "$DAEMON $F_DEAMON_OP &" &> /dev/null
 elif [ "$FREEVO" == "yes" ]; then
  echo "Freevo start..."
  su -l ${FREEVO_USER} -c "$DAEMON $F_OP &" &> /dev/null
 fi
 
 if [ "$RECORDSERVER" == "yes" ]; then
  echo "Record server start..."
  su -l ${FREEVO_USER} -c "$DAEMON $F_RECORD_OP --start &" &> /dev/null
 fi
 if [ "$WEBSERVER" == "yes" ]; then
  echo "Web server start..."
  su -l ${FREEVO_USER} -c "$DAEMON $F_WEBSERVER_OP --start &" &> /dev/null
 fi
 if [ "$ENCODESERVER" == "yes" ]; then
  echo "Encode server start..."
  su -l ${FREEVO_USER} -c "$DAEMON $F_ENCODE_OP --start &" &> /dev/null
 fi
 ;;
  stop)
 if [ "$FREEVO" != "no" ]; then
  echo "Freevo stop..."
  su -l ${FREEVO_USER} -c "$DAEMON --stop" &> /dev/null
  sleep 3
 fi
 if [ "$RECORDSERVER" == "yes" ]; then
  echo "Record server stop..."
  su -l ${FREEVO_USER} -c "$DAEMON $F_RECORD_OP --stop" &> /dev/null
  sleep 3
 fi
 if [ "$WEBSERVER" == "yes" ]; then
  echo "Web server stop..."
  su -l ${FREEVO_USER} -c "$DAEMON $F_WEBSERVER_OP --stop" &> /dev/null
 fi
 if [ "$ENCODESERVER" == "yes" ]; then
  echo "Encode server stop..."
  su -l ${FREEVO_USER} -c "$DAEMON $F_ENCODE_OP --stop" &> /dev/null
 fi
 
 if pgrep -f "python.*freevo" &> /dev/null ; then
  echo "At least one Freevo component still running, kill 'em all..."
  kill `pgrep -f "python.*freevo" -d" "` &> /dev/null
 fi
 ;;
  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

Comme précedemment, on installera ce script avec  :

sudo update-rc.d freevo defaults 99


Puis on pourra démarrer freevo en faisant :

sudo /etc/init.d/freevo start


Conclusion :

Cette méthode est à mon avis la méthode ultime puisqu’elle cumule les avantages des 2 précédentes plus quelques une supplémentaire :

  • Il n’y pas d’utilisateur de loggué
  • Les “différents” processus freevo à lancer sont paramétrés dans un fichier de configuration
  • Les process sont exécutées avec le user paramétré dans le fichier de configuration
  • Le paramétrage des lignes de commandes à lancer est faite dans le fichier de configuration
  • Le kill des process résiduel est plus propre


Enfin pour finir quelques mots de précaution :

  • Ce script à été testé avec Freevo 1.9.0 sous Jaunty
  • Seul les composants recordserver et freevo lui-même ont été testé (pas l’encodingserver ni le webserver)
  • La configuration clavier/souris repris du script précédent, lui même repris des sources Freevo n’a pas été testé


Bref ce script est fournis « as is » je ne garantis pas qu’il fonctionnera sur toutes les plateformes….


Les commentaires sont fermés.