From 0dee947e6f6e7d771b27290f1f9dc3cff1584805 Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 4 Sep 2026 10:57:18 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20AI=20CLI=E8=A8=AD=E5=AE=9A=E3=83=87?= =?UTF-8?q?=E3=82=A3=E3=83=AC=E3=82=AF=E3=83=88=E3=83=AA=E3=81=AE=E6=A8=A9?= =?UTF-8?q?=E9=99=90=E3=82=92=E4=BF=AE=E6=AD=A3=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- containers/base/Dockerfile | 1 + issues/156-etc-devbase-permissions.md | 44 +++++++++++++++++++++++++ tests/containers/test_ai_cli_aliases.py | 17 ++++++++++ 3 files changed, 62 insertions(+) create mode 100644 issues/156-etc-devbase-permissions.md diff --git a/containers/base/Dockerfile b/containers/base/Dockerfile index 80757f78..6f78c656 100644 --- a/containers/base/Dockerfile +++ b/containers/base/Dockerfile @@ -201,6 +201,7 @@ RUN set -eux; \ # AI CLI の起動定義。~/.bashrc へ直接書かずファイルにしているのは、Docker を # 起動せずに tests/containers/test_ai_cli_aliases.py で振る舞いを固定するため。 +RUN sudo install -d -m 0755 /etc/devbase COPY --chmod=0644 ai-cli-aliases.sh /etc/devbase/ai-cli-aliases.sh RUN set -eux; \ diff --git a/issues/156-etc-devbase-permissions.md b/issues/156-etc-devbase-permissions.md new file mode 100644 index 00000000..c15158fc --- /dev/null +++ b/issues/156-etc-devbase-permissions.md @@ -0,0 +1,44 @@ +# `/etc/devbase` permission 修正 + +## モード + +standard: baseイメージから起動する全コンテナのシェル初期化を修正する。 + +## 目的と非目的 + +達成したい状態: + +- `/etc/devbase`を全ユーザーが探索できる`0755`で作成する。 +- `ai-cli-aliases.sh`自体は書き換え不要な`0644`を保つ。 +- ubuntuユーザーのbash起動時にalias定義を読み込める。 + +やらないこと: + +- AI CLIのalias内容や起動オプションは変更しない。 +- 実行中コンテナへの暫定`chmod`を恒久策として扱わない。 + +## 受け入れ条件 + +- [ ] Dockerfileが`/etc/devbase`を`0755`で明示作成してからaliasファイルを配置する。 +- [ ] no-cacheビルドしたイメージで、`/etc/devbase`が`0755`、aliasファイルが`0644`になる。 +- [ ] ubuntuユーザーが`/etc/devbase/ai-cli-aliases.sh`をsourceできる。 +- [ ] 既存のAI CLI aliasテストと全体テストが成功する。 + +## 設計 + +異常が最初に生じるDockerfileで親ディレクトリを明示作成する。entrypointで毎回`chmod`する案は、 +壊れたイメージを実行時に補正する下流対応になるため採用しない。ファイルとディレクトリでは必要な +permissionが異なるため、ubuntuユーザーへ切り替えた後でもroot所有で作成できる +`RUN sudo install -d -m 0755 /etc/devbase`と`COPY --chmod=0644`を分ける。 + +## 実装計画 + +1. Dockerfileの作成順を検査する失敗テストを追加する。 +2. COPY前に`/etc/devbase`を`0755`で作成する。 +3. 限定テスト、全体テスト、静的検査を実行する。 +4. no-cacheビルドした実イメージでpermissionとsourceを確認する。 + +## 関連 + +- https://github.com/devbasex/devbase/issues/156 +- https://github.com/devbasex/devbase/pull/154 diff --git a/tests/containers/test_ai_cli_aliases.py b/tests/containers/test_ai_cli_aliases.py index 4432172c..b9490147 100644 --- a/tests/containers/test_ai_cli_aliases.py +++ b/tests/containers/test_ai_cli_aliases.py @@ -21,6 +21,7 @@ import pytest ALIASES = Path(__file__).resolve().parents[2] / "containers" / "base" / "ai-cli-aliases.sh" +DOCKERFILE = ALIASES.with_name("Dockerfile") def _statements() -> str: @@ -34,6 +35,22 @@ def _statements() -> str: if line.strip() and not line.lstrip().startswith("#") ) + +def test_dockerfile_creates_readable_alias_directory_before_copy(): + """親ディレクトリは全ユーザーが探索できる ``0755`` で先に作る。 + + BuildKit は未作成の親ディレクトリを ``COPY --chmod`` と同じ mode で作るため、 + ファイル用の ``0644`` だけを指定すると ``/etc/devbase`` も ``0644`` になり、 + ubuntu ユーザーが配下を source できない。 + """ + dockerfile = DOCKERFILE.read_text() + mkdir = "RUN sudo install -d -m 0755 /etc/devbase" + copy = "COPY --chmod=0644 ai-cli-aliases.sh /etc/devbase/ai-cli-aliases.sh" + + assert mkdir in dockerfile + assert copy in dockerfile + assert dockerfile.index(mkdir) < dockerfile.index(copy) + #: 定義名 -> (実体, 固定オプション) LAUNCHERS = { "claude": ("claude", ["--dangerously-skip-permissions"]), From cc4f7c88c72792c7597cba2db6cdc288aacf04d3 Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Fri, 4 Sep 2026 11:08:11 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20AI=20CLI=20alias=E8=AA=AD=E3=81=BF?= =?UTF-8?q?=E8=BE=BC=E3=81=BF=E4=BB=95=E6=A7=98=E3=82=92=E7=A2=BA=E5=AE=9A?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/specifications/ai-cli-alias-loading.md | 40 +++++++++++++++++++ issues/156-etc-devbase-permissions.md | 44 --------------------- 2 files changed, 40 insertions(+), 44 deletions(-) create mode 100644 docs/specifications/ai-cli-alias-loading.md delete mode 100644 issues/156-etc-devbase-permissions.md diff --git a/docs/specifications/ai-cli-alias-loading.md b/docs/specifications/ai-cli-alias-loading.md new file mode 100644 index 00000000..6b9643e1 --- /dev/null +++ b/docs/specifications/ai-cli-alias-loading.md @@ -0,0 +1,40 @@ +# AI CLI alias の読み込み + +## 概要 + +base イメージは、AI CLI の起動 alias を `/etc/devbase/ai-cli-aliases.sh` に配置し、一般ユーザーの +Bash 初期化時に読み込める状態を提供する。 + +## 仕様 + +`/etc/devbase` は root 所有、permission `0755` で明示的に作成する。その後、 +`ai-cli-aliases.sh` を root 所有、permission `0644` で配置する。 + +Dockerfile では一般ユーザーへ切り替えた後にこの設定を行うため、ディレクトリ作成には +`sudo install -d -m 0755 /etc/devbase` を使用する。ファイル用の `COPY --chmod=0644` に親 +ディレクトリの暗黙作成を任せると、親も `0644` になって一般ユーザーが配下を探索できないため、 +ディレクトリ作成は必ず `COPY` より先に行う。 + +常に次の条件を保つ。 + +- `/etc/devbase` は全ユーザーが探索できる `0755` とする。 +- `/etc/devbase/ai-cli-aliases.sh` は全ユーザーが読み取れる `0644` とする。 +- 一般ユーザーは alias ファイルを source できる。 +- alias の内容と起動オプションは、ディレクトリ permission の設定から独立させる。 + +## 運用 + +設定変更は base イメージの再ビルドとコンテナの再作成後に反映される。既存コンテナで +`/etc/devbase` が `0644` の場合は root で `chmod 0755 /etc/devbase` を実行すれば一時復旧できるが、 +恒久対応には修正済みイメージを使用する。 + +## テスト観点 + +- Dockerfile が `/etc/devbase` を `0755` で作成してから alias ファイルを配置すること。 +- ビルドしたイメージで `/etc/devbase` が `0755`、alias ファイルが `0644` になること。 +- `ubuntu` ユーザーが `/etc/devbase/ai-cli-aliases.sh` を source できること。 +- 既存の AI CLI alias 定義と起動オプションが変わらないこと。 + +## 関連リンク + +- [Issue #156](https://github.com/devbasex/devbase/issues/156) diff --git a/issues/156-etc-devbase-permissions.md b/issues/156-etc-devbase-permissions.md deleted file mode 100644 index c15158fc..00000000 --- a/issues/156-etc-devbase-permissions.md +++ /dev/null @@ -1,44 +0,0 @@ -# `/etc/devbase` permission 修正 - -## モード - -standard: baseイメージから起動する全コンテナのシェル初期化を修正する。 - -## 目的と非目的 - -達成したい状態: - -- `/etc/devbase`を全ユーザーが探索できる`0755`で作成する。 -- `ai-cli-aliases.sh`自体は書き換え不要な`0644`を保つ。 -- ubuntuユーザーのbash起動時にalias定義を読み込める。 - -やらないこと: - -- AI CLIのalias内容や起動オプションは変更しない。 -- 実行中コンテナへの暫定`chmod`を恒久策として扱わない。 - -## 受け入れ条件 - -- [ ] Dockerfileが`/etc/devbase`を`0755`で明示作成してからaliasファイルを配置する。 -- [ ] no-cacheビルドしたイメージで、`/etc/devbase`が`0755`、aliasファイルが`0644`になる。 -- [ ] ubuntuユーザーが`/etc/devbase/ai-cli-aliases.sh`をsourceできる。 -- [ ] 既存のAI CLI aliasテストと全体テストが成功する。 - -## 設計 - -異常が最初に生じるDockerfileで親ディレクトリを明示作成する。entrypointで毎回`chmod`する案は、 -壊れたイメージを実行時に補正する下流対応になるため採用しない。ファイルとディレクトリでは必要な -permissionが異なるため、ubuntuユーザーへ切り替えた後でもroot所有で作成できる -`RUN sudo install -d -m 0755 /etc/devbase`と`COPY --chmod=0644`を分ける。 - -## 実装計画 - -1. Dockerfileの作成順を検査する失敗テストを追加する。 -2. COPY前に`/etc/devbase`を`0755`で作成する。 -3. 限定テスト、全体テスト、静的検査を実行する。 -4. no-cacheビルドした実イメージでpermissionとsourceを確認する。 - -## 関連 - -- https://github.com/devbasex/devbase/issues/156 -- https://github.com/devbasex/devbase/pull/154