Factorio Руководство

Обновление сервера Factorio с возможностью отката

Сохраните старую версию, мир и моды Factorio, испытайте обновление на копии и подготовьте рабочий путь отката.

Обновление сервера Factorio с возможностью отката

Безопасное обновление Factorio начинается с рабочего старого окружения, которое можно восстановить. Сохраните прежний бинарник, нетронутый мир, точные версии модов и настройки до первого открытия фабрики новой сборкой. Последующая замена бинарника не отменяет изменения, уже записанные в сохранение.

Порядок рассчитан на существующий headless-сервер Factorio 2.x, установленный напрямую на Ubuntu 24.04 по нашему руководству: служба factorio, программа /opt/factorio, рабочие данные /srv/factorio. У контейнеров и управляемых экземпляров другой механизм развёртывания. Сохраните те же границы восстановления средствами своей системы, не перенося эти пути буквально.

Выберите точную целевую версию#

Запишите текущие сборки сервера и клиентов, наличие дополнения, включённые версии модов и startup-настройки. Затем выберите полную целевую версию и проверьте совместимость нужных модов. «Последняя» — меняющийся адрес загрузки, а не воспроизводимая спецификация обновления.

Страница загрузки Wube разделяет stable и experimental. Переход между ветками нужно репетировать отдельно: в анонсе экспериментальной Factorio 2.1 прямо указано, что обновлённые сохранения и чертежи нельзя вернуть в 2.0. До смены ветки на тестовом клиенте сохраните также его библиотеку чертежей и пользовательские данные.

Заранее получите точные старый и новый установочные архивы Wube, сохранив названия релизов. Сверьте загрузки с доступными официальными контрольными суммами. Отдельно запишите SHA-256 файлов своего набора восстановления. Вычисленный локально хеш фиксирует идентичность файла; подлинность он подтверждает только при сравнении с доверенным значением.

Повторная установка той же версии не доказывает обновление. В приёмке должны быть разные зафиксированные номера старой и новой сборок и действительно запущенный новый бинарник.

Старое окружение сохраняется до проверки нового. Стрелки обратного преобразования обновлённого сохранения здесь нет.

Зафиксируйте полный набор восстановления#

Назначьте остановку и сообщите игрокам, до какого момента попадёт прогресс. Сначала проверьте действующую службу:

bash
sudo systemctl cat factorio
/opt/factorio/bin/x64/factorio --version
sudo systemctl stop factorio
sudo systemctl is-active factorio
sudo journalctl -u factorio -n 100 --no-pager

После остановки ожидается неактивное состояние. Продолжайте, когда журнал подтверждает штатное завершение и сохранение без принудительного убийства процесса и ошибок диска. Если остановка не удалась, сначала разберитесь с причиной: нельзя архивировать каталог, который процесс продолжает менять.

Для указанной структуры сохраните программу и рабочие данные в уникальном приватном каталоге:

bash
(
set -e
sudo install -d -o root -g root -m 700 /var/backups/factorio
factorio_backup=$(sudo mktemp -d /var/backups/factorio/pre-update.XXXXXX)
sudo tar -czf "$factorio_backup/environment.tar.gz" \
  -C / opt/factorio srv/factorio
sudo chmod 600 "$factorio_backup/environment.tar.gz"
sudo tar -tzf "$factorio_backup/environment.tar.gz" >/dev/null
sudo sha256sum "$factorio_backup/environment.tar.gz"
printf '%s\n' "$factorio_backup"
)

Блок останавливается при ошибке и выводит путь к каталогу копии. Продолжайте только после успешного завершения; приватно запишите путь и хеш. Архив предполагает, что реальные данные находятся внутри названных каталогов. Внешние конфиги, содержимое целей символических ссылок и отдельно подключённые хранилища включите дополнительно. Сохраните unit, drop-in-файлы, учётную запись службы и требования к владельцам. В настройках и рабочих данных могут быть секреты; передавайте копию за пределы сервера защищённым способом.

Успешный просмотр архива означает только то, что он читается. Проверьте распаковку в отдельное место, владельцев, ожидаемые имена сохранений и наличие старого установщика. Только после этого считайте набор пригодным для восстановления.

Отрепетируйте обновление на отдельной копии#

Распакуйте целевую программу в другой каталог. Подготовьте отдельный рабочий каталог с копией мира, выбранными ZIP-версиями модов, mod-list.json, mod-settings.dat и конфигурацией. Не смешивайте его с продакшеном. При изменении окружения миграции модов способны преобразовать состояние мира. Удаление проблемного мода ради успешной загрузки — уже другая миграция.

В тестовом конфиге направьте write-data в отдельный рабочий каталог, а read-data — в новую установку. Проверьте также скрипты запуска, абсолютные пути сохранений и символические ссылки. Укажите явно --config, --mod-directory и --start-server SAVE из справочника параметров. Выбор конкретной копии мира исключает случайную загрузку другой фабрики через поиск последнего сохранения.

Предпочтительна отдельная тестовая машина. На общем хосте выберите незанятые игровые и RCON-порты, ограничьте доступ и выключите public/LAN visibility в скопированных настройках. Не занимайте порты продакшена и не используйте его рабочий каталог. Не публикуйте токены из копии конфигурации вместе с журналом репетиции.

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

Переключитесь со свежей точки остановки#

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

Осознанно измените выбранные бинарник и пути данных в существующем unit. Если определение службы изменилось, перечитайте конфигурацию systemd, затем проверьте работающий процесс, журнал запуска и выбранный мир. Проверьте фактический UDP-порт игры, вход клиента с нужной версией, сохранение, перезапуск и повторное подключение. Запишите точные номера старой и новой сборок.

Не совмещайте это окно с посторонним обновлением ОС и экспериментальными оптимизациями. Чем меньше одновременных изменений, тем проще понять причину неудачной приёмки.

Перед запуском проверьте sudo systemctl show factorio -p ExecStart: эффективную команду могут переопределять drop-in-файлы, включая selected-save.conf из руководства по выбору мира. Измените именно тот конфиг, который задаёт фактические пути.

Верните старое окружение при неудачной проверке#

Остановите новый экземпляр, отдельно сохранив его журналы и данные. Верните точную старую программу, нетронутые рабочие данные, моды, настройки и конфигурацию службы. Проверьте владельцев файлов. При первом старте явно выберите сохранение до обновления. Новые миры держите вне каталогов, которые просматривает --start-server-load-latest.

Для очень старой фабрики важен и справочник установки: движение вперёд иногда требует промежуточных релизов. Это не механизм произвольного отката. Если остался только преобразованный мир, не меняйте его единственную копию: ищите поддерживаемое исправление в новой версии или другую старую резервную копию.

Если поддерживаемые экземпляры обслуживаются через Nexardo на вашей Linux-инфраструктуре, храните отдельный набор восстановления для каждой фабрики. Кнопки панели не доказывают совместимость мира и не подключают эту ручную systemd-установку автоматически.

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