0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Minecraft Bedrock Dedicated Server (BDS) を安全にアップグレードするためのPythonスクリプト

Posted at

よくわからんツールよりなにしてるか分かる自分でvibeしたスクリプトの方が良い屋ってことに落ち着いた例。

⏺ bedrock_server_upgrade.py の解説

  Minecraft Bedrock Dedicated Server (BDS) を安全にアップグレードするためのPythonスクリプトです。

  概要

  このスクリプトは以下の手順でサーバーをアップグレードします:

  1. 事前チェック - サーバー停止確認、ディスク容量確認
  2. ZIPファイル検証 - 新しいサーバーZIPの整合性確認
  3. バックアップ作成 - 現在のサーバーをZIP化
  4. 展開 - 新サーバーを一時ディレクトリに展開
  5. データ移行 - ワールドデータ・設定ファイルをコピー
  6. スワップ - 旧サーバー→バックアップ、新サーバー→元の場所に移動

  主要な安全機能

  | 機能         | 説明                  |
  |------------|---------------------|
  | 非破壊バックアップ  | スワップ前にZIPバックアップを作成  |
  | 一時ディレクトリ方式 | 失敗時も元のサーバーは無傷       |
  | 自動ロールバック   | スワップ失敗時に元に戻す試行      |
  | バージョンチェック  | ダウングレード・同バージョン更新を防止 |
  | dry-runモード | 実際の変更なしでシミュレーション    |

  使い方

  # ドライラン(確認用)
  uv run bedrock_server_upgrade.py ./worldxyz --bedrock-server-zip bedrock-server-1.21.0.zip --dry-run

  # 実行(確認プロンプトあり)
  uv run bedrock_server_upgrade.py ./worldxyz --bedrock-server-zip bedrock-server-1.21.0.zip

  # 自動実行(確認なし)
  uv run bedrock_server_upgrade.py ./worldxyz --bedrock-server-zip bedrock-server-1.21.0.zip -y

  デフォルトでコピーされるファイル

  DEFAULT_COPY_ITEMS = [
      "worlds",              # ワールドデータ
      "server.properties",   # サーバー設定
      "permissions.json",    # 権限設定
      "allowlist.json",      # 許可リスト
      "whitelist.json",      # 旧ホワイトリスト
      "config",              # カスタム設定
      "packetlimitconfig.json",
  ]

  追加でコピーしたいファイルは bedrock_server_upgrade_config.yaml の copy リストに追加可能です。

  クラス構造

  BedrockServerUpgrader

  | メソッド                      | 役割                    |
  |---------------------------|-----------------------|
  | check_disk_space()        | 必要容量(サーバーサイズ×2.5倍)を確認 |
  | check_server_is_stopped() | psutilでプロセス確認         |
  | validate_server_zip()     | ZIPファイルの整合性チェック       |
  | create_backup_zip()       | 現サーバーのZIPバックアップ作成     |
  | extract_to_temp()         | 新サーバーを一時ディレクトリに展開     |
  | copy_files_to_temp()      | ワールド・設定を一時ディレクトリにコピー  |
  | swap_servers()            | アトミックなサーバー入れ替え        |
  | run()                     | 全体のオーケストレーション         |

  設計のポイント

  - アトミック性: 最後のswap_servers()まで元のサーバーは変更されない
  - 復旧性: スワップ失敗時は自動でリストア試行、失敗してもバックアップZIPから手動復旧可能
  - uv対応: PEP 723形式で依存関係を記述(psutil, pyyaml, packaging)


https://gist.github.com/takeru/b225d72185415edb3c3e876e9dad6ecd


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?