Skip to content

Conversation

@flll
Copy link

@flll flll commented Oct 26, 2024

[compose.yml]

  • docker-compose.ymlからcompose.ymlに変更しました
  • これはCompose仕様が Docker社から独立し、OCIの一部となったことを反映しています
  • 別のオーケストレーションツールが認識しないことがありますため将来的に変更としました

[Makefile]

  • 互換性を保つために'docker compose'と'docker-compose'コマンドの両方を使えるようにしました
  • docker自身がcompose機能を担うようになったので最新版だとdocker composeのみとなりdocker-composeがdeprecatedとなりました

@mnakada
Copy link
Owner

mnakada commented Oct 27, 2024

docker composeにするとteeにpipeしている関係か、MacのTerminalだと実行時の表示の改行コードが化けてしまいます。
teeへのpipeをなくすとdocker composeでも正常に表示されます。

docker-composeの場合

atomcam_tools 21261 ) docker-compose exec  builder /src/buildscripts/build_all  |tee rebuild_`date +"%Y%m%d_%H%M%S"`.log
#
# configuration written to /atomtools/build/buildroot-2016.02/.config
#
/usr/bin/make -j1  HOSTCC="/usr/bin/gcc" HOSTCXX="/usr/bin/g++" silentoldconfig

docker composeの場合

atomcam_tools 21262 ) docker compose exec  builder /src/buildscripts/build_all  | tee rebuild_`date +"%Y%m%d_%H%M%S"`.log
#
 # configuration written to /atomtools/build/buildroot-2016.02/.config
                                                                      #
                                                                       /usr/bin/make -j1  HOSTCC="/usr/bin/gcc" HOSTCXX="/usr/bin/g++" silentoldconfig
                                                                      make[1]: Entering directory '/atomtools/build/buildroot-2016.02'

logファイルには正常に記録されているのでtty関連の問題かな。

@flll
Copy link
Author

flll commented Oct 27, 2024

おそらくバッファリングのせいでこうなってしまっているのかと
標準出力のバッファリングを無効にし、リアルタイムでの出力させればおかしくならずに済むと思います

マックの実機持っていないので再現が出来ませんが、
以下の4つコマンドのどれかに変更したら行けるかと思います

unbuffer docker compose exec builder /src/buildscripts/build_all | tee rebuild_$(date +"%Y%m%d_%H%M%S").log
stdbuf -oL docker compose exec builder /src/buildscripts/build_all | tee rebuild_$(date +"%Y%m%d_%H%M%S").log
script -q /dev/null docker compose exec builder /src/buildscripts/build_all | tee rebuild_$(date +"%Y%m%d_%H%M%S").log
docker compose exec -T builder /src/buildscripts/build_all | tee rebuild_$(date +"%Y%m%d_%H%M%S").log

もしくはcompose.ymlにて疑似TTYを割り当てる

services:
  builder:
    tty: true

私の環境ではどれも変わりませんでしたためどれがうまくいくか試してください

@mnakada
Copy link
Owner

mnakada commented Oct 27, 2024

unbuffer, stdbufはgnuのものなのでOS-Xにはコマンドが存在してないですね。
script -q /dev/null はうまくいきました。
-Tオプションとtty: tureは崩れたままでした。
なので、

DOCKER_COMPOSE=$(shell docker compose version > /dev/null 2>&1 && echo docker compose || echo docker-compose)

の行を

DOCKER_COMPOSE=$(shell docker compose version > /dev/null 2>&1 && echo script -q /dev/null docker compose || echo docker-compose)

にするのが良さそうです。

@flll
Copy link
Author

flll commented Oct 28, 2024

ありがとうございます
私の環境で試したところ、script -q /dev/nullだとなにも画面に表示されなくなりました
以下のコマンドで解決できないかをお願いします

# dockerがpython製の場合(古いdocker v1)、環境変数 PYTHONUNBUFFERED を使用
PYTHONUNBUFFERED=1 docker compose exec builder /src/buildscripts/build_all | tee rebuild_$(date +"%Y%m%d_%H%M%S").log
# 環境変数 FORCE_COLOR を使用(カラー出力を維持したい場合)
FORCE_COLOR=1 docker compose exec builder /src/buildscripts/build_all | tee rebuild_$(date +"%Y%m%d_%H%M%S").log

これがうまくいかなければ、
不自由なければunbuffer, stdbufを使えるようにインストールしていただければと思います


makeに疎いので関係ない余談なのですが、makeを実行した際にプロンプトに表示されるこの、

ola (open lighting architecture) (BR2_PACKAGE_OLA) [N/y/?] (NEW) 
mosh (BR2_PACKAGE_MOSH) [N/y/?] (NEW) 
host sam-ba (BR2_PACKAGE_HOST_SAM_BA) [N/y/?] (NEW) 

これらすべてyとするとビルドに失敗し、
すべてn(このままエンターキー)するとビルドには成功しますが、
atom swingが起動しなくなります(常にオレンジLEDが点滅)

@mnakada
Copy link
Owner

mnakada commented Oct 28, 2024

私の環境で試したところ、script -q /dev/nullだとなにも画面に表示されなくなりました

環境はlinuxですか?
rebuild_$(date +"%Y%m%d_%H%M%S").logにlogは生成されていますか?

# dockerがpython製の場合(古いdocker v1)、環境変数 PYTHONUNBUFFERED を使用
PYTHONUNBUFFERED=1 docker compose exec builder /src/buildscripts/build_all | tee rebuild_$(date +"%Y%m%d_%H%M%S").log
# 環境変数 FORCE_COLOR を使用(カラー出力を維持したい場合)
FORCE_COLOR=1 docker compose exec builder /src/buildscripts/build_all | tee rebuild_$(date +"%Y%m%d_%H%M%S").log

いずれも駄目でした。

これがうまくいかなければ、
不自由なければunbuffer, stdbufを使えるようにインストールしていただければと思います

OS-Xでbuildする人全員が対応必要なので、あまりやりたくないですね。

script -q /dev/stdout にしたらどうですか?OS-Xでは正常に出ています。

ola (open lighting architecture) (BR2_PACKAGE_OLA) [N/y/?] (NEW) 
mosh (BR2_PACKAGE_MOSH) [N/y/?] (NEW) 
host sam-ba (BR2_PACKAGE_HOST_SAM_BA) [N/y/?] (NEW) 

こちらはOS-Xでは出ないです。

- sedの区切り文字を/から>に変更してエスケープを回避
- DOCKER_COMPOSE変数を追加してdocker-composeとdocker composeを自動判定
- check_container_running関数を追加して重複コードを削減
@flll flll reopened this Sep 26, 2025
- check_container_runningが成功した場合はdocker-composeを起動しないように変更し、失敗した場合に起動するように修正
@flll
Copy link
Author

flll commented Sep 26, 2025

一年ぶりの返答申し訳ございませんでした

buildscripts/build_allに記述されているこのmake oldconfig→make olddefconfigに変更しました。
ビルドが完遂し、.zipも作成されています。

docker-composeコマンドの対応は

  • docker-composeが使えればこれを優先して使う
  • 古いバージョンの-付きコマンドが無ければdockerコマンドを使用する

というような変更を行いました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants