mirror of
https://github.com/gensokyo-zone/infrastructure.git
synced 2026-02-09 04:19:19 -08:00
chore(minecraft): rename new server
This commit is contained in:
parent
e1382c7e6d
commit
22c02adb41
9 changed files with 64 additions and 37 deletions
|
|
@ -11,10 +11,10 @@
|
||||||
inherit (lib.strings) escapeShellArgs;
|
inherit (lib.strings) escapeShellArgs;
|
||||||
inherit (lib.meta) getExe;
|
inherit (lib.meta) getExe;
|
||||||
inherit (config.lib.minecraft) mkAllowPlayerType writeWhiteList writeOps;
|
inherit (config.lib.minecraft) mkAllowPlayerType writeWhiteList writeOps;
|
||||||
cfg = config.services.minecraft-katsink-server;
|
cfg = config.services.minecraft-java-server;
|
||||||
in {
|
in {
|
||||||
options.services.minecraft-katsink-server = with lib.types; {
|
options.services.minecraft-java-server = with lib.types; {
|
||||||
enable = mkEnableOption "kat-kitchen-sink";
|
enable = mkEnableOption "minecraft java edition server";
|
||||||
|
|
||||||
openFirewall = mkOption {
|
openFirewall = mkOption {
|
||||||
type = bool;
|
type = bool;
|
||||||
|
|
@ -29,7 +29,7 @@ in {
|
||||||
|
|
||||||
dataDir = mkOption {
|
dataDir = mkOption {
|
||||||
type = path;
|
type = path;
|
||||||
default = "/var/lib/minecraft-katsink";
|
default = "/var/lib/minecraft-java";
|
||||||
description = ''
|
description = ''
|
||||||
Directory to store Minecraft database and other state/data files.
|
Directory to store Minecraft database and other state/data files.
|
||||||
'';
|
'';
|
||||||
|
|
@ -66,7 +66,7 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
config = let
|
config = let
|
||||||
confService.services.minecraft-katsink-server = {
|
confService.services.minecraft-java-server = {
|
||||||
serverProperties = mapOptionDefaults {
|
serverProperties = mapOptionDefaults {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
@ -81,12 +81,12 @@ in {
|
||||||
groups.${cfg.group} = {};
|
groups.${cfg.group} = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
conf.systemd.services.minecraft-katsink-server = let
|
conf.systemd.services.minecraft-java-server = let
|
||||||
execStartArgs =
|
execStartArgs =
|
||||||
map (argsFile: "@${argsFile}") cfg.argsFiles
|
map (argsFile: "@${argsFile}") cfg.argsFiles
|
||||||
++ cfg.jvmOpts;
|
++ cfg.jvmOpts;
|
||||||
execStop = pkgs.writeShellScriptBin "minecraft-katsink-stop" ''
|
execStop = pkgs.writeShellScriptBin "minecraft-java-stop" ''
|
||||||
echo /stop > ${config.systemd.sockets.minecraft-katsink-server.socketConfig.ListenFIFO}
|
echo /stop > ${config.systemd.sockets.minecraft-java-server.socketConfig.ListenFIFO}
|
||||||
|
|
||||||
# Wait for the PID of the minecraft server to disappear before
|
# Wait for the PID of the minecraft server to disappear before
|
||||||
# returning, so systemd doesn't attempt to SIGKILL it.
|
# returning, so systemd doesn't attempt to SIGKILL it.
|
||||||
|
|
@ -97,8 +97,8 @@ in {
|
||||||
in {
|
in {
|
||||||
description = "Minecraft Kat Kitchen Server";
|
description = "Minecraft Kat Kitchen Server";
|
||||||
wantedBy = ["multi-user.target"];
|
wantedBy = ["multi-user.target"];
|
||||||
requires = ["minecraft-katsink-server.socket"];
|
requires = ["minecraft-java-server.socket"];
|
||||||
after = ["network.target" "minecraft-katsink-server.socket"];
|
after = ["network.target" "minecraft-java-server.socket"];
|
||||||
|
|
||||||
restartTriggers = [
|
restartTriggers = [
|
||||||
cfg.dataDir
|
cfg.dataDir
|
||||||
|
|
@ -120,7 +120,7 @@ in {
|
||||||
Restart = "always";
|
Restart = "always";
|
||||||
User = cfg.user;
|
User = cfg.user;
|
||||||
WorkingDirectory = cfg.dataDir;
|
WorkingDirectory = cfg.dataDir;
|
||||||
RuntimeDirectory = "minecraft-katsink";
|
RuntimeDirectory = "minecraft-java";
|
||||||
|
|
||||||
StandardInput = "socket";
|
StandardInput = "socket";
|
||||||
StandardOutput = "journal";
|
StandardOutput = "journal";
|
||||||
|
|
@ -149,10 +149,10 @@ in {
|
||||||
UMask = "0077";
|
UMask = "0077";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
conf.systemd.sockets.minecraft-katsink-server = {
|
conf.systemd.sockets.minecraft-java-server = {
|
||||||
bindsTo = ["minecraft-katsink-server.service"];
|
bindsTo = ["minecraft-java-server.service"];
|
||||||
socketConfig = {
|
socketConfig = {
|
||||||
ListenFIFO = "/run/minecraft-katsink/stdin";
|
ListenFIFO = "/run/minecraft-java/stdin";
|
||||||
SocketMode = "0660";
|
SocketMode = "0660";
|
||||||
SocketUser = mkOptionDefault cfg.user;
|
SocketUser = mkOptionDefault cfg.user;
|
||||||
SocketGroup = mkOptionDefault cfg.group;
|
SocketGroup = mkOptionDefault cfg.group;
|
||||||
|
|
@ -63,7 +63,7 @@ in {
|
||||||
minecraftServer = [
|
minecraftServer = [
|
||||||
{
|
{
|
||||||
match = {
|
match = {
|
||||||
selector = ''{unit="minecraft-katsink-server.service"}'';
|
selector = ''{unit="minecraft-java-server.service"}'';
|
||||||
pipeline_name = "minecraft-log4j";
|
pipeline_name = "minecraft-log4j";
|
||||||
stages = [
|
stages = [
|
||||||
{
|
{
|
||||||
|
|
@ -80,26 +80,34 @@ in {
|
||||||
regex.expression = concatStringsSep " " [
|
regex.expression = concatStringsSep " " [
|
||||||
''^\[(?P<time>[0-9:.]+)\]''
|
''^\[(?P<time>[0-9:.]+)\]''
|
||||||
''\[(?P<thread>[^\/]+)\/(?P<level>[^\]]+)\]''
|
''\[(?P<thread>[^\/]+)\/(?P<level>[^\]]+)\]''
|
||||||
''\[(?P<component>[^\/]+)\/((?P<category>[^\]]+)|)\]:''
|
''\[(?P<context>[^\/]+)\/((?P<category>[^\]]+)|)\]:''
|
||||||
''(?P<message><(?P<chat_user>[^> ]+)> (?P<chat_message>.*)|.*)$''
|
''(?P<message>(\[DISCORD\] <(?P<chat_user_discord>[^> ]+)>|<(?P<chat_user>[^> ]+)>) (?P<chat_message>.*)|(?s:.*))$''
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
template = {
|
||||||
|
source = "time";
|
||||||
|
template = ''{{ .__journal__realtime_timestamp | date "2006-01-02" }}T{{ .Value }}'';
|
||||||
|
};
|
||||||
|
}
|
||||||
{
|
{
|
||||||
labels = {
|
labels = {
|
||||||
time = null;
|
time = null;
|
||||||
thread = null;
|
thread = null;
|
||||||
level = null;
|
level = null;
|
||||||
component = null;
|
context = null;
|
||||||
category = null;
|
category = null;
|
||||||
message = null;
|
message = null;
|
||||||
chat_user = null;
|
chat_user = null;
|
||||||
|
chat_user_discord = null;
|
||||||
chat_message = null;
|
chat_message = null;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
timestamp = {
|
timestamp = {
|
||||||
source = "time";
|
source = "time";
|
||||||
format = "15:04:05";
|
format = "2006-01-02T15:04:05";
|
||||||
|
location = config.time.timeZone;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
@ -108,7 +116,7 @@ in {
|
||||||
];
|
];
|
||||||
in
|
in
|
||||||
mkMerge [
|
mkMerge [
|
||||||
(mkIf config.services.minecraft-katsink-server.enable minecraftServer)
|
(mkIf config.services.minecraft-java-server.enable minecraftServer)
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
(mkIf nginx.enable {
|
(mkIf nginx.enable {
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,8 @@
|
||||||
gensokyo-zone,
|
gensokyo-zone,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (gensokyo-zone.lib) mapAlmostOptionDefaults mkAlmostOptionDefault;
|
inherit (gensokyo-zone.lib) mkAlmostOptionDefault;
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
inherit (lib.attrsets) mapAttrs;
|
|
||||||
in {
|
in {
|
||||||
config.exports.services.minecraft = {config, ...}: let
|
config.exports.services.minecraft = {config, ...}: let
|
||||||
mkAssertion = f: nixosConfig: let
|
mkAssertion = f: nixosConfig: let
|
||||||
|
|
@ -15,7 +14,7 @@ in {
|
||||||
in {
|
in {
|
||||||
displayName = "Minecraft";
|
displayName = "Minecraft";
|
||||||
nixos = {
|
nixos = {
|
||||||
serviceAttr = "minecraft-katsink-server";
|
serviceAttr = "minecraft-java-server";
|
||||||
assertions = mkIf config.enable [
|
assertions = mkIf config.enable [
|
||||||
(mkAssertion (nixosConfig: cfg: {
|
(mkAssertion (nixosConfig: cfg: {
|
||||||
assertion = config.ports.default.port == cfg.port;
|
assertion = config.ports.default.port == cfg.port;
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,21 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf mkDefault;
|
inherit (lib.modules) mkIf mkDefault;
|
||||||
cfg = config.services.minecraft-katsink-server;
|
cfg = config.services.minecraft-java-server;
|
||||||
|
#forge = "neoforge";
|
||||||
|
forge = "forge";
|
||||||
|
backupsDir = "${config.kyuuto.dataDir}/minecraft/simplebackups/marka";
|
||||||
in {
|
in {
|
||||||
services.minecraft-katsink-server = {
|
services.minecraft-java-server = {
|
||||||
enable = mkDefault true;
|
enable = mkDefault true;
|
||||||
argsFiles = [
|
argsFiles = [
|
||||||
"user_jvm_args.txt"
|
"user_jvm_args.txt"
|
||||||
"/run/minecraft-katsink/unix_args.txt"
|
"/run/minecraft-java/unix_args.txt"
|
||||||
];
|
];
|
||||||
|
serverProperties = {
|
||||||
|
enable-query = true;
|
||||||
|
"query.port" = cfg.port;
|
||||||
|
};
|
||||||
allowPlayers = {
|
allowPlayers = {
|
||||||
katrynn = {
|
katrynn = {
|
||||||
uuid = "356d8cf2-246a-4c07-b547-422aea06c0ab";
|
uuid = "356d8cf2-246a-4c07-b547-422aea06c0ab";
|
||||||
|
|
@ -37,17 +44,28 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd = mkIf cfg.enable {
|
systemd = mkIf cfg.enable {
|
||||||
services.minecraft-katsink-server = {
|
services.minecraft-java-server = {
|
||||||
# TODO: confinement.enable = true;
|
# TODO: confinement.enable = true;
|
||||||
gensokyo-zone.sharedMounts."minecraft/katsink/kat-kitchen-server" = {config, ...}: {
|
gensokyo-zone.sharedMounts."minecraft/java/marka-server" = {config, ...}: {
|
||||||
root = config.rootDir + "/minecraft/katsink";
|
root = config.rootDir + "/minecraft/java";
|
||||||
path = mkDefault cfg.dataDir;
|
path = mkDefault cfg.dataDir;
|
||||||
};
|
};
|
||||||
preStart = ''
|
preStart = let
|
||||||
${pkgs.coreutils}/bin/ln -sf $PWD/libraries/net/neoforged/neoforge/*/unix_args.txt $RUNTIME_DIRECTORY/unix_args.txt
|
forgeDir = {
|
||||||
|
neoforge = "neoforged/neoforge";
|
||||||
|
forge = "minecraftforge/forge";
|
||||||
|
}.${forge};
|
||||||
|
in ''
|
||||||
|
${pkgs.coreutils}/bin/ln -sf $PWD/libraries/net/${forgeDir}/*/unix_args.txt $RUNTIME_DIRECTORY/unix_args.txt
|
||||||
'';
|
'';
|
||||||
|
serviceConfig = {
|
||||||
|
BindPaths = [
|
||||||
|
"${backupsDir}:${cfg.dataDir}/simplebackups"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
# TODO: tmpfiles.rules = ["d ${backupsDir} 775 ${cfg.user} admin - -"];
|
||||||
|
};
|
||||||
networking.firewall = mkIf cfg.enable {
|
networking.firewall = mkIf cfg.enable {
|
||||||
interfaces.local = {
|
interfaces.local = {
|
||||||
allowedTCPPorts = [cfg.port];
|
allowedTCPPorts = [cfg.port];
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
"/rpool/shared/nix/store nix/store none bind,create=dir",
|
"/rpool/shared/nix/store nix/store none bind,create=dir",
|
||||||
"/rpool/shared/nix/var nix/var none bind,create=dir",
|
"/rpool/shared/nix/var nix/var none bind,create=dir",
|
||||||
"/rpool/shared/minecraft/bedrock mnt/shared/minecraft/bedrock none bind,optional,create=dir",
|
"/rpool/shared/minecraft/bedrock mnt/shared/minecraft/bedrock none bind,optional,create=dir",
|
||||||
"/rpool/shared/minecraft/katsink mnt/shared/minecraft/katsink none bind,optional,create=dir",
|
"/rpool/shared/minecraft/java mnt/shared/minecraft/java none bind,optional,create=dir",
|
||||||
"/mnt/kyuuto-data/minecraft mnt/kyuuto-data/minecraft none bind,optional,create=dir",
|
"/mnt/kyuuto-data/minecraft mnt/kyuuto-data/minecraft none bind,optional,create=dir",
|
||||||
"/dev/net/tun dev/net/tun none bind,optional,create=file"
|
"/dev/net/tun dev/net/tun none bind,optional,create=file"
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,8 @@ _: {
|
||||||
tailscale.enable = true;
|
tailscale.enable = true;
|
||||||
minecraft = {
|
minecraft = {
|
||||||
enable = true;
|
enable = true;
|
||||||
id = "katsink";
|
id = "marka";
|
||||||
|
ports.query.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"lxc": {
|
"lxc": {
|
||||||
"lxc.mount.entry": [
|
"lxc.mount.entry": [
|
||||||
"/rpool/shared/minecraft/katsink mnt/shared/minecraft/katsink none bind,optional,create=dir",
|
"/rpool/shared/minecraft/java mnt/shared/minecraft/java none bind,optional,create=dir",
|
||||||
"/mnt/kyuuto-data/minecraft mnt/kyuuto-data/minecraft none bind,optional,create=dir",
|
"/mnt/kyuuto-data/minecraft mnt/kyuuto-data/minecraft none bind,optional,create=dir",
|
||||||
"/mnt/kyuuto-minecraft mnt/kyuuto-minecraft none bind,optional,create=dir",
|
"/mnt/kyuuto-minecraft mnt/kyuuto-minecraft none bind,optional,create=dir",
|
||||||
"/dev/net/tun dev/net/tun none bind,optional,create=file"
|
"/dev/net/tun dev/net/tun none bind,optional,create=file"
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,12 @@
|
||||||
nixos.sops
|
nixos.sops
|
||||||
nixos.reisen-ct
|
nixos.reisen-ct
|
||||||
nixos.tailscale
|
nixos.tailscale
|
||||||
nixos.minecraft.katsink
|
nixos.kyuuto.mount
|
||||||
|
nixos.minecraft.java
|
||||||
];
|
];
|
||||||
|
|
||||||
environment.systemPackages = [
|
environment.systemPackages = [
|
||||||
config.services.minecraft-katsink-server.jre.package
|
config.services.minecraft-java-server.jre.package
|
||||||
];
|
];
|
||||||
|
|
||||||
sops = {
|
sops = {
|
||||||
|
|
|
||||||
|
|
@ -185,7 +185,7 @@ mkshared zigbee2mqtt 100317 100317 0700
|
||||||
mkshared vaultwarden 100915 100915 0750
|
mkshared vaultwarden 100915 100915 0750
|
||||||
mkshared minecraft 100913 100913 0750
|
mkshared minecraft 100913 100913 0750
|
||||||
mkshared minecraft/bedrock 100913 100913 0750
|
mkshared minecraft/bedrock 100913 100913 0750
|
||||||
mkshared minecraft/katsink 100913 100913 0750
|
mkshared minecraft/java 100913 100913 0750
|
||||||
|
|
||||||
mkkyuuto data 0 0 0755 -o compression=on
|
mkkyuuto data 0 0 0755 -o compression=on
|
||||||
mkkyuuto data/minecraft 0 8126 0775
|
mkkyuuto data/minecraft 0 8126 0775
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue