TTL's Blog

日々の備忘録てきなblogです。徒然なるままに...

Assetto Corsa をやりすぎて??...マニュアル車購入w

MT(マニュアル)車が欲しい

かなり以前からMT欲しかったけど... Assetto Corsa をやりすぎた為、MT車が欲しくなった。

※SIM上にてMT車走らせるだけでも、かなり楽しいので良かったのだが...以下のきっかけがあったので...

ダイハツ 不正問題

ダイハツ Rocky (AT、HEV)を発注していたのだが、不正の規模が大きくなり、 注文キャンセルとなってしまった。 ※現在Rockyのガソリン車は販売再開となったがHEVは再開されるのか...

これはチャンスかも

受注キャンセルを受け、ひそかに目論んでいた"エンジン車"かつ"マニュアル車"を購入するチャンス到来。 速攻でエンジン車の優位性やMTに乗る理由などをまとめ、ドキュメントを提出。

なぜ"マニュアル車"

エンジン車の優位性までは良かったが... "MT"という所で一旦差し止めが入ったが、 プレゼンの結果、ひとまずOKが出たww

車両選定

新車販売されている車両で"エンジン"かつ"MT"であると必然的にスポーツカー若しくは オフロード車などになる為、中古から選定。 Webから色々情報を集め、再度プレゼン。

Assetto Corsa

購入ターゲットとした車両を Assetto Corsaへ導入し、 首都高や大阪環状、教習所などのコースを走りまわり、雰囲気確認。 凄く楽しい。(SIM上の話だが...) 2,3速で回すといい感じである事が確認できたwww

車両確認

近場で実車確認が出来る店舗をピックアップ。 実車確認しOKとなったので、速攻契約。

納車

店舗引き渡しであった為、メチャメチャ久しぶりにMT車を運転し帰宅。 楽しいけど、クラッチミート位置など探り探りで運転していた感じ。

クラッチなどは実車とSIMでは違うので実車合わせは必要(当然だが...)

※シフトレバーなどSIMでは自分のポジションに合わせて変更可能だが、実車では位置を変えられないので慣れが必要。

楽しい

今時の車は"Drive by Wire"(電子制御スロットル)となっている為、不意に干渉(回転数上がるなど)される場合が あるので慣れが必要な感じだが、やっぱMTは楽しい。

ちょっとした傾斜でも下がったり、進んだりするため、 今まで気づかなかったポイントも若干傾斜がある事を再認識できたww

操作は少し増えたけど、運転する楽しさは激増したので良しとする。 色々とメンテナンスを行う必要がある箇所が多々あるが、ちゃんと整備しながら乗っていこうと思う。

AssettoServer Version 0.0.54 導入前調査

AssettoServer Version 0.0.54 導入に向けちょっと調査

※Version 0.0.55 も pre13 まで進んでいるのでそろそろReleaseされる感じもあるが...

git hub の情報を見てみる 0.0.53からの大きく変わった点はない感じ

New Parameter

New parameter "WrongWayTraffic" , "PlayerChecksumTimeoutSeconds"が追加になっている。

Versionによる設定ファイル差異確認

Version 0.0.53 , 0.0.54 を単純に展開し、cfgフォルダ内 extra_cfg.yml の中身がどのように 変わっているか一応チェック。

diff コマンドを叩いて...

Version 0.0.53 では CSP 0.1.80+で動作していたが、 Version 0.0.54 では CSP 0.2.0+ でないと動作しない項目があるって事と、 二つのパラメータが追加になっている事が確認できた。

  • Maximum time the server will wait for a checksum response before disconnecting the player (サーバーがプレーヤーを切断するまでにチェックサム応答を待機する最大時間)

    • PlayerChecksumTimeoutSeconds: 40
  • Enable traffic spawning if the player is driving the wrong way. Only takes effect when TwoWayTraffic is set to false. (プレーヤーが間違った方向に運転している場合、交通の生成を有効にします。 TwoWayTraffic が false に設定されている場合にのみ有効)

    • WrongWayTraffic: true

現状動作しているVersion0.0.53 の環境をベースに 0.0.54 へ移行し 上記2つのパラメータを追記するだけで動きそう

※CSPのVersionは適宜上げた方が良い感じである (0.2.0 以上) ※色々なパラメータを変更しているので、流用できる事は正義。

AssettoServer 実行ファイルをダウンロード

Raspberry Piにて動作させているので、 "assetto-server-linux-arm64.tar.gz"をダウンロード

Server へ転送

ダウンロードを行った "tar.gz"をServerへ転送

AssettoServer 解凍

解凍を行うフォルダを新規作成するなど準備を行い、解凍を行う。

トラックデータ解凍

Content Managerにて"Pack"したServerデータを解凍。

一度 AssettoServer を起動

./Assettoserver

cfgフォルダ内に"extra_cfg.yml"が作成される。

まとめ

  • Version 0.0.53 と 0.0.54ではパラメータの劇的な変化はないので 移行しやすいと思われる。
  • 使用するCSPのVersionは "0.2.0"以上とする。

こんな感じで何とかなると思われる

近々、SRPなどのトラックデータを用いて実験的に構築し動作確認してみよう。

Assettoserver Version 0.0.53 導入 (備忘録)

Version Up

比較的早い頻度でVersion Upされている気がするwww ※既に 0.0.55 開発中...

現在 Raspberry Pi にて AssettoServer Version0.0.51 を用いて SRP、大阪環状など4コースを運用しているが同時参加台数が少ないため、 負荷が軽い事からトラブルなく動作しているwww

近頃、MFゴーストなるものが流行っているようであり、 小田原トラックを Version 0.0.53にて動かしてみる。

う~ん...どうやって設定したか覚えてないぞ...

自分の過去記事読みながら、再度セットアップを実施 www

ざっくり手順

過去記事参照の事。

  1. Assettoserver 本家より Version 0.0.53 圧縮ファイルをダウンロード
  2. Server (RaspberryPi) 側へ導入を行うためのフォルダを準備
  3. 用意したフォルダへ項目1の圧縮ファイルを転送
  4. 圧縮ファイル解凍
  5. Content Manager起動
  6. "Server"を選択しトラックやコンディションなど設定
    • ダメージなどのパラメータ設定
    • 抜け漏れが無い事を確認
    • "Save"をクリック
    • "Pack"をクリックし圧縮ファイル生成
  7. Packした圧縮ファイルをサーバーへ転送
  8. 圧縮ファイルを解凍
  9. ymlファイル生成の為、一旦起動
    • "yml"が無いよ以外のError発生時は都度対応
  10. 設定ファイルを弄る(これ重要)
  11. 各種設定完了!!
  12. Server起動 -> OK.

Server 設定情報

Version 0.0.51から追加された設定項目が少し存在していたので 設定ファイルの使いまわしはやめておいた方が良いと思われる。

※AI Traffic の走行用パラメータなど追加になっているような気がする(override設定)

ひとまず....

Version 0.0.53 を動作させ、様子を見ているが、現状特に問題ないっぽい。

他のトラック用のServerも "0.0.53"へ移行する事とする。

追記

何事も放置していると忘れる事を痛感。

Serverへアクセスするためのアカウント情報すら忘れている始末www

※しばらく悩んだ...

※入れてよかったwww

AssettoServer Online 複数のトラックを同時に動作させる

首都高や大阪環状など、複数のトラックを同時に運用したい欲求が出てくる。 今回は同時運用するための備忘録である。

はじめに

Content ManagerにてServer設定ファイル出力に関しては別の記事を参照頂くとして、 サーバーを公開する為には外部から見えるようにする必要がある。

ポート設定

Content ManagerにてServer情報を設定する画面の右側にポート設定がある。

UDPTCP、HTTP のポート番号を変更する事で1台のServerにて複数のTrackを動作させることが可能となる。

注意

UDPTCPのポート番号は同一とする事。

ファイルを直接編集する場合

"server_cfg.ini"ファイル内に通信用ポート設定が記述されている。

