Автоматический сборщик сервера 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 будет замечена сразу.
Отдельное поле, а не строка в [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, чтобы мир сохранился. Принудительное завершение только по таймауту и с предупреждением.
Не открывает порты (ни 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.