Minetest Server на Raspberry Pi

Установка последней версии игрового сервера Minetest в Raspbian

На днях решил проверить, потянет ли моя Raspberry Pi 3 Model B+ сервер игры Minetest, и столкнулся с некоторыми проблемами, решение которых пришлось искать самому, т.к. в интернете информации по данной теме практически нет. Для себя «на будущее» и для тех, кому это может оказаться полезно, оставляю здесь данный материал на тему как установить сервер Minetest на Raspberry Pi под управлением Raspbian 10.

Трудности, с которыми я столкнулся

В начале я рассчитывал, что всё пройдёт быстро и просто, в общем как обычно:

  • установил пакет minetest-server,
  • внёс изменения в конфигурационный файл,
  • запустил сервер.

Но не тут то было! Установить и настроить сервер проблем никаких, но вот версия, версия сервера Minetest в репозитории Raspbian древняя, как сами понимаете что мамонта 😬 А клиенты что в моём Arch Linux, что на Android — крайних версий. И как это бывает, клиент и сервер разных версий не могут нормально взаимодействовать, т.е. клиент Minetest версии 5 не может подключиться к серверу версии 4. Где взять сервер пятой версии? В Debian он лежит аж в experimental, но в Raspbian experimental-то нету, поэтому выход лишь один: компилить самостоятельно. Это не сложно. Само собой, все действия производим на малинке в Raspbian.

Сборка сервера

Подготовка

Для начала подготовим всё для комфортной сборки minetestserver и безопасного запуска впоследствии.

Создадим нового пользователя

Сервер будем запускать от имени отдельного пользователя. Это нужно для более безопасной работы сервера в будущем. Например, у созданного пользователя не будет доступа к sudo, т.е. правам суперпользователя root. Назовём пользователя minetest.

sudo adduser minetest

Вводим информацию, запрашиваемую скриптом. Отлично, новый пользователь создан.

Установим все необходимые для сборки пакеты

Теперь нужно установить всё, что нам понадобится в процессе получения исходного кода и компиляции сервера Minetest.

sudo apt install git build-essential libirrlicht-dev cmake libbz2-dev libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev

Получим исходный код Minetest из Github

Теперь все действия будем производить под юзером minetest, которого создали выше. Логинимся.

sudo su minetest

Перейдём в домашний каталог.

cd ~

Качаем сорцы Minetest из Github.

git clone --depth 1 https://github.com/minetest/minetest.git
cd minetest
git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game

Теперь всё готово к сборке.

Компиляция

Настало время кАНпЕлировать 😁 Будем собирать портативную версию, которую не нужно устанавливать в систему. Отключим сборку клиента, т.к. нужен нам только сервер. Ну и дебажить нам ничего не нужно, так что версию будем собирать «release«. Подразумевается, что вы не лазили никуда по файловой системе и находитесь в каталоге «~/minetest». Если это не так — бегом туда:

cd ~/minetest

Подготовка. Указываем нужные нам параметры сборки.

cmake . -DRUN_IN_PLACE=TRUE -DBUILD_CLIENT=FALSE -DCMAKE_BUILD_TYPE=Release

Сборка! Т.к. у 3 малины 4 процессорных ядра, задействуем весь их потенциал, запустив компиляцию в 4 потока.

make -j 4

Дожидаемся окончания процесса компиляции и получаем в каталоге bin бинарник minetestserver. Сборка успешно завершена!

Настройка

Я вообще не геймер, и с Minetest в частности столкнулся впервые, так что пришлось гуглить, гуглить, гуглить… В общем проще всего создать Мир, в котором юзеры будут творить свои чинства и бесчинства в десктопном клиенте, а потом каталог ~/.minetest закинуть на Raspberry Pi, что я и сделал. Подробно там не о чём писать, скажу только что закидывал каталог .minetest в малину добавив ее как сетевой каталог себе в Dolphin (я использую KDE Plasma 5) и подключившись с логином minetest.

В конфигурационном файле minetest.conf, который лежит в залитом на малине каталоге .minetest множество настроек, которые серверу не нужны. Так что самое разумное, что можно с ним сделать — нафиг удалить и создать новый, в котором будут только нужные параметры. Удаляем сущствующий minetest.conf.

rm ~/.minetest/minetest.conf

Открываем для редактирования новый конфиг:

nano ~/.minetest/minetest.conf

Помещаем туда следующие строки:

server_name = YOUR_NAME
server_description = YOUR_DESC
server_announce = false
motd = YOUR_MOTD
max_users = 15
port = 3000
name = ADMIN_NAME
map-dir = /home/.minetest/worlds/YOUR_WORLD
enable_damage = true
default_privs = interact, shout
disallow_empty_password = true

Замените YOUR_NAME на имя сервера, YOUR_DESC на его описание, YOUR_MOTD на желаемое «сообщение дня», которое отображается при каждом входе на сервер, ADMIN_NAME на имя учётки админа и YOUR_WORLD на имя мира, которое указывали в десктопном клиенте Minetest. Имя мира должно быть на английском.

В моём примере параметром server_announce = false запрещено анонсировать сервер на публичный список серверов, но если нужно — меняем false на true.

По желанию в конфиге можно изменить остальные или добавить новые параметры сервера, которые можно подсмотреть в примере minetest.conf на Github.

Сохраняем файл комбинацией CTRL+O, подтверждаем намерение сохранить клавишей ENTER и закрываем nano комбинацией CTRL+X.

Запуск

Ну что, осуществляем пробный запуск! В качестве параметра передаём расположение созданного нами конфигурационного файла minetest.conf

sudo su minetest -c '/home/minetest/minetest/bin/minetestserver --config ~/.minetest/minetest.conf'

Если ничего не просвистели, сервак должен успешно стартануть и слушать порт 3000, по которому к нему можно будет подключиться.

Попробовать подключиться можно по адресу 127.0.0.1 и порту 3000.

Завершить работу сервера, запущенного данным способом можно простым нажатием CTRL+C. Можно запускать сервер с переводом его в фон, чтобы не блокировал возможность ввода в консоли:

sudo su minetest -c '/home/minetest/minetest/bin/minetestserver --config ~/.minetest/minetest.conf &'

В этом случае завершить сервер можно «убив» его.

sudo killall minetestserver

На этом можно материал закончить, но запускать сервер каждый раз вручную не удобно. А можно ли сделать автоматический запуск сервера при каждой загрузке Raspbian? Почему нет, сейчас запилим с помощью cron. Открываем crontab:

sudo crontab -e

В самый конец файла добавляем строчку

@reboot sudo su minetest -c '/home/minetest/minetest/bin/minetestserver --config ~/.minetest/minetest.conf &'

Сохраняем как в прошлый раз: CTRL+O, ENTER, CTRL+X.

Всё! Сервер будет автоматически запускаться при каждом включении/перезагрузке Raspberry Pi.

Minetest