概要
本記事は「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.
steamcmd を root以外のユーザ で実行する必要があります
なので 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
- SteamCMD – Valve Developer Community
# 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
コメント