What is Mumble?

Mumble is an open-source voice over IP (VOIP) application widely used in the gaming community. Mumble consists of a server application (also known as Murmur) and a client application, which is installed for individual use.

Even though it can be used for any VOIP activity, it was primarily designed with gamers in mind so that they could communicate by connecting their clients to the same Mumble server.

Murmur’s Features

Murmur features a low latency service, a simple administration interface, and requires minimal server resources while supporting a wide range of high-quality audio codecs. Furthermore, Mumble and Murmur are BSD licensed and are completely free for commercial hosting.

End-users love it for its low latency, which makes it great for in-game use, as well as for its features, such as positional audio and in-game overlay.

configuration screen of mumble

Encryption

The control channel for delivering chat messages and non-time critical information is fully encrypted with TLS using 256-bit AES-SHA, while the voice channel is encrypted with 128-bit OCB-AES.

OS Support

Any platform that can compile Qt 4 supports Murmur. At the time of writing this article, this includes the most popular Linux distros, as well as Windows and MacOS X.

The Mumble end-user client is supported on most if not all popular operating systems, and there are even third-party apps for Android and iOS.

Prerequisites

  • CentOS 7 server with at least 512MB of RAM
  • bzip2
  • Firewall port 64738 open for communication with Mumble clients
  • SELinux disabled (if preventing Murmur from functioning properly)

Installing and Configuring Murmur

Download the Murmur Installation File

Murmur is not included in the official CentOS repository, so you will need to download the installation file from GitHub. To do so, browse to https://wiki.mumble.info/wiki/Main_Page.

Right-click on the download link and select Copy Link Address.

download link of mumble for installation

Type the wget command in a terminal and paste the download link.

wget https://github.com/mumble-voip/mumble/releases/download/1.2.19/murmur-static_x86-1.2.19.tar.bz2

Extract Murmur Tarball

Now that you have downloaded the latest stable release of Murmur, you will need to extract the files from the tarball. Run the following command:

tar -vxjf ./murmur-static_x86-1.2.19.tar.bz2

Extracting the Murmur tarball should create a murmur-static_x86-[murmur version] directory. If, on the other hand, you receive an error message as shown below, you will need to install the bzip2 package.

tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

To install bzi2 package, run the following command:

sudo yum install bzip2

Once bzip2 is installed, rerun the command to extract the Murmur tarball. If prompted, type Y and press enter to proceed.

Create a /usr/local/murmur Directory

This is where you will copy the extracted files from the tarball. To create the directory:

sudo mkdir /usr/local/murmur

sudo cp -r ./murmur-static_x86-1.2.19/* /usr/local/murmur/

The next step will copy the configuration file to etc/murmur.ini.

sudo cp ./murmur-static_x86-1.2.19/murmur.ini /etc/murmur.ini

Next, we’ll work on ownership and permission rules.

Create a Murmur User and Group, and Logging and Data Directory

To create a User and Group, run the following commands:

sudo groupadd -r murmur

sudo useradd -r -g murmur -m -d /var/lib/murmur -s /sbin/nologin murmur

To create a Data and Logging directory, run the following commands:

sudo mkdir /var/log/murmur
sudo chown murmur:murmur /var/log/murmur

For the protection of logs, modify the permissions assigned to the log directory:

sudo chmod 0770 /var/log/murmur

It is highly recommended to rotate logs so that Murmur logs can’t fill up /var/log. As root, create a /etc/logrotate.d/murmur configuration file and copy-paste the following:

/var/log/murmur/*log {
su murmur murmur
dateext
rotate 4
missingok
notifempty
sharedscripts
delaycompress
postrotate
/bin/systemctl reload murmur.service > /dev/null 2>/dev/null || true
endscript
}

Configure and Customize Murmur

All customizations are performed in the /etc/murmur.ini file. Before customizing anything, make sure the settings below are configured correctly in the /etc/murmur.ini file.

database=/var/lib/murmur/murmur.sqlite
logfile=/var/log/murmur/murmur.log
pidfile=/var/run/murmur/murmur.pid
# Reminder: When changing the port that murmur will listen to you will also need to update the firewall.
# Update the firewall by editing /etc/firewalld/services/murmur.xml
# Then run "sudo firewall-cmd --reload"
port=64738
# Comment out the following setting since the service will already be executing as the correct user:
# uname=murmur

To change the welcome message, modify the text following the welcome text string. Basic HTML markup is supported.

To change the user limit, find and modify the users=100 string. For example, if you want to reduce the number of slots to 50, the string should read users=50. If you want to limit per-user incoming bandwidth, find and modify the bandwidth parameter.

For added security, uncomment the autoban lines.

Create a Mumble Service

Create a system unit file in order to manage the Mumble server with systemd. Create a /etc/systemd/system/murmur.service file under root access or with sudo. Once created, copy and paste the following into the file:

[Unit]
Description=Mumble Server (Murmur)
Requires=network-online.target
After=network-online.target mariadb.service time-sync.target

[Service]
User=murmur
Type=forking
ExecStart=/usr/local/murmur/murmur.x86 -ini /etc/murmur.ini
PIDFile=/var/run/murmur/murmur.pid
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target

Modern systems discard /var/run after reboot. Create a /etc/tmpfiles.d/murmur.conf configuration file to restart the pid directory for Murmur. As root, copy-paste the following:

d /var/run/murmur 775 murmur murmur

Firewall Rules

By default, firewall does not allow the service to listen to TCP/UDP. Modify the instructions below accordingly if you have customized the murmur.ini to listen to a non-default port.



Murmur
Mumble Server (Murmur)
<!– Reminder: Update /etc/murmur.ini so that it uses the same ports –>

Add the firewall rule and then reload:

sudo firewall-cmd --permanent --add-service=murmur
sudo firewall-cmd –reload

Disable SELinux

Some versions of CentOS will have issues running Murmur without disabling SELinux. According to Mumble, SELinux will not prevent Murmur from functioning as of CentOS 7.2. Initially, run Murmur with SELinux in enforcing mode. If SELinux is preventing Murmur from working correctly, the easiest solution is to disable it. To temporarily disable SELinux, run the following command:

sudo setenforce 0

SELinux will restart upon reboot.

To permanently disable SELinux, edit the /etc/sysconfig/selinux file and modify the SELINUX line. It should read the following:

SELINUX=disabled

Reboot the server after disabling SELinux.

Start the Murmur Server

The following command will temporarily start the Mumble server and keep it running until the next reboot:

sudo systemctl start murmur.service

To stop the Mumble Server service, run the following command:

sudo systemctl stop murmur.service

To instruct CentOS to automatically start the service upon next reboot, run the following command:

sudo systemctl enable murmur.service

Conclusion

By following the steps outlined above, you learned how to set up a mumble server and how to install Murmur on CentOS 7. Your users can use the domain name or IP address of the server and the default port (64738) to connect to Murmur.

NOTE: The end-user client can be downloaded from the official Mumble site or their official GitHub repository.

image that says get a free mumble server

If you notice a “zombie process” when starting Murmur, you must install the redhat-lsb-core package.

NOTE: A zombie process is a leftover process that has not entirely ended. Programs designed for Linux are not meant to do that. Even though zombie processes take the slightest amount of resources, Linux distributions have a finite number of process IDs, so it is advisable to resolve this issue.