鯖ドリル

※本記事にはアフィリエイト広告(PR)が含まれています

Palworld

Oracle A1(ARM)にPalworld専用サーバーをbox64で立てる手順

Oracle Cloud無料枠のARMサーバーに、box64経由でPalworld Dedicated Serverを立てる手順。box64とARM64版SDL3のビルド、DepotDownloaderでの取得、UDP 8211の2層開放、systemd常駐までを解説。

#Palworld#Oracle Cloud#ARM#box64#Linux#ゲームサーバー
目次

前提:公式にサポートされた構成ではありません(PalworldのサーバーはARM向けに配布されていないため、box64という変換レイヤーを挟みます)。Palworld側のアップデートで動かなくなる可能性はあります。

Oracle Cloudの無料枠(Ampere A1)に、Palworld Dedicated Serverをbox64で直接起動して立てる手順です。実際にこの構成で3週間プレイできています。

ARMのA1では、PalServerのx86_64バイナリをそのまま実行できません。そこでbox64(x86_64 LinuxバイナリをARM64で動かす変換レイヤー)を使います。

結果だけ先に知りたい方へ

この記事は構築手順です。実際に遊んだ結果(3週間プレイ・何人まで実用か・ラグの傾向)は別記事にまとめました。

無料のARMサーバーでPalworldを3週間遊んだ結果|天井はメモリではなくCPUでした

要点は、3〜4人なら無料枠で実用。ただし天井はメモリではなくCPUでした。

今回の構成

項目内容
インスタンスOracle Cloud Ampere A1
割り当て4 OCPU / 24GB
OSUbuntu 24.04系を想定
用途Palworld Dedicated Server専用
実行方式box64経由でPalServerをホストOS上から直接起動
開けるポートUDP 8211(OCI側とOS側の2層)

SteamCMDはARMで素直に動きません。そこでゲームファイルの取得には、ARM64版のDepotDownloaderを使います。box64はサーバー本体の実行にだけ使います。

実施する全体の流れ

最初から常駐サービスにはしません。ダウンロード → 手動起動 → 待受 → 接続 → 保存 → systemd化の順で進めます。

  1. A1を4 OCPU / 24GB・Palworld専用へ切り替える
  2. OCIのSecurity List(またはNSG)で UDP 8211 を許可する
  3. box64をソースからビルドして導入する
  4. SDL3をARM64向けにソースビルドする
  5. ARM64版DepotDownloaderでサーバー本体(App ID: 2394010)を取得する
  6. 最小の起動引数で、box64経由の手動起動を試す
  7. UDP 8211の待受を確認し、Steamクライアントから接続する
  8. 保存・再起動でワールドが戻るか試す
  9. 成功したらsystemd化する

確認は4段階に分けます——ARMでの検証は起動ログだけでは判断できません。一つ前が通らなければ次へ進まないのが失敗を切り分けるコツです。

  1. プロセスが起動し続けること
  2. UDP 8211を待ち受けること
  3. Steamクライアントから接続できること
  4. 保存 → 再起動でワールドが戻ること

以下のコマンドは、Ubuntu 24.04の ubuntu ユーザーで実行する前提です。<公開IP> は実際のパブリックIPに置き換えてください。

1. 依存パッケージと作業ディレクトリ

sudo apt update
sudo apt install -y \
  git build-essential cmake pkg-config python3 \
  curl ca-certificates unzip tmux htop net-tools
mkdir -p ~/palworld/{server,tools,logs}

ゲーム用のユーザーを別に作ることもできますが、最初はSSHで使っている ubuntu のままにしておきましょう。権限の問題を増やさないためです。

2. box64は既存記事の手順でソースビルドする

apt版を使わず、ValheimをOracle A1 + box64で動かした記録を参照して、公式リポジトリからソースビルドします。

導入後に、次だけ確認してから次の段階へ進みます。

box64 --version

ここでバージョンが表示できない場合は、上記までの何かしらが間違えてます。

3. SDL3をARM64向けにソースビルドする

Palworldのサーバーは libSDL3.so.0 を使います。Ubuntu 24.04には入っていません。

起動時に Error initializing native libSDL3.so.0 と出たら、ARM64版のSDL3をビルドします。x86_64版では動きません。

cd ~/tools
git clone --depth 1 https://github.com/libsdl-org/SDL.git SDL3
cmake -S SDL3 -B SDL3/build \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_SHARED_LIBS=ON \
  -DSDL_TESTS=OFF \
  -DSDL_UNIX_CONSOLE_BUILD=ON
cmake --build SDL3/build -j"$(nproc)"
sudo cmake --install SDL3/build
sudo ldconfig

ldconfig -p | grep 'libSDL3.so.0'

-DSDL_UNIX_CONSOLE_BUILD=ON は、画面のないサーバー向けの指定です。libSDL3.so.0/usr/local/lib/ 側に表示されれば完了です。

4. ARM64版DepotDownloaderでPalworld Dedicated Serverを取得する

SteamCMDはx86_64向けなので、まずはARM64ネイティブで動くDepotDownloaderを使います。専用サーバーのApp IDは 2394010 です。

cd ~/palworld/tools
curl -fL \
  https://github.com/SteamRE/DepotDownloader/releases/latest/download/DepotDownloader-linux-arm64.zip \
  -o depotdownloader.zip
unzip -q depotdownloader.zip -d depotdownloader
chmod +x depotdownloader/DepotDownloader

~/palworld/tools/depotdownloader/DepotDownloader \
  -app 2394010 -os linux -osarch 64 \
  -dir ~/palworld/server

更新時は、同じコマンドに -validate を加えます。ダウンロードが終わったら、起動スクリプト PalServer.sh があることを確認します。

cd ~/palworld/server
ls -l PalServer.sh
chmod +x PalServer.sh

つまずきポイントls -l の先頭が -rw-r--r-- なら、実行権限がありません。DepotDownloader経由では実行ビットが付かないことがあります。chmod +x を忘れると起動しません。

5. まずは手動で起動する

最初は引数を盛りません。 性能系オプション、-publiclobby、RCONは付けずに始めます。公式ガイドでもv1.0以降は、-useperfthreads などを指定しないほうが改善する場合があるとされています。

cd ~/palworld/server
box64 ./PalServer.sh \
  -port=8211 \
  -players=4 \
  -logformat=text \
  2>&1 | tee ~/palworld/logs/first-start-$(date +%F-%H%M%S).log

このターミナルは開いたままにします。プロセスがすぐ終了したら、first-start-*.log の最初の errorfailedsegmentation を確認します。ここではまだsystemdを使いません。

6. UDP 8211の待受とクライアント接続を確認する

別のSSH接続で、待受を確認します。

sudo ss -lunp | grep ':8211'
pgrep -af 'PalServer|box64'

待受が表示されたら、OCIのSecurity List(またはNSG)に UDP / 8211 / source 0.0.0.0/0 の受信ルールを追加します。OS側でも許可します。

sudo iptables -I INPUT 1 -p udp --dport 8211 -j ACCEPT
sudo netfilter-persistent save

つまずきポイントポートは2層あります。当方はOCI側を設定済みでも、OS側のiptablesを開けておらず接続できませんでしたss で待受が見えるのに繋がらないときは、まずここを疑ってください。

クライアントからは <公開IP>:8211 へ直接接続します。サーバー一覧に載せる -publiclobby は、直接接続が成功してから足すオプションです。公開する場合だけ、次のように指定します。

box64 ./PalServer.sh \
  -port=8211 -players=4 -logformat=text \
  -publiclobby -publicip='<公開IP>' -publicport=8211

7. 保存設定を作り、再起動テストをする

初回起動で設定ディレクトリが作られます。パスワードやサーバー名は運用編で設定します。起動引数に書くと ps やログから見えるため、ここでは入れません。

ワールド内に目印を残したら、Ctrl+C で終了します。保存先と更新日時を確認し、同じコマンドで立ち上げ直します。

find ~/palworld/server/Pal/Saved/SaveGames -type f \
  -printf '%TY-%Tm-%Td %TT %s %p\n' | sort

同じワールド・キャラクター・目印が復元されたら、保存と再起動の段階は成功です。

8. SSHを閉じても動かし続ける:systemd化

手動起動・接続・保存復元が成功してから、サービス定義を作ります。

sudo tee /etc/systemd/system/palworld.service > /dev/null <<'EOF'
[Unit]
Description=Palworld Dedicated Server via box64
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/palworld/server
ExecStart=/usr/local/bin/box64 /home/ubuntu/palworld/server/PalServer.sh -port=8211 -players=4 -logformat=text
Restart=on-failure
RestartSec=10
KillSignal=SIGINT
TimeoutStopSec=120
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now palworld
sudo systemctl status palworld --no-pager

起動直後の status はbox64の親プロセスだけが表示されることがあります。30秒ほど待って、ゲーム本体とUDP待受を確認します。

sleep 30
pgrep -af 'PalServer|box64'
sudo ss -lunp | grep ':8211'

[BOX64] Error: Reading elf header of .../PalServer.sh は、box64がシェルスクリプトをbashで実行する際の表示です。Errorと出ますが無視してかまいません。

成功したときは、Game version の十数秒後に次の行が出ます。これが起動できた合図です。

起動成功ログ。Game versionの表示に続いて Running Palworld dedicated server on :8211 が出ている

ここまで来れば、クライアントから <公開IP>:8211 へ接続できます。

Palworldクライアントから接続して、ワールド内で行動できている画面

systemctl enable により、SSH接続を切ってもサーバーは動き続け、OS再起動後も自動起動します。日常運用で使うコマンドは次のとおりです。

# 起動
sudo systemctl start palworld
#停止
sudo systemctl stop palworld
#再起動
sudo systemctl restart palworld
#状態
sudo systemctl status palworld --no-pager
#ログ追跡
journalctl -u palworld -f

停止前には、可能ならゲーム内で/Saveを実行してから sudo systemctl stop palworld を使ったほうが安全だと思います。

status は今の状態を1回だけ表示します。journalctl -f はログを流し続けます。

普段は status で十分です。journalctl は問題を調べるときだけ使い、Ctrl+C で抜けます。

うまくいっていれば、status はこう表示されます。

systemctl statusの出力。active (running)が緑で表示され、CGroupにPalServer-Linux-Shippingが並んでいる

見るところは3つです。

  • Active: active (running) が緑になっている
  • enabled = OSを再起動しても自動で立ち上がる
  • CGroupのツリーに PalServer-Linux-Shipping がある = box64の親プロセスだけでなく、ゲーム本体まで起動できている

まとめ

  • ARMではPalServerをそのまま動かせない。box64とARM64版SDL3を用意する
  • 取得はARM64版DepotDownloaderchmod +x を忘れると起動しない
  • UDP 8211はOCIとOSの2層で開ける。片方だけでは接続できない

立てたあとの設定・参加方法・更新は → Palworld専用サーバーの運用

Linuxを触らずにPalworldサーバーを立てたい場合は、テンプレートから作れるConoHa for GAMEのようなVPSが確実です