AWS EC2でFactorioのheadless サーバ構築関連メモ

なんとなくやったらできちゃったので備忘録
まずはざっくり[WIKI](http://wikiwiki.jp/factorio/?%A5%DE%A5%EB%A5%C1%A5%D7%A5%EC%A5%A4)を参考をば・・・
英語版は[こちら](https://wiki.factorio.com/index.php?title=Multiplayer)

※本記事は、ゲームがまだβ版（アーリーアクセス）の時点での記事になります。

# What is Factorio？
- [Factorio - Trailer（Youtube）](https://www.youtube.com/watch?v=DR01YdFtWFI)
- [Steam store](http://store.steampowered.com/app/427520/)

## マルチプレイ？
基本的にマルチプレイをやる際は、以下２通りで可能。

- 部屋を建てる主のPCの34197番ポートをUDPで開放する
- サーバにfactorioをインストールする(headless server)

前者は部屋主がFactorioを終了すればワールドも自動的に切断されてしまうが、
後者の場合は、サーバが主となるためいつでもワールドは開放されている状態となる。（誰もプレイしていない場合は、ゲームは一時停止となる模様）

本記事は後者になります。

## EC2サーバ構築
- Amazon Linux AMI 2016.03.0 (HVM), SSD Volume Type - ami-f80e0596 でEC2サーバ作成。ssh接続できるようにしておく。（詳細は省きます　

- AWS管理コンソールからFactorioデフォルトポートである 34197 ポートをセキュリティグループのインバウンドから許可しておく（別ポートを使用したい場合はこちらも変更する必要あり）

## Factorioのインストールと起動

```
cd /opt

wget --no-check-certificate https://www.factorio.com/get-download/0.12.29/headless/linux64

mv ./linux64 factorio_headless_x64_0.12.29.tar.gz

tar -zxvf factorio_headless_x64_0.12.29.tar.gz

cd factorio/bin/x64/

# hogehogeというセーブデータを作成
./factorio --create hogehoge

# hogehogeデータを起動(auto save間隔15分設定, ポート：34198 指定)
./factorio --start-server hogehoge --autosave-interval 15 --port 34198

# ctrl cで停止
```

※英語wikiのように、factorioユーザを作って実行させた方がいいかも(作らなくても実行できますが)

```
useradd factorio
chown -R factorio:factorio /opt/factorio
```

### ・ゲーム参加方法

→ ゲーム起動　→　プレイ　→　マルチプレイ　→　サーバに接続　→ 先ほど作成したEC2サーバのパブリックIPとポート(指定した場合)を入力

### ・configの場所て？

→ `/opt/factorio/config/config.ini`


### ・Mapデータを変えたい場合はどうするの？

→ CLIから作成できないっぽいので、クライアント側（自分のFactorio）でMAP設定、開始して保存したsaveファイルをscpコマンドか何かでサーバへ転送する。
(saveファイルの場所はページ[下記](http://qiita.com/nuxaxtu/items/f490a0318350db6fec7d#save%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A8%E3%81%8B%E3%81%AE%E4%BF%9D%E5%AD%98%E5%A0%B4%E6%89%80%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E5%81%B4)を参照)

### ・factorio をバックグラウンドで起動できないの？

こちらのgithubの[factorio-init](https://github.com/Bisa/factorio-init)通り進め、`service factorio help` が実行できればほぼokです。

configは`/opt/factorio-init/config.example`を参考に書き換え、同ディレクトリにconfigという名前で保存します。

## Saveデータとかの保存場所(クライアント側)
- Windows (Steam): C:\Users\<username>\AppData\Roaming\factorio\saves
- OSX: ~/Library/"Application Support"/factorio/saves

## Factorioのバージョンアップデート方法 - new!

こちらのpythonスクリプトが便利でした。
[factorio-updater(github)](https://github.com/narc0tiq/factorio-updater)

※既にサーバにpythonは入ってるとは思いますが、無ければpython要インストール。

###使い方例(ver0.12.29 -> 0.12.30へのアップデート例)

ほぼページに書いてある例のまんま使えました

```
# cdでfactorio-updaterをwgetしたフォルダへ移動後に・・

# 自分のOSで使えるパッケージ確認
python update_factorio.py -l
Available packages:
        core-linux_headless64

# -pで上記パッケージ指定、-fで現バージョン指定、-xで外書き（たぶん）
python update_factorio.py -p core-linux_headless64 -f 0.12.29 -x
Wrote /tmp/core-linux_headless64-0.12.29-0.12.30-update.zip, apply with `factorio --apply-update /tmp/core-linux_headless64-0.12.29-0.12.30-update.zip`

# factorioの実行ファイルがあるフォルダへ移動
cd ~/opt/factorio/bin/x64

# factorio実行時にオプション指定で先ほどWroteされたファイルを指定する。
./factorio --apply-update /tmp/core-linux_headless64-0.12.29-0.12.30-update.zip
[...いろいろログ出力...]

# 無事アップデートし終わったら、アップデートファイルを削除
rm /tmp/core-linux_headless64-0.12.29-0.12.30-update.zip
```


## 備考
- auto saveのintervalは2,3分だとみんなイライラすると思うので、10分以上推奨？（体感的に）
- P2P設定はonにすると重い、off推奨？（未検証）
- replay.datはセーブファイルから削除しておくと他の方がロード時軽くなる？（zipは一度展開して再度圧縮）
- [ゲーム中]`@`キーでチャット入力可能
- [ゲーム中]チャット状態で `/players` でonlineのプレイヤー確認（Luaコマンド許可のみ）
- [ゲーム中]チャット状態で `/c game.removeofflineplayer("username")` でオフラインのプレイヤーを削除可能

###その他
- AWSは従量課金制ですので、ご利用は自己責任でお願いします..
- Factorio楽しいですよ・・是非やりましょう・・（ｹﾞｽ顔）