setup-mt 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #!/bin/bash
  2. source config-file
  3. install_pwd=$(pwd)
  4. if [ $first_install = "y" ]; then
  5. echo "Create minetest user"
  6. useradd minetest
  7. mkdir -p /home/minetest/.minetest
  8. echo "Allow sources repo and install dependecies for build"
  9. perl -pi.orig -0e 's/^(deb .*\n)# (deb-src)/$1$2/mg' /etc/apt/sources.list
  10. apt update
  11. apt-get build-dep minetest -y
  12. fi
  13. apt install -y libzstd-dev
  14. apt install -y rpl
  15. echo "Compile libspatialindex"
  16. rm -rf /tmp/spatialindex
  17. git clone https://github.com/libspatialindex/libspatialindex /tmp/spatialindex
  18. cd /tmp/spatialindex
  19. cmake . -DCMAKE_INSTALL_PREFIX=/usr
  20. make -j$(nproc)
  21. make install
  22. echo "Compile minetest version $mt_version"
  23. rm -rf /tmp/minetest
  24. git clone --depth 1 --branch "$mt_version" https://github.com/minetest/minetest.git /tmp/minetest
  25. cp -n /tmp/minetest/minetest.conf.example /home/minetest/.minetest/minetest.conf
  26. cd /tmp/minetest
  27. cmake . \
  28. -DBUILD_CLIENT=0 \
  29. -DBUILD_SERVER=1 \
  30. -DCMAKE_INSTALL_PREFIX=/usr \
  31. -DCUSTOM_BINDIR=/usr/bin \
  32. -DCUSTOM_DOCDIR="/usr/share/doc/minetest" \
  33. -DCUSTOM_SHAREDIR="/usr/share/minetest" \
  34. -DENABLE_CURL=1 \
  35. -DENABLE_LEVELDB=1 \
  36. -DENABLE_LUAJIT=1 \
  37. -DENABLE_REDIS=1 \
  38. -DENABLE_SOUND=0 \
  39. -DENABLE_SYSTEM_GMP=1 \
  40. -DENABLE_POSTGRESQL=1 \
  41. -DPOSTGRESQL_CONFIG_EXECUTABLE=/usr/bin/pg_config \
  42. -DPOSTGRESQL_LIBRARY=/usr/lib/libpq.so \
  43. -DRUN_IN_PLACE=0
  44. make -j$(nproc)
  45. echo "Stop minetestsrv service(upgrade case)"
  46. systemctl stop minetestsrv
  47. make install
  48. echo "Clone minetest_game $mt_game_version"
  49. mkdir -p /home/minetest/.minetest/games/
  50. rm -rf /home/minetest/.minetest/games/minetest
  51. git clone --depth 1 --branch "$mt_game_version" https://github.com/minetest/minetest_game.git /home/minetest/.minetest/games/minetest
  52. echo "Fix privileges on /home/minetest"
  53. chown minetest:minetest /home/minetest/ -cR
  54. if [ $first_install = "y" ]; then
  55. echo "Configuring firstinstall config"
  56. echo "Creating minetestsrv systemd service"
  57. echo "[Unit]" > /etc/systemd/system/minetestsrv.service
  58. echo "Description=MinetestSRV" >> /etc/systemd/system/minetestsrv.service
  59. echo "After=postgresql.service" >> /etc/systemd/system/minetestsrv.service
  60. echo "[Service]" >> /etc/systemd/system/minetestsrv.service
  61. echo "Type=simple" >> /etc/systemd/system/minetestsrv.service
  62. echo "User=minetest" >> /etc/systemd/system/minetestsrv.service
  63. echo "Group=minetest" >> /etc/systemd/system/minetestsrv.service
  64. echo "ExecStart=/usr/bin/minetestserver" >> /etc/systemd/system/minetestsrv.service
  65. echo "Restart=always" >> /etc/systemd/system/minetestsrv.service
  66. echo "RestartSec=3" >> /etc/systemd/system/minetestsrv.service
  67. echo "[Install]" >> /etc/systemd/system/minetestsrv.service
  68. echo "WantedBy=multi-user.target" >> /etc/systemd/system/minetestsrv.service
  69. systemctl daemon-reload
  70. apt install postgresql postgresql-contrib -y
  71. pg_ctlcluster 14 main start
  72. sudo -u postgres createuser minetest
  73. sudo -u postgres createdb minetest
  74. sudo -u postgres createdb minetest_players
  75. sudo -u postgres createdb minetest_auth
  76. sudo -u postgres psql -U postgres -d postgres -c "alter user postgres with password '$psql_postgres_user_password';"
  77. sudo -u postgres psql -U postgres -d postgres -c "alter user minetest with password '$psql_minetest_user_password';"
  78. sudo -u postgres psql -U postgres -d postgres -c "grant all privileges on database "minetest" to minetest;"
  79. sudo -u postgres psql -U postgres -d postgres -c "grant all privileges on database "minetest_players" to minetest;"
  80. sudo -u postgres psql -U postgres -d postgres -c "grant all privileges on database "minetest_auth" to minetest;"
  81. mkdir -p /home/minetest/.minetest/worlds/world/
  82. echo "gameid = minetest" > /home/minetest/.minetest/worlds/world/world.mt
  83. echo "backend = postgresql" >> /home/minetest/.minetest/worlds/world/world.mt
  84. echo "creative_mode = false" >> /home/minetest/.minetest/worlds/world/world.mt
  85. echo "enable_damage = true" >> /home/minetest/.minetest/worlds/world/world.mt
  86. echo "player_backend = postgresql" >> /home/minetest/.minetest/worlds/world/world.mt
  87. echo "auth_backend = postgresql" >> /home/minetest/.minetest/worlds/world/world.mt
  88. echo "pgsql_connection = host=127.0.0.1 user=minetest password=$psql_minetest_user_password dbname=minetest" >> /home/minetest/.minetest/worlds/world/world.mt
  89. echo "pgsql_player_connection = host=127.0.0.1 user=minetest password=$psql_minetest_user_password dbname=minetest_players" >> /home/minetest/.minetest/worlds/world/world.mt
  90. echo "pgsql_auth_connection = host=127.0.0.1 user=minetest password=$psql_minetest_user_password dbname=minetest_auth" >> /home/minetest/.minetest/worlds/world/world.mt
  91. cd "$install_pwd"
  92. cat mods-list >> /home/minetest/.minetest/worlds/world/world.mt
  93. cp -r mods /home/minetest/.minetest/mods
  94. echo "disable_fire = true" >> /home/minetest/.minetest/minetest.conf
  95. echo "enable_tnt = false" >> /home/minetest/.minetest/minetest.conf
  96. echo "server_name = "$mt_server_name"" >> /home/minetest/.minetest/minetest.conf
  97. echo "server_description = "$mt_server_description"" >> /home/minetest/.minetest/minetest.conf
  98. echo "server_address = "$mt_server_address"" >> /home/minetest/.minetest/minetest.conf
  99. echo "server_url = "$mt_server_url"" >> /home/minetest/.minetest/minetest.conf
  100. echo "server_announce = "$mt_server_announce"" >> /home/minetest/.minetest/minetest.conf
  101. echo "ipv6_server = "$mt_ipv6_server"" >> /home/minetest/.minetest/minetest.conf
  102. echo "default_game = minetest" >> /home/minetest/.minetest/minetest.conf
  103. echo "motd = "$mt_motd"" >> /home/minetest/.minetest/minetest.conf
  104. echo "max_users = "$mt_max_users"" >> /home/minetest/.minetest/minetest.conf
  105. echo "name = "$mt_admin"" >> /home/minetest/.minetest/minetest.conf
  106. echo "language = "$mt_language"" >> /home/minetest/.minetest/minetest.conf
  107. echo "port = "$mt_port"" >> /home/minetest/.minetest/minetest.conf
  108. echo "enable_rollback_recording = "$mt_enable_rollback_recording"" >> /home/minetest/.minetest/minetest.conf
  109. echo "default_privs = "$mt_default_privs"" >> /home/minetest/.minetest/minetest.conf
  110. echo "mg_name = "$mt_mg_name"" >> /home/minetest/.minetest/minetest.conf
  111. echo "protector_hurt = "$mt_protector_hurt"" >> /home/minetest/.minetest/minetest.conf
  112. echo "protector_flip = "$mt_protector_flip"" >> /home/minetest/.minetest/minetest.conf
  113. echo "protector_pvp = "$mt_protector_pvp"" >> /home/minetest/.minetest/minetest.conf
  114. echo "tubelib_machine_aging_value = "$mt_tubelib_machine_aging_value"" >> /home/minetest/.minetest/minetest.conf
  115. echo "unlimited_player_transfer_distance = false" >> /home/minetest/.minetest/minetest.conf
  116. echo "enable_damage = "$mt_enable_damage"" >> /home/minetest/.minetest/minetest.conf
  117. echo "enable_pvp = "$mt_enable_pvp"" >> /home/minetest/.minetest/minetest.conf
  118. echo "Fix privileges on /home/minetest"
  119. chown minetest:minetest /home/minetest/ -cR
  120. if [ $ufw_enable = "y" ]; then
  121. apt install ufw -y
  122. ufw allow proto tcp to any port $ufw_ssh_port_for_accept
  123. ufw allow proto udp to any port $mt_port
  124. ufw enable
  125. fi
  126. fi
  127. systemctl start minetestsrv
  128. systemctl enable minetestsrv