Rename Claude sandbox to Assistant and update docs/volumes
This commit is contained in:
+2
-2
@@ -142,8 +142,8 @@ RUN chmod 755 /root && \
|
||||
chmod a+rx /usr/local/bin/abra 2>/dev/null || true
|
||||
|
||||
# Pre-create home directory for the claude user
|
||||
RUN mkdir -p /home/claude/.claude /home/claude/.local/bin /home/claude/.config /home/claude/.abra && \
|
||||
chmod -R 755 /home/claude
|
||||
RUN mkdir -p /home/assistant/.claude /home/assistant/.local/bin /home/assistant/.config /home/assistant/.abra && \
|
||||
chmod -R 755 /home/assistant
|
||||
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ The Python wrapper does three things:
|
||||
|
||||
### `entrypoint.sh` — user mapping
|
||||
|
||||
The entrypoint creates a non-root `claude` user inside the container whose UID/GID matches your host user. This means files Claude creates or edits have the right ownership on your host filesystem.
|
||||
The entrypoint creates a non-root `assistant` user inside the container whose UID/GID matches your host user. This means files Claude creates or edits have the right ownership on your host filesystem.
|
||||
|
||||
### `docker-compose.yml` — persistence
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
services:
|
||||
claude:
|
||||
assistant:
|
||||
image: sandbox
|
||||
env_file:
|
||||
- path: ./.env
|
||||
@@ -10,7 +10,7 @@ services:
|
||||
volumes:
|
||||
- .:/workspace # default; overridden by claude.py at runtime
|
||||
- claude_target:/workspace/target # persist Rust build cache
|
||||
- claude_userhome:/home/claude # persist Claude settings, auth, history
|
||||
- assistant_userhome:/home/claude # persist Claude settings, auth, history
|
||||
- ./.container-abra:/home/claude/.abra # default; overridden by claude.py at runtime
|
||||
- tailscale_state:/var/lib/tailscale # persist Tailscale auth across restarts
|
||||
tty: true
|
||||
@@ -18,5 +18,5 @@ services:
|
||||
|
||||
volumes:
|
||||
claude_target:
|
||||
claude_userhome:
|
||||
assistant_userhome:
|
||||
tailscale_state:
|
||||
|
||||
+27
-27
@@ -7,9 +7,9 @@ HOST_GID=${HOST_GID:-0}
|
||||
DEFAULT_UID=${DEFAULT_UID:-1000}
|
||||
DEFAULT_GID=${DEFAULT_GID:-1000}
|
||||
|
||||
CLAUDE_USER=${CLAUDE_USER:-claude}
|
||||
CLAUDE_GROUP=${CLAUDE_GROUP:-claude}
|
||||
CLAUDE_HOME=${CLAUDE_HOME:-/home/${CLAUDE_USER}}
|
||||
ASSISTANT_USER=${ASSISTANT_USER:-assistant}
|
||||
ASSISTANT_GROUP=${ASSISTANT_GROUP:-claude}
|
||||
ASSISTANT_HOME=${ASSISTANT_HOME:-/home/${ASSISTANT_USER}}
|
||||
|
||||
if [ "$HOST_UID" -eq 0 ] && [ "$HOST_GID" -eq 0 ]; then
|
||||
HOST_UID=$DEFAULT_UID
|
||||
@@ -17,39 +17,39 @@ if [ "$HOST_UID" -eq 0 ] && [ "$HOST_GID" -eq 0 ]; then
|
||||
fi
|
||||
|
||||
if getent group "$HOST_GID" >/dev/null 2>&1; then
|
||||
CLAUDE_GROUP="$(getent group "$HOST_GID" | cut -d: -f1)"
|
||||
ASSISTANT_GROUP="$(getent group "$HOST_GID" | cut -d: -f1)"
|
||||
else
|
||||
groupadd -g "$HOST_GID" "$CLAUDE_GROUP"
|
||||
groupadd -g "$HOST_GID" "$ASSISTANT_GROUP"
|
||||
fi
|
||||
|
||||
# Ensure home exists, but don't recreate it
|
||||
if [ ! -d "$CLAUDE_HOME" ]; then
|
||||
mkdir -p "$CLAUDE_HOME"
|
||||
chown "$HOST_UID:$HOST_GID" "$CLAUDE_HOME"
|
||||
if [ ! -d "$ASSISTANT_HOME" ]; then
|
||||
mkdir -p "$ASSISTANT_HOME"
|
||||
chown "$HOST_UID:$HOST_GID" "$ASSISTANT_HOME"
|
||||
fi
|
||||
chown -R "$HOST_UID:$HOST_GID" "$CLAUDE_HOME"
|
||||
chown -R "$HOST_UID:$HOST_GID" "$ASSISTANT_HOME"
|
||||
|
||||
if id -u "$CLAUDE_USER" >/dev/null 2>&1; then
|
||||
if id -u "$ASSISTANT_USER" >/dev/null 2>&1; then
|
||||
# Do NOT change -d (home) for existing user
|
||||
usermod -u "$HOST_UID" -g "$CLAUDE_GROUP" "$CLAUDE_USER"
|
||||
usermod -u "$HOST_UID" -g "$ASSISTANT_GROUP" "$ASSISTANT_USER"
|
||||
else
|
||||
# Only use -m when home doesn't already exist
|
||||
useradd -u "$HOST_UID" -g "$CLAUDE_GROUP" -d "$CLAUDE_HOME" -s /bin/bash "$CLAUDE_USER"
|
||||
useradd -u "$HOST_UID" -g "$ASSISTANT_GROUP" -d "$ASSISTANT_HOME" -s /bin/bash "$ASSISTANT_USER"
|
||||
fi
|
||||
|
||||
# Grant passwordless sudo to claude user
|
||||
echo "$CLAUDE_USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/claude
|
||||
chmod 440 /etc/sudoers.d/claude
|
||||
echo "$ASSISTANT_USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/assistant
|
||||
chmod 440 /etc/sudoers.d/assistant
|
||||
|
||||
install -d -m 0755 -o "$HOST_UID" -g "$HOST_GID" "$CLAUDE_HOME/.local"
|
||||
install -d -m 0755 -o "$HOST_UID" -g "$HOST_GID" "$CLAUDE_HOME/.local/bin"
|
||||
install -d -m 0755 -o "$HOST_UID" -g "$HOST_GID" "$CLAUDE_HOME/.config"
|
||||
install -d -m 0755 -o "$HOST_UID" -g "$HOST_GID" "$CLAUDE_HOME/.claude"
|
||||
install -d -m 0755 -o "$HOST_UID" -g "$HOST_GID" "$CLAUDE_HOME/.abra"
|
||||
install -d -m 0755 -o "$HOST_UID" -g "$HOST_GID" "$ASSISTANT_HOME/.local"
|
||||
install -d -m 0755 -o "$HOST_UID" -g "$HOST_GID" "$ASSISTANT_HOME/.local/bin"
|
||||
install -d -m 0755 -o "$HOST_UID" -g "$HOST_GID" "$ASSISTANT_HOME/.config"
|
||||
install -d -m 0755 -o "$HOST_UID" -g "$HOST_GID" "$ASSISTANT_HOME/.claude"
|
||||
install -d -m 0755 -o "$HOST_UID" -g "$HOST_GID" "$ASSISTANT_HOME/.abra"
|
||||
|
||||
# Copy Claude binaries to user's local bin (always, to ensure upgrades apply)
|
||||
cp -r /root/.local/bin/* "$CLAUDE_HOME/.local/bin/" 2>/dev/null || true
|
||||
chown -R "$HOST_UID:$HOST_GID" "$CLAUDE_HOME/.local/bin"
|
||||
cp -r /root/.local/bin/* "$ASSISTANT_HOME/.local/bin/" 2>/dev/null || true
|
||||
chown -R "$HOST_UID:$HOST_GID" "$ASSISTANT_HOME/.local/bin"
|
||||
|
||||
if [ -d /workspace ]; then
|
||||
chown -R "$HOST_UID:$HOST_GID" /workspace 2>/dev/null || true
|
||||
@@ -59,15 +59,15 @@ if [ -d /workspace/target ]; then
|
||||
fi
|
||||
|
||||
# Set up PATH in user's bashrc to avoid "~/.local/bin not in PATH" warning
|
||||
if ! grep -q 'export PATH="\$HOME/.local/bin:\$PATH"' "$CLAUDE_HOME/.bashrc" 2>/dev/null; then
|
||||
echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$CLAUDE_HOME/.bashrc"
|
||||
chown "$HOST_UID:$HOST_GID" "$CLAUDE_HOME/.bashrc"
|
||||
if ! grep -q 'export PATH="\$HOME/.local/bin:\$PATH"' "$ASSISTANT_HOME/.bashrc" 2>/dev/null; then
|
||||
echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$ASSISTANT_HOME/.bashrc"
|
||||
chown "$HOST_UID:$HOST_GID" "$ASSISTANT_HOME/.bashrc"
|
||||
fi
|
||||
|
||||
export PATH="$CLAUDE_HOME/.local/bin:$CLAUDE_HOME/.cargo/bin:/usr/local/bin:$PATH"
|
||||
export PATH="$ASSISTANT_HOME/.local/bin:$ASSISTANT_HOME/.cargo/bin:/usr/local/bin:$PATH"
|
||||
|
||||
if [ $# -gt 0 ]; then
|
||||
exec gosu "$CLAUDE_USER" "$@"
|
||||
exec gosu "$ASSISTANT_USER" "$@"
|
||||
else
|
||||
exec gosu "$CLAUDE_USER" "$CLAUDE_HOME/.local/bin/claude" --dangerously-skip-permissions
|
||||
exec gosu "$ASSISTANT_USER" "$ASSISTANT_HOME/.local/bin/assistant" --dangerously-skip-permissions
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user