Запуск сервера Minecraft в NetBSD с помощью daemontools
Содержание
Установка пакета
Сборка пакета pkgsrc описана в статье Делаем pkgsrc для сервера Minecraft. Сборка пакета у меня автоматизирована в соответствии со статьёй Настройка сборочного сервера NetBSD, поэтому для установки пакета с сервером Minecraft в моём случае достаточно одной команды:
# pkgin install minecraft-server
Подготовка системы
Для работы сервера создадим выделенного пользователя и группу:
# groupadd minecraft
# useradd -G minecraft minecraft
Сервер при запуске помещает в текущий каталог свои рабочие файлы. В качестве рабочего каталога сервера будем использовать каталог /var/games/minecraft-server
, владельцем которого сделаем пользователя minecraft
.
Настройка сервиса daemontools
Создадим каталоги с файлами сервиса daemontools:
# mkdir -p /service/.minecraft-server/log/
Для запуска сервера Minecraft создадим скрипт /service/.minecraft-server/run
со следующим содержимым:
#!/bin/sh
exec 2>&1
if [ ! -d /var/games/minecraft-server ] ; then
mkdir -p /var/games/minecraft-server
chown minecraft:minecraft /var/games/minecraft-server
fi
cd /var/games/minecraft-server
if [ -f eula.txt ] ; then
sed -i 's/eula=false/eula=true/' eula.txt
fi
exec \
setuidgid minecraft \
/usr/pkg/java/openjdk17/bin/java -Xmx1024M -Xms1024M -jar /usr/pkg/lib/minecraft-server/minecraft-server.jar nogui
Скрипт запуска создаёт каталог для размещения файлов сервера Minecraft, если его ещё нет, выставляет права доступа к нему и меняет текущий каталог на каталог с файлами игры. При первом запуске сервер Minecraft распакует в этот каталог свои файлы и создаст в нём файл eula.txt
, после чего завершит работу.
Для того, чтобы сервер Minecraft не завершал работу, нужно принять лицензионное соглашение. Для этого в скрипте запуска сервера Minecraft предусмотрена команда, которая редактирует файл eula.txt
так, чтобы отразить в нём согласие с лицензией. Поскольку при завершении скрипта daemontools повторно запустит его, то второй запуск сервера Minecraft окажется успешным.
Для ведения журналов работы сервера Minecraft создадим скрипт /service/.minecraft-server/log/run
со следующим содержимым:
#!/bin/sh
exec \
setuidgid multilog \
multilog t /var/log/minecraft-server/
Создадим каталог для журналов сервера Minecraft и выставим права доступа к ним:
# mkdir /var/log/minecraft-server
# chown multilog:multilog /var/log/minecraft-server
Выставим права выполнения у скриптов запуска сервера Minecraft и сервиса ведения журналов работы сервера Minecraft:
# chmod +x /service/.minecraft-server/run /service/.minecraft-server/log/run
Для запуска сервера остаётся переименовать каталог сервиса:
# mv /service/.minecraft-server /service/minecraft-server
Совместимость с rc
Для совместимости с системой инициализации /etc/rc
создадим скрипт /etc/rc.d/minecraft_server
со следующим содержимым:
#!/bin/sh
# REQUIRE: DAEMON
# PROVIDE: minecraft_server
if [ -f /etc/rc.subr ]; then
. /etc/rc.subr
fi
name=minecraft_server
rcvar=$name
load_rc_config $name
if checkyesno $rcvar ; then
rm -f /service/$name/down
else
touch /service/$name/down
fi
status_cmd="/usr/pkg/bin/svstat /service/$name/ | sed -e 's,^/service/\(.*\)/: up (\(pid .*\)).*$,\1 is running as \2.,g; s,^/service/\(.*\)/: down .*,\1 is not running.,g'"
start_cmd="/usr/pkg/bin/svc -u /service/$name/ ; echo 'Starting $name.'"
stop_cmd="/usr/pkg/bin/svc -d /service/$name/ ; echo 'Stopping $name.'"
restart_cmd="/usr/pkg/bin/svc -du /service/$name/ ; echo 'Restarting $name.'"
extra_commands="status"
run_rc_command "$1"
После создания файла нужно добавить права на его выполнение:
# chmod +x /etc/rc.d/minecraft_server
Теперь можно будет включать и выключать сервис minecraft_server
привычным образом через переменную minecraft_server
в файле /etc/rc.conf
, а также запускать, останавливать, перезапускать и проверять состояние сервиса с помощью скрипта /etc/rc.d/minecraft_server
.