From d87eb4f8cd9250a055a39bf4918d535b726c3764 Mon Sep 17 00:00:00 2001 From: Kris Lamoureux Date: Mon, 21 Jun 2021 22:36:35 -0400 Subject: [PATCH] Dynamic Java options on Minecraft systemd service --- Vagrantfile | 2 +- dev/host_vars/minecraft.yml | 9 ++++++- roles/minecraft/defaults/main.yml | 1 + roles/minecraft/tasks/java.yml | 10 +++---- roles/minecraft/tasks/modpacks.yml | 2 ++ roles/minecraft/tasks/service.yml | 26 ++++++++++++++++--- roles/minecraft/templates/environment.conf.j2 | 8 ++++++ .../minecraft/templates/minecraft.service.j2 | 3 ++- 8 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 roles/minecraft/templates/environment.conf.j2 diff --git a/Vagrantfile b/Vagrantfile index 301e38a..4a2b071 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -35,7 +35,7 @@ Vagrant.configure("2") do |config| end config.vm.provider "virtualbox" do |vbox| - vbox.memory = 2048 + vbox.memory = 4096 end # Provision with Ansible diff --git a/dev/host_vars/minecraft.yml b/dev/host_vars/minecraft.yml index d978fa8..bed05d0 100644 --- a/dev/host_vars/minecraft.yml +++ b/dev/host_vars/minecraft.yml @@ -8,9 +8,16 @@ manage_network: false #minecraft_eula: true minecraft_onboot: vanilla +minecraft_onboot_run: true minecraft: - name: vanilla # 1.16.5 (https://mcversions.net/download/1.16.5) sha1: 1b557e7b033b583cd9f66746b7a9ab1ec1673ced + java: + Xms: 1G + Xmx: 1G - name: revelation # 3.4.0 (https://api.modpacks.ch/public/modpack/35/174) modpack: 35/174 - java: 8 + java: + version: 8 + Xms: 4G + Xmx: 4G diff --git a/roles/minecraft/defaults/main.yml b/roles/minecraft/defaults/main.yml index 503fa43..eb86c30 100644 --- a/roles/minecraft/defaults/main.yml +++ b/roles/minecraft/defaults/main.yml @@ -2,6 +2,7 @@ minecraft_eula: false minecraft_home: "/opt/minecraft" minecraft_java: 11 minecraft_modpack_url: "https://api.modpacks.ch/public/modpack/{{ item.modpack }}/server/linux" +minecraft_onboot_run: false minecraft_url: "https://launcher.mojang.com/v1/objects/{{ item.sha1 }}/server.jar" minecraft_user: minecraft minecraft_xms: 1G diff --git a/roles/minecraft/tasks/java.yml b/roles/minecraft/tasks/java.yml index 7ca6e6e..6858f5b 100644 --- a/roles/minecraft/tasks/java.yml +++ b/roles/minecraft/tasks/java.yml @@ -2,14 +2,14 @@ apt: name: gpg state: present - when: item.java is defined and item.java == 8 + when: item.java.version is defined and item.java.version == 8 loop: "{{ minecraft }}" - name: Add AdoptOpenJDK's signing key apt_key: id: 8ED17AF5D7E675EB3EE3BCE98AC3B29174885C03 url: https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public - when: item.java is defined and item.java == 8 + when: item.java.version is defined and item.java.version == 8 loop: "{{ minecraft }}" - name: Install AdoptOpenJDK repository @@ -17,21 +17,21 @@ repo: deb https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ buster main mode: 0644 state: present - when: item.java is defined and item.java == 8 + when: item.java.version is defined and item.java.version == 8 loop: "{{ minecraft }}" - name: Install Java 8 apt: name: adoptopenjdk-8-hotspot state: present - when: item.java is defined and item.java == 8 + when: item.java.version is defined and item.java.version == 8 loop: "{{ minecraft }}" - name: Install Java 11 apt: name: openjdk-11-jre state: present - when: item.java is not defined or item.java == 11 + when: item.java.version is not defined or item.java.version == 11 loop: "{{ minecraft }}" - name: Activate Java 8 diff --git a/roles/minecraft/tasks/modpacks.yml b/roles/minecraft/tasks/modpacks.yml index b474c7c..5871668 100644 --- a/roles/minecraft/tasks/modpacks.yml +++ b/roles/minecraft/tasks/modpacks.yml @@ -28,6 +28,8 @@ file: src: "{{ item.files[0].path }}" dest: "{{ minecraft_home }}/{{ item.item.name }}/minecraft_server.jar" + owner: "{{ minecraft_user }}" + group: "{{ minecraft_user }}" state: link loop: "{{ minecraft_forge.results }}" when: minecraft_forge is defined and item.files[0].path is defined diff --git a/roles/minecraft/tasks/service.yml b/roles/minecraft/tasks/service.yml index a1ae669..a0e9f17 100644 --- a/roles/minecraft/tasks/service.yml +++ b/roles/minecraft/tasks/service.yml @@ -4,14 +4,34 @@ dest: "/etc/systemd/system/minecraft@.service" register: minecraft_systemd +- name: Deploy service environmental variables + template: + src: environment.conf.j2 + dest: "{{ minecraft_home }}/{{ item.name }}/environment.conf" + owner: "{{ minecraft_user }}" + group: "{{ minecraft_user }}" + loop: "{{ minecraft }}" + - name: Reload systemd manager configuration systemd: daemon_reload: true when: minecraft_systemd.changed -- name: Start Service +- name: Disable non-default service instances + service: + name: "minecraft@{{ item.name }}" + enabled: false + loop: "{{ minecraft }}" + when: item.name != minecraft_onboot + +- name: Enable default service instance + service: + name: "minecraft@{{ minecraft_onboot }}" + enabled: true + when: minecraft_eula and minecraft_onboot is defined + +- name: Run default service instance service: name: "minecraft@{{ minecraft_onboot }}" state: started - enabled: true - when: minecraft_eula and minecraft_onboot is defined + when: minecraft_eula and minecraft_onboot is defined and minecraft_onboot_run diff --git a/roles/minecraft/templates/environment.conf.j2 b/roles/minecraft/templates/environment.conf.j2 new file mode 100644 index 0000000..f06611d --- /dev/null +++ b/roles/minecraft/templates/environment.conf.j2 @@ -0,0 +1,8 @@ +{% if item.java.version is defined and item.java.version == 8 %} +JAVA_HOME=/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/jre +{% else %} +JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 +{% endif %} +JAVA_XMS={{ item.java.Xms }} +JAVA_XMX={{ item.java.Xmx }} + diff --git a/roles/minecraft/templates/minecraft.service.j2 b/roles/minecraft/templates/minecraft.service.j2 index a509f45..43503fc 100644 --- a/roles/minecraft/templates/minecraft.service.j2 +++ b/roles/minecraft/templates/minecraft.service.j2 @@ -8,9 +8,10 @@ WorkingDirectory={{ minecraft_home }}/%i User={{ minecraft_user }} Group={{ minecraft_user }} Restart=always +EnvironmentFile={{ minecraft_home }}/%i/environment.conf ExecStart=/usr/bin/screen -DmS minecraft-%i \ - /usr/bin/java -Xms{{ minecraft_xms }} -Xmx{{ minecraft_xmx }} -jar minecraft_server.jar nogui + ${JAVA_HOME}/bin/java -Xms${JAVA_XMS} -Xmx${JAVA_XMX} -jar minecraft_server.jar nogui ExecReload=/usr/bin/screen -p 0 -S minecraft-%i -X eval 'stuff "reload"\\015' ExecStop=/usr/bin/screen -p 0 -S minecraft-%i -X eval 'stuff "say SERVER SHUTDOWN IN 30 SECONDS"\015' ExecStop=/bin/sleep 15