LinuxでAvorionサーバーを実行する方法

Windowsで実行する場合には[こちら](https://qiita.com/SkyLaptor/items/c8d9a40ff95f5069903d)を参照。

## 検証環境
* CentOS 7.4(1708) 64bit
* Fedora 27 Server 64bit
* [Avorion](http://store.steampowered.com/app/445220/Avorion/) v0.15.7 日本語化済み

## 自身のSteamIDを取得する
Avorionサーバー実行時に管理者IDとしてSteamIDを指定する必要があるため、事前に取得しておく。

Steamを実行し、"自分の名前"の配下にある"プロフィール"を選択する。
![show_steamprof.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/2437752a-79ce-ef0d-ed75-f7ef262cb9fc.jpeg)

表示されたページのどこかを右クリックし、"ページのURLをコピーする"を選択する。
![copy_profurl.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/5dfb8a75-966f-a235-646d-3621783dc3a9.jpeg)

メモ帳などを起動してコピーしたURLを張り付けると、SteamIDを確認することができる。
![check_steamid.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/520a8ce8-f18c-c13b-ad44-0b64f9e6cb9f.jpeg)


## サーバー環境を用意する
Steamゲーム実行用ユーザーを作成する。

```shell-session:
# useradd steam
# passwd steam
ユーザー steam のパスワードを変更。
新しいパスワード:　任意のパスワード
```

必要なモジュールをインストールする。

```shell-session:
# yum install glibc libstdc++ glibc.i686 libstdc++.i686 screen
```

SteamCMDを用意する。

```shell-session:
# su - steam
$ mkdir Steam
$ cd Steam
$ curl -sqL "http://media.steampowered.com/installer/steamcmd_linux.tar.gz" | tar -zxf -
```

サーバーディレクトリを適当な場所に作成する。ここでは例として、"<ホームディレクトリ>/Avorion" をサーバーディレクトリとして用意しているものとする。

```shell-session:
$ mkdir ~/Avorion
```

サーバーディレクトリに移動し、steamcmd.shに引数（`+login anonymous +force_install_dir <サーバーディレクトリ> +app_update 565060 validate +exit`）を追加して実行する。

```shell-session:
$ cd ~/Avorion
$ ~/Steam/steamcmd.sh +login anonymous +force_install_dir ~/Avorion +app_update 565060 validate +exit
...
Connecting anonymously to Steam Public...Logged in OK
Waiting for user info...OK
 Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
 Update state (0x61) downloading, progress: 1.34 (1048576 / 78197159)
 Update state (0x61) downloading, progress: 58.84 (46008719 / 78197159)
 Update state (0x0) unknown, progress: 100.00 (20084528 / 20084528)
Success! App '565060' fully installed.
$ ls -l
合計 21128
drwxrwxr-x 2 steam steam       70  1月  6 22:56 bin
drwxrwxr-x 7 steam steam       91  1月  6 22:56 data
drwxrwxr-x 2 steam steam        6  1月  6 22:58 galaxies
-rwxrwxr-x 1 steam steam       17  1月  6 22:56 launcher.sh
drwxrwxr-x 2 steam steam       28  1月  6 22:56 linux64
-rwxrwxr-x 1 steam steam      185  1月  6 22:56 server.sh
-rwxrwxr-x 1 steam steam        7  1月  6 22:56 steam_appid.txt
drwxrwxr-x 5 steam steam      112  1月  6 22:56 steamapps
-rwxrwxr-x 1 steam steam 21621476  1月  6 22:56 steamclient.so
```

サーバーディレクトリ内にマップディレクトリを作成する。ここでは例として、"<サーバーディレクトリ>/galaxies" をマップディレクトリとして用意したものとする。

```shell-session:
$ mkdir galaxies
```

サーバー起動スクリプトを実行するとマップデータが生成される。なお、SteamIDは事前に取得しておいた17桁の数字であることに注意すること。

```shell-session:
$ ./server.sh --galaxy-name <マップ名> --admin <SteamID> --datapath galaxies
Warning: No RCON password set. RCON disabled.
Server startup complete.
Server connected to Steam successfully
Server is VAC Secure!
Game Server Steam ID: XXXXXXXXXXXXXXXXXX
```

## サーバーに接続する
スクリプトファイルを実行した時点で、サーバーの起動も実行されている。

Avorionを起動し、"マルチプレイ"から"IP経由で参加"を選択する。
![choose_ipjoin.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/2d5be136-d976-22c3-3010-d384f52da4dd.jpeg)


新たに建てたサーバーを追加する必要がある。必要な項目を入力後、"サーバーを追加"ボタンで追加する。

* IPアドレス: サーバーのIPアドレス
* サーバー名: 好きなサーバー名

![add_server.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/0518e2f9-e781-279a-4309-4a63fde13180.jpeg)

なお、追加した直後はなぜか正常に認識されない。一度メインメニューに戻り、もう一度"IP経由で参加"を開くと正常に認識される。
![join_server.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/28af302d-69c5-36c2-0e68-e35d3754977d.jpeg)



問題がなければ広大な宇宙に放り出される。
![joined_galaxy.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/f4785765-bcaf-d1da-46f5-47f453d4b55a.jpeg)



## サーバーを停止する
`/save`と入力後に続けて`/stop`と入力する。**セッションをCtrl+Cで強制終了させないこと。**



## 備考:マップ設定を変更する
マップ設定は生成直後ではデフォルト設定になっている。
設定を変えたい場合は、マップディレクトリ内のマップ名ディレクトリを開き、"server.ini"を変更すればよい。
細かい設定項目は以下のURLを参考にする。
https://avorion.gamepedia.com/Server#Server_Configuration_Options



## 備考:Avorionの通信をファイアウォールで許可する
firewalldが有効な環境では、Avorion通信ポートを許可しておく必要がある。

```shell-session:
# vi /usr/lib/firewalld/services/avorion.xml
# firewall-cmd --add-service=avorion --permanent
# firewall-cmd --reload
```

```xml:/usr/lib/firewalld/services/avorion.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Avorion</short>
  <description>Avorion default ports.</description>
  <!-- ServerPort(Default) -->
  <port protocol="tcp" port="27000"/>
  <port protocol="udp" port="27000"/>
  <!-- Server status query -->
  <port protocol="udp" port="27003"/>
  <!-- Connection establish -->
  <port protocol="tcp" port="27020"/>
  <port protocol="udp" port="27020"/>
  <port protocol="tcp" port="27021"/>
  <port protocol="udp" port="27021"/>
</service>
```

## 参考
https://avorion.gamepedia.com/Setting_up_a_server
https://developer.valvesoftware.com/wiki/SteamCMD