Skip to content
TheIIIrdPublic

About

Automated Minecraft server builder

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

15 Commits

Folders and files

Repository files navigation

izba

Автоматический сборщик сервера Minecraft.

Изба — жильё, собранное своими руками из того, что есть под рукой. Примерно этим занимается и программа: берёт официальные исходники, проверяет их и складывает в работающий сервер. Скачивает ядро и Java, раскладывает файлы, проверяет окружение и запускает сервер. Один исполняемый файл без внешних зависимостей во время работы.

Статус: v0.1, первый рабочий срез. Поддерживаются ваниль и Paper. Плагины, бэкапы и супервизор появятся в следующих версиях.

Быстрый старт

mkdir myserver && cd myserver
izba init
izba up

init задаст несколько вопросов и создаст izba.toml. Нажатие Enter на каждом вопросе оставляет значение по умолчанию.

up определит версии, покажет план, спросит согласие с Minecraft EULA, выполнит предстартовые проверки, всё установит и запустит сервер. Консоль сервера доступна в том же терминале, Ctrl+C останавливает сервер корректно с сохранением мира.

Сборка

Нужен Go 1.24 или новее.

Версия не случайная: Go начал записывать в Mach-O запись LC_UUID только начиная с 1.24, а dyld в macOS 26 отказывается запускать бинарники без неё. Собранное более старым компилятором на современной macOS просто не стартует.

go build -o izba ./cmd/izba

Перед публикацией обязательно задайте свой контактный адрес: сервис Fill от PaperMC требует осмысленный User-Agent и отклоняет обобщённые.

go build -ldflags "\
  -X izba/internal/netx.Version=0.1.0 \
  -X izba/internal/netx.ContactURL=https://github.com/TheIIIrd/mc-izba" \
  -o izba ./cmd/izba

Кросс-компиляция:

GOOS=windows GOARCH=amd64 go build -o izba.exe ./cmd/izba
GOOS=linux   GOARCH=arm64 go build -o izba-arm64 ./cmd/izba

Команды

Команда Что делает
izba init создать izba.toml
izba up установить всё необходимое и запустить сервер
izba version показать версию

Полезные флаги up:

  • -no-start — только установить, не запускать;
  • -accept-eula — подтвердить EULA без интерактивного вопроса (для CI);
  • -force — продолжить, несмотря на блокирующие находки проверок;
  • -dir <путь> — работать с указанным каталогом проекта.

Раскладка каталогов

myserver/
  izba.toml        конфиг: чего хочет пользователь
  izba.lock        что реально установлено: версии, сборки, хеши
  server/             рабочий каталог сервера
    server.jar
    server.properties
    eula.txt
    world/
    plugins/
  java/               portable JRE, система не затрагивается
  backups/
  .izba/           кеш загрузок и временные файлы

Всё живёт внутри одной папки. PATH, реестр, systemd и домашний каталог не изменяются. Удаление сервера — это удаление папки.

Конфиг

[server]
core    = "paper"     # paper или vanilla
version = "latest"    # latest или конкретная, например 1.21.4
port    = 25565
memory  = "auto"      # auto, 6G, 4096M

online_mode = true    # аутентификация Mojang; false — любой может зайти под любым ником

[java]
path = ""             # пусто — скачать Temurin; иначе путь к своему JAVA_HOME

[runtime]
start_timeout  = "5m"
extra_jvm_args = []

[properties]
motd        = "Сервер собран с помощью izba"
max-players = "20"
difficulty  = "normal"

Неизвестный ключ в конфиге приводит к ошибке, а не к молчаливому применению значения по умолчанию: опечатка memry вместо memory будет замечена сразу.

online_mode

Отдельное поле, а не строка в [properties], потому что от него зависит, сможет ли посторонний зайти под ником администратора. Задать его в [properties] нельзя: конфиг с двумя источниками одной настройки отвергается с ошибкой.

izba init -offline создаёт конфиг с отключённой аутентификацией и выводит предупреждение.

Важная деталь: server.properties не перезаписывается после создания. Изменив online_mode в конфиге у уже существующего сервера, вы получите предупреждение о расхождении, но действовать будет значение из server.properties. Правьте оба файла.

Если online-mode=false появился в server.properties, а в izba.toml этого не заявлено, запуск останавливается: такое расхождение расценивается как регрессия безопасности, а не как опечатка.

Автоматический подбор памяти

При memory = "auto" системе оставляется четверть оперативной памяти, но не меньше 1 ГиБ и не больше 4 ГиБ. Результат ограничен сверху 12 ГиБ: за пределами примерно 32 ГиБ JVM теряет сжатые указатели, а на игровом сервере огромная куча обычно означает лишь более долгие паузы сборщика мусора.

