Setting Up TeamSpeak 3

Written by William Roush on October 11, 2016 at 6:28 pm

Remote Office Workers And Easy Communication

Under some circumstances workers that work from home or in different offices may want to stay continuously connected, with the same ease of access as you would have if you were working in a group around a table. Most VOIP systems used for telephony services can work, but setting up conferences can be annoying, and the always-on behavior and difficultly to “break out” from a group chat to chat privately can be annoying.

What Is TeamSpeak?

Why TeamSpeak and not Ventrilo/Skype/Mumble?


Ventrilo is a VoIP solution commonly used for video games. The business model for ventrilo revolves around licensing for resellers, with only the 8 seat server being available for download. Additionally it’s old and doesn’t have the nicer security features of Mumble and TeamSpeak 3.


Skype It doesn’t provide the instant access and ability to “jump in” to rooms at any times, also the total control of the environment helps improve security.


Mumble is an open source VoIP solution that has picked up a lot in the gaming community. Unlike Ventrilo it isn’t limited to the 8 seats or TeamSpeak which is limited to 512 for free servers. Mumble would be my second choice, however last time I used Mumble it wasn’t quite as polished in terms of ease to use and set up, otherwise it would be my first.

Additional Security Settings You’ll Enjoy

Security Tokens Vs. Passwords

Everyone’s identity has a private key that they use to identify themselves with. This private key removes the need for user account management with passwords on every server they connect to. This also allows the user to export their private key to their other devices and have their identities follow them around regardless of the device.

Setting Up Virtual Servers

Virtual servers allow you to have multiple TeamSpeak instances on a single TeamSpeak install. You’re still limited by your total license count (so if you have a 512 connection license, you can have 2×256 connection virtual servers, or however you want to divvy that up).

Setup and Install

We’re going to download TeamSpeak 3 and install it into /opt/teamspeak, get the latest download from the TeamSpeak 3 site.

[email protected]:/# cd /opt
[email protected]:/opt# wget
[email protected]:/opt# tar xvf Teteamspeak3-server_linux-amd64-
[email protected]:/opt# mv teamspeak3-server_linux-amd64 teamspeak

Now we’ll fire up TeamSpeak.

[email protected]:/opt/teamspeak# ./ start
Starting the TeamSpeak 3 server
TeamSpeak 3 server started, for details please view the log file
[email protected]:/opt/teamspeak#
                      I M P O R T A N T
               Server Query Admin Account created
         loginname= "serveradmin", password= "G1Cucbel"

                      I M P O R T A N T
      ServerAdmin privilege key created, please use it to gain
      serveradmin rights for your virtualserver. please
      also check the doc/privilegekey_guide.txt for details.


The serveradmin username/password and token you’re given are very important, save them, we’ll be using them later.

Logging Into TeamSpeak

Fire up your TeamSpeak client, click “Connections” and select “Connect”, you’ll be presented with the connection window.

TeamSpeak - Connect

You’l want to take that token you had in the installation step and put it into the privilege window that pops up. If it doesn’t pop up select “Permissions” and “Use Privilege Key”. Entering this key will make you a server administrator for this virtual server instance.

TeamSpeak - Use Key

Virtual Server Configuration

Next we’ll dive into the configuration of the virtual server, right click on the name of the server and select “Edit Virtual Server”.

TeamSpeak - Edit Server

TeamSpeak - Server Config

Here you’re given options to change the server name, put limits, passwords, change security settings, and configure various messages the user will get upon logging on to your server.

Configuring Chat Rooms

Right click on the server again and select “Create Channel”

TeamSpeak - Create Channel

Here we can give a channel a name, topic, description and set it’s type (usually you’ll be setting this to “permanent”). The audio tab allows you to edit audio codec settings, you can configure the trade-off between sound quality and bandwidth requirements here. Changing codec settings can be useful for making a channel for which people on flaky cell phone connections can join in.

TeamSpeak - Create Channel - Permissions

TeamSpeak - Create Channel - Advanced

RhodeCode Session Storage Growing Out Of Control

Written by William Roush on October 11, 2016 at 6:13 pm

Had a fun run in with RhodeCode recently, it’s session storage located at /home/rhodecode/.rccontrol/community-1/data/sessions was eating up 401981 inodes! Eek!

This is caused by the built-in default session manager lib not cleaning up old files, I had stumbled across this blog detailing how to “fix” it: and I ended up with this in my crontab:

0 1 * * * find /home/rhodecode/.rccontrol/community-1/data/sessions -type f -mtime +3 -exec rm {} \;

Alas this wasn’t really what I wanted, so I asked on the RhodeCode-Community Slack channel fix is to use something like the database for session storage as seen here:


A quick enabling of beaker’s database session storage and I was all better!


server.urls Paramter Not Working On Kestrel Server for dotnet Command on ASP.NET Core RC2

Written by William Roush on May 21, 2016 at 3:53 am

Was struggling really hard with getting this command to work:

dotnet run -- --server.urls http://*:5000

