takeyohのおぼえがき

気になったこと、試したことの記録です。

Raspberry Piでassettoserverを動かす!

またまた、assettoserverネタです。

自宅でサーバ立てようとおもっても、PCつけっぱなしにすると、電気代が・・・とか、部屋の温度が・・・とか、嫁に怒られる・・・とか、様々な理由で起動しっぱなしはつらいというのありますよね?

かといって、外のレンタルサーバを使うとお金がかかるし・・・・。

目の前にはRaspberry Piが。あれ?これ使えるんじゃ?

assettoserverって参加しているユーザの管理や車の位置などの情報同期がメインで、サーバ自体の負荷はそれほど高くないと思われます。

ラズパイでも十分耐えられると思い、試してみました。

#使用したのは、Raspberry Pi 3です。

 

Raspberry Pi OSセットアップ】

まずraspberry pi インストーラ用意

www.raspberrypi.com

今回は、windows用を使ってます。(メインPCがwindowsなので)

インストールできたら、microSDへOSを書き込み。

今回は、GUIも要らないので、LITE版を選択。

assettoserverが64bit版のみなので、Raspberry Pi OSも64bitを選択します。

OS:Raaspberry Pi OS (other)から Raspberry Pi OS LITE (64-BIT)を選択。

microSDカードを刺したUSBデバイスをストレージで選択後、OSを書き込み。

書き込み完了したら、ラズパイにmicroSDカードを刺し、HDMIとキーボードとLANケーブルをつないで起動。

ラズパイ3はWLANの設定も可能なのでそれでもOKですが、今回は面倒だったので有線LANでテストしてます。

初期設定が終わったらログイン。CUIのみなので、コマンドプロンプトが出ます。

作業しやすいように、リモートからsshできるように設定。(ここは割愛)

 

環境が整ったら、assettoserver導入開始です。

github.com

 

ASP.NET 6インストール】

サイトにも書かれていますが、assettoserverはASP.NET6Runtimeが必要です。

ラズパイOSでは、aptでのインストールはパッケージが存在しないのでできません。

マイクロソフトが提供しているインストール用シェルスクリプトを使うのが簡単です。

参考)https://learn.microsoft.com/ja-jp/dotnet/core/install/linux-scripted-manual#scripted-install

 

以下、ユーザのhomeディレクトリでの作業を想定。

インストーラダウンロード

wget https://dot.net/v1/dotnet-install.sh

.NET 6.0のインストール(ユーザ権限で実行)

chmod 755 dotnet-install.sh
./dotnet-install.sh -c 6.0

ASP.NETを動作させるために、パスを設定。

homeディレクトリにある.bashrcの最終行に以下を追記。

export DOTNET_ROOT=$HOME/.dotnet
export PATH=$PATH:$HOME/.dotnet:$HOME/.dotnet/tools

これで、ASP.NETのアプリが起動できるようになります。

 

【assettoserverセットアップ】

ラズパイはARMチップです。assettoserverのgitからarm版をダウンロードします。
https://github.com/compujuckel/AssettoServer
Releaseから最新版をダウンロードする。

wget https://github.com/compujuckel/AssettoServer/releases/download/v0.0.50/assetto-server-linux-arm64.tar.gz

ダウンロードしたtar.gzを展開。

tar zxvf assetto-server-linux-arm64.tar.gz

ホームディレクトリにAssettoServerの実行ファイルとその他関連ファイル・ディレクトリが展開されます。

 

【サーバ設定】

次に、サーバの設定情報を持ってきます。今回は、メインPCのContent Managerを使っています。CMのサーバ機能は有償版が必要です。安いので買っても良いと思いますが、無償でやりたい方は、Windows版のサーバと同じ形で、ファイル群をラズパイにコピーしていけば同じように実現できる(はず)です。

Content Managerのサーバメニューからアップしたいプリセットを選んで、Pack。

(Packのオプションで、TargetをLinux(64-bit)にしてpackする)

 

作成されたtar.gzファイルをRaspberryPiにSSHなどでアップロード。
teratermなら、コンソールウインドウにドラッグ&ドロップすれば、ユーザのホームディレクトリにアップロードできます。)

homeディレクトリで、アップしたtar.gzファイルを展開。

tar zxvf 'Shutoko Revival Project3-0-20221018-152306.tar.gz'

この状態でassettoserverで利用するtrackとcarの情報および基本的なコンフィグがセットされる。

が、extra_cfg.ymlはコピーされない。(ContentManagerベースだからか。)
また、packで一緒に展開されるacServerは利用しない。

 

