EL7 Mumble Server

Mumble is relatively a pain to manually setup on EL7. The following guide shows an easy way to not have to spend much time to setup Murmur (the serverside component) on EL7 platforms.

Mumo is an optional component that acts as a plugin manager for Mumble, automating and facilitating certain tasks via the ZeroC ICE backend (which will need to be installed).

Mumble-web is an optional Mumble HTML5 client.

MUMBLE

Murmur is the server side component (daemon), and Mumble is the client side software. Below are the steps to setup a Murmur server.

REPOS (epel + Nux!)

sudo yum -y install epel-release && rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

PACKAGES

sudo yum install murmur

CONFIGURATION

The config file from Nux! package is /etc/murmur/murmur.ini

The stock config is mostly good. I would go thru it and tailor anything that stands out, such as a custom port if you wish, server password, uname, etc. You will need to copy the icesecretwrite password for MuMo later if you wish to set that up.

MUMO

Mumble Moderator: Allows for "plugins" to be created and installed that use ICE to automate or facilitate tasks.

SETUP (EL7)

  • Packages (RPM and Python):

    sudo yum install ice-python python2-dateutil python-pillow
    sudo pip install python-daemon
    
  • Systemd unitfile:

    sudo vim /etc/systemd/system/mumo.service
    
  • mumo.service contents (sample). My ExecStart parameter is actually a shell script that forces some issues. Choose your own method:

    [Unit]
    Description=mumo -- Mumble Moderator
    After=murmur.service
    
    [Service]
    User=mumble-server
    Type=forking
    PIDFile=/PATH_TO_MUMO/mumo/mumo.pid
    ExecStart="/PATH_TO_MUMO/mumo/mumo.py -d"
    
    [Install]
    WantedBy=multi-user.target
    

COMMANDS

Sample commands from MY installed MuMo plugins

Command Function
!seen USERNAME Lists last times USERNAME was logged on.
!hist LINES CHANNEL Lists, optionally # of LINES, last 10 messages in current channel, or in specified channel
!of TEXT Mark TEXT as offtopic, and not to be logged.
!img IMAGE_URL Make a linked inline image to source image

MUMBLE-WEB HTML5 CLIENT

There is an HTML5 client for mumble now. To setup, you will need firstly a functional Mumble server running. The HTML5 app requires websockets, which normally Mumble does not do. So there is a wrapper that will fix that.

INSTALLING THE HTML5 APPLICATION

We will be pulling from a git repo to get the source and building it for node.js. I presume you can handle creating and going to a workspace subdirectory somewhere, and know where to copy your files on your webserver. Ignore step 9 if you are not using SELinux (which you should be if your distribution and webhost supports it).

  1. cd ~/workspace/git_repos/
  2. git clone https://github.com/johni0702/mumble-web
  3. cd mumble-web
  4. npm install
  5. npm run build
  6. mv -R ./buld/dist/ /var/www/html/
  7. mv /var/www/html/dist /var/www/html/mumble-web
  8. chown -R apache:apache /var/www/html/mumble-web/
  9. restorecon -Rv /var/www/html/

ENABLING WEBSOCKETS

The websockets tool, websockify, is our simple method for getting the job done here. Visit the mumble-web site for more options (such as proxies). But for simplicity I will be going over the simplest method to make it work, and least likely to cause any grief. Step 1 can be omitted if you have a package for websockify in your distribution's repos. Otherwise, pip3 will suffice, and what I will use here. Also we will be creating two files, a systemd unit and a start script. Edit the paths and names to your preference.

  1. pip3 install websockify
  2. vim /etc/systemd/system/mumble-web.service
  3. vim /etc/opt/scripts/start-mumble-web-websockify.sh
  4. chmod og+x /etc/opt/scripts/start-mumble-web-websockify.sh
  5. systemctl daemon-reload
  6. systemctl enable mumble-web
  7. systemctl start mumble-web

So the mumble-web systemd unitfile is rather simple:

    [Unit]
    Description=Mumble Web -- HTML5 Mumble Client
    After=murmur.service

    [Service]
    User=root
    Type=forking
    ExecStart=/bin/bash /opt/scripts/start-mumble-web-websockify.sh
    ExecStop=/usr/bin/killall websockify

    [Install]
    WantedBy=multi-user.target

And the start-mumble-web-websockify.sh is simple too. Edit to fix your desired certs' path and the SOCKS_PORT. This also presumes you are running this on the host that Mumble is running on:

    #!/bin/bash
    /usr/local/bin/websockify -D --cert=/path/to/cert.pem --key=/path/to/privkey.pem --ssl-only --ssl-target --web=/var/www/html/mumble-web/ SOCKS_PORT localhost:64738

REFERENCES