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