Add TeamSpeak 3 server & service module (close #2056)
Conflicts (trivial): lib/maintainers.nix nixos/modules/misc/ids.nix
This commit is contained in:
parent
4c792e58aa
commit
4fa4518875
|
@ -14,6 +14,7 @@
|
||||||
AndersonTorres = "Anderson Torres <torres.anderson.85@gmail.com>";
|
AndersonTorres = "Anderson Torres <torres.anderson.85@gmail.com>";
|
||||||
andres = "Andres Loeh <ksnixos@andres-loeh.de>";
|
andres = "Andres Loeh <ksnixos@andres-loeh.de>";
|
||||||
antono = "Antono Vasiljev <self@antono.info>";
|
antono = "Antono Vasiljev <self@antono.info>";
|
||||||
|
arobyn = "Alexei Robyn <shados@shados.net>";
|
||||||
astsmtl = "Alexander Tsamutali <astsmtl@yandex.ru>";
|
astsmtl = "Alexander Tsamutali <astsmtl@yandex.ru>";
|
||||||
aszlig = "aszlig <aszlig@redmoonstudios.org>";
|
aszlig = "aszlig <aszlig@redmoonstudios.org>";
|
||||||
bbenoist = "Baptist BENOIST <return_0@live.com>";
|
bbenoist = "Baptist BENOIST <return_0@live.com>";
|
||||||
|
|
|
@ -131,6 +131,7 @@
|
||||||
starbound = 120;
|
starbound = 120;
|
||||||
hydra = 122;
|
hydra = 122;
|
||||||
spiped = 123;
|
spiped = 123;
|
||||||
|
teamspeak = 124;
|
||||||
|
|
||||||
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
||||||
|
|
||||||
|
@ -236,6 +237,7 @@
|
||||||
grsecurity = 121;
|
grsecurity = 121;
|
||||||
hydra = 122;
|
hydra = 122;
|
||||||
spiped = 123;
|
spiped = 123;
|
||||||
|
teamspeak = 124;
|
||||||
|
|
||||||
# When adding a gid, make sure it doesn't match an existing uid. And don't use gids above 399!
|
# When adding a gid, make sure it doesn't match an existing uid. And don't use gids above 399!
|
||||||
|
|
||||||
|
|
|
@ -222,6 +222,7 @@
|
||||||
./services/networking/syncthing.nix
|
./services/networking/syncthing.nix
|
||||||
./services/networking/ssh/lshd.nix
|
./services/networking/ssh/lshd.nix
|
||||||
./services/networking/ssh/sshd.nix
|
./services/networking/ssh/sshd.nix
|
||||||
|
./services/networking/teamspeak3.nix
|
||||||
./services/networking/tftpd.nix
|
./services/networking/tftpd.nix
|
||||||
./services/networking/unbound.nix
|
./services/networking/unbound.nix
|
||||||
./services/networking/vsftpd.nix
|
./services/networking/vsftpd.nix
|
||||||
|
|
142
nixos/modules/services/networking/teamspeak3.nix
Normal file
142
nixos/modules/services/networking/teamspeak3.nix
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
with pkgs.lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
ts3 = pkgs.teamspeak_server;
|
||||||
|
cfg = config.services.teamspeak3;
|
||||||
|
user = "teamspeak";
|
||||||
|
group = "teamspeak";
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
###### interface
|
||||||
|
|
||||||
|
options = {
|
||||||
|
|
||||||
|
services.teamspeak3 = {
|
||||||
|
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to run the Teamspeak3 voice communication server daemon.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
dataDir = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "/var/lib/teamspeak3-server";
|
||||||
|
description = ''
|
||||||
|
Directory to store TS3 database and other state/data files.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
logPath = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "/var/log/teamspeak3-server/";
|
||||||
|
description = ''
|
||||||
|
Directory to store log files in.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
voiceIP = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "0.0.0.0";
|
||||||
|
description = ''
|
||||||
|
IP on which the server instance will listen for incoming voice connections. Defaults to any IP.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultVoicePort = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 9987;
|
||||||
|
description = ''
|
||||||
|
Default UDP port for clients to connect to virtual servers - used for first virtual server, subsequent ones will open on incrementing port numbers by default.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
fileTransferIP = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "0.0.0.0";
|
||||||
|
description = ''
|
||||||
|
IP on which the server instance will listen for incoming file transfer connections. Defaults to any IP.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
fileTransferPort = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 30033;
|
||||||
|
description = ''
|
||||||
|
TCP port opened for file transfers.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
queryIP = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "0.0.0.0";
|
||||||
|
description = ''
|
||||||
|
IP on which the server instance will listen for incoming ServerQuery connections. Defaults to any IP.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
queryPort = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 10011;
|
||||||
|
description = ''
|
||||||
|
TCP port opened for ServerQuery connections.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
|
users.extraUsers.teamspeak =
|
||||||
|
{ name = "teamspeak";
|
||||||
|
description = "Teamspeak3 voice communication server daemon";
|
||||||
|
group = group;
|
||||||
|
uid = config.ids.uids.teamspeak;
|
||||||
|
};
|
||||||
|
|
||||||
|
users.extraGroups.teamspeak =
|
||||||
|
{ name = "teamspeak";
|
||||||
|
gid = config.ids.gids.teamspeak;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.teamspeak3-server = {
|
||||||
|
description = "Teamspeak3 voice communication server daemon";
|
||||||
|
after = [ "network.target" ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
||||||
|
preStart = ''
|
||||||
|
mkdir -p ${cfg.dataDir}
|
||||||
|
mkdir -p ${cfg.logPath}
|
||||||
|
chown ${user}:${group} ${cfg.dataDir}
|
||||||
|
chown ${user}:${group} ${cfg.logPath}
|
||||||
|
'';
|
||||||
|
|
||||||
|
serviceConfig =
|
||||||
|
{ ExecStart = ''
|
||||||
|
${ts3}/bin/ts3server \
|
||||||
|
dbsqlpath=${ts3}/lib/teamspeak/sql/ logpath=${cfg.logPath} \
|
||||||
|
voice_ip=${cfg.voiceIP} default_voice_port=${toString cfg.defaultVoicePort} \
|
||||||
|
filetransfer_ip=${cfg.fileTransferIP} filetransfer_port=${toString cfg.fileTransferPort} \
|
||||||
|
query_ip=${cfg.queryIP} query_port=${toString cfg.queryPort}
|
||||||
|
'';
|
||||||
|
WorkingDirectory = cfg.dataDir;
|
||||||
|
User = user;
|
||||||
|
Group = group;
|
||||||
|
PermissionsStartOnly = true; # preStart needs to run with root permissions
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,99 @@
|
||||||
|
{ stdenv, fetchurl, makeWrapper }:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
version = "3.0.10.3";
|
||||||
|
|
||||||
|
arch = if stdenv.is64bit then "amd64" else "x86";
|
||||||
|
|
||||||
|
libDir = if stdenv.is64bit then "lib64" else "lib";
|
||||||
|
in
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "teamspeak-server-${version}";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
urls = [
|
||||||
|
"http://dl.4players.de/ts/releases/${version}/teamspeak3-server_linux-${arch}-${version}.tar.gz"
|
||||||
|
"http://teamspeak.gameserver.gamed.de/ts3/releases/${version}/teamspeak3-server_linux-${arch}-${version}.tar.gz"
|
||||||
|
];
|
||||||
|
sha256 = if stdenv.is64bit
|
||||||
|
then "9606dd5c0c3677881b1aab833cb99f4f12ba08cc77ef4a97e9e282d9e10b0702"
|
||||||
|
else "8b8921e0df04bf74068a51ae06d744f25d759a8c267864ceaf7633eb3f81dbe5";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = [ makeWrapper ];
|
||||||
|
|
||||||
|
buildPhase =
|
||||||
|
''
|
||||||
|
mv ts3server_linux_${arch} ts3server
|
||||||
|
echo "patching ts3server"
|
||||||
|
patchelf \
|
||||||
|
--interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \
|
||||||
|
--set-rpath $(cat $NIX_GCC/nix-support/orig-gcc)/${libDir} \
|
||||||
|
--force-rpath \
|
||||||
|
ts3server
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase =
|
||||||
|
''
|
||||||
|
# Delete unecessary libraries - these are provided by nixos.
|
||||||
|
#rm *.so*
|
||||||
|
|
||||||
|
# Install files.
|
||||||
|
mkdir -p $out/lib/teamspeak
|
||||||
|
mv * $out/lib/teamspeak/
|
||||||
|
|
||||||
|
# Make a symlink to the binary from bin.
|
||||||
|
mkdir -p $out/bin/
|
||||||
|
ln -s $out/lib/teamspeak/ts3server $out/bin/ts3server
|
||||||
|
|
||||||
|
wrapProgram $out/lib/teamspeak/ts3server --prefix LD_LIBRARY_PATH : $out/lib/teamspeak
|
||||||
|
'';
|
||||||
|
|
||||||
|
dontStrip = true;
|
||||||
|
dontPatchELF = true;
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "TeamSpeak voice communication server";
|
||||||
|
homepage = http://teamspeak.com/;
|
||||||
|
license = stdenv.lib.licenses.unfreeRedistributable;
|
||||||
|
platforms = stdenv.lib.platforms.linux;
|
||||||
|
maintainers = [ stdenv.lib.maintainers.arobyn ];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
License issues:
|
||||||
|
Date: Mon, 10 Dec 2007 19:55:16 -0500
|
||||||
|
From: TeamSpeak Sales <sales@tritoncia.com>
|
||||||
|
To: 'Marc Weber' <marco-oweber@gmx.de>
|
||||||
|
Subject: RE: teamspeak on nix?
|
||||||
|
|
||||||
|
Yes, that would be fine. As long as you are not renting servers or selling
|
||||||
|
TeamSpeak then you are more than welcome to distribute it.
|
||||||
|
|
||||||
|
Thank you,
|
||||||
|
|
||||||
|
TeamSpeak Sales Team
|
||||||
|
________________________________
|
||||||
|
e-Mail: sales@tritoncia.com
|
||||||
|
TeamSpeak: http://www.TeamSpeak.com
|
||||||
|
Account Login: https://sales.TritonCIA.com/users
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-----Original Message-----
|
||||||
|
From: Marc Weber [mailto:marco-oweber@gmx.de]
|
||||||
|
Sent: Monday, December 10, 2007 5:03 PM
|
||||||
|
To: sales@tritoncia.com
|
||||||
|
Subject: teamspeak on nix?
|
||||||
|
|
||||||
|
Hello,
|
||||||
|
|
||||||
|
nix is very young software distribution system (http://nix.cs.uu.nl/)
|
||||||
|
I'd like to ask wether you permit us to add teamspeak (server/ client?)
|
||||||
|
|
||||||
|
Sincerly
|
||||||
|
Marc Weber (small nix contributor)
|
||||||
|
*/
|
|
@ -9421,6 +9421,7 @@ let
|
||||||
};
|
};
|
||||||
|
|
||||||
teamspeak_client = callPackage ../applications/networking/instant-messengers/teamspeak/client.nix { };
|
teamspeak_client = callPackage ../applications/networking/instant-messengers/teamspeak/client.nix { };
|
||||||
|
teamspeak_server = callPackage ../applications/networking/instant-messengers/teamspeak/server.nix { };
|
||||||
|
|
||||||
taskjuggler = callPackage ../applications/misc/taskjuggler { };
|
taskjuggler = callPackage ../applications/misc/taskjuggler { };
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue