estar-lab.net趣味工作日記プライバシーポリシー

Xubuntu(Ubuntu)でUnturnedの身内向けサーバを建てる


2021年02月12日 Tweet
作成日: 2021-02-12, 更新日: 2021-10-03

こんにちは、管理人です。
管理人はよく身内で遊ぶためにゲームのサーバを建てるのですが、今回は備忘録の意味合いも込めてUnturnedのサーバを建て方を書いていきます。

今回サーバを構築する環境は
・Ubuntu(Xubuntu) 20.04.1 LTS
・GUI環境
といった感じで、Linuxのデスクトップ環境でゲームを遊びつつサーバも建てたいという状況を想定しています。(そういう使い方をしている人が多いのかは謎ですが・・・)

目次

注意点

解説に入る前にいくつか注意点です。
前置きの段階でも言いましたが管理人の環境は
・Ubuntu(Xubuntu) 64bit 20.04.1 LTS
・GUI環境
といった感じです。やることは基本的に同じなのでUbuntu以外やCUI環境でも参考にはなると思います。(ただしコマンドはOSに合わせて適宜読み替えてください。)

そして、今回は身内向けのサーバ構築をメインに扱っています。
構築したサーバを誰でもアクセス出来るよう公開することがある場合はセキュリティ上問題ないかなど各自で調べた上で自己責任でお願いいたします。

SteamCMDの準備