Simple command, but it isn’t taking! Well I missed one major thing when upgrading from RC1 to RC2, I need to now pass configuration down to the Kestrel stack, to do that is pretty easy:

        public static void Main(string[] args)
            var config = new ConfigurationBuilder()
                .AddEnvironmentVariables(prefix: "ASPNETCORE_")

            var host = new WebHostBuilder()


Needed to define the “config” variable and pass it to WebHostBuilder using UseConfiguration(). All fixed!

.NET Core And Why I Think it’s Huge!

Written by William Roush on April 18, 2016 at 10:20 pm

.NET Core is not just a large change for how you write code, but for the entire .NET ecosystem. I’m excited about this change from every front and I’m going to tell you why!

What is .NET Core?

.NET Core (previously known as .NET 5.0) is the new streamlined .NET platform by Microsoft. .NET Core takes a lot of lessons learned from pain points on the older .NET 1.0-4.6 platform and fixes a massive amount of it, giving .NET a new breath of life and hoping to make this platform beneficial for all. It appears to not only take lessons from what didn’t work on .NET’s platform, but what did work on other platforms.

What does that mean for developers?

Well here is the painful part: .NET Core is different, very different, for cross-platform support you’ll have to keep an eye out on what is .NET Core and what is .NET 4.5, thankfully Intellisense does a great job of letting you know that:

Watch out for missing implementations between frameworks.

Watch out for missing implementations between frameworks.

.NET Core is designed to rely on Nuget heavily though and have you pick and plug 3rd party libraries, designed around smaller assemblies to keep down on application size bloat and allowing you to pick and choose. This is seen with the new Entity Framework Core libraries and how they give you a small slice of functionality (data abstraction) and the individual engines are kept as separate libraries (which is common for ORMs on say, Node.js).

The shift into heavily using dependency injection as part of normal application process is wonderful for decoupling your code and having it easily testable, everything is right there ready to go from the start.

Configuration files being JSON is a huge step up, ASP.NET integrating Gulp as part of it’s build process for javascript libraries for both build and client side (they rely on Bower for client side scripts). The new project.json file allows for easy extension of your application’s behavior. If you’re used to .NET’s old way of doing things you’ll start with “This doesn’t work anymore? Ugh… how do you do that…. oh… that’s much better!”

What does that mean for platform support?

.Net Core Builds

It means that we’re seeing .NET on more platforms that we’re used to as a first class citizen from Microsoft, this means huge things (I’ll touch on those later) for the popularity of .NET. Microsoft has even been quoted saying this:

When used third-party tools such as Xamarin, .NET Core should be portable to IOS and Android devices.

And with Microsoft’s recent acquirement of Xamarin and pushing it as free, we’re probably going to see .NET Core as a solid mobile platform in the near future.

What does this mean for the .NET Community?

A new .NET developer said this to me recently:

Not much of a supportive community around .NET, at least nothing like other languages I have learned.

And I can’t help but agree, while I appreciate our local .NET Users Group here in Chattanooga (which has been pretty quiet for awhile), I find the subjects of our local Developers Group more interesting. While .NET generally gets paid decently and seems to be in a decent amount of demand here, it seems to be more of the slower older corporate companies that are hiring and less smaller agile companies.

I think getting .NET on Linux platforms and putting out solid community editions of Visual Studio may breathe new life into the community. Bringing fresh young blood, new ideas and more open source software, maybe we’ll go back to solving hard problems too. It’s a huge weak spot in .NET and really hurts adoption, which I think really hurts the available libraries and third party tools (while Microsoft provides some good tools, it still lacks heavily on 3rd party tooling that isn’t just babysitting people who can’t write basic menus… where is my Code Climate for .NET?!).

I’ve been wanting to write an article on the abysmal state of the .NET community, it’s developers, the skill sets of a lot of them and what kind of code they churn out, this is an excellent opportunity to do so.

What does this mean for businesses?

Well if you’re a startup, maybe in a few years .NET on Linux will be a hot thing. C# 6.0 is a wonderful language and with every iteration it gets more powerful (usually stealing from F#). Getting MSSQL on Linux seems to be the first in many steps for Microsoft to not just push it’s operating system by locking it’s solutions onto it, but push solutions that you’d be happy to pay for due to their ease of use or specific desired features (which sometimes for some companies may be completely worth it).

If you’ve been knee-deep in .NET for years it can mean a few things: .NET Core’s performance is insane, which can mean a reduction in required resources for your applications. The build process is a lot easier to keep consistent and extend so less work to automate it. Applications being shipped with their runtimes means less effort determine what runtimes are installed and handling them. It is however a large shift and I would suggest that a lot of .NET developers aren’t ready for all this change (more on the community later…).

Of course you can completely ignore it and mostly not deal with it for awhile, .NET 4.5 isn’t going away anytime soon.


I’m excited to no end about this, first was the fixing of all the problems we’ve had, but secondly because this may really help the .NET community flourish. Fun new times in the land of .NET.