RefBoxのDocker

使い方が分かってきたので,メモというかまとめ.
ついでに,M1 Macで試してみます.

まず,事前準備としてはdocker を使える状態にしておいて下さい.
具体的には,docker,docker-compose,bash が必要です.
(まぁ,bash は元々入っていることが大半のハズ…)
docker のイメージを落として,rcll-get-started もダウンロードしておきます.

### ↓不要でした.勝手にダウンロードしてくれます.
### # docker のイメージファイルの準備
###
# docker pull quay.io/robocup-logistics/rcll-refbox
# docker pull quay.io/robocup-logistics/rcll-refbox-frontend
# docker pull quay.io/robocup-logistics/rcll-simulator
# docker pull quay.io/robocup-logistics/rcll-simulator-frontend
### # ↓空っぽの模様
# docker pull quay.io/robocup-logistics/rcll-status-board
# docker pull quay.io/robocup-logistics/mongodb-backend
#
# git の準備
#
mkdir ~/git
cd ~/git
git clone https://github.com/robocup-logistics/rcll-get-started
cd rcll-get-started

で,まずは必要ファイルを生成してもらいましょう.

./setup.sh

これで,~/git/rcll-get-started/local_setup.sh と,~/git/rcll-get-started/compose_files/data が生成されます.
次に,refbox の設定ファイルの調整をしましょう.
~/git/rcll-get-started/config/refbox の下に設定ファイルがあります.

■comm.yaml

通信の設定です.
public-peer と,cyan-peerと,magenta-peer の項目を設定します.
自分のマシンだけで作業を完結するのであれば,host: !ipv4 localhost の項目を使います.
ネットワーク上の他の端末からつなぐとき(Robotino からつなぐ時など)は,ネットワークのブロードキャストIPアドレスを設定します.
例えば, host: !ipv4 192.168.255.255 とか,大会の時だと, host: !ipv4 172.26.255.255 とかになります.
ポートは,昔は自分のマシンだけの時は,send-portとrecv-portを有効にし,ネットワーク上で使うときはportの方を有効にしていましたが,今はどちらの場合もsend-port/recv-portを有効にする方がちゃなと動く感じです(ロボットのbeaconがrefboxに反映されるようになる).

■team.yaml

チームの情報です.
teams: に自分のチーム名を追加し,crypto-keys に自チームの暗号化キーを追加しましょう.
標準では,randomkey ってなっていますが,これも実は暗号化キーの一つという位置づけだったりします.
refbox と自分のチームの暗号化キーが一致していないと,cyan-peer/magenta-peerの通信ができません.

■追加設定

設定の追加項目は,local_setup.sh に書きます.
例えば,C0 Production Challenge をするときは,

export REFBOX_CONFIG_CHALLENGE=./../config/refbox/challenge_prod_c0.yaml

を書きます.
また,コマンドとして,rc_start_refbox やrc_stop_refbox が用意されていますので,
それもlocal_setup.sh に追記します.
それらが準備できたら,setup.sh を実行します.

./setup.sh
./setup.sh: line 66: rcll-refbox-instruct: command not found

おっと….66行目を見てみると

  rcll-refbox-instruct -p PRE_GAME -s RUNNING

これって,rcll-refbox/bin の中のプログラムなので,docker の外で実行したらだめなのでは?
他のところのコードを見ると,

    cmd=$(echo "sleep 5 && docker exec refbox rcll-refbox-instruct -c$RC_CYAN")
    echo "Will run in screen: $cmd"
    screen -m -d bash -c "$cmd"

ってなってて,docker exec で実行していますね.
screen は必要かなぁ?
とりあえず,以下に書き換えましょうか.
前後の流れを考えると,if文と対応させた方が良さそうですね.

   if [ "${RC_AUTO_START}" == "true" ]; then
    echo "Autostart is activated!"
    cmd=$(echo "sleep 6 && docker exec refbox rcll-refbox-instruct -p SETUP && docker exec refbox rcll-refbox-instruct -s RUNNING")
    echo "Will run in screen: $cmd"
    screen -m -d bash -c "$cmd"
   else
    # rcll-refbox-instruct -p PRE_GAME -s RUNNING
    cmd=$(echo "docker exec refbox rcll-refbox-instruct -p PRE_GAME -s RUNNING")
    screen -m -d bash -c "$cmd"
   fi

Docker がエラーを出して正しく動いていないっぽい時(2024年2月27日現在はそのままでは動かない)は,Docker(rcll-refbox関係)でのエラーを参照して下さい.
mongo-dbの接続エラーに関しては,うまくいけばrefbox が落ちて,再接続することでつながるようになります.
落ちてくれずに止まっている時は,docker exec -it refbox /bin/bash でログインして,kill 1で落としましょう.
もしくは,docker restart refbox で再起動できるようです.
あと,mac の場合は,compose-filesの設定の「network: host」がうまく働かないので,外部との通信に必要なポートを列挙する必要があります.
設定ファイルは,refbox.yamlです.

■2024/04/23追記
最近,git が更新されましたが,エラーが出る状態です….
対処法は,以下のエントリーを参考にして下さい.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*