BenV's notes

Need Ventrilo/Teamspeak? Try Mumble!

by on Jun.29, 2011, under Software


Today the 4.2.0 aka Firelands patch was released for World of Warcraft.

First thing to notice: where did all my inventory space go? And why do I have tons of ingame mail? Well, they removed the keyring, making a bunch of keys obsolete (which they send you gold for in return through ingame mail), and the rest of them are stashed in your inventory.
Gee thanks assholes. Guess those keys are really a lot bigger than those 128 axes I carry in my backpacks.

Apparently this is needed to make room for the Dungeon Journal, which shows you the stuff you would normally check Wowwiki etc for, things like boss abilities and drop lists. Don’t know why that requires the key ring to go away, but leave that to Blizzard.
Of course with new content comes a new daily grind guide. Wonder how long I’ll manage to put up with that.

Anyhow, there is also new raid content and for raiding you need some kind of voice chat for the group.
We’ve been running Teamspeak 3.0 for this, which works pretty good and is free for non-profit organizations.
It has served us well so far. But someone in our guild hinted us to check out the open source product called Mumble. Check out this video to see why they were interested in it.
(on the other hand, check out this comparison that debunks most of it :-p)

I figured I’d give it a shot since it’s FOSS anyway, time to install it!

Installing Murmur

The server part of Mumble is called Murmur and I will try to install it on a 32 bit Slackware 13.1 machine. But first, as usual, some dependencies. (Obviously if you’re running PokemonOS where everything magically works you can skip this part and miss out on some fun. Or maybe you run OSX and prefer some damage instead.)


We start off with a pretty straightforward installation of libmcpp, some portable C preprocessor. Slackbuild handles it just fine, and if you’re too stupid to use that you can go with the usual configure, make, makepkg riddle like this:

root@mumble:/usr/src$ wget
root@mumble:/usr/src$ tar zxf mcpp-2.7.2.tar.gz
root@mumble:/usr/src$ chown -R root:root mcpp-2.7.2 ; cd mcpp-2.7.2
root@mumble:/usr/src/mcpp-2.7.2$ ./configure --prefix=/usr --enable-mcpplib ; make
root@mumble:/usr/src/mcpp-2.7.2$ mkdir pkg ; DESTDIR=`pwd`/tmp make install
root@mumble:/usr/src/mcpp-2.7.2$ cd pkg ; makepkg /usr/src/packages/mcpp-2.7.2-i486-1.txz
root@mumble:/usr/src/mcpp-2.7.2/pkg$ installpkg /usr/src/packages/mcpp-2.7.2-i486-1.txz

Easy enough. Next!


This heap of junk called Ice (I think it stands for Installing Cancer Everywhere, but their homepage has a few typos by management trying to sell it as a Internet Crap Engine) is a bunch of middleware that’ll take care of the fun parts in code like setting up network connections and transferring data. Or at least they say so 😉
Installing this is a lot tougher for two reasons. First reason: they haven’t heard of autoconf. Probably because it’s “portable“, which means “doesn’t install unless you have a very big hammer“.
Second reason: my Slackware installation had another piece of shit middleware called “Berkeley DB“, famous for breaking stuff like Subversion repositories.

root@mumble:/usr/src$ wget ; tar zxf $!:r ; chown -R root:root Ice-3.4.2 ; cd Ice-3.4.2/cpp
root@mumble:/usr/src/Ice-3.4.2/cpp$ vim config/Make.rules
# Check the options, personally I uncommented and set LP64=no and OPTIMIZE=yes.
# Also you might want to make prefix=/usr/src/Ice-3.4.2/cpp/pkg/usr orso, so you can actually package it properly.
root@mumble:/usr/src/Ice-3.4.2/cpp$ make
# Tons of output until:
c++ -c -I.. -I../../include -DFREEZE_API_EXPORTS   -m32 -Wall -D_REENTRANT -fPIC -O2 -DNDEBUG BackgroundSaveEvictorI.cpp
In file included from ../Freeze/TransactionI.h:15,
                 from ../Freeze/ObjectStore.h:18,
                 from ../Freeze/EvictorI.h:16,
                 from ../Freeze/BackgroundSaveEvictorI.h:13,
                 from BackgroundSaveEvictorI.cpp:10:
