[Annonce] TeamSpeak Server pour SME 7.x

Forum dédié à la distribution du même nom et que vous pourrez télécharger sur http://www.contribs.org. La nouvelle version de cette distribution se nomme SME Server

Modérateur: modos Ixus

[Annonce] TeamSpeak Server pour SME 7.x

Messagepar Cool34000 » 06 Juin 2007 04:35

Pour plus de facilité, j'ai créé un rpm de TeamSpeak Server que vous pouvez télécharger ici

Le rpm est basé sur ce topic.

J'attends vos commentaires !


Sylvain
Avatar de l’utilisateur
Cool34000
Contre-Amiral
Contre-Amiral
 
Messages: 480
Inscrit le: 10 Sep 2006 10:45
Localisation: Nimes, France

Messagepar Muzo » 06 Juin 2007 10:57

Salut,

C'est cool, car je voulais me lancé dans l'aventure mais autrement (casse tête du week end dernier, et j'ai laissé tombé pour un forward de port usr une autre machine).

Si tu as suivi le sujet de contrib, ils ont tout installés dans une home créer pour teamspeak.
Hors moi ce que je voulais, c'était de l'installer dans une ibay et de ne pas le lancer en service automatique. Et le howto faisait installer teamspeak en service démarré automatiquement.

De plus le port de teamspeak était systématiquement ouvert bêrk. Ce que je cherchais à faire c'était d'ouvrir le port au démarrage de teamspeak et de le fermer à l'arrêt de teamspeak.

Mais je me suis cassé les dents sur des problèmes de droit sur un fichier et j'ai laissé tombé.

Oui j'ai mal lu le topic?

/Muzo
/Muzo
"La vie n'est pas un combat, mais une passion à défendre!" MASS HYSTERIA - Knowledge is power
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar Cool34000 » 06 Juin 2007 11:20

Je suis à l'origine du topic sur contribs.org ! Donc oui je suis le topic :lol:

J'ai également mis à jour le Wiki... Tu y trouvera peux être le pourquoi à ton problème d'ouverture de port (section known bugs) si tu es en mode server-only sur un serveur à jour...

Le rpm installe tout dans /opt...
Déja je ne sais pas si c'est le bon endroit, mais une ibay n'est surement pas l'endroit approprié : il faut activer l'accès SSH pour l'utilisateur teamspeak !
Par rapport au howto original, le user n'est plus un user SME : il ne doit pas apparaitre dans le panneau utilisateur du server-manager puisque c'est un service...

Pour ce qui est du démarrage du service au boot, tu peux toujours le désactiver ! 8)
Code: Tout sélectionner
config setprop teamspeak status disabled
signal-event remoteaccess-update
Avatar de l’utilisateur
Cool34000
Contre-Amiral
Contre-Amiral
 
Messages: 480
Inscrit le: 10 Sep 2006 10:45
Localisation: Nimes, France

Messagepar Muzo » 06 Juin 2007 13:32

Cool, et félicitations pas mal.

Oui j'ai lu le wiki, et je préférais créer l'uilisateur via le serveur manager pour pouvoir le supprimer facilement, mais bon c'était un contrainte inutile que je m'étais imposée.
Ah! /opt, je préfères :)

Cool34000 a écrit:Déja je ne sais pas si c'est le bon endroit, mais une ibay n'est surement pas l'endroit approprié : il faut activer l'accès SSH pour l'utilisateur teamspeak !

:shock: Euh .. tu ne voudrais pas plutôt dire que le serveur teamspeak doit pouvoir éxécuter les script avec /sbin/sh plutôt? (un user standard de SME ayant /bin/false) Car l'accès ssh pour teamspeak, tu me fais peur là ...

C'est vrais quel'on peut désactiver des services ...

par contre la commande de démarrage/arrêt/status manuelle est-elle dans le wiki?
/Muzo
"La vie n'est pas un combat, mais une passion à défendre!" MASS HYSTERIA - Knowledge is power
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar Cool34000 » 06 Juin 2007 13:49

Re !

Non, les commandes et le paramétrage disponible ne sont pas dans le Wiki... Je mettrai ca à jour à moins que tu ne le fasses avant moi :wink:
Les options du service :
Code: Tout sélectionner
service teamspeak {start | stop | restart | status | passwords }
Le paramétrage du service :
Code: Tout sélectionner
config show teamspeak
Avatar de l’utilisateur
Cool34000
Contre-Amiral
Contre-Amiral
 
Messages: 480
Inscrit le: 10 Sep 2006 10:45
Localisation: Nimes, France

Messagepar Muzo » 06 Juin 2007 16:24

Cool34000 a écrit:Re !

Non, les commandes et le paramétrage disponible ne sont pas dans le Wiki... Je mettrai ca à jour à moins que tu ne le fasses avant moi :wink:


Je te laisse faire.
/Muzo
"La vie n'est pas un combat, mais une passion à défendre!" MASS HYSTERIA - Knowledge is power
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar Muzo » 07 Juin 2007 08:21

Petite optimisation, étant un paranoïaque informatique, je n'aime pas laisser un port ouvert lorsque j'ai un service arrêter.

Est ce qu'il serait possible, dans le template du masq (le script iptable) concernant TeamSpeak, tester si le service TeamSpeak est actif ou non.

Ce qui donnerait:
Si le service est actif: je crée l'ouverture de port, sinon je ne crée pas l'ouverture de port.

Code: Tout sélectionner
my status = "db configuration getprop masq status" // Attention, je ne suis pas sur que cela soit la bonne commande
if(status!="disabled") {
    $OUT="/sbin/iptables --append INPUT -p udp --dport 8767 -i \$OUTERIF -j ACCEPT";
}



Et ajouter une ligne dans le script de démarrage au niveau des start et stop qui ferait un /sbin/expand-template /etc/masq. Mais je ne sais pas si tno user teamspeak aura le droit de faire cela.
/Muzo
"La vie n'est pas un combat, mais une passion à défendre!" MASS HYSTERIA - Knowledge is power
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar Cool34000 » 07 Juin 2007 09:58

Salut

Il n'y a plus de script iptables, l'ouverture se fait par le mécanisme SME (la DB) !
Ne te base pas sur le howto, le rpm est très différent... Si tu veux voir ce qui est fait, ouvre le src rpm !
A ce propos (certains vont me dire que j'arrive d'une autre planète lol) le programme 7z sait ouvrir (read only) les .rpm ! C'est très pratique pour regarder ce qu'il y a dedans sans se prendre la tête.

J'ai testé et l'utilisateur TS n'a même pas assez de pouvoir pour visualiser son propre status !
Code: Tout sélectionner
bash-3.00$ config show teamspeak
bash: /sbin/e-smith/config: Permission denied
Autant dire qu'il sera impossible de lui faire modifier et/ou appliquer une configuration :cry:

Si tu as une autre idée de comment appliquer la chose...
Avatar de l’utilisateur
Cool34000
Contre-Amiral
Contre-Amiral
 
Messages: 480
Inscrit le: 10 Sep 2006 10:45
Localisation: Nimes, France

Messagepar Muzo » 07 Juin 2007 10:08

Non il ne faut surtout pas qu'il est de pouvoir, et c'est tant mieux ;o)
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar Muzo » 12 Juin 2007 23:07

Je viens de tester la contrib. Joli boulot d'intégration.

J'ai appliqué ce que tu m'as dit, à savoir:
Code: Tout sélectionner
config setprop teamspeak status disabled
signal-event remoteaccess-update


Voici ce que j'ai fait:
- arrêt du serveur teamspeak:
Code: Tout sélectionner
service teamspeak stop

- reconfiguration du service en disable comme tu me l'as indiqué, pour qu'il ne démarre pas automatiquement
- Si je tente de démarrer le serveur avec la commande suivante, il ne se passe rien.
Code: Tout sélectionner
service teamspeak start


Je penses que je n'ai pas bien compris ta réponse. Car il est évident que si le service est disabled, SME ne le lancera pas.

Ou j'ai pas tout pigé?

/Muzo
/Muzo
"La vie n'est pas un combat, mais une passion à défendre!" MASS HYSTERIA - Knowledge is power
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar Cool34000 » 13 Juin 2007 13:03

Salut,


Désolé pour le temps de réponse... Je me lève d'une nuit de 18 heures et je suis encore un peu KO :oops:

Je viens de constater la même chose...
En essayant de creuser, j'ai testé la commande lancée par le service directement en ligne de commande :
Code: Tout sélectionner
# su teamspeak -c "~/server_linux -PID=tsserver2.pid"
Error starting daemon. Aborted

Pas terrible...
En faisant la même commande en s'étant connecté avec le user teamspeak:
Code: Tout sélectionner
# su teamspeak
bash-3.00$ cd ~
bash-3.00$ ./server_linux -PID=tsserver2.pid
TeamSpeak Server Daemon started with PID 4674
bash-3.00$ exit

La ca marche... Pour arréter le service, la commande normale refonctionne avec ROOT (service teamspeak stop)
Bizarre... Si tu as une idée d'ou cela pourrait venir...
Avatar de l’utilisateur
Cool34000
Contre-Amiral
Contre-Amiral
 
Messages: 480
Inscrit le: 10 Sep 2006 10:45
Localisation: Nimes, France

Messagepar Muzo » 13 Juin 2007 13:21

OK, j'avais donc bien compris ta réponse.

Là je ne sais pas il faudra regarder dans le script de démarrage, où il s'arrête.
/Muzo
"La vie n'est pas un combat, mais une passion à défendre!" MASS HYSTERIA - Knowledge is power
Avatar de l’utilisateur
Muzo
Amiral
Amiral
 
Messages: 5236
Inscrit le: 07 Mai 2003 00:00
Localisation: BNF! Je me culturise.

Messagepar Gaston » 13 Juin 2007 22:54

Bonsoir,
je réponds sans vérification, mais une idée de ce que j'évalue à la lecture :
Code: Tout sélectionner
# su teamspeak -c "~/server_linux -PID=tsserver2.pid"
Error starting daemon. Aborted

On démarre un script/programme sans sourcer son environnement, et en particulier ne pas positionner les "CWD" (current working directory) à la valeur du HOME_DIR de l'utilisateur teamspeak
ALors que là
Code: Tout sélectionner
# su teamspeak
bash-3.00$ cd ~
bash-3.00$ ./server_linux -PID=tsserver2.pid
TeamSpeak Server Daemon started with PID 4674
bash-3.00$ exit

On ne source pas non plus l'environnement, mais on se déplace à la main dans le $HOME.
Comme je suppute que tsserver2.pid est un fichier dans lequel on écrit le PID du programme, dans le premier cas, on l'a lancé d'un répertoire où "teamspeak" n'a pas le droit d'écrire ! , d'où 'erreur, (je serait même tenté de dire que si tu te places dans /tmp, ça devrait le faire, ou alors tu mets un PATH correct pour le fichier : un "basename" n'est pas conforme à ma vision du correct :( ) dans le deuxième cas le "cwd" est correctement positionné.
une commande équivalente (non testée) mais qui devrait fonctionner pourrait être :
Code: Tout sélectionner
su teamspeak -c "(cd ~teamspeak ; ./server_linux -PID=./tsserver2.pid)"
(ça me plaît pas beaucoup plus comme écriture ...)

Pour ce qui est de la gestion du "service" sous SME, c'est un peu plus sioux.
En fait à partir du moment où un "service" est définit dans une des DB avec un "status", si celui-ci n'est pas à "enabled", l'ordre de démarrage sera ignoré (comme Muzo le souligne).
Par contre pour le stop, c'est le script de l'init.d qui est directement utilisé, sans référence cachée à un tel attribut. (Après on complexifie encore un peu si on utilise un service contrôlé par "runsv", les pages de man et Google, doivent être d'une bonne aide en la matière)
Il faudrait donc, pour coller à la "demande" de Muzo, trouver une façon de dissocier le comportement du script selon qu'il est appelé à partir d'un shell interractif (ou d'un script) et des scripts de démarrage (rc7.d)

G.
Avatar de l’utilisateur
Gaston
Amiral
Amiral
 
Messages: 1367
Inscrit le: 06 Oct 2003 00:00
Localisation: Saint Maur, 94 FR

Messagepar Cool34000 » 14 Juin 2007 10:10

Salut !


Voici le contenu du fichier qui se charge de la gestion du service
Code: Tout sélectionner
#! /bin/bash
# Copyright (c) 2004 TeamSpeak team   All rights reserved.
#
# Author: pwk.linuxfan 2004
# Modified by Derek "Cybernaut" Jackson - www.DigitalNines.com
# Modified By Sylvain Gomez - sylvaingomez AT free.fr
#
# chkconfig: 345 85 15
# description: Runs and kills TeamSpeak Voice server at boot time and shutdown.
# Source function library.
#. /etc/rc.d/init.d/functions

# START OF CONFIG SECTION
# WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT
USER=teamspeak
DIR=/opt/teamspeak
# END OF CONFIG SECTION

# See how we were called.
case "$1" in
        start)
                if [ -e $DIR/tsserver2.pid ]; then
                        echo "tsserver2.pid already exists...server already started ?";
                        echo "If you are sure the server is not running, delete tsserver2.pid"
                        exit 1
                else
                        if [ "$UID" = "0" ]; then
                                for c in $(seq 1 10); do
                                        echo -n "!"
                                        sleep 1
                                done
                                echo !
                        fi
                        echo "Starting the TeamSpeak Voice server..."
                        if [ -e $DIR/server_linux ]; then
                                if [ ! -x $DIR/server_linux ]; then
                                        echo "server_linux is not executable; trying to set it."
                                        chmod u+x $DIR/server_linux
                                fi
                                if [ -x $DIR/server_linux ]; then
                                        WD=`pwd`
                                        cd $DIR
                                        su $USER -c "$DIR/server_linux -PID=tsserver2.pid" &
                                        cd $WD
                                else
                                        echo "server_linux is not executable; fix this."
                                        exit 4
                                fi
                        else
                                echo "Couldnt find server_linux."
                                exit 5
                        fi
                fi
        ;;
    stop)
                if [ -e $DIR/tsserver2.pid ]; then
                        echo -n "Stopping the TeamSpeak Voice server..."
                        if ( kill -TERM `cat $DIR/tsserver2.pid` ); then
                                for c in $(seq 1 300); do
                                        if [ -e $DIR/tsserver2.pid ]; then
                                                echo -n "."
                                                sleep 1
                                        fi
                                done
                        fi
                        if [ -e $DIR/tsserver2.pid ]; then
                                echo "server does not shutdown cleanly - killing"
                                kill -KILL `cat $DIR/tsserver2.pid`
                                rm $DIR/tsserver2.pid
                                sleep 5
                        else
                                echo "done"
                        fi
                else
                        echo "tsserver2.pid is missing; is the server stopped already?"
                        #exit 7 - Should not be here as doesn't allow restart if server is already stopped.
                fi
        ;;
        restart)
                $0 stop && $0 start || exit 1
        ;;
        status)
                if [ -e $DIR/tsserver2.pid ]; then
                        echo "The TeamSpeak Voice server is running."
                        exit 0
                else
                        echo "The TeamSpeak Voice server is stopped."
                        exit 3
                fi
        ;;
        passwords)
                if [ -e $DIR/server.log ]; then
                        date=$(cat $DIR/server.log | grep "admin account info: username: admin" | tail -n 1 | sed "s/^\([0-9]\+-[0-9]\+-[0-9]\+ [0-9]\+:[0-9]\+:[0-9]\+\).*$/\1/")
                        spass=$(cat $DIR/server.log | grep "superadmin account info: username: superadmin" | tail -n 1 | sed "s/^.*username: superadmin password: \([a-z0-9]\+\).*$/\1/")
                        pass=$(cat $DIR/server.log | grep "admin account info: username: admin" | tail -n 1 | sed "s/^.*username: admin password: \([a-z0-9]\+\).*$/\1/")
                        echo "Following passwords were generated on $date"
                        echo "superadmin = \"$spass\""
                        echo "admin      = \"$pass\""
                else
                        echo "server.log not found; maybe the server has not been started yet?"
                        exit 1
                fi
        ;;
        *)
                echo "Usage: $0 {start|stop|restart|status|passwords}"
                exit 2
