From 2c08f29c02065474ef835fed9e52129724cfeb1f Mon Sep 17 00:00:00 2001 From: Tim Moody Date: Fri, 8 Feb 2019 16:27:42 -0500 Subject: [PATCH 1/5] softcode working dir in service and always run as root comment out vars in defaults --- roles/minetest/defaults/main.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/roles/minetest/defaults/main.yml b/roles/minetest/defaults/main.yml index 4bacad82a..adc3645d7 100644 --- a/roles/minetest/defaults/main.yml +++ b/roles/minetest/defaults/main.yml @@ -1,12 +1,6 @@ # 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 From 0decf2d704b133f2376c3f80ccdb7cbb100c3137 Mon Sep 17 00:00:00 2001 From: Tim Moody Date: Fri, 8 Feb 2019 16:28:18 -0500 Subject: [PATCH 2/5] ditto --- roles/minetest/templates/minetest-serve.service.j2 | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/roles/minetest/templates/minetest-serve.service.j2 b/roles/minetest/templates/minetest-serve.service.j2 index f7eb56b39..7755242d1 100644 --- a/roles/minetest/templates/minetest-serve.service.j2 +++ b/roles/minetest/templates/minetest-serve.service.j2 @@ -4,9 +4,7 @@ After=network.target [Service] Type=simple -User={{ minetest_runas_user }} -Group={{ minetest_runas_group }} -WorkingDirectory=/library/games/minetest +WorkingDirectory={{ minetest_working_dir }} ExecStart={{ minetest_server_bin }} --port {{ minetest_port }} --config {{ minetest_config_file }} --logfile /var/log/minetest/minetest.log --world {{ minetest_world_dir }} Restart=on-abort From 3e8358b7b3424b544c4ca90cfa434e4a192f1f8b Mon Sep 17 00:00:00 2001 From: Tim Moody Date: Fri, 8 Feb 2019 17:45:43 -0500 Subject: [PATCH 3/5] restructure --- roles/minetest/tasks/main.yml | 56 ++++++------- roles/minetest/tasks/minetest_install.yml | 83 +------------------ roles/minetest/tasks/rpi_minetest_install.yml | 40 --------- 3 files changed, 30 insertions(+), 149 deletions(-) diff --git a/roles/minetest/tasks/main.yml b/roles/minetest/tasks/main.yml index e961eef81..318198199 100644 --- a/roles/minetest/tasks/main.yml +++ b/roles/minetest/tasks/main.yml @@ -1,38 +1,21 @@ -# 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 dirs /etc/minetest and /library/games + file: + state: directory + path: "{{ item }}" + owner: root + group: root + mode: 0755 + with_items: + - /etc/minetest + - /library/games + - /var/log/minetest + when: minetest_install + # rpi only - include_tasks: rpi_minetest_install.yml when: minetest_install and not minetest_world.stat.exists and is_rpi @@ -60,6 +43,19 @@ url: https://github.com/Uberi/Minetest-WorldEdit/archive/master.zip when: minetest_install +- name: Create /etc/minetest/minetest.conf and minetest-serve.service + 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' } + when: minetest_install + # enable or disable - name: Enable & Restart 'minetest-serve' service systemd: diff --git a/roles/minetest/tasks/minetest_install.yml b/roles/minetest/tasks/minetest_install.yml index 89e727001..099a88452 100644 --- a/roles/minetest/tasks/minetest_install.yml +++ b/roles/minetest/tasks/minetest_install.yml @@ -1,82 +1,7 @@ # 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/ - -# 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' - -# 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 - file: - state: directory - path: /etc/minetest - owner: root - group: root - 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' } - -# - name: Start minetest +- name: Install Minetest package + package: + name: minetest + state: present diff --git a/roles/minetest/tasks/rpi_minetest_install.yml b/roles/minetest/tasks/rpi_minetest_install.yml index 77e31cedf..8fc0758d4 100644 --- a/roles/minetest/tasks/rpi_minetest_install.yml +++ b/roles/minetest/tasks/rpi_minetest_install.yml @@ -1,44 +1,16 @@ # 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 get_url: url: "{{ rpi_src_url }}" dest: "{{ downloads_dir }}/{{ rpi_src }}" timeout: "{{ download_timeout }}" -- name: Create dirs /etc/minetest and /library/games - file: - state: directory - path: "{{ item }}" - owner: root - group: root - 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 - - name: Extract {{ downloads_dir }}/{{ rpi_src }} into /library/games unarchive: src: "{{ downloads_dir }}/{{ rpi_src }}" @@ -53,15 +25,3 @@ dest: /library/games/minetest owner: "{{ minetest_runas_user }}" group: "{{ minetest_runas_group }}" - -- name: Create /etc/minetest/minetest.conf and minetest-serve.service - 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' } From a0c70cec888a2028ee7fd671a57544359950711a Mon Sep 17 00:00:00 2001 From: Tim Moody Date: Fri, 8 Feb 2019 17:48:46 -0500 Subject: [PATCH 4/5] no runas --- roles/minetest/tasks/minetest_install_mods.yml | 2 -- 1 file changed, 2 deletions(-) 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 From 7d4bd29111d0fa9cace36d29ecc079c8c1a4034a Mon Sep 17 00:00:00 2001 From: Tim Moody Date: Sat, 9 Feb 2019 15:53:40 -0500 Subject: [PATCH 5/5] switch back to minetest-server package except for rpi --- roles/minetest/defaults/main.yml | 2 + roles/minetest/tasks/main.yml | 25 +++--------- roles/minetest/tasks/minetest_install.yml | 31 +++++++++++++- roles/minetest/tasks/rpi_minetest_install.yml | 40 +++++++++++++++---- .../templates/minetest-serve.service.j2 | 4 +- 5 files changed, 72 insertions(+), 30 deletions(-) diff --git a/roles/minetest/defaults/main.yml b/roles/minetest/defaults/main.yml index adc3645d7..4ef7f52f3 100644 --- a/roles/minetest/defaults/main.yml +++ b/roles/minetest/defaults/main.yml @@ -4,3 +4,5 @@ # 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_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 318198199..85a99df9d 100644 --- a/roles/minetest/tasks/main.yml +++ b/roles/minetest/tasks/main.yml @@ -3,7 +3,7 @@ path: "{{ minetest_world_dir }}/world.mt" register: minetest_world -- name: Create dirs /etc/minetest and /library/games +- name: Create /library/games file: state: directory path: "{{ item }}" @@ -11,9 +11,7 @@ group: root mode: 0755 with_items: - - /etc/minetest - /library/games - - /var/log/minetest when: minetest_install # rpi only @@ -43,32 +41,19 @@ url: https://github.com/Uberi/Minetest-WorldEdit/archive/master.zip when: minetest_install -- name: Create /etc/minetest/minetest.conf and minetest-serve.service - 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' } - 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 099a88452..f539d689f 100644 --- a/roles/minetest/tasks/minetest_install.yml +++ b/roles/minetest/tasks/minetest_install.yml @@ -3,5 +3,34 @@ - name: Install Minetest package package: - name: minetest + name: minetest-server state: present + +- 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 }}' } + +- name: Create /library/games/minetest/worlds/world + file: + state: directory + path: "{{ item }}" + owner: "{{ minetest_default_runas_user }}" + group: "{{ minetest_default_runas_group }}" + mode: 0755 + with_items: + - "{{ minetest_world_dir }}" + +- 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/rpi_minetest_install.yml b/roles/minetest/tasks/rpi_minetest_install.yml index 8fc0758d4..a87d58c40 100644 --- a/roles/minetest/tasks/rpi_minetest_install.yml +++ b/roles/minetest/tasks/rpi_minetest_install.yml @@ -5,23 +5,47 @@ name: libhiredis-dev state: present -- 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 + file: + state: directory + path: "{{ item }}" + owner: root + group: root + mode: 0755 + with_items: + - /etc/minetest + - /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-server.service + 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-server.service' } + when: minetest_install diff --git a/roles/minetest/templates/minetest-serve.service.j2 b/roles/minetest/templates/minetest-serve.service.j2 index 7755242d1..6b6030729 100644 --- a/roles/minetest/templates/minetest-serve.service.j2 +++ b/roles/minetest/templates/minetest-serve.service.j2 @@ -4,9 +4,11 @@ After=network.target [Service] Type=simple -WorkingDirectory={{ minetest_working_dir }} 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