パルワールドサーバーの構築とデーモン化

概要

本記事は「steamdmd を初めて使うよ」という方に向けて送るメモです

os Ubuntu 20.04.2 LTS
palserv-version 1.3.0
install-dir /home/steam/dedicated-server/palworld
unit-file /etc/systemd/system/palworld.service
Ubuntu 20.04.2 LTS で
パルワールドサーバー を構築します

インストール先は
/home/steam/dedicated-server/palworld とします

インストール後は
デーモン化(palworld.service)して 起動 + 停止 できるようにします

注意

For security reasons, it is recommended that you create a new Steam account just for your dedicated servers.

steamcmdroot以外のユーザ で実行する必要があります

なので steamcmd 自体のインストール は rootユーザ で行い、
パルワールドサーバー インストール + 実行 は steamユーザ で実行します

作業 ユーザ
steamcmd 自体のインストール root
steamcmd の実行 steam
PalServer.sh の実行 steam
palworld.service の実行 root + steam

↑↑↑前置きはここまでです↑↑↑

steamcmd のインストール

まず steamcmd をインストールします

# add architecture
add-apt-repository multiverse
dpkg --add-architecture i386
dpkg --print-foreign-architectures
apt update -y

# install steamcmd
echo steam steam/question select "I AGREE" | debconf-set-selections
echo steam steam/license note '' | debconf-set-selections
debconf-show steam
apt install steamcmd
# debconf-set-selectionsについて

対話形式で「ライセンスに同意しますか?」って聞かれるので、
debconf-set-selections 非対話で、事前に同意しています(一度読んでみてください)

パルワールドサーバー のインストール

先に steamユーザを作成 した後に、
/home/steam/dedicated-server/palworld にインストールします

useradd -m steam -s /bin/bash
su - steam

mkdir -p ~/dedicated-server/palworld
steamcmd +login anonymous \
  +force_install_dir ~/dedicated-server/palworld/ \
  +app_update 2394010 validate +quit

cd /home/steam/dedicated-server/palworld/
ls -al
  • インストール先は force_install_dir で指定できます
    • 無指定だと /home/steam/Steam/steamapps/common/PalServer に入る

パルワールドサーバー のインストール

パルワールドサーバー を一度起動してみます
(起動するのが確認できたら Ctrl+C で終了しても大丈夫です)

lsof -i:8211
./PalServer.sh
...
^C

問題なくインストールできてたら、
この時点で <サーバIP>:8821 にログインできます

何やらエラーが出るかもしれませんが、
`steamclient.so: cannot open shared object file`
って書いてたら、問題ないので、一旦無視します

# 起動ログとエラーはこんな感じです

steam@game-server:~/.steam/SteamApps/common/PalServer$ ./PalServer.sh
Shutdown handler: initalize.
Increasing per-process limit of core file size to infinity.
dlopen failed trying to load:
steamclient.so
with error:
steamclient.so: cannot open shared object file: No such file or directory
dlopen failed trying to load:
/home/steam/.steam/sdk64/steamclient.so
with error:
/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
dlopen failed trying to load:
steamclient.so
with error:
steamclient.so: cannot open shared object file: No such file or directory
dlopen failed trying to load:
/home/steam/.steam/sdk64/steamclient.so  # <= こんなのが出ます
...

^C
FUnixPlatformMisc::RequestExitWithStatus
FUnixPlatformMisc::RequestExit
Exiting abnormally (error code: 130)
Shutdown handler: cleanup.

エラーの対処

現在(2024/01/27)、起動時に上記エラーがでます

放っておいても問題なさそうですが、
毎度エラーが出力されるのも気持ち悪いので対処しておきます
(.steam/sdk64/ に シンボリックリンクを作成します)

mkdir -p ~/dedicated-server/sdk64
ls -al /home/steam/dedicated-server/palworld/

mkdir -p ~/.steam/sdk64/
ln -s ~/dedicated-server/palworld/linux64/steamclient.so ~/.steam/sdk64/

lsof -i:8211
./PalServer.sh
...
^C

エラーについて

steamcmd +login anonymous +app_update 1007 +quit
steamclient.so 単体を入手して、リンクを貼ってみましたが、
~/dedicated-server/palworld/steamclient.so にあるものと同じなので、
同じエラーが出続ける結果となりました

steamcmd +login anonymous +app_update 1007 +quit で入る
steamclient.so は 32bit 用のものみたいです

