Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ devbaseは、Docker Composeを使った再現性の高い開発環境を提供
- **環境変数の自動収集**: `devbase env init`でAWS/Git/GCP認証情報を対話的に設定
- **階層メニュー TUI**: `devbase list` のプロジェクト一覧(矢印キー移動・名前絞り込み対応)から起動・操作(up / down / login / ps / logs / scale / build / rebuild)を選択。画面最下部の常設メニュー(環境変数 / プラグイン / スナップショット / ステータス)へは ←→ キーで移動できます
- **イメージ再ビルド**: `devbase build [name] --no-cache` でキャッシュ無効の完全再ビルド。`devbase rebuild [name]`(= `build --expires=7`)はイメージが既定 7 日より古いときのみ再ビルドします
- **Orca 対応**: `ENABLE_SSH=true` でコンテナ内 sshd を publish し、[Orca](https://www.onorca.dev/) の SSH target として接続。`devbase orca sync` が隔離 SSH config を生成し、コンテナ内で worktree / AI エージェントを動かせます([Orca 接続ガイド](docs/user/orca.md))

## クイックスタート

Expand Down Expand Up @@ -149,8 +148,8 @@ devbaseのコマンドは4つのグループにまとめられています。
| [環境変数の export/import ガイド](docs/user/env-export-import.md) | バンドル形式・age 暗号化・S3 連携・merge/replace の運用 |
| [コンテナ操作ガイド](docs/user/container-operations.md) | ライフサイクル、並行開発、ボリューム構造 |
| [スナップショットガイド](docs/user/snapshot-guide.md) | 増分バックアップ、世代管理、復元手順 |
| [Orca 接続ガイド](docs/user/orca.md) | コンテナを SSH target として Orca から接続する手順 |
| [トラブルシューティング](docs/user/troubleshooting.md) | カテゴリ別の問題と解決策 |
| [Orca 削除の移行ガイド](docs/user/orca-removal-migration.md) | 旧 Orca(SSH) 接続の廃止と Remote-SSH への移行手順 |

### プラグイン開発者向け

Expand Down
4 changes: 2 additions & 2 deletions bin/devbase
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ run_python() {
# Resolve abbreviated command to full command name via unique prefix matching
resolve_command() {
local input="$1"
local commands="init status project container ct env plugin pl snapshot ss orca up down login build rebuild ps scale list help"
local commands="init status project container ct env plugin pl snapshot ss up down login build rebuild ps scale list help"
local matches=()
for cmd in $commands; do
[[ "$cmd" == "$input"* ]] && matches+=("$cmd")
Expand Down Expand Up @@ -402,7 +402,7 @@ case "$_resolved_cmd" in
# Python-implemented commands
--version|-V)
run_python "$@" ;;
init|status|project|container|ct|env|plugin|pl|snapshot|ss|orca|up|down|login|ps|scale|rebuild|list)
init|status|project|container|ct|env|plugin|pl|snapshot|ss|up|down|login|ps|scale|rebuild|list)
run_python "${_resolved_cmd}" "${_DEVBASE_ARGS[@]}" ;;
# Shell-implemented commands
#
Expand Down
8 changes: 1 addition & 7 deletions containers/base/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
apt-get update; \
apt-get install -y --no-install-recommends \
locales git wget vim sudo nano jq make unzip \
openssh-server \
openssh-client \
curl ca-certificates gnupg lsb-release \
Comment thread
takemi-ohama marked this conversation as resolved.
libnss3 libxrandr2 libxss1 \
fonts-noto-cjk fonts-noto-cjk-extra; \
Expand Down Expand Up @@ -124,12 +124,6 @@ RUN groupadd -f users; \
echo "$USERNAME ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USERNAME; \
chmod 0440 /etc/sudoers.d/users /etc/sudoers.d/$USERNAME

# sshd 設定(Orca 向け: 公開鍵認証のみ・Password 無効・TcpForwarding 有効)
RUN set -eux; \
mkdir -p /run/sshd /etc/ssh/sshd_config.d; \
printf 'PasswordAuthentication no\nPubkeyAuthentication yes\nAllowTcpForwarding yes\nX11Forwarding no\nPermitRootLogin no\n' \
> /etc/ssh/sshd_config.d/10-devbase-orca.conf

USER ${USERNAME}
WORKDIR /tmp

Expand Down
49 changes: 0 additions & 49 deletions containers/base/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -261,55 +261,6 @@ done
echo "AI agent settings symlinks setup completed"
# ========================================

# ========================================
# SSH server (Orca 連携) — enabled by ENABLE_SSH=true
# ========================================
# NOTE: ~/.ssh は上の symlink setup で /persistent/ai/.ssh に張り替え済みのため、
# authorized_keys の書き込みはこのブロック(symlink 生成後)で行う必要がある。
if [ "$ENABLE_SSH" = "true" ] || [ "$ENABLE_SSH" = "1" ]; then
echo "Starting sshd for Orca..."

# host key を永続領域から復元、無ければ生成して保存する。
# 再ビルド/再作成で host key が変わると Orca 側 known_hosts が壊れるのを防ぐ。
# HOST_KEY_DIR は .ssh symlink とは別の独立ディレクトリ(ドット無し)。
HOST_KEY_DIR="/persistent/ai/ssh"
sudo mkdir -p "$HOST_KEY_DIR" || true
# host key の生成/復元と永続化を flock で直列化する。
# 同一ボリュームを共有する複数インスタンス間の競合 (TOCTOU) を防ぐ。
# flock は root 権限で lockfile を生成/取得する (HOST_KEY_DIR は root 所有)。
sudo flock "$HOST_KEY_DIR/.hostkey.lock" -c '
if ! ls /persistent/ai/ssh/ssh_host_*_key >/dev/null 2>&1; then
echo "Generating new install-unique sshd host keys..."
# イメージにビルド時焼き込みされた host key を先に除去してから再生成する。
# 除去しないと ssh-keygen -A が既存キーを検出して何も生成せず、
# イメージ由来の同一 (予測可能) な host key を全 install が共有してしまう。
rm -f /etc/ssh/ssh_host_*_key /etc/ssh/ssh_host_*_key.pub
ssh-keygen -A
cp /etc/ssh/ssh_host_*_key* /persistent/ai/ssh/ 2>/dev/null || true
fi
# 永続領域から /etc/ssh へ復元(毎回)
cp /persistent/ai/ssh/ssh_host_*_key* /etc/ssh/ 2>/dev/null || true
' || true

# authorized_keys の展開(.ssh は /persistent/ai/.ssh へ symlink 済み)
if [ -n "$SSH_AUTHORIZED_KEYS" ]; then
mkdir -p ~/.ssh && chmod 700 ~/.ssh
printf '%s\n' "$SSH_AUTHORIZED_KEYS" > ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
echo "authorized_keys installed"
else
# ~/.ssh は永続ストレージへの symlink のため、空にしただけでは前回書いた
# authorized_keys が残り、失効させたはずの鍵で login できてしまう。
# env を空にしたら永続化された鍵を確実に削除して失効を反映する。
rm -f ~/.ssh/authorized_keys
echo "Warning: SSH_AUTHORIZED_KEYS is empty; cleared persisted authorized_keys (public-key login disabled)"
fi

# sshd 起動(daemonize するため exec "$@" をブロックしない)
sudo /usr/sbin/sshd -e
echo "sshd started"
fi

# Git operations (optional, don't fail if they error)
if [ -n "$GIT_USER" ] && [ -n "$GIT_REPO" ]; then
# Clone repository only if it doesn't exist
Expand Down
5 changes: 2 additions & 3 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ graph TD
| [環境変数ガイド](user/environment-variables.md) | 3レベル構造、コレクター、ソース同期 |
| [コンテナ操作ガイド](user/container-operations.md) | ライフサイクル、並行開発、ボリューム構造 |
| [スナップショットガイド](user/snapshot-guide.md) | 増分バックアップ、世代管理、復元手順 |
| [Orca 接続ガイド](user/orca.md) | コンテナを SSH target として Orca から接続する手順 |
| [トラブルシューティング](user/troubleshooting.md) | カテゴリ別の問題と解決策 |
| [Orca 削除の移行ガイド](user/orca-removal-migration.md) | 旧 Orca(SSH) 接続の廃止と Remote-SSH への移行手順 |

**推奨の読み順:**

