add: krile configuration
This commit is contained in:
9 files changed
+524
-43
No files matched your search
@@ -0,0 +1,105 @@
|
||||
# Homestead 2.0 on krile
|
||||
|
||||
This module uses the Minecraft NixOS module and Fabric overlay re-exported by
|
||||
the existing `nur` flake input. It pins Minecraft 1.20.1, Fabric 0.19.5, Java 17,
|
||||
and the [official Homestead 2.0 server pack](https://cozystudios.org/homestead/server-pack/).
|
||||
The archive and all eight additional mods listed in its `startserver.sh` are
|
||||
downloaded with fixed SHA-256 hashes during the Nix build. The upstream startup
|
||||
script is not run.
|
||||
|
||||
`modules/machine/krile/configuration.nix` enables the server, accepts the Minecraft
|
||||
EULA, and opens TCP 25565 and UDP 24454 (Simple Voice Chat). Forward those ports
|
||||
to krile on your router if players connect from outside your network. Players
|
||||
need the Homestead 2.0 client pack.
|
||||
|
||||
The default heap is 6 GiB initially and 10 GiB maximum. Give the VM additional
|
||||
RAM for the OS, native libraries, and filesystem cache; 16 GiB total is a
|
||||
reasonable starting point.
|
||||
|
||||
## Deploy
|
||||
|
||||
On krile, from the repository root:
|
||||
|
||||
```bash
|
||||
nix eval --raw path:.#nixosConfigurations.krile.config.system.build.toplevel.drvPath
|
||||
sudo nixos-rebuild switch --flake path:.#krile
|
||||
```
|
||||
|
||||
The `path:.` form includes new files before they have been added to Git. Once the
|
||||
new module and krile files are tracked, `--flake .#krile` works as usual.
|
||||
|
||||
The service starts on boot and restarts after an unexpected exit. Check it with:
|
||||
|
||||
```bash
|
||||
systemctl status minecraft-server-homestead
|
||||
journalctl -u minecraft-server-homestead -f
|
||||
```
|
||||
|
||||
The console uses nix-minecraft's systemd FIFO. For example, run a command with:
|
||||
|
||||
```bash
|
||||
sudo sh -c 'echo list > /run/minecraft/homestead.stdin'
|
||||
```
|
||||
|
||||
Stop the service with `sudo systemctl stop minecraft-server-homestead` so it can
|
||||
save the world cleanly.
|
||||
|
||||
## Configuration and state
|
||||
|
||||
Worlds, player progress, and other runtime state live in
|
||||
`/srv/minecraft/homestead`. Back up that directory, particularly `world/`, before
|
||||
changing pack versions. The module does not provide automatic backups.
|
||||
|
||||
The `mods` directory and server icon are store symlinks. `config`, `defaultconfigs`,
|
||||
`kubejs`, `scripts`, and `patchouli_books` are writable copies of the pinned pack,
|
||||
recreated on each start and removed on stop by nix-minecraft. Edits to those
|
||||
copies do not persist across restarts. World data is not part of those managed
|
||||
directories.
|
||||
|
||||
Change memory in the host configuration:
|
||||
|
||||
```nix
|
||||
services.homestead.jvmOpts = "-Xms6G -Xmx12G -XX:+UseG1GC";
|
||||
```
|
||||
|
||||
Other server settings use the underlying nix-minecraft options:
|
||||
|
||||
```nix
|
||||
services.minecraft-servers.servers.homestead = {
|
||||
serverProperties = {
|
||||
server-port = 25566;
|
||||
max-players = 10;
|
||||
white-list = true;
|
||||
};
|
||||
# Add real player UUIDs here, or manage the whitelist through the console.
|
||||
whitelist = { };
|
||||
};
|
||||
```
|
||||
|
||||
Changing `server-port` also changes the opened TCP port. Voice chat remains on
|
||||
UDP 24454, matching the pack's `config/voicechat/voicechat-server.properties`.
|
||||
|
||||
To use this module on another NixOS host, pass `nur` in `specialArgs`, import
|
||||
`modules/games/homestead`, set `services.homestead.enable = true`, and set
|
||||
`services.minecraft-servers.eula = true` after accepting the EULA. The host must
|
||||
allow unfree packages, as the common modules already do for krile.
|
||||
|
||||
## Pack updates
|
||||
|
||||
For a new release, inspect the official archive and startup script, update the
|
||||
archive URL/hash in `package.nix`, update `required-mods.json` with any separate
|
||||
downloads and their hashes, and match the Minecraft/Fabric versions in
|
||||
`default.nix`. Evaluate and build before switching, then check the startup log.
|
||||
The pack is kept fixed at 2.0 until these declarations change.
|
||||
|
||||
## Validation
|
||||
|
||||
The krile system derivation evaluates, and the pack, Fabric launcher, and
|
||||
nix-minecraft setup/cleanup scripts build successfully. A temporary local server
|
||||
reached `Done`, started Simple Voice Chat, and exited with status 0 after `stop`,
|
||||
saving every dimension. Setup/cleanup was also checked to preserve world data
|
||||
and reset managed configs. Multiplayer gameplay was not tested.
|
||||
|
||||
The upstream 2.0 pack emits some nonfatal mixin/recipe warnings and an optional
|
||||
Falling Trees/Jade integration error during startup; these did not prevent the
|
||||
startup and shutdown check from passing.
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
nur,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.services.homestead;
|
||||
modpack = pkgs.callPackage ./package.nix { };
|
||||
in
|
||||
{
|
||||
imports = [ nur.nixosModules.minecraft-servers ];
|
||||
|
||||
options.services.homestead = {
|
||||
enable = lib.mkEnableOption "the Homestead 2.0 Minecraft server";
|
||||
|
||||
openFirewall = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Open the Minecraft TCP port and Simple Voice Chat UDP port (24454).";
|
||||
};
|
||||
|
||||
jvmOpts = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "-Xms6G -Xmx10G -XX:+UseG1GC";
|
||||
description = "JVM options for Homestead. Leave additional RAM for the OS and native allocations.";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
nixpkgs.overlays = [ nur.overlays.minecraft ];
|
||||
|
||||
services.minecraft-servers = {
|
||||
enable = true;
|
||||
servers.homestead = {
|
||||
enable = true;
|
||||
inherit (cfg) openFirewall jvmOpts;
|
||||
|
||||
package = pkgs.fabricServers.fabric-1_20_1.override {
|
||||
loaderVersion = "0.19.5";
|
||||
jre_headless = pkgs.jdk17_headless;
|
||||
};
|
||||
|
||||
managementSystem = {
|
||||
tmux.enable = false;
|
||||
systemd-socket.enable = true;
|
||||
};
|
||||
|
||||
# Match the properties generated by the pack's startserver.sh.
|
||||
serverProperties = lib.mapAttrs (_: lib.mkDefault) {
|
||||
motd = "Homestead 2.0";
|
||||
allow-flight = true;
|
||||
max-tick-time = 180000;
|
||||
simulation-distance = 6;
|
||||
view-distance = 10;
|
||||
server-port = 25565;
|
||||
online-mode = true;
|
||||
# keep-inventory = true;
|
||||
};
|
||||
|
||||
symlinks = {
|
||||
mods = "${modpack}/mods";
|
||||
"server-icon.png" = "${modpack}/server-icon.png";
|
||||
};
|
||||
|
||||
# Mods may rewrite their configs or generate files here. nix-minecraft
|
||||
# supplies writable copies on each start and cleans them on stop.
|
||||
files = lib.genAttrs [
|
||||
"config"
|
||||
"defaultconfigs"
|
||||
"kubejs"
|
||||
"scripts"
|
||||
"patchouli_books"
|
||||
] (dir: "${modpack}/${dir}");
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall.allowedUDPPorts = lib.mkIf cfg.openFirewall [ 24454 ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
lib,
|
||||
stdenvNoCC,
|
||||
fetchurl,
|
||||
unzip,
|
||||
}:
|
||||
let
|
||||
# These eight downloads come from startserver.sh in the official 2.0 pack.
|
||||
requiredMods = map fetchurl (lib.importJSON ./required-mods.json);
|
||||
in
|
||||
stdenvNoCC.mkDerivation {
|
||||
pname = "homestead-server-pack";
|
||||
version = "2.0";
|
||||
|
||||
src = fetchurl {
|
||||
name = "Homestead-2.0-Server.zip";
|
||||
url = "https://drive.usercontent.google.com/download?id=1SpJBa80o_Jx_yqLjQ49pz7HP1FY2PCJj&export=download&confirm=t";
|
||||
hash = "sha256-QVenE6dz+lZPHkC1hwL7Yy4lw6vg/Cr/8pnmK3iaK4o=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ unzip ];
|
||||
dontUnpack = true;
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p "$out"
|
||||
unzip -q "$src" \
|
||||
'mods/*' 'config/*' 'defaultconfigs/*' 'kubejs/*' \
|
||||
'scripts/*' 'patchouli_books/*' 'server-icon.png' -d "$out"
|
||||
|
||||
${lib.concatMapStringsSep "\n" (mod: ''
|
||||
install -m644 ${mod} "$out/mods/${mod.name}"
|
||||
'') requiredMods}
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Homestead 2.0 server assets, including the eight separately downloaded mods";
|
||||
homepage = "https://cozystudios.org/homestead/server-pack/";
|
||||
# The pack contains mods with different licenses; do not redistribute it.
|
||||
license = lib.licenses.unfree;
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
[
|
||||
{
|
||||
"name": "balm-fabric-1.20.1-7.3.44.jar",
|
||||
"url": "https://edge.forgecdn.net/files/8969/704/balm-fabric-1.20.1-7.3.44.jar",
|
||||
"hash": "sha256-hMoKTCjV9cxwjuEqKQ+U4ixMntDxXZNM0MDCMPClpMY="
|
||||
},
|
||||
{
|
||||
"name": "CraftTweaker-fabric-1.20.1-14.0.60.jar",
|
||||
"url": "https://edge.forgecdn.net/files/7772/872/CraftTweaker-fabric-1.20.1-14.0.60.jar",
|
||||
"hash": "sha256-y4Kl3wHCNr6oY8SxxZtgaS/ARGHWVIK/eW1EZizqiQA="
|
||||
},
|
||||
{
|
||||
"name": "libraryferret-fabric-1.20.1-4.0.0.jar",
|
||||
"url": "https://edge.forgecdn.net/files/4601/231/libraryferret-fabric-1.20.1-4.0.0.jar",
|
||||
"hash": "sha256-d/UX69gN5R+fh62cTZIrNMQNfF+2iu1tl0zu0NthuG0="
|
||||
},
|
||||
{
|
||||
"name": "sophisticatedbackpacks-1.20.1-3.23.4.5.110.jar",
|
||||
"url": "https://edge.forgecdn.net/files/7147/929/sophisticatedbackpacks-1.20.1-3.23.4.5.110.jar",
|
||||
"hash": "sha256-Fewy1BGnA4R0OldwrmoitxqEGK9/juu/+se/yKGDbA8="
|
||||
},
|
||||
{
|
||||
"name": "sophisticatedcore-1.20.1-1.2.7.15.166.jar",
|
||||
"url": "https://edge.forgecdn.net/files/7341/57/sophisticatedcore-1.20.1-1.2.7.15.166.jar",
|
||||
"hash": "sha256-Fzmsti4i+ZQk8yQkuZYr2S0p4HUvVJWqEW35p8Hdgxo="
|
||||
},
|
||||
{
|
||||
"name": "sophisticatedstorage-1.20.1-1.3.5.11.142.jar",
|
||||
"url": "https://edge.forgecdn.net/files/8032/765/sophisticatedstorage-1.20.1-1.3.5.11.142.jar",
|
||||
"hash": "sha256-VgjSIGpr0TJlhLUrTFp7Mpvpw/izOqOiQGAHiu0Lz4k="
|
||||
},
|
||||
{
|
||||
"name": "trashslot-fabric-1.20.1-15.1.5.jar",
|
||||
"url": "https://edge.forgecdn.net/files/8019/425/trashslot-fabric-1.20.1-15.1.5.jar",
|
||||
"hash": "sha256-u876a68TrhF8ShNtf/ZrYlx1QLncwNQHe08jcIXuRAg="
|
||||
},
|
||||
{
|
||||
"name": "wirelessredstone-fabric-1.20.1-1.1.2.jar",
|
||||
"url": "https://edge.forgecdn.net/files/5175/782/wirelessredstone-fabric-1.20.1-1.1.2.jar",
|
||||
"hash": "sha256-Kw8xy4ngmAgD9kEvwAjTS6KatJEnA6UPkI1X3xnWf48="
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,88 @@
|
||||
{
|
||||
pkgs,
|
||||
userName,
|
||||
nur,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
../../pwrMgmt
|
||||
../../networking/core.nix
|
||||
../../virtualization/podman.nix
|
||||
../../games/homestead
|
||||
];
|
||||
|
||||
# Enable flakes for NixOS
|
||||
nix.settings.experimental-features = ["nix-command" "flakes"];
|
||||
|
||||
# Custom kernel/boot stuff
|
||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
# Set your timezone
|
||||
time.timeZone = "America/Detroit";
|
||||
|
||||
# Enable OpenSSH
|
||||
services.openssh.enable = true;
|
||||
|
||||
# Enable keyring
|
||||
services.gnome.gnome-keyring.enable = true;
|
||||
|
||||
# Enable GnuPG
|
||||
programs.gnupg.agent = {
|
||||
enable = true;
|
||||
enableSSHSupport = true;
|
||||
};
|
||||
|
||||
# Enable SUID wrappers (some programs need them)
|
||||
programs.mtr.enable = true;
|
||||
|
||||
# Enable Polkit
|
||||
security.polkit.enable = true;
|
||||
|
||||
# Power management (see ../../pwrMgmt/default.nix)
|
||||
pwrMgmt = {
|
||||
enable = true;
|
||||
cpuFreqGovernor = "performance";
|
||||
powertop.enable = false;
|
||||
};
|
||||
|
||||
network = {
|
||||
firewall = {
|
||||
enable = true;
|
||||
};
|
||||
networkManager.enable = true;
|
||||
};
|
||||
|
||||
# Add username to groups "wheel" and "video" - more may be added here later
|
||||
users = {
|
||||
users = {
|
||||
${userName} = {
|
||||
extraGroups = [ "wheel" "network" ];
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFV9eSc9L+aJLoKoexq2f/jb5rpyZnhuGiyhS8YQAbaS wyatt@wyattjmiller.com"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4WKvKnnYpTbzZHFEslOKyfiiMqWxhW3AfX6E7ACmYU wyatt@wyattjmiller.com"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.fail2ban = {
|
||||
enable = true;
|
||||
package = pkgs.fail2ban;
|
||||
maxretry = 5;
|
||||
bantime = "3h";
|
||||
bantime-increment = {
|
||||
enable = true;
|
||||
rndtime = "10m";
|
||||
};
|
||||
};
|
||||
|
||||
services.homestead = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
};
|
||||
services.minecraft-servers.eula = true;
|
||||
|
||||
system.stateVersion = "26.05";
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{ ... }: {
|
||||
imports = [
|
||||
./configuration.nix
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ (modulesPath + "/profiles/qemu-guest.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sr_mod" "virtio_blk" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/ec4c43ec-efcc-40ea-a4c8-411e60ee7c4e";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/140E-FE19";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0022" "dmask=0022" ];
|
||||
};
|
||||
|
||||
swapDevices =
|
||||
[ { device = "/dev/disk/by-uuid/547bbd78-85be-4d17-a519-c4a2a923bdab"; }
|
||||
];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
||||
Reference in new issue
Block a user