esac
exit 0

J'ai peut être une idée concernant le lancement du service : quand il est lancé par ROOT, la boucle renvoi "!!!!!!!!!!" avant de lancer le service. Quand le service est lancé au démarrage, il n'y a pas ces '!' puisque ce n'est plus ROOT qui le lance
Code: Tout sélectionner
                        if [ "$UID" = "0" ]; then
                                for c in $(seq 1 10); do
                                        echo -n "!"
                                        sleep 1
                                done
                                echo !
                        fi
Peut être que l'on pourrait utiliser ce cas et l'agrémenter, mais je ne vois pas quoi...
Avatar de l’utilisateur
Cool34000
Contre-Amiral
Contre-Amiral
 
Messages: 480
Inscrit le: 10 Sep 2006 10:45
Localisation: Nimes, France

Messagepar Gaston » 15 Juin 2007 00:05

Bonsoir,
je suis pas d'accord avec tout ce qu'il y a dans ce script , mais ce n'est pas le débat.
Mais surtout je ne suis pas d'accord avec cette affirmation
J'ai peut être une idée concernant le lancement du service : quand il est lancé par ROOT, la boucle renvoi "!!!!!!!!!!" avant de lancer le service. Quand le service est lancé au démarrage, il n'y a pas ces '!' puisque ce n'est plus ROOT qui le lance
Code: Tout sélectionner
                        if [ "$UID" = "0" ]; then
                                for c in $(seq 1 10); do
                                        echo -n "!"
                                        sleep 1
                                done
                                echo !
                        fi

Je ne vois en quoi ce ne serait pas root qui le lance, mais bon il est tard là certainement une confusion entre $UID (pas d'idée quand cette variable est renseignée) et le résultat de la commande "id" , ensuite, tester l'UID = 0 pour éviter le lancement du programme est en contradiction avec ce qui va suivre.
Le programme est lancé en tant que "teamspeak" (su teamspeak -c ) et Par contre pour que cette commande résussisse (dans un script et sans autre input), il n'y a à ma connaissance que 2 possibilités :
- être le user teamspeak (et encore pas partout/toujours)
- être root
être un autre user implique soit, que tu puisses fournir le password, soit que le user n'en ait pas, soit que tu ais mis un .rhost ... que des choses à éviter!

Pour savoir si le script est lancé par init ou autrement, moi je regarderai le terminal associé. Si il n'y en a pas, c'est init qui joue, sinon c'est autre chose. Avec ceci dans le script
Code: Tout sélectionner
ps -e | grep $$  | awk '{print $2}'
si le résultat est le caractère "?" il n'y a pas de terminal associé au processus courant (lancé par le "init 7" donc) , sinon ben il y en a un...
Je ne garantis pas que cela réponde à tous les cas (en particulier le cas d'un cron), mais ça devrait pas en être loin. Et sinon on peut tester si dans les process en cours on a pas un rc7.d qui traine ...

G.
Avatar de l’utilisateur
Gaston
Amiral
Amiral
 
Messages: 1367
Inscrit le: 06 Oct 2003 00:00
Localisation: Saint Maur, 94 FR

Suivant

Retour vers E-Smith / SME Server

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité

cron