Mumble Viewer ou la chasse à la licorne !

Il était une fois une interface pour voir les serveurs Mumble, elle fonctionnait à merveille sur Debian 6 (Ice 3.3.1-12 / php 5.3.3-7) puis la technologie avançant les programmes évoluèrent et la beauté disparut.

mumble

A la recherche de l’animal légendaire

Aujourd’hui sur Debian 8 (Ice 3.5.1-6 / php 5.6.14) le code ne veut plus fonctionner.

L’erreur traîtresse était bien présente :

PHP Fatal error: Call to undefined function ice_loadprofile()

Plusieurs sites de recherche plus loin

Une solution prenait forme.

remove

Ice_loadProfile();

replace with

require ‘Ice.php’;
require ‘Murmur.php’;
$ICE = Ice_initialize();

Il fallait donc corriger le code de MumbleViewer, le fichier « include/mumbleviewer.inc » était notre cible !

Mais ceci ne suffisait pas et donnait une erreur :

PHP Fatal error: require(): Failed opening required ‘Murmur.php’ (include_path=’/usr/share/Ice-3.5.1/php/lib/’)

La traque continue

Mais oui, il était aussi question de :

slice2php Murmur.ice

Quel langage étrange, recherches à l’appui je retrouvais le « package » associé à ce « slice2php »
( ice35-translators ). Une fois installé la commande était lancée… et… voilà quoi. Encore.

slice2php /usr/share/slice/Murmur.ice
/usr/share/slice/Murmur.ice:9: error: Can’t open include file « Ice/SliceChecksumDict.ice »
#include <Ice/SliceChecksumDict.ice>
1 error in preprocessor.

Recherche faite de ce « SliceChecksumDict.ice », il était présent dans « /usr/share/Ice-3.5.1/slice/ » (sous le dossier Ice bien sûr ^^), je copiais donc le fichier Murmur.ice dans le dossier pour relancer la commande… Que nenni, le fourbe ne voulait pas reconnaître ce fichier qui était làààà juste à coté de lui !

La bête n’était plus loin !

Une information visible que pour un œil averti attirait mon attention. « -I »…

slice2php –help
Usage: slice2php [options] slice-files…
Options:
[…]
-IDIR Put DIR in the include file search path.
[…]

Ouiii, là sous mes yeux, la commande prenait forme :

slice2php -I/usr/share/Ice-3.5.1/slice/ /usr/share/slice/Murmur.ice

Aucune réponse, mais un fichier venait d’apparaître, dans le dossier où je me trouvais, « Murmur.php » : Eurêka !

Une copie du fichier dans le dossier magique « /usr/share/Ice-3.5.1/php/lib » et maintenant tout était là !!

Petite vérification

Comme précisé ici, il faut que Mumble soit disponible en écoute aux requêtes slice.

vim /etc/mumble-server.ini
On commente "dbus"
#dbus=system
On dé-commente "ice"
ice="tcp -h 127.0.0.1 -p 6502"

 


Récapitulatif scripté

Voici le code pour les flemmards comme moi, afin de tout refaire en un clin d’œil.
Il sera peut être nécessaire de remplacer « ice35 » par « ice34 » suivant la version de Debian, et donc de changer le dossier. (NB : la modification de « include/mumbleviewer.inc » n’est pas intégré)

# Ajout des packages Slices nécessaires
apt-get -q -y install ice35-slice php-zeroc-ice ice35-translators

# Correction de la config mumble-server par défaut et suppression du commentaire devant le paramètre Ice
sed -i 's/^#\(ice=.*\)/\1/g' /etc/mumble-server.ini

# Ajout des deux lignes dans le fichier de paramètres Ice pour Php (le fichier peut différer suivant la version)
cat <<EOF>> /etc/php5/mods-available/IcePHP.ini
ice.slice=/usr/share/slice/Murmur.ice
include_path = "/usr/share/Ice-3.5.1/php/lib/"
EOF

# On redémarre Apache qui va créer le fichier Murmur.ice et on redémarre mumble qui va écouter les requêtes slices
apache2ctl restart
service mumble-server stop
service mumble-server start

# On transforme notre Murmure.ice en Murmure.php puis on le met à sa place !
slice2php -I/usr/share/Ice-3.5.1/slice/ /usr/share/slice/Murmur.ice
mv Murmur.php /usr/share/Ice-3.5.1/php/lib/