homeディレクトリで、AssettoServerをいったん起動。
./AssettoServer
エラーで止まる。同時にcfgディレクトリにextra_cfg.ymlが生成される。

 

生成されたextra_cfg.ymlを再度編集。(ここがめんどくさい)
windowsで動いているextra_cfg.ymlをそのままコピーしても動かない)

修正を加えた部分を中心にメモしておきます。

ここはwindowsでのサーバ設定と同じなので、迷うことはないはず。

 

# Enable new CSP weather handling. Allows rain and smooth weather transitions. Requires CSP 0.1.76+
EnableWeatherFx: true

# Enable AI traffic
EnableAi:  true

# Ignore some common configuration errors. More info: https://assettoserver.org/docs/common-configuration-errors
IgnoreConfigurationErrors:
  MissingCarChecksums: true
  MissingTrackParams: true
  WrongServerDetails: false
  UnsafeAdminWhitelist: false
# このtrue2つは必要に応じて。
# サーバ起動時にチェックサムエラーが出るときはtrueにすると回避できます。
# (が利用者が改ざんした車で参加できてしまうようになります。)


  # Default maximum AI speed. This is not an absolute maximum and can be overridden with RightLaneOffsetKph and MaxSpeedVariationPercent
  MaxSpeedKph: 80
  # Speed offset for right lanes. Will be added to MaxSpeedKph
  RightLaneOffsetKph: 20
# この辺もお好み次第

 # Number of AI cars per player the server will try to keep
  AiPerPlayerTargetCount: 40

# 一人でやるならこれくらいあってもいい。大人数でやるときは10以下がお勧め

 

  # Overrid some settings for specific car models/skins
  CarSpecificOverrides:
    - Model: bus_JETSET
      TyreDiameterMeters: 1.04
    - Model: honda_acty_ha3
      TyreDiameterMeters: 0.53
    - Model: hk51_traffic_isuzu_nkr_flatbed_tow_truck_hyundai_i30n
      TyreDiameterMeters: 0.74
    - Model: hk51_traffic_isuzu_giga_long
      TyreDiameterMeters: 1.0
    - Model: knight_truck
      TyreDiameterMeters: 1.054
    - Model: hino_profia
      TyreDiameterMeters: 1.02
    - Model: bk_truck_kent_t800
      TyreDiameterMeters: 1.03
    - Model: bk_truck_kent_t800_trailer
      TyreDiameterMeters: 1.03
    - Model: nissan_micra
      TyreDiameterMeters: 0.617
    - Model: nissan_figaro_1991
      TyreDiameterMeters: 0.51
    - Model: mitsubishi_miev
      TyreDiameterMeters: 0.552

  SmoothCamber: true

# このタイヤの設定は、車依存です。
#タイヤスモークが激しく発生するときの対策に使えます。

上記でAIを有効化すると、fast_lane.ai(またはfast_lane.aip)が必要です。この辺もwindows版と同じ。

AIを有効にするために、fast_lane.ai(p)をhomeディレクトリにSSHとかでアップする。
アップしたら、aiディレクトリに格納する。SRPのbeta_ptbの場合、

cd content/tracks/csp/shuto_revival_project_beta_ptb/
mkdir ai
cd ai
mv ~/fast_lane.aip ./

で~/content/tracks/csp/shuto_revival_project_beta_ptb/ai/fast_lane.aipが格納できます。

 

【実行!】

サーバを起動!

cd ~

./AssettoServer

windows版と同じようなログが出力されます。

メインPCからContent Managerでサーバ検索してラズパイで動くサーバへ接続!

 

実際に動かしてみた結果です。

AssettoServer起動時に負荷はかかりますが、その後CPUは5~6%くらい、メモリは25.9%くらい消費するようです。稼動に全く問題なし。
サーバとして動作させるには問題ないですね。
遅延は25~27msくらい。(ローカルLANなので、速いのは当たり前)
ちなみにサーバを別にしても、メインPCのゲーム中フレームレートは改善しませんでした。
やはり、描画のパフォーマンスは基本的にメインPCの性能に依存してますね。

 

ちなみに、これは自宅にサーバを建てることになるので、外向け(インターネット向け)にサーバを公開するには、TCP8081/9600とUDP9600のポート開放が必要になります。ポート開放については、自己責任やサーバ管理の必要性なんかと絡みますので、ここでは説明を避けます。

あくまで、自宅サーバは建てられるんだけど、場所・電気代・嫁が・・・という方向けです。(爆

以上です~。

 

/* -----codeの行番号----- */