diff --git a/roles/minetest/defaults/main.yml b/roles/minetest/defaults/main.yml index 4bacad82a..4ef7f52f3 100644 --- a/roles/minetest/defaults/main.yml +++ b/roles/minetest/defaults/main.yml @@ -1,12 +1,8 @@ # minetest_install: False # minetest_enabled: False # minetest_port: 30000 - +# minetest_server_admin: Admin # All above are set in: github.com/iiab/iiab/blob/master/vars/default_vars.yml # If nec, change them by editing /etc/iiab/local_vars.yml prior to installing! - -minetest_runas_user: minetest -minetest_runas_group: minetest - -minetest_config_file: /etc/minetest/minetest.conf -minetest_server_admin: Admin +minetest_default_runas_user: Debian-minetest +minetest_default_runas_group: games diff --git a/roles/minetest/tasks/main.yml b/roles/minetest/tasks/main.yml index e961eef81..85a99df9d 100644 --- a/roles/minetest/tasks/main.yml +++ b/roles/minetest/tasks/main.yml @@ -1,38 +1,19 @@ -# Give message and end play for unsupported platforms -# For now only support rpi - -- name: No install except Raspberry Pi for now - debug: - msg: "No install except Raspberry Pi for now." - when: not is_rpi - -# CAUTION: this stanza causes iiab-install to exit on Ubuntu/Debian/etc -- without completing roles/network -- name: Terminate play if not Raspberry Pi - meta: end_play - when: not is_rpi - -- include_tasks: calc_vars.yml - -- name: Ensure Linux group '{{ minetest_runas_group }}' exists - group: - name: "{{ minetest_runas_group }}" - state: present - when: minetest_runas_user != 'root' - -- name: Ensure Linux user '{{ minetest_runas_user }}' exists - user: - name: "{{ minetest_runas_user }}" - groups: "{{ minetest_runas_group }}" - state: present - createhome: no - shell: /bin/false - when: minetest_runas_user != 'root' - - name: Check for minetest world file ({{ minetest_world_dir }}/world.mt) stat: path: "{{ minetest_world_dir }}/world.mt" register: minetest_world +- name: Create /library/games + file: + state: directory + path: "{{ item }}" + owner: root + group: root + mode: 0755 + with_items: + - /library/games + when: minetest_install + # rpi only - include_tasks: rpi_minetest_install.yml when: minetest_install and not minetest_world.stat.exists and is_rpi @@ -61,18 +42,18 @@ when: minetest_install # enable or disable -- name: Enable & Restart 'minetest-serve' service +- name: Enable & Restart 'minetest-server' service systemd: daemon_reload: yes - name: minetest-serve + name: minetest-server enabled: yes state: restarted when: minetest_install and minetest_enabled -- name: Disable 'minetest-serve' service +- name: Disable 'minetest-server' service systemd: daemon_reload: yes - name: minetest-serve + name: minetest-server enabled: no state: stopped when: minetest_install and not minetest_enabled diff --git a/roles/minetest/tasks/minetest_install.yml b/roles/minetest/tasks/minetest_install.yml index 89e727001..f539d689f 100644 --- a/roles/minetest/tasks/minetest_install.yml +++ b/roles/minetest/tasks/minetest_install.yml @@ -1,82 +1,36 @@ # For non-rpi installs # Still a work in progress -# COMPARE tasks/calc_vars.yml -- name: Set some facts - set_fact: - minetest_server_bin: /usr/lib/minetest/minetestserver -# minetest_world_dir: /var/games/minetest-server/.minetest/worlds/world/ should be in library - minetest_mods_dir: /usr/share/games/minetest_game/mods/ +- name: Install Minetest package + package: + name: minetest-server + state: present -# Taken care of near top of tasks/main.yml -# -#- name: Ensure Linux group '{{ minetest_runas_group }}' exists -# group: -# name: "{{ minetest_runas_group }}" -# state: present -# when: minetest_runas_user != 'root' -# -#- name: Ensure Linux user '{{ minetest_runas_user }}' exists -# user: -# name: "{{ minetest_runas_user }}" -# groups: "{{ minetest_runas_group }}" -# state: present -# createhome: no -# shell: /bin/false -# when: minetest_runas_user != 'root' +- name: Add some parameters to /etc/minetest/minetest.conf that was automatically created + lineinfile: + path: /etc/minetest/minetest.conf + regexp: "{{ item.regexp }}" + line: "{{ item.line }}" + with_items: + - { regexp: '^server_name = ', line: 'server_name = Internet in a Box Minetest Server' } + - { regexp: '^name = ', line: 'name = Admin' } + - { regexp: '^creative_mode = ', line: 'creative_mode = true' } + - { regexp: '^port = ', line: 'port = {{ minetest_port }}' } -# SEE "Check for minetest world file" in tasks/main.yml -# -#- name: Create dir minetest_world_dir ({{ minetest_world_dir }}) -# file: -# state: directory -# path: "{{ minetest_world_dir }}" -# owner: "{{ minetest_runas_user }}" -# group: "{{ minetest_runas_group }}" -# mode: 0755 - -#- name: Warn if not Raspberry Pi -# debug: -# msg: "No install except Raspberry Pi for now." -# when: not is_rpi - -- name: Download Minetest if not package - get_url: - url: "{{ rpi_src_url }}" - dest: "{{ downloads_dir }}/{{ rpi_src }}" - timeout: "{{ download_timeout }}" - #when: is_rpi - -- name: Install Minetest if not package - debug: - msg: "placeholder." - #when: is_rpi - -- name: Create /etc/minetest +- name: Create /library/games/minetest/worlds/world file: state: directory - path: /etc/minetest - owner: root - group: root + path: "{{ item }}" + owner: "{{ minetest_default_runas_user }}" + group: "{{ minetest_default_runas_group }}" mode: 0755 - -# - name: move files to world dir - -- name: 'Change minetest_server_bin: /usr/bin/minetest-server if not RPi' - set_fact: - minetest_server_bin: /usr/bin/minetest-server - #when: not is_rpi - -- name: Create minetest-server service and minetest.conf file - template: - backup: no - src: "{{ item.src }}" - dest: "{{ item.dest }}" - owner: root - group: root - mode: 0644 with_items: - - { src: 'minetest.conf.j2', dest: '/etc/minetest/minetest.conf' } - - { src: 'minetest-serve.service.j2', dest: '/etc/systemd/system/minetest-serve.service' } + - "{{ minetest_world_dir }}" -# - name: Start minetest +- name: Change exec line in generated unit file + lineinfile: + path: /lib/systemd/system/minetest-server.service + regexp: "{{ item.regexp }}" + line: "{{ item.line }}" + with_items: + - { regexp: '^ExecStart=/usr/lib/minetest/minetestserver', line: 'ExecStart=/usr/lib/minetest/minetestserver --config /etc/minetest/minetest.conf --logfile /var/log/minetest/minetest.log --world "{{ minetest_world_dir }}"' } diff --git a/roles/minetest/tasks/minetest_install_mods.yml b/roles/minetest/tasks/minetest_install_mods.yml index 83b925244..d12b4086c 100644 --- a/roles/minetest/tasks/minetest_install_mods.yml +++ b/roles/minetest/tasks/minetest_install_mods.yml @@ -14,8 +14,6 @@ unarchive: src: "{{ downloads_dir }}/{{ item.name }}.zip" dest: "{{ minetest_game_dir }}/mods" - owner: "{{ minetest_runas_user }}" - group: "{{ minetest_runas_group }}" when: not minetest_mod.stat.exists - name: Check if mod name has 'master' in it diff --git a/roles/minetest/tasks/rpi_minetest_install.yml b/roles/minetest/tasks/rpi_minetest_install.yml index 77e31cedf..a87d58c40 100644 --- a/roles/minetest/tasks/rpi_minetest_install.yml +++ b/roles/minetest/tasks/rpi_minetest_install.yml @@ -1,23 +1,14 @@ # For rpi installs -- name: Set some facts - set_fact: - rpi_src_url: http://www.nathansalapat.com/downloads/0.4.17.1.tar.gz - rpi_src: minetest-0.4.17.1.tar.gz - - name: Install 'libhiredis-dev' package for Minetest package: name: libhiredis-dev state: present -#- name: Minetest already installed - terminate play -# meta: end_play -# when: minetest_world.stat.exists - -- name: Download Minetest {{ rpi_src_url }} for RPi +- name: Download Minetest {{ minetest_rpi_src_url }} for RPi get_url: - url: "{{ rpi_src_url }}" - dest: "{{ downloads_dir }}/{{ rpi_src }}" + url: "{{ minetest_rpi_src_url }}" + dest: "{{ downloads_dir }}/{{ minetest_rpi_src }}" timeout: "{{ download_timeout }}" - name: Create dirs /etc/minetest and /library/games @@ -29,32 +20,24 @@ mode: 0755 with_items: - /etc/minetest - - /library/games - -- name: Create dir /var/log/minetest - file: - state: directory - path: /var/log/minetest - owner: "{{ minetest_runas_user }}" - group: "{{ minetest_runas_group }}" - mode: 0755 + - /var/log/minetest - name: Extract {{ downloads_dir }}/{{ rpi_src }} into /library/games unarchive: - src: "{{ downloads_dir }}/{{ rpi_src }}" + src: "{{ downloads_dir }}/{{ minetest_rpi_src }}" dest: /library/games - owner: "{{ minetest_runas_user }}" - group: "{{ minetest_runas_group }}" + owner: root + group: root - name: Create symbolic link /library/games/minetest file: state: link src: /library/games/0.4.17.1 dest: /library/games/minetest - owner: "{{ minetest_runas_user }}" - group: "{{ minetest_runas_group }}" + owner: root + group: root -- name: Create /etc/minetest/minetest.conf and minetest-serve.service +- name: Create /etc/minetest/minetest.conf and minetest-server.service template: backup: no src: "{{ item.src }}" @@ -64,4 +47,5 @@ mode: 0644 with_items: - { src: 'minetest.conf.j2', dest: '/etc/minetest/minetest.conf' } - - { src: 'minetest-serve.service.j2', dest: '/etc/systemd/system/minetest-serve.service' } + - { src: 'minetest-serve.service.j2', dest: '/etc/systemd/system/minetest-server.service' } + when: minetest_install diff --git a/roles/minetest/templates/minetest-serve.service.j2 b/roles/minetest/templates/minetest-serve.service.j2 index f7eb56b39..6b6030729 100644 --- a/roles/minetest/templates/minetest-serve.service.j2 +++ b/roles/minetest/templates/minetest-serve.service.j2 @@ -4,11 +4,11 @@ After=network.target [Service] Type=simple -User={{ minetest_runas_user }} -Group={{ minetest_runas_group }} -WorkingDirectory=/library/games/minetest ExecStart={{ minetest_server_bin }} --port {{ minetest_port }} --config {{ minetest_config_file }} --logfile /var/log/minetest/minetest.log --world {{ minetest_world_dir }} Restart=on-abort +RestartSec=5s +TimeoutStartSec=900 + [Install] WantedBy=multi-user.target