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