Содержание
На днях решил проверить, потянет ли моя 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.