Skip to content

fix(devcontainer): resonite-share volume を dev 所有で先行作成し resoio launch ハングを解消#70

Merged
Geson-anko merged 1 commit into
mainfrom
fix/20260625/resonite-share-volume-ownership
Jun 25, 2026
Merged

fix(devcontainer): resonite-share volume を dev 所有で先行作成し resoio launch ハングを解消#70
Geson-anko merged 1 commit into
mainfrom
fix/20260625/resonite-share-volume-ownership

Conversation

@Geson-anko

Copy link
Copy Markdown
Member

概要

devcontainer 内で resoio launch が約 60 秒ハングしてタイムアウトする問題を修正する。

原因

engine の DataPath = /home/dev/.local/share/Yellow Dog Man Studios は named volume resonite-share のマウント先。空の named volume はマウント先がイメージ内に存在しないと Docker が root 所有で初期化するが、Dockerfile の pre-create リストはこの実マウント先 (.../Yellow Dog Man Studios) だけ漏れていた (/home/dev/.local/share までしか作っていなかった)。

結果、USER dev (uid 1000) で動く engine が root 所有ディレクトリ直下に Data/ を作れず、FrooxEngine.Engine.SetupExceptionHandlerDirectory.CreateDirectoryUnauthorizedAccessException: ... Permission denied を投げて起動直後 (約1秒) にクラッシュ。renderer も gRPC socket も上がらず、launcher が renderer PID を 60s ポーリングしてタイムアウトしていた。

/opt/resonite (resonite-app) と /home/dev/prefix (resonite-prefix) が dev 所有で正常動作するのは、まさにこれらが pre-create 済みだから。1 ディレクトリだけ漏れていたのが本質。

修正

install -d -o dev -g dev のリストに実マウント先 "/home/dev/.local/share/Yellow Dog Man Studios" を追加し、fresh volume が dev 所有を継承するようにした。あわせて該当コメントを実パス + 理由に修正。

検証

  • 失敗再現: resoio launcherror: timed out waiting for the Resonite renderer process to appear (EXIT=1, ちょうど 60s)、engine ログに上記例外。
  • 修正の実証: resoio launch --data-path <dev書込可能パス> で engine が Initializing RenderSystem... → Renderer process started: Renderite.Renderer.exe → resonite_pid/renderer_pid 返却 まで完走 (EXIT=0)。root 所有が唯一のブロッカーであることを実機確認。

適用上の注意 (reviewer/利用者向け)

イメージ再ビルドが必要。既存の root 所有 volume はリビルドだけでは直らない (Docker は既存 volume を再初期化しない) ため、次のいずれかを併用する:

  • 既存データ保持: コンテナ内で sudo chown -R dev:dev "/home/dev/.local/share/Yellow Dog Man Studios"
  • volume リセット: docker compose downdocker volume rm resonite-io-resonite-share → リビルド (ユーザーデータは消える)

🤖 Generated with Claude Code

空の named volume はマウント先がイメージ内に存在しないと Docker が root 所有
で初期化する。resonite-share の実マウント先 .../Yellow Dog Man Studios だけ
Dockerfile の pre-create リストから漏れていたため root 所有になり、USER dev で
動く engine が DataPath/ を作れず SetupExceptionHandler で UnauthorizedAccess
例外を投げて起動直後にクラッシュ。renderer も gRPC も上がらず resoio launch が
renderer PID を 60s ポーリングしてタイムアウト (= ハング) していた。

install -d -o dev -g dev のリストに実マウント先を追加し、/opt/resonite 等と
同じく fresh volume が dev 所有を継承するようにする。既存の root 所有 volume は
リビュルドでは直らないため chown か volume 再作成が別途必要。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Geson-anko
Geson-anko merged commit bbc6c3a into main Jun 25, 2026
1 check passed
@Geson-anko
Geson-anko deleted the fix/20260625/resonite-share-volume-ownership branch June 25, 2026 10:11
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.

1 participant