AmazonLinux2でPALWORLDサーバーを設定する

以前、AWSでPALWORLD用のサーバーを建てる方法を紹介しました。本記事ではPALWORLDサーバー内の設定を説明します。

Qiita: 最大32人 パルワールド Linux 専用サーバの建て方 (AlmaLinux)にわかりやすくまとめられていますが、Amazon Linux 2に設定する場合だと若干コマンドが違ったりしたのでパルワールドサーバーを設定した方法を公開します。

サーバーへ接続

SSMセッションマネージャを使用して接続します。

 $ aws ssm start-session --target <EC2インスタンスのID>

SteamCMDのインストール

Valve Developer Comunityを参考に設定していきます。

以下コマンドで必要なパッケージのインストールをします。

$ sudo yum install glibc.i686 libstdc++.i686

続いてSteamユーザの作成をしてパスワードを変更します。

$ sudo useradd -m steam
$ sudo passwd steam

rootユーザのままsteamcmdを起動することはセキュリティリスクがあるのでご注意ください。この手順にあるようにrootとは別のユーザで実行するようにしましょう。

Steamユーザにスイッチ します。

$ sudo -u steam -s

ホームディレクトリに移動して、作業ディレクトリを作成します。

$ cd /home/steam
$ mkdir ~/Steam && cd ~/Steam

以下コマンドでLinux用のSteamCMDをダウンロードします。

$ curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -

インストール用のスクリプトを実行します。

$ ./steamcmd.sh

プロンプトにSteam>と表示されれば成功です。
exitコマンドで一旦抜けておきます。

> exit
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;b[a]=b[a]||function(){arguments.currentScript=c.currentScript||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};c.getElementById(a)||(d=c.createElement(f),d.src=g,d.id=a,e=c.getElementsByTagName("body")[0],e.appendChild(d))})(window,document,"script","//dn.msmstatic.com/site/cardlink/bundle.js?20220329","msmaflink");msmaflink({"n":"【Amazon.co.jp限定】Elgato Stream Deck MK.2 エルガトストリームデック MK.2【15キー配列】ライブコンテンツ作成用のコントローラー 配信者向けデバイス OBS\/Twitch​\/YouTube連携 Mac\/PC対応","b":"Elgato","t":"10GBA9901-AMZ","d":"https:\/\/m.media-amazon.com","c_p":"\/images\/I","p":["\/41Z+mN0EhZL._SL500_.jpg","\/51jcKBbqHmL._SL500_.jpg","\/41w4Gq-kBCL._SL500_.jpg","\/511MgN1C6sL._SL500_.jpg","\/51cXXYBaTLL._SL500_.jpg","\/51Bc6iBQvBL._SL500_.jpg","\/51cM4PUqGJL._SL500_.jpg","\/41OqKqjjR3L._SL500_.jpg"],"u":{"u":"https:\/\/www.amazon.co.jp\/dp\/B0CDWSWLWV","t":"amazon","r_v":""},"v":"2.1","b_l":[{"id":1,"u_tx":"Amazonで見る","u_bc":"#f79256","u_url":"https:\/\/www.amazon.co.jp\/dp\/B0CDWSWLWV","a_id":2964899,"p_id":170,"pl_id":27060,"pc_id":185,"s_n":"amazon","u_so":1},{"id":2,"u_tx":"楽天市場で見る","u_bc":"#f76956","u_url":"https:\/\/search.rakuten.co.jp\/search\/mall\/%E3%80%90Amazon.co.jp%E9%99%90%E5%AE%9A%E3%80%91Elgato%20Stream%20Deck%20MK.2%20%E3%82%A8%E3%83%AB%E3%82%AC%E3%83%88%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E3%83%87%E3%83%83%E3%82%AF%20MK.2%E3%80%9015%E3%82%AD%E3%83%BC%E9%85%8D%E5%88%97%E3%80%91%E3%83%A9%E3%82%A4%E3%83%96%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E4%BD%9C%E6%88%90%E7%94%A8%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%20%E9%85%8D%E4%BF%A1%E8%80%85%E5%90%91%E3%81%91%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%20OBS%2FTwitch%E2%80%8B%2FYouTube%E9%80%A3%E6%90%BA%20Mac%2FPC%E5%AF%BE%E5%BF%9C\/","a_id":2964888,"p_id":54,"pl_id":27059,"pc_id":54,"s_n":"rakuten","u_so":2},{"id":3,"u_tx":"Yahoo!ショッピングで見る","u_bc":"#66a7ff","u_url":"https:\/\/shopping.yahoo.co.jp\/search?first=1\u0026p=%E3%80%90Amazon.co.jp%E9%99%90%E5%AE%9A%E3%80%91Elgato%20Stream%20Deck%20MK.2%20%E3%82%A8%E3%83%AB%E3%82%AC%E3%83%88%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E3%83%87%E3%83%83%E3%82%AF%20MK.2%E3%80%9015%E3%82%AD%E3%83%BC%E9%85%8D%E5%88%97%E3%80%91%E3%83%A9%E3%82%A4%E3%83%96%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E4%BD%9C%E6%88%90%E7%94%A8%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%20%E9%85%8D%E4%BF%A1%E8%80%85%E5%90%91%E3%81%91%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%20OBS%2FTwitch%E2%80%8B%2FYouTube%E9%80%A3%E6%90%BA%20Mac%2FPC%E5%AF%BE%E5%BF%9C","a_id":2964902,"p_id":1225,"pl_id":27061,"pc_id":1925,"s_n":"yahoo","u_so":3}],"eid":"SnMsF","s":"s"});

パルワールドサーバーのダウンロードと起動

ここからはパルワールドのテックガイドを参考に設定します。

下記コマンドで専用サーバーをダウンロードします。

/home/steam/Steam/steamcmd.sh +login anonymous +app_update 2394010 validate +quit

ダウンロードしたディレクトリに移動します。通常は以下にダウンロードされています。

cd ~/Steam/steamapps/common/PalServer

サーバーを起動します。

./PalServer.sh

steamclient.soに関するエラーが表示された場合

サーバー起動のコマンドを試してみると以下のエラーが表示されました。

/home/steam/.steam/sdk64/steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Sys_LoadModule failed to load: /home/steam/.steam/sdk64/steamclient.so

パルワールドのテックガイドにも次の通り案内があります。

この手順をサーバー運用後に実施するとキャラクター再作成からゲームがスタートします。 すでにプレイ中のサーバーでは実施しないことをおすすめします。

https://tech.palworldgame.com/dedicated-server-guide#windows-steamcmd

以下のコマンドで修正できるようですが、すでにプレイ中のサーバーで実施しないようご注意ください。

$ mkdir -p ~/.steam/sdk64/
$ /home/steam/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit
$ cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/

このあとサーバー起動するとエラーは出ていますが、問題なく動作しました。

$ ./PalServer.sh
Shutdown handler: initalize.
- Existing per-process limit (soft=65535, hard=65535) is enough for us (need only 65535)
Increasing per-process limit of core file size to infinity.
sh: xdg-user-dir: command not found
dlopen failed trying to load:
steamclient.so
with error:
steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Loaded '/home/steam/.steam/sdk64/steamclient.so' OK.  (First tried local 'steamclient.so')
CAppInfoCacheReadFromDiskThread took 2 milliseconds to initialize
dlmopen steamservice.so failed: steamservice.so: cannot open shared object file: No such file or directory
Setting breakpad minidump AppID = 2394010
[S_API FAIL] Tried to access Steam interface SteamUser021 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamFriends017 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface STEAMAPPS_INTERFACE_VERSION008 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamNetworkingUtils004 before SteamAPI_Init succeeded.

ポートは以下の記事でセキュリティグループで解放済みですので、このままPALWORLDサーバーに接続可能です。

PALWORLDから接続してみよう

設定したサーバーに対して、PALWORLDからアクセスしてみます。

サーバーの グローバルIP(EC2のパブリックIP):8211 を入力して、接続します!

正常に動作していれば接続できるはずです!
もし接続できない場合は接続先のIPアドレスが正しいか、また、サーバー上でなにかエラーが出ていないかを確認します。

OS起動時にパルワールドサーバーが自動起動するようにする

steamユーザである場合は一度exitして、rootユーザになっておきます。

viでサービス定義ファイルを作成します。

sudo vi /etc/systemd/system/palworld-server.service

ファイルの中身は以下の内容を設定します。

以下をコピーします。vi上でpキーを押してペーストし、下記を貼り付け、:wqと入力して書き込んで閉じることができます。

[Unit]
Description=Palworl Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target

[Service]
ExecStart=/home/palworld/Steam/palworld/PalServer.sh port=8211 players=32 -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS
LimitNOFILE=100000
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID
Restart=always
User=steam
Group=steam
TimeoutStartSec=300

[Install]
WantedBy=multi-user.target

デーモンをリロード

sudo systemctl daemon-reload

自動起動の設定

sudo systemctl enable palworld-server.service

サービスの起動

sudo systemctl start palworld-server.service

サービス状態の確認