Воспроизводимость

izba.toml описывает намерение, izba.lock фиксирует результат: точную версию игры, номер сборки Paper, релиз Temurin и контрольные суммы всех файлов. Имея оба файла, сервер можно поднять на другой машине в том же составе. Несовпадение хеша при повторной установке останавливает работу.

Безопасность

Что заложено в код, а не в договорённости:

  • Сеть. Только https и только хосты из списка, зашитого в internal/netx. Каждый редирект проверяется отдельно: разрешённый хост не может увести загрузку на посторонний.
  • Целостность. Контрольная сумма сверяется на лету при загрузке и ещё раз при взятии файла из кеша. Файл с несовпавшей суммой не остаётся на диске даже как временный.
  • Распаковка. Отвергаются пути с .., абсолютные пути, зарезервированные имена Windows, символические и жёсткие ссылки. Действуют лимиты на число файлов и суммарный распакованный объём. Распаковка идёт во временный каталог и переносится на место целиком.
  • Права. Запуск от root — блокирующая ошибка, от администратора Windows — предупреждение. Порты ниже 1024 запрещены на уровне конфига.
  • Флаги JVM. -agentlib:jdwp и -Dcom.sun.management.jmxremote в extra_jvm_args отвергаются валидацией: это готовая точка удалённого исполнения кода. Переменные JAVA_TOOL_OPTIONS и _JAVA_OPTIONS вычищаются из окружения сервера, чтобы не подменяли рассчитанные флаги.
  • Настройки сервера. По умолчанию online-mode=true, RCON и query выключены. Существующий server.properties никогда не перезаписывается, выполняется только аудит. Отключение аутентификации мимо конфига останавливает запуск.
  • Известные уязвимости. Для версий, подверженных Log4Shell (CVE-2021-44228), добавляется смягчающий флаг, а там, где его недостаточно, выдаётся предупреждение.
  • Остановка. Через консольную команду stop, чтобы мир сохранился. Принудительное завершение только по таймауту и с предупреждением.

Чего izba не делает

Не открывает порты (ни UPnP, ни правил фаервола), не устанавливает ничего в систему, не распространяет jar-файлы ядра, не защищает от DDoS и не заменяет античит.

Отдельно стоит понимать: плагин — это произвольный код с правами процесса сервера. Песочницы в Minecraft нет. Проверка источника остаётся за вами.

Источники загрузок

Что Откуда Контрольная сумма
Ваниль манифест Mojang v2 sha1
Paper Fill v3 (fill.papermc.io), только канал STABLE sha256
Java Eclipse Temurin через API Adoptium, JRE с откатом на JDK sha256

Прежний API PaperMC v2 перестал принимать новые сборки 31 декабря 2025 года и был отключён 1 июля 2026; поддержки v2 здесь нет.

Требуемая мажорная версия Java берётся из поля javaVersion в описании версии Minecraft. Для старых версий, где это поле отсутствует, используется Java 8.

Разработка

Проект использует две долгоживущие ветки: main с проверенным кодом и unstable с текущей разработкой. Релизы выпускаются только с main, сборки для проверки — из артефактов прогона Snapshot на вкладке Actions. Правила слияния описаны в CONTRIBUTING.md.

go test ./...          # тесты
go test -race ./...    # с детектором гонок
go vet ./...
gofmt -l .

Сетевые тесты работают на httptest с замоканными ответами API: реальные запросы к Mojang, PaperMC и Adoptium в тестах не выполняются.

Структура пакетов:

Пакет Ответственность
internal/paths раскладка каталогов проекта
internal/platform различия Linux, Windows и macOS; больше нигде нет runtime.GOOS
internal/netx единственная точка выхода в сеть, allowlist, проверка хешей
internal/archive безопасная распаковка zip и tar.gz
internal/resolve пожелание пользователя → конкретный артефакт
internal/config izba.toml и izba.lock
internal/install загрузка, кеш, раскладка файлов
internal/mcserver флаги JVM, server.properties, EULA, проверки, запуск
internal/cli команды

Планы

v0.2: плагины через Modrinth с разрешением зависимостей, izba add, обновление с автоматическим бэкапом и откатом, команды status и logs.

v0.3: doctor с разбором типовых проблем, автоперезапуск с защитой от crash-loop, бэкапы по расписанию с ротацией.

Дальше: Fabric, затем NeoForge; импорт модпаков .mrpack.

Безопасность

Об уязвимостях сообщайте приватно через вкладку Security этого репозитория. Границы доверия и меры, заложенные в код, описаны в SECURITY.md.

Лицензия

MIT, см. LICENSE.

About

Automated Minecraft server builder

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages