【Game】Arma3 EXILEサーバをLinuxで構築する方法

sc20170824142318忘れる前に、記録しておきたいと思います。

思い付きで追記していきますので、変な文章だったり誤字もありえます。質問・指摘はコメントへ。

まだ自分はサーバを公開出来てないんですけども・・(;^ω^)納得がいくミッションができないからなんですが。いつかは公開しますッ!

Arma3日本サーバが少なすぎます!!

おっ立ててみおうぜ(゚∀゚)ノ

Linuxの基本的知識があれば、それほど難しくありません。Windowsの手軽さには敵いませんが、Linuxの方が低負荷で高速で運用できます。しかも、Linuxならシステムを深くまでカスタムできるので、オススメです。

sc20170828173915Windowsを買わなくても良いのだ(約1万5千円)適当な中古PCで良いのだ。私なんかは、2千円ジャンクPCで上げようとしてる。

さすがに、PC98では無理だ。

EXILE MODサーバ前提で進めていきますが、ミッションファイル、MODの違いだけですので、他MODサーバでも参考になるかと思います。

公式ガイドがあるので、こちらに補足を加える感じでやっていきます。

EXILE公式フォーラム
Linuxサーバインストールガイド(英語)

ボヘミア公式
Arma 3 Dedicated Server(英語)

前準備

以下のモノを準備してください。m9( ゚д゚)

ちなみに、サーバ側のArma3ライセンス(Dedicated Server)は不要です。DLCも全込で無料ですのでご安心ください(つまり、プレー用で1ライセンスあればOK)

サーバスペックについては、XEON・Core i9やスリッパなど用意せずともOKで、いかに高クロックで動かすかが重要です。個人的には、4コア4Ghzで必要十分な印象です(i5-4670K 4.2Ghzで、AI150体までは余裕でイケます)富豪な方なら、AI処理だけを別PCで処理させる事が可能です(Headlessサーバ)

イベント少なめなら、もっと低スペックPCでも逝けます。ストレージとメモリはさほど重要ではありません。Core-i3、A8辺りが最低限なラインかと推測。

補足:AMD FM1 A6(4コア3Ghz OC)では100体が限界。いや、もっと厳しいか。

自宅にサーバを置く前提で書いてますが、データセンター内のVPSレンタルサーバも選択肢としてあります。電源や回線の心配は不要ですが、スペック的に厳しいので割愛してます(ゲームのために専用サーバ借りれれば別ですが・・)

  • Windowsパソコン(テスト・開発用)
    Arma3クライアントがインストールされた実際にArma3を起動できるパソコン。同時に開発用サーバが稼働可能な、それなりに高スペックなモノが必要です(私はi5-4670K 4.2Ghz&GF970でまぁまぁ快適)
    Arma3開発用ツールが全てWindows用なので、WindowsでテストしてLinuxにコピーするという流れがオススメです。
  • 空き20GB程度の開発用ストレージ
    様々なMODをテストするでしょう、さらにはバージョン管理やバックアップなどで結構なサイズのファイルを管理する事になります。
  • Linuxサーバパソコン(本番用)
    本番用のサーバ環境です。コア数よりも周波数が高めの方がヨサゲです(1/60秒以内に処理が終わらないとフレームに影響するため)また、PhysX物理演算用にNVidiaカードを搭載してると、もっとヨサゲです。ディストは、普及してるUbuntu Serverが安心です。
  • サーバ用Steamユーザー登録
    常時稼働してますし、セキュリティ上、別アカウントを作っておきましょう。
  • なるだけ太いネット回線
    上りだけでなく、下りの速さも必要ですが、日本国内だとどこも横並びです。IPv6なら500Mbps超えも余裕ですが、固定IPを選択できないというジレンマがあります(NTTフレッツ網・AUひかり共に同じ≒日本の事情)ユーザーが少なめという理由で、AUひかりがかなり速いようです。
  • IPv4固定IPアドレス
    サーバのIPアドレスがコロコロ変わってしまうと、ユーザーさんが露頭に迷ってしまいます。安価なドメインを取って登録する手もあるかと思います(DDNSとか)
  • ルータ側のポートフォワード(自宅サーバのみ)
    Arma3のパケットがサーバに届くようにルータ側の設定が必要です。面倒なら、いっそDMZに配置する事も可能でしょうが、オススメできません(ハックされたら自由な踏み台を提供してあげる事になります)
  • 月700円程度の電気代(自宅サーバのみ)
    サーバスペックにもよりますけども、おおよそ、そんぐらいかな。
  • 部屋に暖房機(自宅サーバのみ)
    サーバが室温を数度上げる暖房機になってしまいます。またファンによる騒音が、安眠を妨げます。
  • 停電・瞬電対策が必要(自宅サーバのみ)
    電源断によるサーバ停止を防ぐ必要があります。UPSを購入するか、BIOS/UEFIなどで、復旧後すぐサーバが上がるように設定が必要です。またデータ損失をできるだけ防ぐために、データバックアップ対策が必要です(自動化が望ましい)
  • ドキュメントの整理&翻訳対策
    Arma3スクリプティング、EXILE MOD、各ADDON(サーバMOD)毎に、大量のドキュメントと遭遇する事になります。あやふやにならないように、ドキュメント整理術を獲得しておいてください。また、ほとんどの文書は外国語です(英語とは限りません。イスラム圏語、ロシア語に遭遇する事も多い。Google翻訳は凄い)
  • バグだらけ環境に慣れる
    コミュニティの成果物がほとんどなので、バグ遭遇率が非常に高いです。また、開発が停止なんかも良くあります。なので、自分で直せる程度の技術力が必要です。Arma3本体も怪しい部分が結構あるぞ。
  • 情報を常に集める(地獄だぞ)
    多くのMODを導入する事になりますが、個々のバージョンアップに常に気を配らないと、プレーヤーがインする事も出来なくなります。また、Arma3本体も比較的に多く更新が入ります。ある意味、これがサーバ管理者、最大の負担でもあります。
  • 公式のTwitterやブログ・SNSの準備
    プレーヤーの質問や対応先としての窓口が必要です。管理者だって、常にインして監視できる訳ではないのでね。Steamコミュニティを利用してるサーバが多いです。
  • 歴史や重火器の知識
    有るに越したことありません。Arma3にはマニアなプレーヤーも多く足元を見られます。私は持ち合わせてませんけどもw
  • 英語の知識
    Arma3は、主に海外での人気が高く、日本サーバとて海外からのプレーヤーがやってきます。彼らの多くは気兼ねなくボイスやチャットをぶっかましてくるので、答えてあげなくてはいけません。おもてなしの心か、或いは”F*ck U”と。
  • 時間と食料と非リア充と嫁(既婚者のみ)
    現実世界の貴方にも配慮が必要です。奥様の承諾も必要でしょう。決して、人殺しゲームではなく男同士の運動会ゲームとでも言っておきましょう。また、EXILEと違い「睡眠」も必要になります

    開発用サーバの構築

    まず、Windows側に開発用のサーバ環境を構築します。ガイドに従って、構築します。情報が多いのでそれほど難しくはないかと思います。

    開発サーバを用意する事で、本番を止める事なく実験でき、ミッションファイル(1ファイル)をコピーするだけで、本番Linuxサーバを更新する事ができるようになります。

    sc20170828222924Steamから、「Arma3 Tools」をダウンロードしておきます(無料)各種モロモロとツールが入ってますが、必要なのは「TexView2」「PboManager」位でしょうか(画像変換とPBOファイル管理)

    Notepad+」というテキストエディタをインストールします。他のモノでも良いのですが、Arma3のスクリプト拡張子に対応してますし、とても便利です。

  • 稼働前に、Steamによるアップデートを済ませておく事
  • サーバルートPATHとなるホルダーにまとめてMODを入れておくと楽
  • 必要MODの署名キーファイルは、サーバの”keys”に保存(忘れっぽい)
  • ログファイルは2種類(標準ログと、スクリプトによる任意ログ)以下のBATだと”prof_exile”内に生成されます
  • “mpmissions”ホルダーにミッションファイルを格納(例:Exile.tanoa.pbo)

    EXILEクライアント用MOD内はイジる事は一切できない(例外:EDEN編集時にファイルを必要とする。exile_3den.pbo)

    EXILEサーバ用MOD内はイジくりまわせる

    んで、Windowsで動いてるEXILEサーバが稼働するかチェックします(ここが第一の壁です)

    以下は私が利用してるサーバ起動BATです。特別な事はしてませんが参考にどうぞ。分かり易く記述してるつもりです。

    rem ——– Arma3 Exile Lunch script(Windows bat)
    @echo off
    cls
    rem ——–
    set _ver=1.0.3b
    set _app=Arma3 Exile
    rem ——–
    set _server=D:\Steam\steamapps\common\Arma 3 Server\arma3server.exe
    set _modsv=@ExileServer;@AdminToolkitServer;@extDB3
    set _mods=@Exile;curator
    set _cfg=@ExileServer\config.cfg
    set _bcfg=@ExileServer\basic.cfg
    set _opt=-profiles=”prof_exile” -name=exile -malloc=tbbmalloc_x64 -nosplash -autoinit -hugepages -noPause -noSound -checkSignatures -showScriptErrors -exThreads=7
    rem ——–
    title %_app% %_ver% lunch
    rem cd D:\exilesv\server\@ExileServer
    :exile_lunch
    echo (%time%) %_app% %_ver% started.
    start “Exile” /wait /high “%_server%” -port=2302 “-serverMod=%_modsv%” “-mod=%_mods%” “-config=%_cfg%” “-cfg=%_bcfg%” “%_opt%”
    echo (%time%) %_app% %_ver% closed or crashed, restarting.
    rem goto exile_lunch
    rem ——–

    _modsvや_modsに、MODファイルを指定します。ここでは、EXILEの他、管理者用MOD、ExtDB3用MODを指定してます。

    EXILEサーバ用のアドオンは、”@ExileServer”内の”addons”に格納します。

    開発サーバ稼働テスト

    無事構築できていれば、バニラ状態のEXILEがプレー可能です。トレーダーも既に設置されてるので普通にプレーができますが、ミッションなどは、アドオン扱いです。

    ARMA3を立ち上げ、リスト上に表示されればOKです。IPアドレス直接接続でもOKです(ローカルPCなので、2つ表示されるはずです。192.168.1.xと、127.0.0.1で)

    エラーで動かない、動作がおかしい場合は、ログファイルで確認します。・・というか、それしか手段がありません。超重要!なので、エイリアスやショートカットなど作成してすぐ確認できるようにしよう。

    序盤、ほとんどの場合、設定の単純ミス(タイポ)か、DB周りの不具合が多いと思います。1個づつ、ログを確認しながら潰してくしかありません。

    手間を掛けないためにも、「問題の切り分け」を念頭に、推測だけで作業しちゃうと時間だけが過ぎていきます。

    オリジナルファイル(や自己バージョン毎)を残しておく事をオススメします。

    本番サーバ環境構築

    サーバに余計なプロセスを稼働させないためにも、Linux Server版をオススメします。Server版ですら、(当然ですが)USBポーリングなどの無駄なタスクが多く発生してます。GUI環境は不要です。

    OSをブッ込んだら、SSH設定だけ先に済ませておきます。そしたら、もう、キーボードもモニターも不要です。Windowsから、リモートで操作しましょう。

    後は、公式ガイドに従って、必要なソフトウェアをインストールします。下記、start_a3_exile.shコードの末尾部分に、実際の構築用Linuxコマンドメモを記載してます。参考にどうぞ。

    「steam」というユーザーを作って、セキュリティ上、このユーザー上でサーバが動くようにします。

    データベースは、MySQLで書かれてますが、(ほぼ同等というか瓜二つの)MariaDBの方をオススメします。若干速いらしいです。ま、どっちでも良いけども。オラクルが嫌いならMariaDB一択。

    最後に、必要なポート(2344/2345、2302-2305)を開けて、基本的な構築は終了です。

    (具体的な設定方法は後に追記予定)※随時追記

    参考:server_init.sh(PC起動時スクリプト)

    crontabにPC起動時のスクリプトを登録します。RAMDISKの整備&MOD配置と、Arma3サーバの起動を行います。

    (サーバMODとログファイルを、RAMDISKに配置)

    #!/bin/bash
    # Arma3 Exile Server initialize
    #
    # user:loot
    # on /etc/crontab @reboot

    #### Server Dir.
    serverDir=”/home/steam/arma3″
    #### Ramdisk Dir.
    _exilelogDir=”/mnt/ramdisk/exile_logs”
    _modsDir=”/mnt/ramdisk/mods”

    #### log to ramdisk
    sudo -u steam mkdir ${_exilelogDir}

    #### Server Mod to ramdisk
    sudo -u steam mkdir ${_modsDir}
    sudo -u steam cp -rp ${serverDir}/mods/@Exile ${_modsDir}
    sudo -u steam cp -rp ${serverDir}/mods/@ExileServer ${_modsDir}
    ln -s ${_modsDir}/@Exile ${serverDir}/@Exile
    ln -s ${_modsDir}/@ExileServer ${serverDir}/@ExileServer

    #### Launch Exile Server
    systemctl start A3Exile

    #### Send message?
    #mail,twitter,log

    exit 0

    参考:start_a3_exile.sh(Arma3デーモンスクリプト)

    コメントやテストコードを大量に含ませてるので長くなってますが、具は小さいです。実際にArma3 EXILEサーバを起動制御してるスクリプトです。適宜編集してお使いください。

    ※「exit 0」から下の部分は全部ドキュメント

    デーモンとして稼働してるので、Arma3サーバが終了しても、自動的に再起動します(1秒待機後)その際、ログを自動的にバックアップします。

    #!/bin/bash
    # Wrapper file to start the Arma3 server
    # “start_a3_exile.sh”
    # Ubuntu Server 17.04 / Arma3 Exile MOD Ver.1.0.3b
    # User:steam
    #—-
    # SABA-MISO Exile Server(from Japan)
    # 2017/6/7 nabek (http://blog.ahh.jp)

    #### Server Dir.
    serverDir=”/home/steam/arma3″
    serverConfigDir=”${serverDir}/@ExileServer”

    #### BE Path
    bePath=”${serverDir}”

    #### Network settings(-cfg)
    networkConfig=”${serverConfigDir}/basic.cfg”

    #### Server configuration(-config)
    serverConfig=”${serverConfigDir}/config.cfg”

    #### Server-side Mods
    #mods_server=”@ExileServer;@extDB3″
    mods_server=”@ExileServer;@AdminToolkitServer;@SLZ;@extDB3″
    mods=”@Exile;curator”
    modsRamdiskDir=”/mnt/ramdisk/mods”

    #### Profile path
    profile=”${serverDir}/profile”

    #### Options
    option=”-name=exile -port=2302 -nosplash -autoinit -hugepages -noPause -noSound -checkSignatures -world=empty -loadmissiontomemory -cpuCount=4 -exThreads=7″
    # exp.
    #   -name=exile -port=2302 -autoinit -hugepages -checkSignatures
    #   -world=empty -loadmissiontomemory
    #   -nosplash -noPause -noSound -ranking -netlog -ip=192.168.1.0
    #   -enableHT -cpuCount=4 -exThreads=7
    #   -filePatching(*extDB3 fail)
    # unknown?!
    #   -download -generateShaders -disableProgramDrawing -useProgramDrawing
    #   -gamerTag= -benchmark -noTexHeaders -autoUpdate -physics=<?>
    # https://community.bistudio.com/wiki/Arma_3_Startup_Parameters

    #### Logs(+error) *recommend:output Ramdisk(tmpfs)(*1)
    #serverLogDir=”${serverDir}/log”
    serverLogDir=”/mnt/ramdisk/exile_logs”
    #mkdir ${serverLogDir}  (*in cron:@reboot)
    timestamplog=${serverLogDir}/$(date “+%Y%m%d_%H%M%S”)”.log”

    #### Reload Mods to Ramdisk
    rm -rf ${modsRamdiskDir}/*
    cp -rp ${serverDir}/mods/@Exile ${modsRamdiskDir}
    cp -rp ${serverDir}/mods/@ExileServer ${modsRamdiskDir}

    #### Start server(Yeah!!)
    sleep 1s
    cd ${serverDir}
    ${serverDir}/arma3server -cfg=”$networkConfig” -config=”$serverConfig” -profile=”$profile” -serverMod=”$mods_server” -mod=”$mods” “$option” -BEpath=”${bePath}” 1>>”${timestamplog}” 2>>”${timestamplog}”
    # Kick asshole or get a Coffee.

    # if use to Ramdisk, Backup Logs(*1)
    cp -p ${timestamplog} ${serverDir}/log

    exit 0
    ## ==== Software ====
    # Arma3 Dedicated Server
    # https://community.bistudio.com/wiki/Arma_3_Dedicated_Server
    # Arma3 Exile MOD Ver.1.0.3b & Server
    # extDB3 (and “Exile-master” patch files)
    # LootTableCompiler-1.0.3b  *dev.tool,for Client
    # m3e_3den                  *dev.tool,for Client
    # http://www.exilemod.com/
    # Ubuntu Server 17.04
    # https://www.ubuntu.com/
    # Notepad++(for Client,free)*opt
    # https://notepad-plus-plus.org/
    # Arma3 Tools
    # (for Client,find Steam,require PBO-manager,TexView2..)
    #
    ## ==== Dir. tree ====
    # /home/steam/
    #         server_init.sh    <-init(from Cron@reboot)
    #         Steam/
    #         steamcmd/
    #         arma3/            <-Server root
    #               (A3Dedicated server install here.)
    #               @Mods/      <-Server MODs
    #               @Mods/
    #               @Mods/
    #               battleye/   <-copy @ExileServer/battleye
    #               keys/       <-copy @Mods keys file
    #               log/        <-log backup
    #               mods/       <-mod on Ramdisk
    #               mpmissions/ <-copy Mission-file
    #               start_a3_exile.sh     <-A3Exile Service script
    #
    # /mnt/ramdisk/exile_logs       <-log file
    # /mnt/ramdisk/mods             <-mod on Ramdisk(@Exile/@ExileServer)
    #
    ## ==== Require ====
    # sudo apt install lib32stdc++6 lib32gcc1 libtbb2:i386 screen mysql-server
    # (Database:MySQL or MariaDB)
    # sudo apt install preload(*opt:if use HDD)
    # sudo apt search girlfriend(*opt)
    #
    # SSH service(*opt:maintenance)
    # Samba service(*opt:maintenance)
    #
    # *”man” Japanese documents
    # sudo apt install manpages-ja manpages-ja-dev
    #
    ## ==== Ramdisk ====
    # *ramdisk or /dev/shm?
    # tmpfs /mnt/ramdisk tmpfs defaults,nosuid,nodev,noexec,mode=1777,size=2048M 0 0
    #   (add-> /etc/fstab)
    # sudo vi /etc/crontab
    #   (add-> @reboot /home/steam/autoexec.sh)   *start-up script
    # sudo vi /home/steam/autoexec.sh
    #   (add-> sudo -u steam mkdir /mnt/ramdisk/exile_logs)
    #   *AND more startup command
    #   *MySQL/MariaDB on RAMDISK?
    # sudo chmod 0700 /home/steam/server_init.sh
    #
    ## ==== open ports:Battleye,Arma3,MySQL(*opt) ====
    # sudo ufw allow from 81.0.236.111 to any port 2344/tcp   *battleye
    # sudo ufw allow from 81.0.236.111 to any port 2344/udp
    # sudo ufw allow from 81.0.236.111 to any port 2345/tcp
    # sudo ufw allow proto udp to any port 2302:2305          *A3 ports
    # sudo ufw allow from 192.168.1.0/24 to any port 3306/tcp *opt:MySQL
    # sudo ufw allow from Girl to any port my.Phone (*opt)
    # sudo ufw reload
    #
    ## ==== Steam Command install ====
    # check official ref.
    # https://community.bistudio.com/wiki/Arma_3_Dedicated_Server#Instructions_.28Linux_o.2Fs.29
    #
    # wget http://media.steampowered.com/client/steamcmd_linux.tar.gz
    # tar -xvzf steamcmd_linux.tar.gz
    #
    ## ==== A3 Server install & update ====
    # ./steamcmd.sh
    # >login (myusername & password)
    # >force_install_dir ./arma3/
    # >app_update 233780 validate  *Arma3Server update
    # >exit
    #
    ## ==== MySQL ====
    # sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf  *add sql-mode
    #     sql_mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”
    #
    ## ==== Logs ====
    # Server log
    #     $serverLogDir   < important logs
    #     @extDB3/logs    < database logs
    # Client log(Win10)
    #     (user)\AppData\Local\Arma 3\*.rpt    *secret holder
    #
    ## ==== Doesn’t run..? ====
    # 1.re-Check Log files
    # 2.File permissions
    # 3.Case sensitive (MOD files)
    # 4.Firewall/security settings
    # 5.Check Your Stomach/Thirst and body damege.
    # 6.Check Exile-mod forum(http://www.exilemod.com/)
    # 7.Check Discord ch.(#exile_development) jpn/eng only
    #
    ## ==== more Fast! ====
    # sudo nice -n -10 ionice -c 2 -n 1 (command)
    # *high priority running(task & I/O schedule)
    # sudo Drop-PC && Going to PC-Shop
    #
    ## ==== Auto restart ====
    # *”systemd” control
    #
    # *i wont run!
    # sudo chmod 0755 (path)/start_a3_exile.sh
    #
    # *regist
    # sudo vi /etc/systemd/system/A3Exile.service
    #   [Unit]
    #   Description = Arma3 Server Exile MOD
    #   [Service]
    #   ExecStart = (path)/start_a3_exile.sh  *me!!!
    #   Restart = always
    #   RestartSec = 10
    #   Type = simple
    #   User = steam
    #   Group = steam
    #   [Install]
    #   WantedBy = multi-user.target
    #
    # *check registered
    # sudo systemctl list-unit-files –type=service | grep A3Exile
    # *Auto-start on/off(enable/disable)
    # sudo systemctl enable A3Exile
    # *START/STOP server
    # sudo systemctl start A3Exile
    # sudo systemctl stop A3Exile
    # *status
    # sudo systemctl status A3Exile
    # *relord
    # sudo systemctl daemon-reload
    # *dept
    # sudo systemctl clear Dept (*Maybe error)
    #
    # *MySQL on RAMDISK(50% performance up)
    # sudo service mysql stop
    # sudo cp -pRL /var/lib/mysql /dev/shm/mysql  *copy databases
    # sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
    #   # datadir = /var/lib/mysql    *comment out
    #   datadir = /dev/shm/mysql      *change dir.(or Other Dir.)
    # sudo vi /etc/apparmor.d/usr.sbin.mysqld  *Apparmor
    #   /dev/shm/mysql/ r,            *add 2lines
    #   /dev/shm/mysql/** rwk,
    # sudo service apparmor restart
    # sudo service mysql start
    #
    ## ==== memo:Watch Server-Status ====
    # vmstat -S M 5     *CPU/Memory/IO/etc. 5sec,Mega size
    # (check SWAP,IO Wait,CPU load)
    # uptime            *howlong running & CPU load ave.
    # top               *Realtime all status
    # ps aux            *Process list
    # free -h           *Memory/Swap status
    # df -h             *Disk status(tmpfs=ramdisk)
    #
    ## ==== memo:Shit PC-Specs ====
    # AMD A6-3650(FM1) 4cores 2.6Ghz,8GB Ram,256GB SSD,non PshyX
    # LAN connection , DMZ/occu.Mods
    # ave. 40-50FPS!!  (´∀`)ノ
    #
    # Good luck!! from Japan 😉

    本番サーバ環境構築(補足)

    SAMBAサーバ

    ガイドにはありませんが、ファイル転送用にSAMBAサーバを入れておくと便利です。ミッションファイルを、何百回とコピーする事になりますので。パーミッションの自動指定しておくと楽です。

    Webサーバ

    Webサーバがあると、スマホ連携のアプリが利用できるようになるようです。やった事が無いので割愛。

    ExtDB3の適用(64ビット版DBドライバ)

    標準では32ビット版なので、これを64bit版に更新する必要があります。MODも含め、大きく手作業で更新する事になるので、慎重に作業する必要があります(EXILEサーバMOD内のDBアクセス部分の全て)本体が64ビット化したのはつい最近の事なので、こういう事になってます。

    ガイド(一度32ビットでの稼働を確認してからの方が安全です。問題の切り分け)

    MySQLクライアント(管理用)

    Windowsから、Linuxサーバ内のデータベースが覗けるようなクライアントソフトがあった方が良いです(多くは無料)Exileの動作を確認できる他、チーターが発生したかどうか生データでチェックできます。もちろん、イジる事(神モード)もできます。

    RAMディスクを活用

    多めのメモリを搭載している場合は、MODやログ出力先をRAMDISKに当てておくと、より高速に処理できます。Ubuntu Serverなら、既にRAMDISKが設定されてます。サーバ終了時に、ログを拾い上げる様なスクリプトを書くだけです(ログは捨てずに保管しよう)

    MySQLなどは既にRAMキャッシュを活用するような動きになってるので、これをRAMDISK化しても効果薄です。

    Arma3本体やクライアントMODのバージョンアップ

    これを自動化させるか否かは管理者さん次第です。自動化させるなら、それ用のスクリプトを書きます。手動で行ってるサーバがほとんど。

    24時間稼働しない場合

    BIOS/UEFIから、自動での起動時間を指定してあげるようにすれば、任意の時間帯だけサーバ公開が可能です。シャットダウンもCRONなんかに書けば良いでしょう。

    Steamアップデート

    Arma3本体は想像以上にアップデートされてます(主にDLC公開後)クライアント側とバージョンが合っている必要があるので、これを忘れると、「放置サーバ」となり、人類の遺産となってしまいます。

    sudo –i –u steam

    ~steam/steamcmd/steamcmd.sh

    > login (Steamアカウント名) (Steamパスワード)

    > app_update 233780 validate (アップデート実行)

    > exit

    過去にArma3本体のバージョンアップにより、EXILEサーバが動かなくなった事があります。公式フォーラムで確認の上、アップデートして良いか吟味する必要があります。

    本番Linuxサーバ稼働テスト

    無事に稼働してるかを確認します。

    既にWindows版開発サーバの稼働を経験してるので、敷居はとても低いはずです。基本は同じですから。ログを見て対処してください。

    設定が同じでも、動かないという場合は、Linux特有の問題である可能性があります。問題の切り分けを念頭に。

  • パーミッションの確認(又はユーザー)
    頻繁に作業するモノはスクリプトを書いてた方がヒューマンエラーを回避できる
  • ファイル名の大文字小文字が合ってる?
    Windowsとは動作が違うぞ。まれに遭遇するぞ。MOD開発者はWindowsユーザーが多いので、相違したままでリリースされてる場合がある。
  • ポートのオープン・クローズは適切か?
    ポート番号の他、内向き・外向きも確認。中国・韓国のIPを丸ごとシャットダウンしても良いでしょう。
  • 面倒臭いからとセキュリティをオロソカにしない
    チーターやハッカーは想像以上に多い(自宅サーバを乗っ取られたら、LAN内は超危険)

     

    WindowsでArma3を起動して、実際にLinuxサーバに接続します。ランチャーのリストに表示されてるはずです。

    動作したら注目すべきは、Ping値やフレームレートです。この数字が最大値なので、ネットワーク遅延に加え、色々と導入していく度に減ってく事になります。私の場合は、確か80FPS超えでした。

    ※フレームレートは、Steam側の機能で表示できます

    (デーモン化スクリプトは後日公開)

    基本的な概念やファイル

    EXILEはあくまでArma3のMODで、Arma3の仕様に準じた範囲で動作しています。なのでArma3本体のバージョンアップでEXILEが動かなくなる時もあります(実際に過去にありました)

  • MODファイルとMAPデータは、サーバとプレーヤーが同一
  • ログイン時プレーヤーはミッションファイルをダウンロード
  • サーバMODはプレーヤーとは関係無く導入できる
  • イベント等はサーバ側のタイミングで発生(サーバMODにより)
  • EDENエディタでのミッション編集は推奨されない
    (全てロード後スクリプトによって動作してます。設定上のエリア指定で例外使用)
  • スクリプトを書いて”いくらでも”機能拡張できる(独自言語)
  • 全オブジェクトには、クラス名が割り当てられてる(ハンパ無い、覚えるのは不可能)
  • ゾンビMODは数種類あるのでお気に入りを選ぶ
  • アイテム沸きは、超膨大な設定量
    (Arma3オブジェクトの他、EXILE MODオブジェクトがあります。またMODを導入して増やすことも可能です。もちろん要設定)
  • アイテム沸き場所・建物・数・種類・消去の設定(場所指定はGUIツール有り)
  • アイテムの価格設定(買値・売値は1/10だが設定可能)膨大
  • リスペクトの設定(増・減、それぞれ)
  • 拠点系の設定(レベル、オブジェクト数、家賃、期間)
  • クラフトレシピの設定(独自レシピを追加可能)
  • 全てのAIに東側・西側・中立の指定がされてます。プレーヤーも例外無く。よって、どこの陣営に入れるかによって、敵対AI、味方AIを出す事ができます。

     

    座標を指定するような設定は、実際のゲーム時にGPS表記の10倍、又は、EDENでマウスポイントする事で調べる事ができます。MAP左下が0,0となり、必ず正方形となります。高さ座標では、海面をゼロとしたモノと、物理的なモノとがあります。0.01でも数十センチ規模になるので、微調整時は地獄を見ます。

    MAPオブジェクトを置く場合は、別途ミッションファイルを作成し、EDENエディタで作成できます。作成後、ミッションファイルに付与するコードを生成します(この機能を実現してるのが、exile_3den.pboというファイルです。プレーする際は、このファイルだけ削除しなければならない。MOD署名違反になるため。この辺自動化してくれると便利なんだけど・・)

    注意するのが、オブジェクトの位置ずれです。正確を要する場合は、微調整が必要です(物理演算などで、どうしても位置ずれが起こる)

    静的オブジェクトなら問題ありませんが、特殊オブジェクトは、そのままでは設置できません(武器や車両、装備系・クレイト系など。編集に特殊操作が必要)

    ネットワークについては、UDPプロトコルで垂れ流されるような感じで、サーバとクライアントが通信してます。UDPはご存知の通り、速度は速いが、信頼性が低いというモノ。ゲーム中変な挙動するのは、これが原因だったりします。

    プレーヤーの全データは、随時データベースに保管されるのですが、このタイミングが1~2分と比較的に長く、「時間が戻される」現象はこれに起因します(スタンド攻撃ではありません)但し、アイテムの移動や車両の乗り降りなどでデータ更新を行う事が可能なようです。

    サーバリスタートは任意ですが必要です。アイテム沸き、AIなどが露頭に迷いドンドンと増えてしまう場合があります。約2~3時間に設定してるサーバが多いです。サーバが終了するだけなので、再度起動するようなスクリプトを書く必要があります(Linuxなら、デーモン・サービス化など)

    Arma3サーバ基本設定

    ロード時のロゴやサーバ・ミッション名、ネットワーク関連などを設定します。鈍足ネットプレーヤーを自動BANするのもここです。

    basic.cfg、config.cfg

    EXILEサーバ設定

    ここに多くの労力を要します。心して掛かってください。既にバニラ設定があるので、それを改変する事から始まります。バニラのままでOKなら、スルーですけども・・弄りたくなるはず。

    EXILEはサバイバルゲーだったはずなのですが、バニラ設定自体が、ドンパチ志向なのです。

    バニラ設定があるのは、Tanoa、Altis、Maldenなどの公式MAPに限られます。他MAPでは、ゼロからの設定、必要に応じてコピペになります。

    EXILEの基本的な要素の、「アイテム関連(全体の9割!?)、リスペクト関連、拠点、クラフトレシピなど」を設定します。

    一部、EDENエディタを利用する場合もありますが、ほとんどの作業はテキストエディタが相手となります(@ExileServerとmpmissionsのミッションファイル)

    @ExileServer\addons\exile_server_config内

    config.cpp

    mpmissions\Exile.Tanoa.pbo内(PBOなので編集後、要PACK)

    config.cppdescription.ext、initPlayerLocal.sqf、initServer.sqf、init.sqf辺りを良くイジるんではないかと思います。

    MAP上にオブジェクトをおく場合は、EDENエディタを利用し、initPlayerLocal.sqf、initServer.sqfに記述するためのコードを吐き出させます。このEDENで編集したミッションファイルは、本番用とは違うもので行います。

    ミッションファイルはプレーヤーがインする度に、ダウンロードするモノなので、できるだけ小さいサイズが好ましいです。ですが、色々やりたいですよねぇ。

    サーバMOD(アドオン)の導入

    ミッションやキャプチャーイベント、LOOTイベントなどは全て、これらサーバMOD(ADD-ON)を導入する事で実現します。

    既に稼働実績がありバグ潰しもされた、多くのサーバMODがあるので、そこから始めるのが吉です。

    稼働実績のあるモノ(公式フォーラム)

    有名な所では、以下のモノ。

  • DMS ミッションの自動生成、ほとんどのサーバで動作(というか必須に近い)
  • ZCP キャプチャーイベント、こちらも有名
  • Occupation GearCrateやヘリ、パトロールAI、町AIなど様々な機能有り (DMSが必須)
  • ExileZ ゾンビ系。※現在は、オリジナルExileZ2の開発が停止したため、[FPS]kuplionさんの修正版が最新

     

    個々に細かく設定できるようになってますが、本当に細かな所などでは、スクリプトを改造したりする必要があります。

    設定できない要素も結構あるので、多分、改造したくなります(;^ω^)

    時間があれば、内部コードを見ておいた方が良いかと思います。ミッションは、どう動いてるのか、とか気になるでしょう。

    これらの他にも、ステータス表示系、タブレットアプリ系など様々ありますので、試してみて下さい。

    EXILE公式フォーラム内の書込みを見ながら、評判やバグなどを吟味してください(英語)

    (追記予定)

  • 「【Game】Arma3 EXILEサーバをLinuxで構築する方法」への2件のフィードバック

    1. お久しぶりです。
      最近、息子が生まれまして寝不足気味です。

      さて、アドオン紹介で”ExileZ ゾンビ系”と入ってたので今現在は更新されているのは”ExileZ Mod by [FPS]kuplion” と紹介しておいたほうが誤解が少ないと思われます。

    2. おめでとうございます。

      >ExileZ
      そうですね、走り書きに近い文章なんでろくすっぽ調べてませんでした。
      後日まとめて訂正します。

    コメントを残す

    メールアドレスが公開されることはありません。