mirror of
https://github.com/iiab/iiab.git
synced 2025-02-15 04:32:11 +00:00
minetest for rpi initial checkin
This commit is contained in:
parent
31715f1633
commit
c8227ef3c4
8 changed files with 339 additions and 0 deletions
10
roles/minetest/defaults/main.yml
Normal file
10
roles/minetest/defaults/main.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
minetest_runas_user: minetest
|
||||||
|
minetest_runas_group: minetest
|
||||||
|
|
||||||
|
minetest_port: 30000
|
||||||
|
minetest_config_file: /etc/minetest/minetest.conf
|
||||||
|
minetest_server_admin: Admin
|
||||||
|
|
||||||
|
# Installation Variables
|
||||||
|
minetest_install: False
|
||||||
|
minetest_enabled: False
|
13
roles/minetest/tasks/calc_vars.yml
Normal file
13
roles/minetest/tasks/calc_vars.yml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# For rpi installs
|
||||||
|
|
||||||
|
- name: Set some facts for rpi
|
||||||
|
set_fact:
|
||||||
|
minetest_server_bin: /library/games/minetest/bin/minetestserver
|
||||||
|
minetest_world_dir: /library/games/minetest/worlds/world
|
||||||
|
minetest_game_dir: /library/games/minetest/games/minetest_game
|
||||||
|
# only works if server run as root
|
||||||
|
minetest_runas_user: root
|
||||||
|
minetest_runas_group: root
|
||||||
|
when: is_rpi
|
||||||
|
|
||||||
|
# For other installs TBD
|
95
roles/minetest/tasks/main.yml
Normal file
95
roles/minetest/tasks/main.yml
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
# 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
|
||||||
|
|
||||||
|
- name: Terminate play
|
||||||
|
meta: end_play
|
||||||
|
when: not is_rpi
|
||||||
|
|
||||||
|
- include_tasks: calc_vars.yml
|
||||||
|
|
||||||
|
- name: Ensure group minetest exists
|
||||||
|
group:
|
||||||
|
name: "{{ minetest_runas_group }}"
|
||||||
|
state: present
|
||||||
|
when: minetest_runas_user != 'root'
|
||||||
|
|
||||||
|
- name: Create minetest user
|
||||||
|
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
|
||||||
|
stat:
|
||||||
|
path: "{{ minetest_world_dir }}/world.mt"
|
||||||
|
register: minetest_world
|
||||||
|
|
||||||
|
# rpi only
|
||||||
|
- include_tasks: rpi_minetest_install.yml
|
||||||
|
when: minetest_install and not minetest_world.stat.exists and is_rpi
|
||||||
|
|
||||||
|
# not rpi
|
||||||
|
- include_tasks: minetest_install.yml
|
||||||
|
when: minetest_install and not minetest_world.stat.exists and not is_rp
|
||||||
|
|
||||||
|
# Install mods
|
||||||
|
- include: minetest_install_mods.yml
|
||||||
|
with_items:
|
||||||
|
- name: moreblocks
|
||||||
|
url: https://github.com/minetest-mods/moreblocks/archive/master.zip
|
||||||
|
- name: moreores
|
||||||
|
url: https://github.com/Calinou/moreores/archive/master.zip
|
||||||
|
- name: basic_materials
|
||||||
|
url: https://gitlab.com/VanessaE/basic_materials/-/archive/master/basic_materials-master.zip
|
||||||
|
- name: mesecons
|
||||||
|
url: https://github.com/minetest-mods/mesecons/archive/master.zip
|
||||||
|
- name: digilines
|
||||||
|
url: https://github.com/minetest-mods/digilines/archive/master.zip
|
||||||
|
- name: pipeworks
|
||||||
|
url: https://github.com/minetest-mods/pipeworks/archive/master.zip
|
||||||
|
- name: Minetest-WorldEdit
|
||||||
|
url: https://github.com/Uberi/Minetest-WorldEdit/archive/master.zip
|
||||||
|
when: minetest_install
|
||||||
|
|
||||||
|
# enable or disable
|
||||||
|
- name: Enable & Restart 'minetest-serve' service
|
||||||
|
service:
|
||||||
|
name: minetest-serve
|
||||||
|
enabled: yes
|
||||||
|
state: restarted
|
||||||
|
when: minetest_install and minetest_enabled
|
||||||
|
|
||||||
|
- name: Disable 'minetest-serve' service
|
||||||
|
service:
|
||||||
|
name: minetest-serve
|
||||||
|
enabled: no
|
||||||
|
state: stopped
|
||||||
|
when: minetest_install and not minetest_enabled
|
||||||
|
|
||||||
|
- name: Add 'minetest' variable values to {{ iiab_ini_file }}
|
||||||
|
ini_file:
|
||||||
|
path: "{{ iiab_ini_file }}"
|
||||||
|
section: minetest
|
||||||
|
option: "{{ item.option }}"
|
||||||
|
value: "{{ item.value }}"
|
||||||
|
with_items:
|
||||||
|
- option: name
|
||||||
|
value: Minetest Server
|
||||||
|
- option: description
|
||||||
|
value: '"Well known game Minetest."'
|
||||||
|
- option: minetest_world_dir
|
||||||
|
value: "{{ minetest_world_dir }}"
|
||||||
|
- option: minetest_port
|
||||||
|
value: "{{ minetest_port }}"
|
||||||
|
- option: minetest_enabled
|
||||||
|
value: "{{ minetest_enabled }}"
|
||||||
|
- option: minetest_world_dir
|
||||||
|
value: "{{ minetest_world_dir }}"
|
76
roles/minetest/tasks/minetest_install.yml
Normal file
76
roles/minetest/tasks/minetest_install.yml
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
# For non-rpi installs
|
||||||
|
# Still a work in progress
|
||||||
|
|
||||||
|
- 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: Ensure group minetest exists
|
||||||
|
group:
|
||||||
|
name: "{{ minetest_runas_group }}"
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Create minetest user
|
||||||
|
user:
|
||||||
|
name: "{{ minetest_runas_user }}"
|
||||||
|
groups: "{{ minetest_runas_group }}"
|
||||||
|
state: present
|
||||||
|
createhome: no
|
||||||
|
|
||||||
|
- name: Create minetest world directory
|
||||||
|
file: path={{ item }}
|
||||||
|
mode=0755
|
||||||
|
owner={{ minetest_runas_user }}
|
||||||
|
group={{ minetest_runas_group }}
|
||||||
|
state=directory
|
||||||
|
with_items:
|
||||||
|
- "{{ minetest_world_dir }}"
|
||||||
|
|
||||||
|
- name: Install minetest package
|
||||||
|
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: path={{ item }}
|
||||||
|
mode=0755
|
||||||
|
owner=root
|
||||||
|
group=root
|
||||||
|
state=directory
|
||||||
|
with_items:
|
||||||
|
- /etc/minetest
|
||||||
|
|
||||||
|
# - name: move files to world dir
|
||||||
|
|
||||||
|
- name: Change binary name 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: "{{ item.mode }}"
|
||||||
|
with_items:
|
||||||
|
- { src: 'minetest.conf.j2', dest: '/etc/minetest/minetest.conf', mode: '0644'}
|
||||||
|
- { src: 'minetest-serve.service.j2', dest: '/etc/systemd/system/minetest-serve.service', mode: '0644'}
|
||||||
|
|
||||||
|
# - name: Start minetest
|
28
roles/minetest/tasks/minetest_install_mods.yml
Normal file
28
roles/minetest/tasks/minetest_install_mods.yml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
- name: Check if mod already installed
|
||||||
|
stat:
|
||||||
|
path: "{{ minetest_game_dir }}/mods/{{ item.name }}"
|
||||||
|
register: minetest_mod
|
||||||
|
|
||||||
|
- name: Download one minetest mod
|
||||||
|
get_url:
|
||||||
|
url: "{{item.url}}"
|
||||||
|
dest: "{{ downloads_dir }}/{{ item.name }}.zip"
|
||||||
|
mode: 0440
|
||||||
|
when: not minetest_mod.stat.exists
|
||||||
|
|
||||||
|
- name: Extract mod into mods of current game
|
||||||
|
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
|
||||||
|
stat:
|
||||||
|
path: "{{ minetest_game_dir }}/mods/{{ item.name }}-master"
|
||||||
|
register: minetest_mod_master
|
||||||
|
|
||||||
|
- name: Rename mod to canonical name if has '-master' in name
|
||||||
|
command: mv "{{ minetest_game_dir }}/mods/{{ item.name }}-master" "{{ minetest_game_dir }}/mods/{{ item.name }}"
|
||||||
|
when: minetest_mod_master.stat.exists
|
71
roles/minetest/tasks/rpi_minetest_install.yml
Normal file
71
roles/minetest/tasks/rpi_minetest_install.yml
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
# 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 packages for minetest
|
||||||
|
package:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: present
|
||||||
|
with_items:
|
||||||
|
- libhiredis-dev
|
||||||
|
|
||||||
|
#- name: Minetest already installed - terminate play
|
||||||
|
# meta: end_play
|
||||||
|
# when: minetest_world.stat.exists
|
||||||
|
|
||||||
|
- name: Download minetest for rpi
|
||||||
|
get_url:
|
||||||
|
url: "{{ rpi_src_url }}"
|
||||||
|
dest: "{{ downloads_dir }}/{{ rpi_src }}"
|
||||||
|
timeout: "{{ download_timeout }}"
|
||||||
|
|
||||||
|
- name: Create /etc/minetest and /library/games directories
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
mode: 0755
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
state: directory
|
||||||
|
with_items:
|
||||||
|
- /etc/minetest
|
||||||
|
- /library/games
|
||||||
|
|
||||||
|
- name: Create /var/log/minetest directory
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
mode: 0755
|
||||||
|
owner: "{{ minetest_runas_user }}"
|
||||||
|
group: "{{ minetest_runas_group }}"
|
||||||
|
state: directory
|
||||||
|
with_items:
|
||||||
|
- /var/log/minetest
|
||||||
|
|
||||||
|
- name: Extract minetest into /library/games
|
||||||
|
unarchive:
|
||||||
|
src: "{{ downloads_dir }}/{{ rpi_src }}"
|
||||||
|
dest: /library/games
|
||||||
|
owner: "{{ minetest_runas_user }}"
|
||||||
|
group: "{{ minetest_runas_group }}"
|
||||||
|
|
||||||
|
- name: Create symbolic link
|
||||||
|
file:
|
||||||
|
src: /library/games/0.4.17.1
|
||||||
|
dest: /library/games/minetest
|
||||||
|
owner: "{{ minetest_runas_user }}"
|
||||||
|
group: "{{ minetest_runas_group }}"
|
||||||
|
state: link
|
||||||
|
|
||||||
|
- name: Create minetest-server service and minetest.conf file
|
||||||
|
template:
|
||||||
|
backup: no
|
||||||
|
src: "{{ item.src }}"
|
||||||
|
dest: "{{ item.dest }}"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "{{ item.mode }}"
|
||||||
|
with_items:
|
||||||
|
- { src: 'minetest.conf.j2', dest: '/etc/minetest/minetest.conf', mode: '0644'}
|
||||||
|
- { src: 'minetest-serve.service.j2', dest: '/etc/systemd/system/minetest-serve.service', mode: '0644'}
|
14
roles/minetest/templates/minetest-serve.service.j2
Normal file
14
roles/minetest/templates/minetest-serve.service.j2
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Minetest Server
|
||||||
|
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
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
32
roles/minetest/templates/minetest.conf.j2
Normal file
32
roles/minetest/templates/minetest.conf.j2
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
# Admin name
|
||||||
|
name = {{ minetest_server_admin }}
|
||||||
|
|
||||||
|
# Name of server
|
||||||
|
server_name = Internet in a Box Minetest Server
|
||||||
|
|
||||||
|
# Automaticaly report to masterserver
|
||||||
|
# set to true for public servers
|
||||||
|
server_announce = false
|
||||||
|
|
||||||
|
# Default game (default when creating a new world)
|
||||||
|
default_game = minetest
|
||||||
|
|
||||||
|
# Maximum number of players connected simultaneously
|
||||||
|
max_users = 15
|
||||||
|
|
||||||
|
# Whether to enable players killing each other
|
||||||
|
enable_pvp = false
|
||||||
|
|
||||||
|
# Set to true to enable creative mode (unlimited inventory)
|
||||||
|
creative_mode = true
|
||||||
|
|
||||||
|
# Enable players getting damage and dying
|
||||||
|
enable_damage = true
|
||||||
|
|
||||||
|
# Available privileges: interact, shout, teleport, settime, privs, ...
|
||||||
|
# See /privs in game for a full list on your server and mod configuration.
|
||||||
|
default_privs = interact, shout, teleport, settime, privs
|
||||||
|
|
||||||
|
# For mods
|
||||||
|
spawn_friendly_mobs = true
|
||||||
|
spawn_hostile_mobs = false
|
Loading…
Reference in a new issue