Expand Down Expand Up @@ -96,7 +96,6 @@ docs/
│ ├── environment-variables.md ← 環境変数ガイド
│ ├── container-operations.md ← コンテナ操作ガイド
│ ├── snapshot-guide.md ← スナップショットガイド
│ ├── orca.md ← Orca 接続ガイド
│ └── troubleshooting.md ← トラブルシューティング
├── plugin-dev/ ← プラグイン開発者向け
│ ├── quickstart.md ← クイックスタート
Expand All @@ -119,8 +118,8 @@ docs/
| 環境変数を設定する | [環境変数ガイド](user/environment-variables.md#環境変数の操作) |
| 複数コンテナで並行開発する | [コンテナ操作ガイド](user/container-operations.md#並行開発) |
| データをバックアップ・復元する | [スナップショットガイド](user/snapshot-guide.md) |
| Orca からコンテナへ接続する | [Orca 接続ガイド](user/orca.md) |
| エラーが発生した | [トラブルシューティング](user/troubleshooting.md) |
Comment thread
takemi-ohama marked this conversation as resolved.
| 旧 Orca 接続から移行する | [Orca 削除の移行ガイド](user/orca-removal-migration.md) |
| プラグインを作りたい | [プラグイン開発クイックスタート](plugin-dev/quickstart.md) |
| devbase 本体に貢献したい | [コントリビューション](developer/contributing.md) |

Expand Down
9 changes: 0 additions & 9 deletions docs/user/container-operations.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,15 +218,6 @@ graph TD
| **go** | base | Go 開発環境 | Go 開発 |
| **snapshot** | Ubuntu Noble | zstd のみ(約 80MB) | スナップショット専用 |

### SSH サーバー(Orca 連携)

base イメージには `openssh-server` が含まれます。環境変数 `ENABLE_SSH=true`(または `1`)を指定してコンテナを起動すると、entrypoint が sshd を起動します(既定は無効)。

- 認証は公開鍵のみ(`SSH_AUTHORIZED_KEYS` に手元の公開鍵を設定)。
- host key は初回起動時に install ごとに新規生成され(イメージ焼き込みの共通鍵は破棄)、`/persistent/ai/ssh/` に永続化されて再ビルド/再作成後も維持されます(Orca の known_hosts が壊れない)。

> **Note:** `openssh-server` の追加は base イメージの変更のため、既存イメージには `devbase build --no-cache`(base 再ビルド)が必要です。

### AI CLI エイリアス

general イメージ以降のコンテナ内では、以下の AI CLI ツールがエイリアスとして利用可能です。
Expand Down
41 changes: 41 additions & 0 deletions docs/user/orca-removal-migration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Orca / コンテナ内 sshd 廃止に伴う移行ガイド(breaking change)

## 要旨

base image から **sshd を廃止**し、`devbase orca` 連携および `ENABLE_SSH` / `SSH_AUTHORIZED_KEYS`
などの SSH 公開まわりの CLI・compose・env を削除しました。
これにより、**コンテナへ直接 SSH で入る従来の Orca 接続は使えなくなります**(breaking change)。

## 影響

- 「**Windows Orca → Mac → コンテナ内 sshd**」でコンテナに接続していた利用者。
- 旧 project env に残る `ENABLE_SSH=true` / `SSH_AUTHORIZED_KEYS` 等は**無視されます**(エラーにはなりません)。

## 暫定の代替(agent orchestration 実装前)

コンテナ内 sshd の代わりに、**Windows の VS Code を Mac へ Remote-SSH** し、Mac 上から
コンテナに入る運用に切り替えてください。

1. Mac 側で **Remote Login (sshd)** を有効化する(システム設定 > 一般 > 共有 > リモートログイン。
既に有効な環境なら不要)。
2. Windows の VS Code に **Remote-SSH 拡張**を入れ、Mac(`takemi_ohama@<Mac-LAN-IP>`)へ接続する。
3. 接続した Mac 上で対象プロジェクトに移動してコンテナへ入る。従来どおり git worktree / AI CLI が使える。

```bash
cd $DEVBASE_ROOT/projects/<project>
devbase up # 未起動なら
devbase login # 既定は index 1。複数コンテナなら `devbase login 2` のように index を指定
```

(または `devbase list` の TUI からプロジェクト/コンテナを選んで login することもできる。)

## 今後

Issue 34 の agent orchestration(`docker exec` + tmux + VS Code Extension、
詳細は [`issues/i34-orcalike.md`](../../issues/i34-orcalike.md))が、
単一 window でコンテナに入る標準経路になる予定です。

## クリーンアップ(任意)

生成済みの `~/.config/devbase/orca/ssh_config` と `/persistent/ai/ssh` は**自動削除しません**。
不要であれば手動で削除できます。
Loading
Loading