/usr/include/db_cxx.h:59:22: error: iostream.h: No such file or directory
/usr/include/db_cxx.h:64:24: error: cxx_common.h: No such file or directory
/usr/include/db_cxx.h:65:24: error: cxx_except.h: No such file or directory
In file included from ../Freeze/TransactionI.h:15,
                 from ../Freeze/ObjectStore.h:18,
                 from ../Freeze/EvictorI.h:16,
                 from ../Freeze/BackgroundSaveEvictorI.h:13,
                 from BackgroundSaveEvictorI.cpp:10:
/usr/include/db_cxx.h:159: error: variable '_exported DbLock' has initializer but incomplete type
/usr/include/db_cxx.h:161: error: expected primary-expression before 'friend'
/usr/include/db_cxx.h:161: error: expected '}' before 'friend'
/usr/include/db_cxx.h:161: error: expected ',' or ';' before 'friend'
/usr/include/db_cxx.h:163: error: expected unqualified-id before 'public'
/usr/include/db_cxx.h:165: error: expected ',' or '...' before '&' token
/usr/include/db_cxx.h:165: error: expected constructor, destructor, or type conversion before ';' token
/usr/include/db_cxx.h:166: error: expected constructor, destructor, or type conversion before '&' token
/usr/include/db_cxx.h:168: error: expected unqualified-id before 'protected'
/usr/include/db_cxx.h:175: error: expected declaration before '}' token
make[2]: *** [BackgroundSaveEvictorI.o] Error 1
make[2]: Leaving directory `/usr/src/Ice-3.4.2/cpp/src/Freeze'
make[1]: *** [all] Error 1
make[1]: Leaving directory `/usr/src/Ice-3.4.2/cpp/src'

make: *** [all] Error 1

This is that Berkeley DB error I talked about. The solution is simple, it needs a recompile with –enable-cxx passed to configure. Don’t ask me how this problem got there, I guess somewhere either the db4 package didn’t get upgraded while my gcc packages did. Anyhow, a solution for that:

root@mumble:/usr/src/sources$ wget -m -nd
root@mumble:/usr/src/sources$ mkdir tmp ; export TMP=`pwd`/tmp ; ./db44.SlackBuild
# This takes a while
root@mumble:/usr/src/sources$ upgradepkg tmp/db44-*.txz

Back to the Ice problem. It should compile properly now:

root@mumble:/usr/src/Ice-3.4.2/cpp$ make && mkdir pkg && make install
# This time it really takes forever.
# Now that it's done, let's clean up the junk it wants to install. We won't need most of it.
root@mumble:/usr/src/Ice-3.4.2/cpp$ cd pkg/usr
root@mumble:/usr/src/Ice-3.4.2/cpp/pkg/usr$ mkdir -p share/ice share/doc
root@mumble:/usr/src/Ice-3.4.2/cpp/pkg/usr$ mv config slice share/Ice/
root@mumble:/usr/src/Ice-3.4.2/cpp/pkg/usr$ mv LICENSE ICE_LICENSE share/doc
root@mumble:/usr/src/Ice-3.4.2/cpp/pkg/usr$ cd ..
root@mumble:/usr/src/Ice-3.4.2/cpp/pkg$ makepkg /usr/src/packages/ice-3.4.2-i486-1.txz ; installpkg /usr/src/packages/ice-3.4.2-i486-1.txz

There, finally done with that. Note that if you failed to change the prefix etc like I did above you might need to add some stuff to your PATH and LD_LIBRARY_PATH for it to work.


You didn’t think that was all, did you? We still need to install Protocol Buffers.
Hosted by Google Code, and also used by Google for internal RPC stuff. However, Google Code and Wget is like the old sourceforget and wget.
HEY, Google! Please implement redirects so I can simply wget the link on your downloads page and not get some fucking checksum page, just add the checksum in the downloads page already!
You’d think it would be trivial to detect wget as useragent. Anyhow, installing protobuf — trivial with Slackbuild, but for the manual guys:

root@mumble:/usr/src$ wget
root@mumble:/usr/src$ tar jxf protobuf-2.4.1.tar.bz2 ; chown -R root:root protobuf-2.4.1 ; cd protobuf-2.4.1
root@mumble:/usr/src/protobuf-2.4.1$ ./configure --prefix=/usr ; make ; mkdir pkg ; DESTDIR=`pwd`/pkg make install
root@mumble:/usr/src/protobuf-2.4.1$ cd pkg ; makepkg /usr/src/packages/protobuf-2.4.1-i486-1.txz
root@mumble:/usr/src/protobuf-2.4.1/pkg$ installpkg  /usr/src/packages/protobuf-2.4.1-i486-1.txz


Finally time to compile the Murmur server. For this we’ll need qmake from the qt package, so I’ll just assume you’ve installed it. (it’s in slackware for KDE anyway). You’ll also need boost, so install that wheelbarrow of bugs while you’re at it. Oh, and libcap.

root@mumble:/usr/src$ wget
root@mumble:/usr/src$ tar zxf mumble-1.2.3.tar.gz ; chown -R root:root mumble-1.2.3 ; cd mumble-1.2.3
root@mumble:/usr/src/mumble-1.2.$ qmake -recursive CONFIG+=no-client CONFIG+=optimize CONFIG+=no-portaudio CONFIG+=no-pulseaudio CONFIG+=no-oss CONFIG+=no-bonjour
root@mumble:/usr/src/mumble-1.2.3$ make
# You will see about 5 million warnings and other things that make my toes curl, but not much we can do about that.
# Amazing enough, it compiled.Let's make a package.
root@mumble:/usr/src/mumble-1.2.3$ mkdir -p pkg/usr/bin
root@mumble:/usr/src/mumble-1.2.3$ cp release/murmurd pkg/usr/bin
root@mumble:/usr/src/mumble-1.2.3$ cd pkg ; makepkg /usr/src/packages/murmur-1.2.3-i486-1.txz ; installpkg /usr/src/packages/murmur-1.2.3-i486-1.txz


Be sure to read the documentation on this, because you might want to do different stuff than me 🙂
Running the server is pretty simple, it wants an ini file and a superuser password. A sample ini file can be found in the sources: /usr/src/mumble-1.2.3/scripts/murmur.ini. That directory also has an init.d script for it if you like.

First run

The first time you run it it will create a local database and put a password on it:

mumble@mumble:~$ murmurd -fg -v -ini murmur.ini -supw $SOMEPASSWORD
<W>2011-06-29 17:31:31.947 Initializing settings from /home/mumble/murmur.ini (basepath /home/mumble)
<W>2011-06-29 17:31:31.948 OpenSSL: OpenSSL 0.9.8r 8 Feb 2011
<W>2011-06-29 17:31:31.948 SSL: Adding recommended CA StartCom Certification Authority
<W>2011-06-29 17:31:31.948 SSL: Adding recommended CA AAA Certificate Services
<W>2011-06-29 17:31:31.949 SSL: Adding recommended CA UTN-USERFirst-Client Authentication and Email
<W>2011-06-29 17:31:31.951 ServerDB: Openend SQLite database /home/mumble/murmur.sqlite
<F>2011-06-29 17:31:32.100 Superuser password set on server 1

Now it’s ready to be started as a real server. Be sure to remove the -supw commandline option, or it will keep doing the thing it did above 🙂
Let’s run it:

mumble@mumble:~$ murmurd -fg -v -ini murmur.ini
<W>2011-06-29 17:31:34.789 Initializing settings from /home/mumble/murmur.ini (basepath /home/mumble)
<W>2011-06-29 17:31:34.790 OpenSSL: OpenSSL 0.9.8r 8 Feb 2011
<W>2011-06-29 17:31:34.791 SSL: Adding recommended CA StartCom Certification Authority
<W>2011-06-29 17:31:34.791 SSL: Adding recommended CA AAA Certificate Services
<W>2011-06-29 17:31:34.791 SSL: Adding recommended CA UTN-USERFirst-Client Authentication and Email
<W>2011-06-29 17:31:34.793 ServerDB: Openend SQLite database /home/mumble/murmur.sqlite
<W>2011-06-29 17:31:34.905 Failed to connect to D-Bus session
<W>2011-06-29 17:31:34.907 OSInfo: Failed to execute lsb_release
<W>2011-06-29 17:31:34.907 Murmur 1.2.3 (1.2.3) running on X11: Linux Booting servers
<W>2011-06-29 17:31:35.184 1 => Server listening on [::]:64738
<W>2011-06-29 17:31:35.282 1 => Generating new server certificate.
<W>2011-06-29 17:31:37.048 1 => Not registering server as public

Now that it’s up and running, fire up the client on your laptop and connect to it!
Have fun playing around with it, I’ll post an update once we know how well it performs.

:, , , ,

Leave a Reply

You must be logged in to post a comment.


  • 2016 (1)
  • 2015 (7)
  • 2014 (4)
  • 2013 (11)
  • 2012 (27)
  • 2011 (26)
  • 2010 (25)
  • 2009 (68)