steam@game-server:~/dedicated-server/palworld$ ls -al
total 44156
drwxrwxr-x 6 steam steam     4096 Jan 28 22:41 .
drwxrwxr-x 4 steam steam     4096 Jan 28 22:55 ..
-rwxrwxr-x 1 steam steam     1974 Jan 28 22:40 DefaultPalWorldSettings.ini
drwxrwxr-x 7 steam steam     4096 Jan 28 22:45 Engine
-rwxrwxr-x 1 steam steam      654 Jan 28 22:40 Manifest_DebugFiles_Linux.txt
-rwxrwxr-x 1 steam steam     3027 Jan 28 22:40 Manifest_NonUFSFiles_Linux.txt
-rwxrwxr-x 1 steam steam  7506646 Jan 28 22:40 Manifest_UFSFiles_Linux.txt
drwxrwxr-x 7 steam steam     4096 Jan 28 22:45 Pal
-rwxrwxr-x 1 steam steam      252 Jan 28 22:40 PalServer.sh
drwxrwxr-x 2 steam steam     4096 Jan 28 22:41 linux64
drwxrwxr-x 4 steam steam     4096 Jan 28 22:41 steamapps
-rwxrwxr-x 1 steam steam 37665020 Jan 28 22:40 steamclient.so  # <= こっちじゃなくて

steam@game-server:~/dedicated-server/palworld$ ls -al linux64/
total 35284
drwxrwxr-x 2 steam steam     4096 Jan 28 22:41 .
drwxrwxr-x 6 steam steam     4096 Jan 28 22:41 ..
-rwxrwxr-x 1 steam steam 36116272 Jan 28 22:40 steamclient.so  # <= こっちです

steam@game-server:~/dedicated-server/palworld$ sha1sum linux64/steamclient.so steamclient.so
d86a5dc086a154728ac47be63bd537784b016ade  linux64/steamclient.so
8247a65ba2e8552216ef1b0b1287739c04032761  steamclient.so

# steamcmd +login anonymous +app_update 1007 +quit で入れた steamclient.so は
# 8247a65ba2e8552216ef1b0b1287739c04032761 のハッシュ値になってました

パルワールドサーバー のデーモン化

rootユーザで /etc/systemd/system/palworld.service を作成して、
パルワールドサーバを systemctl で起動できるようにします

# rootユーザ で作成
cat << 'EOF' > /etc/systemd/system/palworld.service
[Unit]
Description=Palworld Dedicated Server
After=network-online.target

[Service]
Type=simple
LimitNOFILE=100000
User=steam
Group=steam

ExecStart=/home/steam/dedicated-server/palworld/PalServer.sh port=8211 players=32 -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS
ExecStop=/bin/kill -s INT $MAINPID

Restart=on-failure
RestartSec=30
TimeoutSec=300

[Install]
WantedBy=multi-user.target
EOF

# rootユーザ で起動
systemctl start palworld
systemctl status palworld

steam ユーザでもデーモンを操作できるようにする

steam ユーザで palworld.service を操作できるようにします

# rootユーザ で作成
tmp=$(mktemp)
cat << 'EOF' > $tmp
steam ALL=(root) NOPASSWD: /bin/systemctl status palworld, /bin/systemctl start palworld, /bin/systemctl stop palworld, /bin/systemctl restart palworld
steam ALL=(root) NOPASSWD: /bin/systemctl status palworld.service, /bin/systemctl start palworld.service, /bin/systemctl stop palworld.service, /bin/systemctl restart palworld.service
EOF

# 書式チェック
visudo -cf $tmp && mv $tmp /etc/sudoers.d/steam

# steamユーザ で停止,起動,再起動
sudo systemctl stop palworld
sudo systemctl start palworld
sudo systemctl restart palworld
/etc/sudoers.d/steam を作成し、
palworld.service の 起動,停止,再起動 ができるようにしています

~/.config/systemd/user/ に ユニットファイルを作成して、
一般ユーザで起動する方法もあるっぽいですが、
root で デーモンを操作することが多そうなので、この方式にしてみました

その他の設定

  • ゲームバランスを調整ってどうするの?
  • 新しいバージョンが出たけど、アップデートってどうするの?

のやり方は、別記事にまとめました

それでは、よいパルワールドライフを!
https://store.steampowered.com/app/1623730/Palworld/?l=japanese

参考

  • パルワールド テックガイド for v0.1.2.0
    • https://tech.palworldgame.com/dedicated-server-guide
  • Steam Application IDs
    • https://developer.valvesoftware.com/wiki/Steam_Application_IDs
  • SteamCMD > Linux
    • https://developer.valvesoftware.com/wiki/SteamCMD#Linux

コメント

タイトルとURLをコピーしました