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….