sh-4.2$ sudo systemctl status palworld-server.service
● palworld-server.service - Palworl Server
   Loaded: loaded (/etc/systemd/system/palworld-server.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2024-01-24 17:44:31 UTC; 16s ago
 Main PID: 1623 (PalServer.sh)
   CGroup: /system.slice/palworld-server.service
           ├─1623 /bin/sh /home/steam/Steam/steamapps/common/PalServer/PalServer.sh port=8211 players=32 -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS
           └─1631 /home/steam/Steam/steamapps/common/PalServer/Pal/Binaries/Linux/PalServer-Linux-Test Pal port=8211 players=32 -useperfthreads -NoAsyncLoadingThrea...

Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: steamclient.so
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: with error:
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: steamclient.so: cannot open shared object file: No such file or directory
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: [S_API] SteamAPI_Init(): Loaded '/home/steam/.steam/sdk64/steamclient.so' OK. ...t.so')
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: CAppInfoCacheReadFromDiskThread took 2 milliseconds to initialize
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: Setting breakpad minidump AppID = 2394010
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: [S_API FAIL] Tried to access Steam interface SteamUser021 before SteamAPI_Init...eeded.
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: [S_API FAIL] Tried to access Steam interface SteamFriends017 before SteamAPI_I...eeded.
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: [S_API FAIL] Tried to access Steam interface STEAMAPPS_INTERFACE_VERSION008 be...eeded.
Jan 24 17:44:32 ip-10-1-0-4.ap-northeast-1.compute.internal PalServer.sh[1623]: [S_API FAIL] Tried to access Steam interface SteamNetworkingUtils004 before St...eeded.
Hint: Some lines were ellipsized, use -l to show in full.

active (running) となっていますね!起動できたようです

Qiita: 最大32人 パルワールド Linux 専用サーバの建て方 (AlmaLinux)にはこの他自動アップデートの設定や、セーブデータのバックアップ方法など、有益な情報がまとまっていますのでぜひご一読ください!

ゲームバランスを調整する

ここからはパルワールドテックガイドにある内容を今回の記事向けに説明します。

Steamユーザにスイッチ します。

$ sudo -u steam -s

今回はLinuxを使っていますので、SteamCMDの設定ファイルは以下にあります。サーバーを一度起動しないと生成されない点に注意です。

~/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

デフォルト設定は以下にあります。

~/Steam/steamapps/common/PalServer/DefaultPalWorldSettings.ini

パルワールドのテックガイドにはデフォルト設定を設定ファイルにコピーしたのち、必要な設定のみ変更することをおすすめされていますので、従います。デフォルト設定に戻したい場合はコピーして上書きします。

$ cp -ip ~/Steam/steamapps/common/PalServer/DefaultPalWorldSettings.ini ~/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

viエディタ等でコピー先のファイルの内容を変更します。

$ vi ~/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

ファイル内に設定値できる値の説明は以下のとおりです。

パラメータ説明
Difficultyゲームの難易度
DayTimeSpeedRate昼の経過速度
NightTimeSpeedRate夜の経過速度
ExpRate経験値の入手倍率
PalCaptureRate捕獲確率の倍率
PalSpawnNumRateパル出現倍率 ※パフォーマンスに影響します
PalDamageRateAttackパルの与えるダメージ倍率
PalDamageRateDefenseパルの受けるダメージ倍率
PlayerDamageRateAttackプレイヤーの与えるダメージ倍率
PlayerDamageRateDefenseプレイヤーの受けるダメージ倍率
PlayerStomachDecreaceRateプレイヤーの満腹度減少倍率
PlayerStaminaDecreaceRateプレイヤーのスタミナ減少倍率
PlayerAutoHPRegeneRateプレイヤーのHP自然回復倍率
PlayerAutoHpRegeneRateInSleepプレイヤーの睡眠時HP回復倍率
PalStomachDecreaceRateパルの満腹度現象倍率
PalStaminaDecreaceRateパルのスタミナ減少倍率
PalAutoHPRegeneRateパルのHP自然回復倍率
PalAutoHpRegeneRateInSleepパルの睡眠時HP回復倍率(パルボックス内)
BuildObjectDamageRate建築物に対するダメージ倍率
BuildObjectDeteriorationDamageRate建築物の劣化速度倍率
CollectionDropRate採集アイテムの入手量倍率
CollectionObjectHpRate採集オブジェクトのHP倍率
CollectionObjectRespawnSpeedRate採集オブジェクトのリスポーン間隔
EnemyDropItemRateドロップアイテム量の倍率
DeathPenaltyデスペナルティ None : ロスト無し, Item : 装備品以外のアイテム, ItemAndEquipment : すべての装備品とアイテム, All : 全ての装備品と装備品と手持ちパル
GuildPlayerMaxNumギルドの最大人数
PalEggDefaultHatchingTimeキョダイタマゴの孵化にかかる時間(h)
ServerPlayerMaxNumサーバーに参加できる最大人数
ServerNameサーバー名
ServerDescriptionサーバー説明
AdminPasswordAdminPassword
ServerPasswordサーバーパスワード
PublicPort外部公開ポート
PublicIP外部公開IP
RCONEnabledRCONの有効化
RCONPortRCONで使用するポート
ゲームバランスの設定パラメータ

将来のアップデート用に予約されたパラメータ(現時点では未実装)も存在しています。

サーバーを再起動します。

sudo systemctl restart palworld-server.service

再度接続して、設定が反映されたことを確認します。

まとめ

本記事ではAmazon Linux 2をパルワールドサーバーとして設定する方法を説明しました。

個人的には意外と簡単にインストールできる印象でした。

専用サーバーでは32人の大人数でプレイできたり、ゲーム設定を好みで調整できるなど、メリットがありますのでぜひサーバー構築にチャレンジしてみてください!

  • B!