それではさっそくサーバの構築の準備をしていきましょう。
UnturnedのサーバをインストールするにはSteamCMDを使用します。SteamCMDの細かい解説についてはこちらのWiki[https://developer.valvesoftware.com/wiki/SteamCMD]を参照してください。(この記事も基本的にはこのWikiの流れに沿っています。)

SteamCMDはaptからインストール出来るので64bit版のOSをお使いの方は次の#1のコマンドを入力してください。32bit版の方は#2のコマンドを入力してください(ただし32bit環境は未検証です)。
※Wikiではこの段階で安全のため専用のユーザを追加していますが、今回は身内向けということでその工程は飛ばします。

#1 (64bit OS向け)
$ sudo add-apt-repository multiverse
$ sudo dpkg --add-architecture i386
$ sudo apt update
$ sudo apt install lib32gcc1 steamcmd
#2 (32bit OS向け)
$ sudo apt install steamcmd

Unturned Dedicated Serverのインストール

SteamCMDのインストールの次はUnturnedのサーバ(Unturned Dedicated Server)をインストールします。
インストールには次のコマンドを使用します。"<インストールするディレクトリ>"をインストールするディレクトリに置き換えてください。

$ steamcmd +login anonymous +force_install_dir <インストールするディレクトリ> +app_update 1110390 validate +exit
#例: ~/server/unturnedにインストールしたい場合
$ steamcmd +login anonymous +force_install_dir ~/server/unturned +app_update 1110390 validate +exit

上記の例のコマンドを実行すると+login anonymousが実行されSteamに匿名ログインします。(Wikiに記述がありますがDedicated Server系は大体ログインなしで入手が可能です。)

次に+force_install_dir ~/server/unturnedが実行されインストール先が指定されます。もし+force_install_dirを指定しない場合は~/.steam/steam/steamapps/common/U3DSにインストールされるようです。
(.は使えなかったのでフルパスで書くことをおすすめします。)

+app_update 1110390 validateではゲームIDが1110390(Unturned Dedicated Server)のゲームのアップデート及びインストールを行います。最後にvalidateを入れることでインストール後にファイルが全て正常か確認されます。
サーバのアップデートをする際は同様のコマンドを実行するだけですがvalidateは入れないことが推奨されています(設定ファイルが上書きされることがあるため)。

+exitでは全ての処理が終わった後SteamCMDの実行を終了します。
(ちなみに"steamcmd"単体で実行した場合は対話モードが起動します。)

ログに
Success! App '1110390' fully installed.
と出ていればインストール成功です。

サーバの実行

サーバのインストールが完了すればいよいよサーバの実行です。
~/server/unturnedにインストールした場合~/server/unturned/Unturned_Headless.x86_64がサーバの実行ファイルです。

※使用ターミナルがXfce(Xubuntu)環境でxfce4-terminalを使用している場合はエラーが出てしまうので次のコマンドは実行せず次の項を確認してください。
実行ファイルのディレクトリでターミナルを開き以下のコマンドを入力するとサーバが起動します。(今回は起動確認なので細かい設定はなし)

./Unturned_Headless.x86_64

上記の画像の様にLoading level: 100%のような表示が出てログが落ち着くまで待った後、helpと打ってみて以下の画像のようにコマンドのヘルプが表示されればサーバが正常に起動しています。
(バグなのか一文字目が表示されずelpのようになりますが入力はされているのでEnterを押してください。)


サーバは起動するがコマンドを受け付けない場合

今回この日記を書いた理由でもあり解決に時間を掛けた点です。
使用ターミナルがxfce4-terminalの場合、通常通り起動すると以下の画像のようになりコマンドを受け付けません。


xfce4-terminalの場合は以下のコマンドでサーバを起動してください。

TERM=xterm ./Unturned_Headless.x86_64

echo $TERMなどでTERMの内容を確認できますが、初期値であるxterm-256colorと相性が悪いらしくうまく起動できません。
そこでTERM=xtermを頭に置いてTERMの内容をxtermにすることで起動できます。
(ちなみに解決に至る方法を見つけたのはUnturnedではなくTerrariaのフォーラムでした。)

検索から来る方の為にエラーログの一部を貼り付けておきます。

Exception: Magic number is wrong: 542
  at System.TermInfoReader.ReadHeader (System.Byte[] buffer, System.Int32& position) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 
  at System.TermInfoReader..ctor (System.String term, System.String filename) [0x0005f] in <9577ac7a62ef43179789031239ba8798>:0 
  at System.TermInfoDriver..ctor (System.String term) [0x00055] in <9577ac7a62ef43179789031239ba8798>:0 
  at System.ConsoleDriver.CreateTermInfoDriver (System.String term) [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 
  at System.ConsoleDriver..cctor () [0x0004d] in <9577ac7a62ef43179789031239ba8798>:0 
Rethrow as TypeInitializationException: The type initializer for 'System.ConsoleDriver' threw an exception.
  at System.Console.SetupStreams (System.Text.Encoding inputEncoding, System.Text.Encoding outputEncoding) [0x00007] in <9577ac7a62ef43179789031239ba8798>:0 
  at System.Console..cctor () [0x0008e] in <9577ac7a62ef43179789031239ba8798>:0 
Rethrow as TypeInitializationException: The type initializer for 'System.Console' threw an exception.
  at UnityEngine.UnityLogWriter.Init () [0x00006] in :0 
  at UnityEngine.ClassLibraryInitializer.Init () [0x00001] in :0 
Unloading 0 unused Assets to reduce memory usage. Loaded Objects now: 2475.
Total: 5.642204 ms (FindLiveObjects: 0.099503 ms CreateObjectMapping: 0.103718 ms MarkObjects: 5.430445 ms  DeleteObjects: 0.007649 ms)

サーバの実行(続き)

サーバの起動が確認できたら一度サーバを閉じます。shutdownと打つことでサーバを止めることができます。

何も引数を付けずにサーバを起動した場合./Servers/Defaultにデータが保存されているので使わない場合は消してしまって大丈夫です。

起動する時は以下のようなスクリプトをディレクトリ内に置いておくと便利です。

#!/bin/sh
#Unturnedサーバ起動用スクリプトテンプレート

SERVER_NAME="servername_here"

echo
echo "Starting \"${SERVER_NAME}\" server."
echo
TERM=xterm ./Unturned_Headless.x86_64 -nographics -batchmode -LogAssemblyResolve +secureserver/${SERVER_NAME}

使用する場合はservername_hereの部分を建てたいサーバ名(任意、"miuti1","PEIpvp"など)にしてstart_miuti1.shのようなファイル名で保存して実行することでセーブデータを分けてサーバを起動できます。(スクリプトに実行権限の付与もお忘れなく)
この場合サーバのデータは./Servers/<サーバ名>に保存されます。

サーバ起動(公式マップ)

次にサーバを実際に建ててみます。サーバ名はrussia、マップはRussiaとして作っていきます。

まずはスクリプトをSERVER_NAME="russia"に書き換え一度実行してshutdownします(ファイルを生成させるため)。

./Servers/russiaを開くと次の画像のような構成になっていると思います。


Serverディレクトリの中にあるCommands.datをテキストエディタで開いて以下の内容を書き込んでください。(管理人がよく使う構成の設定です。)

Name russia
Port 27015
Password password
PVE
MaxPlayers 16
Map Russia
Mode Normal
Welcome Welcome to russia server.

さくっと解説をしておくとNameはゲーム内で表示されるサーバ名、Portは通信に使用するポート、Passwordはパスワード(適宜変更)、PVEはフレンドリファイアを無効、MaxPlayersは最大接続人数、Mapは使用するマップ名、Modeは難易度、Welcomeはサーバに入った時に表示されるメッセージ(別になくてもいい)です。
詳しい内容は日本語Wikiなどにも載っているのでそちらを参考にしてください。

開くポートについてはTCP/UDP色々な情報が出てきますが管理人の環境では少なくともTCP:27015、UDP:27015-27017を解放するだけで動作しています。

サーバ起動(Workshopマップ)

Unturnedでは一時的に公式マップになりしばらくするとWorkshop専用マップになることがあります。その場合、Workshopのマップをダウンロードして読み込む必要がありますがその手順について書いていきます。
使用するマップはRio de Janeiroを想定します。他のマップを使う場合はWorkshop内で調べてください。
URL末尾のid=xxxxxと書いてある数字の部分は後に必要になるのでメモっておいてください(今回の場合1821848824)。

まず、先程作った設定を流用するとMap RussiaMap Rio de Janeiroに変更します。(ここはWorkshopのアイテム名でいいと思います。)

次にWorkshopDownloadConfig.jsonを開いて"File_IDs:"の部分を先程メモしたIDを使って次のように書き換えます。空白は半角スペースで2個ずつです。

  "File_IDs": [
    1821848824
  ],

上記の画像のようになっていればOKです。あとは保存してスクリプトを起動すれば自動的にダウンロードが開始されマップが読み込まれます。

まとめ

さて、今回はUnturnedのサーバをLinux上で建てるというものでしたがはたして参考になった方は居るのでしょうか(^^;
エラーの解決方法を載せる為にわざわざ一からサーバを構築する方法を書いてしまいましたが参考になりましたら幸いです。
なお、冒頭で言ったとおり今回は身内向けサーバを対象としているのでパブリックに公開する場合はよく調べた上で自己責任の上でお願いいたします。

それではよきUnturned Dedicated Serverライフを!

日記の部屋に戻る