※ファイルは cfgフォルダ内にあるはず

どのように設定する??

例えば以下のように設定する事で同時起動が可能となる。

首都高トラック

UDP_PORT=9600
TCP_PORT=9600
HTTP_PORT=8081

大阪環状トラック

UDP_PORT=9601
TCP_PORT=9601
HTTP_PORT=8082

まとめ

RaspberryPiにて4トラック同時に動作させてますが、 参加人数が少なければ負荷も低いので問題なく動作しています。

本当はポート番号変更しちゃダメなのかは不明www たまたまやってみたら普通に動いたので動作が不安定となっても 自己責任でお願いします。

Buffaro USBメモリ購入 ※Boot不可だった話

USBブートを目的にUSBメモリAmazonにて購入。

Buffalo製 32GB 安い www

UbuntuやKaliなどをUSB Bootにて使用する目的で購入。

まずは CrystalDisk でベンチマークとってみる。 Mainで使用しているデスクトップではなく、 ちょっと古い NotePC にてベンチとったので、参考程度に見てください。

1st

2nd

早くもないけど... 遅くもない... うぅぅん若干遅いか...

けど、まぁ いいかぁって感じ。

で、 いつも通り Rufus を使って早速ブート用に仕立ててみた....

rufus.ie

正常にイメージ作成は出来たのだが.... BootメニューにUSBメモリが表示されない.... (なぜ??

サブのノートPCでもBootしない...

これはもしかして... Boot出来ない USBメモリかもwww

というわけで、まずはググって以下の記事を参考にやってみた。

trycatchand.blogspot.com

何回か色々と試してみたが... 結果は予想通り、Bootしなかった www

同様の方法にて手元にあるUSBメモリではBoot出来たので、 今回購入したUSBメモリがBoot不可という事で間違いない。(と思う

まぁ今回は通常のUSBメモリとして使用すれば良いという事でwww

Boot用に使用するUSBメモリは過去実績があるものを購入する事にしよう。

久々にBoot時に認識しない USBメモリ購入した話でした。

やっぱ tmux 超便利だわ (linux)

tmux めちゃ便利

ネタが無いので、いまさらながら blog に書いてみる。

私の環境ではRaspberryPiを用いて複数のAssettoServerを稼働させている。

都度メンテナンスを行うために停止/起動の作業が発生する為、 tmux上にて運用してます。

合計6セッションを同時に動作させてますが、快適に動作してます。

  • AssettoServer : 4セッション
  • 通知処理 : 2セッション

tmux って?

ターミナルマルチプレクサです。 使用する事でターミナルを終了してもセッションが維持される便利機能。

Serverなどリモートにて動作させている環境において SSH接続し、フツーにアプリ起動させた場合、SSHを切ると アプリも終了しちゃいます。

OSのアップデートやアップグレード、ソフトウェアのビルドなど 処理に時間がかかる場合などSSHを切断しても動作継続してほしい場合に使用します。

裏で動いているので、再度SSHなどにて接続する事で継続して作業を行う事が可能となる。

Service 使えばいいんじゃね?

Server起動時にサービスにて自動実行するのも良いのですが、 都度実行するソフトウェアの場合、サービスに組込むのは難しいので ちょっと実行したいけど、SSHなどを接続し続けるのはちょっとという場合に使用します。

準備

しれっと既にインストールされている可能性もあるので、 コンソールからコマンドを叩いてみる

tmux -V
tmux 3.3a

上記のようにtmuxのVersionが表示されればインストール済み。 "tmuxってコマンド存在しないよ"ってerrorが表示された場合は 別途インストールを行う必要あり。

Install

環境に応じてinstall方法は変わるので 公式サイトを確認しインストールする。

github.com

基本的な使い方

linux アップデート作業を例とします。

  1. 遠隔にて操作したい対象へssh接続する
  2. tmuxを起動する tmux
  3. tmuxが起動すると、画面がちょっと変わるはず。
  4. アップデートを実行 sudo apt update -y
  5. コマンド実行したら、一旦tmuxを抜けてみる "ctrl+b"を押したのち、"d"を押すとコンソールに戻る。
  6. tmuxへ戻る tmux a
  7. tmuxを終了させる場合、tmuxコンソール上にて exit と入力しエンターを押す事で終了となる

コマンドなど

"tmux"にてネット検索すると山ほど情報が出てくるので、そちらを参照。 杜甫々さんのpageが分かりやすい。(有難う御座います)

www.tohoho-web.com

コマンドは最低限以下の項目が分かれば十分です。 * 起動 / 終了 * 中断 / 復帰 * セッション名変更 * セッション移動

どこからでもメンテが出来るので非常に便利。 おためしあれ。

【AssettoCorsa】 AssettoServer ログイン状況をDiscordへ通知する

はじめに

AsettoServer にてオンラインサーバーを運用している時、 誰がコネクトしているのか知りたい。誰かが走っているなら、追走したい。 という欲求から AssettoServerへコネクト(Connect) / ディスコネクト(Disconnect)している情報を Discordへ通知出来れば便利だよねって事で実現を目指す。

オンライン参加者が Chat を行うと、内容を Discord へ通知する仕立ては 導入済みだけど、一人で参加している時にわざわざchatは打たない。

自動で Connect / Disconnect が分かると皆うれしい(はず

※個人練習している時はバレたくないが....

Discord Webhook

AssettoServerのプラグインにて"DiscordAuditPlugin"がある。 オンラインにてChatした内容がDiscordへ送られるプラグイン。 これがあるなら...Connect/DisconetもDiscordへ送ってくれればよいのに...

Discord側にて Webhook を事前に準備する必要あり。

Webhookの準備が出来れば、あとは送るだけ。 AssettoServerに限らず、Webhookのurlが分かっていれば どこからでもDiscordに対してメッセージ送信が可能となる。

AssettoServerが出力するログをトリガーにてwebhookする方法も考えたが、 AssettoServerが吐くログファイルはタイムスタンプが付加されているので 最新のファイルを検索処理も作る必要がある。

だが、そこまでして通知を実装する気なし!!

どうする?

git hub を漁ったところ... iiferedon さんが作ってた!!

github.com

一先ず、ありがたくダウンロードさせて頂き導入してみた。

Assetto Corsa Server Listener - Discord Webhook -

設定は簡単に終了。以下の2点だけで完了 * Discord webhook URL 設定 * AssettoServerのURL、port番号設定

Pythonで書かれているので、Pythonで実行するだけ...

AssettoServer Onlineへconnectしてみると...

おぉぉ。connect情報がDiscordへ送信されている!!!

ぢゃぁ、Disconnect!!

ん?? Errorが出て止まってる??

ちょいと調査が必要

仕立て

そもそもAssettoServerを動作させると、Content Managerなどオンライン情報表示を行うため、 jsonにて現在のサーバー接続状況を取得可能となっている。 ※ウェブブラウザを使用すると簡単に見る事が可能。

  • " Assetto Corsa Server Listener - Discord Webhook -"では最初の起動時にサーバーからjsonデータを取得
  • 取得したjsonデータをローカルのファイルへ書き出す。
  • 一定間隔にてサーバーからjsonデータを取得
  • ローカル側のファイルと比較し、差異があった場合に Connect / Disconnect を判断
  • 結果をDiscordへwebhook

という流れぽい。

"Disconnect"の情報までは検知しているが、Webhookするためのデータ作成処理においてエラーが発生。

エラーの状況から"Null"参照しているっぽいけど... どのタイミングで発生しているのかわかりづらい... "Python"ってデバッグしづらい... (Pythonに限ったことではないが...)

※"pdb"というpythonデバッガが存在している事は後で知る事になる。

※"pdb"は便利!! これが無いと python デバッグ無理!!

デバッグすれば済む事なのだが、以下の点が気になる。 * jsonデータをローカルファイルへ保存 * AssettoServerに誰かがログインしている状態にて python を動かすとエラー出る。

だったら勉強がてら自分で組むことにする

ChatGPT

Python , jsonともに素人の私がググって調べると時間がかかるので、 "ChatGPT"へお伺いする。

※ChatGPTの回答内容は自粛

Pythonを使用しWebページからjsonデータを取得しjsonデータの内容に変化があるか確認を行うためのサンプルコードを教えてほしい
ChatGPT : 再帰的なアプローチを使用してJSONデータを探索し、差分を検出する方法を採用しています。

で、サンプルコードが吐かれる... ふむふむ。 さすがPython!! コード量が少なくて見やすいwww

追加質問

get_json_dataにて取得したjsonデータにてどの部分が変更になったか確認したい

あぁ、なるほどねぇwww

雰囲気はわかったのであとは実装!! (ほんとうはわかってない

ぷろぐらみんぐ 方向性

  • Python起動時、AsettoServerから接続情報(json)取得
  • 一定時間にて最新jsonを取得
  • 前回 / 最新 json にて差異があるか確認
  • Connect / Disconnect 情報のみが必要なので、json内の"DriverName"に変化があるか確認
  • 変化があった場合、以下の条件を確認しDiscordへwebhookする
    • None -> user名 : Connect
    • user名 -> None : Disconet

※ iiferedonさんのPythonではユーザー名、使用車両、スキン名などもWebhookされるが Connect情報が重要なので、他の項目は捨てる。 webhookしている部分は参考にする。(ありがたい)

ついでにwebhook関係をググってみる www

※最重要な事は 動けば良い をコンセプトとする。

AssettoServerからjson取得

get_jsonする事で簡単にjsonデータ取得が行える。便利だねぇ。

current_data= get_json_data(url)

新旧データ

新旧jsonデータを保持するために2つバッファを用意 * current_data * previous_data

起動時に"previous_data"へ一発jsonを読ませる。 最新データを"current_data"へ読み込み 二つのデータに差異があるか確認すれば全てOK

比較

ChatGPTさんに教えてもらったサンプルコードをcopy して2つのjsonデータ比較を行う。

def get_json_data(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.json()
        else:
            print(f"Failed to fetch data from {url}. Status code: {response.status_code}")
            return None
    except requests.exceptions.RequestException as e:
        print(f"An error occurred while fetching data: {e}")
        return None

def compare_json_data(data1, data2, path=""):
    if isinstance(data1, dict) and isinstance(data2, dict):
        for key in data2.keys():
            if key not in data1:
                print(f"Key '{key}' added at path: {path}/{key}")
            else:
                compare_json_data(data1[key], data2[key], f"{path}/{key}")

        for key in data1.keys():
            if key not in data2:
                print(f"Key '{key}' removed from path: {path}/{key}")

    elif isinstance(data1, list) and isinstance(data2, list):
        for i in range(min(len(data1), len(data2))):
            compare_json_data(data1[i], data2[i], f"{path}/{i}")

        if len(data1) > len(data2):
            for i in range(len(data2), len(data1)):
                print(f"Item '{data1[i]}' removed from path: {path}/{i}")

        elif len(data1) < len(data2):
            for i in range(len(data1), len(data2)):
                print(f"Item '{data2[i]}' added at path: {path}/{i}")

(続くけど...)

上記の場合 "data1"と"data2"を使用しているので

if data1 != data2:

とするだけで比較完了!! なんて簡単な!!

Webhook

後は条件をダラダラを書いて、Webhookを書けば終了。

ログインしているユーザーは"DriverName"というキー名にて管理されている。 結果が保持されている"path"中に "DriverName"が含まれているか確認

  • "path"中に"DriverName"が含まれているか確認
  • 新旧 "DriverName"の状態確認
    • None -> user名 : Connect
    • user名 --> None : Disconnect
  • Webhook データ生成
    • Connectしたよん / Disconnect したよん
  • Webhook 実行
  • Discordに表示される

Code

出来上がったコードは以下の通り。

import requests
import json
from urllib.request import urlopen, Request
import time
import os
import sys
import colorama
from colorama import Fore
from discord_webhook import DiscordWebhook, DiscordEmbed


#Change these values
webhook = DiscordWebhook(url="DiscordWebHookURL")
server_address = "localhost:8081"

def get_json_data(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.json()
        else:
            print(f"Failed to fetch data from {url}. Status code: {response.status_code}")
            return None
    except requests.exceptions.RequestException as e:
        print(f"An error occurred while fetching data: {e}")
        return None


def send_webhook(title, player, colour):
    embed = DiscordEmbed(title=title, color=colour)
    embed.set_timestamp()
    embed.add_embed_field(name='User Name :', value=player)
    webhook.add_embed(embed)
    response = webhook.execute()
    return None


def compare_json_data(data1, data2, path=""):
    if isinstance(data1, dict) and isinstance(data2, dict):
        for key in data2.keys():
            if key not in data1:
                print(f"Key '{key}' added at path: {path}/{key}")
            else:
                compare_json_data(data1[key], data2[key], f"{path}/{key}")

        for key in data1.keys():
            if key not in data2:
                print(f"Key '{key}' removed from path: {path}/{key}")

    elif isinstance(data1, list) and isinstance(data2, list):
        for i in range(min(len(data1), len(data2))):
            compare_json_data(data1[i], data2[i], f"{path}/{i}")

        if len(data1) > len(data2):
            for i in range(len(data2), len(data1)):
                print(f"Item '{data1[i]}' removed from path: {path}/{i}")

        elif len(data1) < len(data2):
            for i in range(len(data1), len(data2)):
                print(f"Item '{data2[i]}' added at path: {path}/{i}")

    else:
        if data1 != data2:
            if path.find('DriverName') > 0:
                #Send Discord Messages
                if data1 == None:
                    title = "SRP Connected"
                    color=5763719
                    usr = data2
                else:
                    title = "SRP DisConnected"
                    color=15548997
                    usr = data1

                print(f"Path: {title}")
                print(f"{usr}")
                send_webhook(title,usr,color)


if __name__ == "__main__":
    # Specify the URL of the web page you want to check for changes
    url = "http://"+server_address+"/JSON%7C"
    
    # first fetch
    previous_data = get_json_data(url)
    if not previous_data:
        exit()

    while True:
        # Get data every 10 seconds and check the change
        time.sleep(10)
        current_data = get_json_data(url)
        if current_data:
            compare_json_data(previous_data, current_data)
            previous_data = current_data
        else:
            print("Failed to Get Data")

準備

  • 自分のDiscord Webhook アドレスへ書き換える
  • AssettoServerのIPアドレスおよびポート番号へ書き換える

実行

webからjson情報を取得し実行するため、AssettoServer動作中のPC以外からも実行可能である。 まずはAssettoServerが動作している端末にてpythonを実行し通知を行う事とする。

  • 新規コンソールを開く
    • "tmux"などを使用し別スレッドでもOK
  • AssettoServerが実行中である事を確認
    • サーバーが停止状態の場合、jsonデータ取得が行えないのでエラーとなる。
  • python実行
    • python3 xxxx.py <リターン>
  • 何事もなければ、画面はウンスン状態 (変化なし)
    • Error発生時はエラー内容を表示し停止するので、エラー内容に応じて対処する。

Connect / Disconnectを行い、以下のような通知が来ればOK.

AssettoServer Version 0.0.52

AssettoServer Version

Ver 0.0.52 動作トラブル

オンラインにて走行していると路面やヘッドライトの照射がおかしい事に気づく。

AIなどにて使用する車両情報も今まで通り設定しているのに、走行してない車両が何種類かある...

"mod"環境が壊れた可能性もあるので、 いつもの事のように、"Assetto Corsa"側の問題と思い 再インストールなどを実施したが症状変わらず。

原因

公式ページを再確認....

github.com

"Support for CSP handshakes (does not work yet, release version of CSP 0.1.80 required)"

もしかするとこの機能などが邪魔しているのかも???

設定項目が存在しているのかもしれないが、現時点では未確認。 ※エディタ開くだけなのに面倒がる...

CSP (Custom Shaders Patch) 確認

一先ずCustom Shaders Patch 公式ページを確認

acstuff.ru

Patronしてないと "0.1.80"は落とせない... ※2023/08/01現在

まとめ

真因は不明だが、現状では AssettoServer Version 0.0.51 を使用したほうが安定動作する

  • 新しいバージョンが上がっているからと言って、ほいほい飛びついてはダメって教訓。
  • CSP (Custom Shaders Patch) Ver 0.1.80が公開されたら AssettoServerも Version up する(と思う。
  • "Sol"の可能性もあるけど、安定動作版までまずは戻す....

Version

  • Content Manager
    • 0.8.2561.39678 (x86)
  • CSP (Custom Shaders Patch)
    • 0.1.79
  • Sol
    • 2.2.9
  • SRP (Shuto Revival_Project)

【Assetto Corsa】Assettoserver テレポート 機能 (オンライン専用)

オンラインサーバ (AssettoServer) にて "テレポート "(Teleport)が出来る事がわかったので、実際にやってみた

※ 公式マニュアルを見ればすぐに分かる事だったが、そこにたどり着くまでが長かったので備忘録。

※ 公式ページも説明がざっくりなのよね...

※ FAQページなんてトラブった時しか読まんし...なぜFAQ???

※そもそも"AssettoServer"に関するドキュメントを探すのは非常に大変...サーバ立ててる人ってかなり限定的なのかも???

テレポート機能とは

通常オンラインサーバへ入ると決まったPIT(PA)からスタートします。

辰巳PAなどからスタートした場合、大黒あたりまで走るのにはそれなりに時間がかかる...

大クラッシュなどの場合、スタート時点のPIT(PA)へ戻ります。

複数人で"追いかけっこ"していてクラッシュ -> PITへ戻ると追いかけるのが大変... 皆で一斉にPitへ戻ったりして...

そんな時に"テレポート機能"を使用する事でトラック上、 任意の場所へテレポートするので移動がめっちゃ楽ちんになります。

前提条件

  • Content Manager (Full Version)を使用
    • 公式を見ると"Lite Version"でも出来るっぽいけど...
  • AssettoServerにてオンラインサーバを運用
  • 当然ながら...Steam版 Assetto Corsaを使用している前提www

公式サイト

基本的には公式サイトに全て記載されてます。(英語

使用しているAssettoServerのVersionによっては動きが違う可能性もありますので、公式サイトを一度は確認してください

assettoserver.org

テレポートに関する記述は "Frequently Asked Question"ページ内、"How do I enable Teleportation?"項目に記載されてます。

やること

やる事は以下の2点。 エディタとContent Managerがあればサクッと完了します。(基本的には

  • テレポート用位置ファイル作成(csp_extra_options.ini)
  • Car Entry データ (entry_list.ini) へテレポート設定
    • テレポート許可した車両だけ対象となる。
  • AssettoServer cfgフォルダへデータ転送 (転送時には念のためSerever止める)
  • AssettoServer 再起動

サンプルにて展開されているテレポート位置情報だけだと若干足りない部分もあるのですが、一度動かしてしまえば、あとから追加するだけなので手間はないはず。

テレポート位置データファイル作成

"Custom Shaders Patch"の拡張機能となる為、新規にて"csp_extra_options.ini"を作成します。

※ "公式もしくは自分で作ってね" との事なので 公式データ をまずは使用します。

  1. "Official Shutoko Revival Project Teleport locations"をクリックすると位置情報一覧が表示されるのでCopy iconをクリックし Copy します。

  1. エディタ (メモ帳など)を開いてペーストする

  2. "csp_extra_options.ini"という名称にて保存(save)

  3. 準備完了

Content Manager (CM)

オンラインサーバを立てる際に基本情報を"Content Manager" (CM)を用いて設定しているはず。

Server Main Tab

"Main Tab"を開きます

  1. ウィンドウ右下あたりにある"Require CSP to Join"へチェックが入っている事を確認。チェックが入ってない場合はチェックする

  2. "Auto-fill"ボタンをクリック

  3. 現状使用しているCSP versionが反映される

Entry List Tab

Car Entry List を開きます。

  1. テレポート対象となる車両情報中の "CSP"をクリック
  2. 下図が表示されるので "Allow to change color in pits"、"Allow teleporting"へチェックを入れる。
  3. 必要な車両に対して同様の処理を行う。
  4. ウィンドウ右下の"保存"(save)をクリック

余談

"entry_list.ini"をエディタで開くと、テレポートを有効化した車両情報のスキン指定へ "/ADAn"が追加されているので、Content Managerを使用せずエディタでゴニョゴニョしたほうが手っ取り早いかも...

ファイル転送

  • Serverの cfg フォルダへ作成した2つのファイルを転送。
    • csp_extra_options.ini
    • entry_list.ini
  • Server再起動

これでオンラインサーバ側の準備は完了

テレポート (オンライン参加者)

ここからはオンライン参加者側の操作となります。 * "Chat"ウィンドウを開く* * ウィンドウ下部にある"電球"アイコンをクリック * "Teleport to..." Menuをクリック * テレポート先一覧が表示される * テレポート先を選択 * "Teleport"をクリック -> Teleport !!

※一瞬にて移動出来るので非常に便利

※公式位置情報の一部には奈落へ落ちる場合あり(落ちない場合もある

Teleport App

"RaceDepartment" にてテレポート用のすばらしいアプリが展開されてます。

www.racedepartment.com

地図上にて拡大/縮小が行えるほか自車位置などの表示も行う感じです。 テレポート先がドット表示されているので、ドットをクリックする事でテレポートが行われます。

ほんとに素晴らしい。

まとめ???

最近AssettoCorsaをはじめたばかりですが、非常に面白い。 有用なskinやmod、Appなどを色々な人が作成し展開して頂き、遊ばせて頂いているので 私なりの備忘録ですが、ちょこっとでも参考になれば幸いです。

Assetto Corsa Online Server を RaspberryPiをつかってはじめよう【設定・ファイル転送編】

前回までのblog

前回までのblogにてサーバー起動確認までは行えたはずですが、まだAI車両などは走ってないですよね。

 

今回はそのあたりの設定を行います。

AssettoServer公式ページにも色々記載がありますので参照ください。

assettoserver.org

ファイル転送(raspberrypi -> windows)

Linuxに慣れている人たちは直接RaspberryPi側のファイル変更を行ってOKですが、"vi"や"nano"などのエディタに不慣れな人はなかなか難しいですよね。

 

今まではWindows側からRaspberryPi側へのファイル転送を行ってましたが、RaspberryPi側のファイルをWindows側へ転送出来れば便利ですよね。

TeraTermにてssh接続している前提です

 

SSH SCP

"ファイル(F)"メニュー中の "SSH SCP..."をクリック

 

以下のウィンドウが開きます。

上側: Windows -> RaspberyPiへの転送 (send : 送信)

下側:RaspberryPi -> Windows への転送 (Receive : 受信)

 

ファイル受信

"From:"へ転送を行う”Path + file名"を記入します。

今回はAIを走らせるための設定を行うため"extra_cfg.yml"を転送する事とします。

ファイルまでのパスは"/home/<user名>/ACS/SRP/cfg"ですので、"From"欄へ以下の様に記述します。

"/home/<user名>/ACS/SRP/cfg/extra_cfg.yml"

※おさらいですが <user名>は自身のユーザー名へ置き換えてください

 

何処へ転送するかを"To:"欄へ記入します。"..."をクリックする事で選択できますので分かりやすい場所を指定

 

 

"Receive"をクリック

正常に転送完了の場合、何もメッセージなど表示されません。

エラー時のみメッセージが表示されますのでエラー時はパスやファイル名など確認し再度実行します。

 

正常に受信できていれば指定フォルダへファイルが存在しているはずです。

 

この方法を使用する事でTeraTermにてSSH接続している環境であれば、容易にファイル転送が行えますので他の環境でも便利に使用出来るはず。

 

AI有効

extra_cfg.ymlファイルをエディタ(メモ帳でもok)で開きます。

"EnableAi:"の項目を探します。

false を trueへ書き換えます。

EnableAi: true

ファイルを保存(save)しエディタを閉じます。

 

ファイルをSSH通信を行っているTeraTermドラッグアンドドロップします。(おさらい

いつもの画面が表示されますのでcfgフォルダまでのパスを記入します。

/home/<user名>/ACS/SRP/cfg <リターン>

"OK"をクリックする事でファイル転送が実行されます。

 

 

この様に、RaspberryPi側とWindows側にてファイル転送が行えますので各種設定を行い、Assetto Coras Onlineを楽しみましょう。

 

AI車両設定は奥が深いです。

日々調整しながら最適値を模索中。

 

 

Assetto Corsa Online Server を RaspberryPiをつかってはじめよう【Content Manager 編】

Content Manager Full Version

AssettoServerにて使用するトラック、車両情報などを"Content Manager"を使用し準備します。

 

今更ですが、Content ManagerにてServer設定を行う場合、LiteVersion(無償版)では非常に面倒(らしい)ですので"Full Version"を使用する前提です。

※私は最初から"Full Version"にしちゃったので....

※"Full Version"へ移行する方向などはググってください。

 

assettocorsa.club

Online Serverを立上げ、楽しく遊ぶためにも機能制限のない、"Full Version"へ移行する事をお勧めします。

 

Server 表示設定

Content Managerを起動し "server"を選択します。

標準メニューでは”server”の項目は非表示となっているので、Content Manager設定メニューから”server”表示へチェックマークを入れる事で上段メニューへ"server"が表示されるようになります。

  • “設定 -> コンテントマネージャ" の順に選択
  • "外観" を選択
  • "サーバ"へチェックを入れる

という準備を行う事で画面上部メニューに “サーバ”が表示されます。

 

"Main"

Server 設定

デフォルト設定にて1つサーバサンプル存在している事を確認する。

※Content Managerインストールが正常に行われていないと文字化けや正常に設定を行う事が出来ないのでその場合は一度、全てをアンインストールし心を落ち着けたのちに再度トライする。

※私は何度か再インストールしている際に文字化けではまった....

 

  1. 画面右上 "サーバ"を選択
  2. 画面下"+"(Create a new one)をクリック
  3. 新しいプリセット"SERVER_xx" (xxは自動で附番される)作成
  4. サーバ名を変更 "SERVER_XX -> 独自名称"
    • サーバ名など自由に入力する(半角英数)

    • このサーバ名が公開されるので自分たちで分かりやすいものとする
      • 2バイトコードはエラーとなる可能性が高いので半角英数のみとした方がベターと思われる。(トラブルが怖いので試してはいない...)

トラック選択

"首都高"を想定し設定を進める

"track preview"(上図だと"Imola"が表示されている部分)をクリックする事でトラック選択となる。

  1. "track preview"をクリック
  2. "Shutoko Revival Project 0.9.1"を選択
  3. "Tatsumi PA"を選択。
    • 最初は"芝浦"で考えていたが、日和ったので公式にて記載のある”辰巳PA"とする。
  4. "OK"をクリック

 

Capacity

PIT収容台数値設定

AIなども走行させる為、ひとまず最大である "40"を設定。

※あとから設定ファイルを変更する事も可能なのでまずは数台でもOK

 

パスワード

Online Serverへ参加する際に必要となるパスワードを設定。

空欄の場合は誰でも参加可能となる為、必要に応じて設定

プライベートサーバーとするならばパスワード設定は必須。

 

Admin Password (かなり重要

管理者用パスワード設定を行う。

8文字以上のパスワード設定が必要。(公式

※単純なパスワードは絶対に避ける。(自己責任

※Discordなど見ていると簡易パスワード設定のサーバーはそれなりに狙われている

 

NUM_THREADS

CPUスレッド数の設定を行います。

RaspberryPi 3B+は4コアとなっているので、"4"を設定

※RaspberryPi 3B+ のコアは 1コア/1スレッド となっている。

※今時のCPUにて1コアにて複数スレッドが動作する場合はそのスレッド数を設定

※簡単にソースコードを見ただけだと使われていない雰囲気もあるのだが???

 

Port設定

デフォルトのまま変更しない事。(重要

 

Custom Shaders Patch

一度、"Auto-fill"をクリックする事で"Minimum version"が自動設定される。

"Reequire CSP to join"へチェック

 

"ENTRY LIST"

※AIも含め走行可能な車種は先の"Capacity"に依存していると思われます。

※肌感覚なので詳細は調査していないが、車種登録数をCapacity以上で設定すると何処かでエラーとなったはず...

※公式ビギナーズガイドにてpit数以上に車両登録を行うとゲームがクラッシュするとの表記があるので、pit数以下の登録とすること

---

”Only add as many cars to the entry list as there are pits available for the track and layout you've chosen.
Ignoring this limit will result in the game crashing when joining the server.”

---

自車として使用する車両、AIとして使用する車両をCapacityで指定した数分選択します。

※車種のスキンなども個別に選択する必要があります。それらも1車両として登録されます。

※自車、AI車は後で設定します。

  1. "+"(追加)をクリック
  2. 車両選択
  3. "Add"(追加)をクリック
  4. 台数分繰り返し。

 

 

"RULES"

サーバー走行ルールを決定します。

好きに設定して頂ければOKです。

  • 燃料消費:ゼロ
  • ダメージ:ゼロ
  • タイヤ摩耗:ゼロ

 

"CONDITIONS"

コースコンディションの設定を行います。

TIME : コースの時間 ※管理者はchatを使用し変更可能なので適当でOK

 

公式参考設定



 

天候

"WeatherFX"項目の右端のドットをクリックする事で時間や日時変更を行う事が出来ますが、AssettoServerでは動作しないので設定を行わないでください。

 

"SESSIONS"

AssettoServerにて走行する際には"Practice"(練習)のみ有効とする必要があります。

  • "Pickup mode" へチェック
    • "locked entry list in pickup mode"のチェックを外す
  • "loop mode" へチェック
  • "Practice"(練習)へチェック
    • Timeを1~2時間など適当な時間を設定
    • 直接入力にて長時間を設定するとバグる可能性あり
  • 以下の項目のチェックを外す
    • "Booking"(予約)
    • "Qualification"(練習)
    • "Race"(レース)



 

 

保存(save)

画面下にある"保存"(Save)をクリックする事でデータ保存が行われます。

長かった....やっとここまで来た...

 

Online Serverとして使用する元データが一先ず完成しました。

このデータをRaspberryPiへCopyする事でOnline Server用のデータがそろいます。

 

"車両情報変更"

"ENTRY LIST"にて使用する車両選択を行いましたが、ユーザーが使用する車両、AIが使用する車両を設定する必要があります。

 

1. データフォルダを開く

画面下の"フォルダ"をクリックする事で先ほど"Save"を行ったフォルダが開きます。

 

"entry_list.ini"ファイルをメモ帳などで開きます。

※今後もファイル操作を行うことが多々ありますのでエディタを必要に応じてインストールしておいたほうが良いと思います。

※無償で使用できるエディタは沢山ありますが、Microsoft から提供されている"Visual Studio Code"が機能豊富であり使いやすいと思いますので参考に...

azure.microsoft.com

と、話がずれましたがファイルを開くと[CAR_x]という項目と共に先ほど選択した車両情報が記載されていることが確認できると思います。

各車両情報の最後の所へ"AI=xxxx"という1行を追加していきます。

xxxx部分は以下の3種類を記述します。

  • none : ユーザーが使用
    • online serverへ参加するユーザーが選択可能となります。
  • fixed : AI専用
    • AI専用の車両となります。
    • ユーザーは選択不可
  • auto : ユーザー / AI 共用
    • AIが車両を使用していない状態であればユーザーが選択可能。

この情報をすべての車両に対して行います。

Content Managerが生成した"entry_list.ini"にはこの1行は記載されてませんので、このままサーバーを動かすと全てがユーザー用となるため、AI車両が1台も走らない事になります。

 

下図の感じになります。

全車両に対して追記が完了したら保存してファイルを閉じます。

 

 

"Pack"

データはPC内に保存されてますので、RaspberryPiへ転送するためのデータ生成を行います。

  • "Pack"と表記されている右側の"▼"をクリック
  • "オプション"をクリック
  • "Linux(64-bit)を選択
  • "Pack"をクリック

 

 

 

保存先などのウィンドウが表示されますので確認を行い、"保存(S)"をクリックします。

 

 

これで使用する車両データおよびOnline用の設定データがパックされました。

このデータをRaspberryPiへ転送します。

 

"データ転送"

先でパックした圧縮ファイル (tar.gz)をRaspberryPiとSSH接続しているTeraTermドラッグアンドドロップします。

 

 

データ転送先を聞かれますので

"/home/<user名>/ACS/SRP"を指定します。

※<user名>は各環境のものに書き換える事



SSHコンソールにてディレクトリを移動します。(念のため

cd ~/ACS/SRP

 

ファイルを解凍します

tar zxvf xxxx.tar.gz (ファイル名はPackした圧縮ファイル名)

 

 

ymlファイル

AssettoServer , トラック、車両情報などがRaspberryPiにそろいましたが...

まだServerは立ち上がりません。

cfgフォルダ内に"yml"ファイルが存在していないので生成する必要があります。

 

生成

現在"SRP"フォルダにいるはずですが...

不安な人は以下のコマンドを実行し"SRP"フォルダへ移動

cd ~/ACS/SRP

 

"AssettoServer"を一度実行する事で"yml"ファイルが生成されます。

./AssettoServer<リターン>

"yml"ファイルが無いので、エラーが出て止まりますが焦らずです。

 

確認

ymlファイルが生成されたか確認します。

ls -l cfg<リターン>

 

"extra_cfg.yml"ファイルが存在していれば一安心です。

ファイルサイズが "ゼロ"でない事も確認します。

※稀にファイルは生成されても中身が無い場合あり。

 

ファイルサイズが"ゼロ"だった場合

サーバー起動時にErrorとなります。※他の要因の場合もあるけど...

実際ファイルサイズが "0"だった時があるので備忘録

"extra_cfg.yml"ファイルを一度削除し再度AssettoServerを実行しymlファイルを生成します。

  • rm cfg/extra_cfg.yml <リターン>
  • ./AssettoServer <リターン>

再度上記 "ls -l cfg"を行いファイルサイズを確認してください。

 

後は"AI"ファイルを入れれば基本的にはサーバーの準備は完了です。

 

AIデータ

AIデータ・ダウンロード

Discord "Shutoko Revival Project" #ai-spline-disussionにてcompuさんが公開しております。 #ai-spline-releases

 

#ai-spline-disussionは他のAI情報も公開されてます。

channelの先頭付近なので、頑張って先頭までページを進めます。

 

 

 

"fast_lane.aip"をダウンロードします。

 

AIデータ保存用フォルダ作成

サーバ側にAIデータ保持用のフォルダを作成します。

ssh端末からフォルダ作成を行います ※階層が深いのでちょっと注意。

"pack"されたデータを展開しているので、ざっくり以下のような階層となってます。

グレーアウトしている"ai"と書いてあるフォルダを作成する事となります。

 

 

次のコマンドを叩いてディレクトリを作成します。

mkdir ~/ACS/SRP/content/tracks/csp/shuto_revival_project_beta/ai

 

AIデータ・コピー

フォルダが作成できましたので、AIデータをコピーします。

 

もう慣れましたよね。

いつものウィンドウが表示されますんおで、

送信先へ先ほど作成したパスを入力します。

/home/<user名>/ACS/SRP/content/tracks/csp/shuto_revival_project_beta/ai

"OK"をクリック

 

 

Sever起動

Online Serverの準備は整いました。

一度起動してみましょう。

 

ssh端末より以下のコマンドを実行します。

./AssettoServer 

初期起動はちょっと時間がかかりますが、じっくり待ちます。

正常に起動できれば"Lobby registration successful"が表示されます。



 

Content Manager

"ドライブ" -> "LAN"を選択

 

online serverが見えるとサーバー情報が表示されます。

  • 画面右下の「リフレッシュ」を一度クリック
  • 車両選択
  • 「参加」が緑となっていれば一先ずOK

実際に「参加」をクリックしレースができるか確認

 

ここまで出来れば、あとはインターネット側の設定をどうにかすればOnlineができます。

 

長かった...

 

ひとまず完了

 

 

Assetto Corsa Online Server を RaspberryPiをつかってはじめよう【AssettoServer導入】

AssettoServer導入作業

RaspberryPiへAssettoServerを導入まで行います。

この状態ではServerとしてはまだ機能しません。

Serverとして使用するにはContent Managerにて設定が必要です。(後の記事にて書く予定

 

Server本体のダウンロード

AssettoServerの公式ページを開きます。

assettoserver.org

"Download"をクリック

 

最新リリースバージョンのページへ移動

  • 2023年07月現在 V0.0.52
    • もしかすると... 0.0.51を使っていた方が良いのかもしれないが...このまま進む
  • 2023年08月現在
    • Ver0.0.52とCSP 0.1.79の相性が悪い気がする...
    • AssettoServer 0.0.51 を使用したほうが良い。
      • 安定動作中 ※8月現在

 

画面をスクロールし"Assets"まで移動

 

今回はRaspberryPiへ導入するので、 "assetto-server-linux-arm64.tar.gz"をクリックしダウンロードを実行。

※間違うと動きませんので確実に"arm64"を選択してください

※他のCPUを搭載しているLinuxなどの場合やWindowsの場合は適宜選択を行う。

 

RaspberryPi側の準備

RaspberryPiを起動しSSH接続まで行ってください。

  1. RaspberryPi起動
  2. SSH接続
  3. homeディレクトリにいるはず...

 

SSH接続を行った直後はhomeディレクトリにいるはずですが...

不安な人は以下のコマンドを実行し確実にhomeディレクトリへ移動してください。

 

cd ~/ <リターンキー>

 

AssettoServer導入用ディレクトリ作成

homeディレクトリへサーバーを立ててしまうと他のトラックなどの切替時に面倒なので、Server専用のディレクトリを作成し、その中に各トラック用ディレクトリを作成する事とします。

 

イメージとしては下図の緑枠で囲まれた部分となります。

"その他"と書いてあるのは今後他のトラックなどを増やす場合を想定してます

 

AssettoServer用ディレクトリ作成

コンソールから以下のコマンドを実行しフォルダを作成します。

名称はなんでも良いのですが、今後のメンテナンス性なども考慮して命名してください。仮にACS(AssettoCorsaServerの略)とします。

midir ACS <リターン>

 

実際のサーバーデータ保持用ディレクトリ作成

首都高用ディレクトリを作成します。仮に"SRP"とします。

 

midir ACS/SRP <リターン>

 

これで ACSディレクトリの下へSRPフォルダが完成しました。

 

AssettoServer Copy

"SRP"フォルダへAssetto Server公式ページよりダウンロードした圧縮ファイルをRaspberryPiへコピーします。

 

先ほどダウンロードを行った圧縮ファイル"assetto-server-linux-arm64.tar.gz"をSSHしているTeraTermドラッグアンドドロップします。

 

以下のウィンドウが開きますので

SCPの送信先ディレクトリ名を入力します。

※以下の例ではユーザー名が "ttl"となっておりますので、各自のユーザー名へ変更してください。

/home/<user名>/ACS/SRP

 

 

入力後"OK"をクリック。

入力情報に誤りなどが無ければRaspberryPi側へデータコピーが実行されます。

 

ファイル確認

実際にファイルがコピーされたか確認します。

以下のコマンドを実行し、先ほどの圧縮ファイルが存在しているか確認。

ファイルが存在していればOK。

ls ACS/SRP <リターン>

 

もしファイルが存在していない場合は入力情報が誤っている可能性が高いので再度確認し同じ操作を行ってください。

 

ファイル解凍

圧縮ファイルを解凍します。

まずは"SRP"ディレクトリへ移動します。

cd ACS/SRP <リターン>

 

間違いないと思いますが....

確認の為、以下のコマンドを入力し圧縮ファイルが存在しているか確認します。

ls <リターン>

 

うん。大丈夫。

 

ファイルを解凍します。

tar zxvf assetto-server-linux-arm64.tar.gz <リターン>

 

色々表示されていれば解凍できてます。

 

"ls"コマンドを実行し "AssettoServer"という文字列があればOK.

 

これでOnline Server 実行環境の準備完了です。

あとは"Content Manager"を使用しサーバーにて動作させる環境データを作成すればOK

 

備忘録として書き始めたけど...

記事にするのは大変だなぁ...

でも、ここまで来れば後は実際に使用するデータを作れば最低限online出来るのでもう少し頑張ろう (と自分に言い聞かせるww

 

次の記事へ続く

 

追記

ここまで書いて気づいたのですが....

AssettoServer V0.0.52の公式ページにビギナーズガイドが追記されていた...

 

0.0.51までは存在していなかったので、それなりに困っている人が多かったものと思われます。(私も困ってたwww

 

機を逸した感はあるが、公式ではざっくりとWindows用にServerを立ち上げる方法が記載されているので、それはそれで一読して頂いた方が間違いないはずなので参考に

こっちの記事の方が参考って話もあるwww

 

assettoserver.org

Assetto Corsa Online Server を RaspberryPiをつかってはじめよう【準備編 2】

準備編1にてRaspberryPiの起動及びネットワーク接続確認が出来ているはずなので次のステップです。

※この記事もググれば色々な情報があるので個人的な備忘録な感じは否めない。

 

この記事ではAssettoServerを実行するための環境構築まで行います。

※最新の情報は各公式ページの情報を参照願います。

※Version Upなどによりこの記事が役に立たない事もありますので自己責任で...

SSH接続

  • "TeraTerm"を起動
    • TCP/IPを選択
    • ホスト名:指定したホスト名もしくはIPアドレスを入力
      • 準備編1にて設定した仮名称 "as0077.local"を使用
    • サービス:SSHを選択
    • 他はデフォルト設定でOKなはず


    • "OK"をクリック
    • セキュリティ警告が表示される場合
      • 下図のように警告表示が行われた場合、このホストをKnown hostsリストへ追加するにcheckが入っている事を確認し"続行"をクリック
    • ssh接続が出来た場合、認証画面が表示される。
    • "RaspberryPi Imager"にて設定したユーザー名、パスワードを入力し"OK"をクリック
    • 正常にSSH接続が出来れば、画面にコンソール表示が行われます。
      • ここまで来れば一安心
    • おめでとうございます。接続まで出来ました。
    • ssh接続出来ない場合は以下の確認が必要です。環境依存の為、頑張って各自調査願います。
      • ネットワーク接続確認
      • PCセキュリティ設定確認
      • ルーターなどの設定確認
        • WiFiにて接続している場合、機器間通信が無効となっている場合あり
        • 機器により設定方法は違うので頑張る

 

System Update

なにはなくともアップデートが必要です。以下のコマンドを実行

sudo apt -y update

 

次に upgradeを実行 ※ちょいと時間がかかるので気長に待つ

sudo apt -y upgrade

 

プロンプト表示となればOK。

ここまででRaspberryPi (Linux 側)の下準備はOKです。

 

ネットワーク用パッケージ追加

今後使用する可能性がある為、"nmap"と"curl"をインストールする

※詳細は割愛しますが、"nmap"を入れておいた方がネットワークトラブル時有用。

curlは後々サーバーの状況をwebhookする際に入れておいた方が間違いないと思うので入れておく

sudo apt install -y nmap curl

 

 

※まだRaspberryPiでの作業は続きますのでssh接続はそのままで

 

AssettoServer

AssettoServer導入するにあたり、公式ページを参照します。

待望の"AssettoServer"公式ページですwww

 

assettoserver.org

公式ページを開くと以下のような画面となりますので"Get Started"をクリック。

 

".Net Runtime"

"Installation"の"Linux"をクリックすると".Net 7 Runtime"をインストールする必要があると書いてあります。 ※2023年07月現在

".Net"をインストールするため、Microsoftのページへ移動します。

 

 

"ASP.NET 7 Runtime installation instructions for your distro"をクリックしページ移動

 

 

スクリプトを使用し.Netを導入しますので"Scripted install"をクリック

手順に従いスクリプトをダウンロードします。

RaspberryPi SSHにて以下のコマンドを入力します。

 

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

 

web pageの "copy"部をクリックする事でクリップボードへコピーされます。

そのままSSHしているTeraTermへマウスを移動し、右クリックする事でペーストされますので、簡単です。

 

手順通りに進めます。実行権限を付与

chmod +x ./dotnet-install.sh

 

今回必要な Versionは 7 ですので、Version7を指定しインストールします。

※インストール完了までしばらく時間がかかります。

./dotnet-install.sh -c 7.0

 

しばし待つ....結構待つ...

Bugってる??と思うくらい変化がない状況が続きますが焦らず騒がずです。

---

ttl@as0077:~ $ ./dotnet-install.sh -c 7.0
dotnet-install: Attempting to download using aka.ms link https://dotnetcli.azureedge.net/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-arm64.tar.gz
dotnet-install: Extracting zip from https://dotnetcli.azureedge.net/dotnet/Sdk/7.0.306/dotnet-sdk-7.0.306-linux-arm64.tar.gz
dotnet-install: Installed version is 7.0.306
dotnet-install: Adding to current process PATH: `/home/ttl/.dotnet`. Note: This change will be visible only when sourcing script.
dotnet-install: Note that the script does not resolve dependencies during installation.
dotnet-install: To check the list of dependencies, go to https://learn.microsoft.com/dotnet/core/install, select your operating system and check the "Dependencies" section.
dotnet-install: Installation finished successfully.
ttl@as0077:~ $

---

 

“Installation finished successfully.”となれば正常にインストール完了。

 

".Net Runtime" Path 設定

Installした".Net"へPath(パス)を通します。

Pathを通さないとAssettoServerが正常に動作しませんので重要です。

 

".bashrc"ファイル修正

エディタを使用し.bashrcファイルを修正します。

"vi"や"nano"など標準的なエディタはインストール済みなので、それらを使用し変更する形です。

Linuxなどに不慣れな人は"vi"は使いづらいけど...頑張る

※ネット上に"vi"の使い方は色々あるので、頑張ってchallenge

※間違った場合は エスケープキー(ESC)を一度押したのち、":q!"と入力すれば保存せずにエディタ終了となるので再チャレンジ。

 

  1. homeディレクトリに存在している .bashrc をエディタ(vi)にて開く
  2. vi ~/.bashrc
  3. カーソルキーなどを使用しファイルの最後まで移動
    • 最終行"fi"の"i"の所までカーソルを移動させる
      • "a"(小文字)を押す
      • カーソルがiの後ろで点滅しているはず。
      • リターンキーを押して改行
  4. 次の2行を追記する
  5. エスケープ(ESC)を押す
  6. ":wq"と入力しエンターする事で保存終了となる。

追記が正常に行えたか以下のコマンドにて確認する。

cat .bashrc

 

一度ログオフもしくは再起動する事で反映される為、一旦再起動する

sudo reboot

※再起動する際、SSH接続が切れるので、RaspberryPiが起動した後、再度SSH接続を実行

 

Path確認

envコマンドを使用しPath確認を行います。

 

env | grep .dot

 

正常に設定できていれば、先の2行が表示されます。

 

ここまでで"AssettoServer"を起動するための下準備が完了です。

後は実際にOnlineにて使用するデータ準備とServer準備となります。

もう一息です。

  • Content Managerを使用しServerにて使用するデータ作成
  • AssettoServer導入
  • 各種設定

 

次回へ続く

 

Assetto Corsa Online Server を RaspberryPiをつかってはじめよう【準備編 1】

Assetto Corsa Online Serverを立ててみる。【準備編】

最終目的は

  • "RaspberryPi"を使用し
  • "AssettoServer"を立てて
  • "首都高"(Shutoko Revival Project)をonline で楽しむ。

ノートPCやデスクトップPCを使用すれ良いのだが、PCを置いておく場所がないため、RaspberryPiを使用しお手軽にOnline Serverを立てる事を目的とする。

ネットワークの知識はちょっと必要だけど、なんとかなるっしょ

 

実際にRaspberryPi (3B+)を使用しOnline Serverを立てて遊んでいるので備忘録及びこれからサーバーを立ててみようと思っている人の参考になれば幸いである。

 

準備編なので、RaspberryPi側の下準備までの記事となっている。

※この記事じゃなくても良いというはなしもあるが...

 

事前準備

以下のものを準備する

  • RaspberryPi (3B+以降が望ましい)
  • microSDカード (64GB以上が望ましい)
  • 電源供給用microUSBケーブル (modelによって給電ポート形状が違うので注意)
  • USB-ACアダプタ (2A以上が望ましい)
  • 有線接続の場合はEthernetケーブル

RaspberryPiを動作させる際に、モニタやキーボード、マウスなどが必要となりますが、それらを準備するのは面倒なので、それらを接続する事なくネットワーク上から直接操作(SSH,VNC)ができる仕立てとします。

 

RaspberryPi OS準備

Raspberry Pi Imager ダウンロード

公式から展開されている "Raspberry Pi Imager"を使用するのが一番簡単で確実。

www.raspberrypi.com

今回は"Windows11"をベースとするため、"Download for Windwos"をクリックしインストーラをダウンロード及び手順に従いインストールしてください

 

Raspberry Pi Imager 起動

Imagerを起動すると以下の画面となる。

  1. OS選択
    1. "OSを選ぶ"をクリック
    2. AssettoServerは 64bit にて開発されているので、"Raspberry Pi OS (other)を選択

    3. 表示されたリストの中から "Raspberry PI OS (64-bit)を選択

  2. "ストレージを選ぶ"
    1. クリックすることでPCへ接続されているストレージデバイス一覧が表示されるので、RaspberryPiにて使用するデバイスを選択しクリック
  3. "設定" (重要
    1. "書き込む"を選択する前に"設定を必ず行う。
    2. "設定"をクリック
    3. "カスタマイズオプション" [いつも使う設定にする]を選択
      • 多分いつも使わないが、何かあった際に同じ設定が使用可能となる。
    4. "ホスト名"
      • ネットワーク接続時に使用する名称
        • 今後の記事用に "as0077.local"とする (仮
      • 半角英数で設定
      • RaspberryPi起動時、一般的にはDHCPにてIPが割り当てられるが、どの番号が割り当てされているかは確認が面倒なので何らかの名前を付ける。
    5. "SSHを有効化する"
      • "パスワード認証を行う"を選択
    6. "ユーザー名とパスワードを設定"
      • Online Serverとして公開することを考慮しパスワード設定を行う。
      • 半角英数記号などを駆使する事を推奨
      • Online Server乗っ取りなども多く聞かれるので最低限ちゃんとする
    7. "WiFiを設定する"
      • online Serverにて使用する際は有線接続が良いのだが、事前に設定などを行う場合WiFi接続したほうがお手軽なので、必要に応じて設定。
    8. "ロケール設定をする"
      • タイムゾーン "Asia/Tokyo"を選択
      • キーボードレイアウト "jp"を選択
        • USなど他のキー配列は適宜選択
    9. "永続的な設定"
      • "終わったときにメディアを取り出す"へチェック
      • "テレメトリーを有効化する"へチェック
    10. 「保存」
      • 保存をクリックする前にネットワーク設定やホスト名など間違いがないか確認を行ったのちに「保存」をクリック
  4. 「書き込む」をクリック
    • 書き込み完了までしばらく待つ
  5. 完了
    • メディアを取り除いてOKてきなメッセージが表示されるはず。
    • "続ける"をクリックし終了

 

ここまでの作業でImageファイル作成までは完了。

 

RaspberryPiをネットワーク経由にてSSH接続するための準備

続いて実際にRaspberryPiをネット上から接続する為の準備を行います。

  • メディアを一度取り外す。
  • メディアを再度挿入
  • "デバイスとドライブ"へメディアが認識(bootfs)されていることを確認
    • ドライブ名(E:)は環境により変化
  • メディアをダブルクリックし開く
  • 右クリックし「新規作成」->「テキストドキュメント」を選択

  • ファイル名を “ssh”へ変更

    ※拡張子なし、中身は空のままでOK

  • ここまでで準備完了。

  • メディアを取り外す

 

RaspberryPi 起動

  • 作成したImageメディアをRaspberryPiへ挿入。
  • 有線接続の場合はLANケーブルを接続
  • RaspberryPi 電源ON
  • しばし待つ
  • 起動している(はず
    • 初回起動は1分程度かかるかも
    • LED(緑)の点滅が落ち着けば起動している感じ

 

RaspberryPi 接続確認

実際にRaspberryPiが起動しネットワーク接続が出来ているか確認を行う。

Windowsへ標準インストールされている "ping"を使用する。

 

  • "Windowsキー" + "R" を押し "ファイル名を指定して実行ウィンドウを開く
  • "名前(O)"へ"cmd"と入力
  • "OK"をクリック

 

  • コマンドプロンプト画面が開く
  • キーボードから以下を入力
    • "xxxx"はRaspberryPi Imagerにて設定したホスト名もしくはIPアドレスが分かっているのであればIPアドレス直打ち
    • "-4" オプションは "ipv4"にてpingを行うという意味
      • ping -4 as0077.local
    • 正常にpingが通れば以下のように応答が返ってくる。 例として"as0077.local"に対してpingしてみた。
      • IPアドレスは本当は表記されているがxxxにしてますwww
      • ping -4 as0077.local

        as0077.local [xxx.xxx.xxx.xxx]に ping を送信しています 32 バイトのデータ:
        xxx.xxx.xxx.xxx からの応答: バイト数 =32 時間 =1ms TTL=64
        xxx.xxx.xxx.xxx からの応答: バイト数 =32 時間 =1ms TTL=64
        xxx.xxx.xxx.xxx からの応答: バイト数 =32 時間 =1ms TTL=64
        xxx.xxx.xxx.xxx からの応答: バイト数 =32 時間 =1ms TTL=64

        xxx.xxx.xxx.xxx の ping 統計:
            パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
        ラウンド トリップの概算時間 (ミリ秒):
            最小 = 1ms、最大 = 1ms、平均 = 1ms

    • 失敗した場合は"タイムアウトしました"が表示されます。
      •  ping -4 as0077.local

        xxx.xxx.xxx.xxx に ping を送信しています 32 バイトのデータ:
        要求がタイムアウトしました。
        要求がタイムアウトしました。
        要求がタイムアウトしました。
        要求がタイムアウトしました。

        xxx.xxx.xxx.xxx の ping 統計:
            パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、 

      • タイムアウトした場合はRaspberryPiが起動していな可能性もあるので、何度かpingをchallengeしてみる。
      • 何度やってもpingが通らない場合はネットワーク接続及びPC側のセキュリティソフトの設定見直しを行う。

 

正常にpingが通れば、あとはSSH接続し各種設定を行います。

SSH接続には "TeraTerm"を使用すると便利ですのでインストールしておいた方がよいです。(あくまで個人の見解

 

forest.watch.impress.co.jp

まずはここまで。

次回へ続く