Files
workpod/entrypoint-test.sh

129 lines
4.3 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
set -e
SSHD_PID=0
TTYD_PID=0
cleanup() {
echo "[entrypoint] 收到终止信号,正在关闭服务..."
[ "$TTYD_PID" -ne 0 ] && kill "$TTYD_PID" 2>/dev/null
[ "$SSHD_PID" -ne 0 ] && kill "$SSHD_PID" 2>/dev/null
wait 2>/dev/null
echo "[entrypoint] 服务已关闭"
exit 0
}
trap cleanup SIGTERM SIGINT SIGQUIT
# 自动检测 /root 下的开发工具并设置 PATH
[ -d /root/.cargo/bin ] && export PATH="/root/.cargo/bin:$PATH"
[ -d /root/.rustup ] && export RUSTUP_HOME=/root/.rustup CARGO_HOME=/root/.cargo
[ -d /root/gvm/gos ] && export PATH="/root/gvm/gos/current/bin:$PATH"
[ -d /root/.pyenv/shims ] && export PATH="/root/.pyenv/shims:$PATH"
[ -d /root/.pyenv/bin ] && export PATH="/root/.pyenv/bin:$PATH"
[ -d /root/go/bin ] && export PATH="/root/go/bin:$PATH" && export GOROOT=/root/go
[ -d /root/.local/bin ] && export PATH="/root/.local/bin:$PATH"
# 检测 Rust 独立安装(非 rustup
RUST_DIR=$(ls -d /root/rust-*/bin 2>/dev/null | head -1)
[ -n "$RUST_DIR" ] && export PATH="$RUST_DIR:$PATH"
# 创建非 root 用户 developer(用于 Claude Code 全权限沙箱)
id developer 2>/dev/null || adduser -D -s /bin/bash developer
mkdir -p /etc/sudoers.d
echo "developer ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/developer
chmod 440 /etc/sudoers.d/developer
mkdir -p /home/developer/.claude
chown -R developer:developer /home/developer
# Claude Code 全权限配置 —— root 用户
mkdir -p /root/.claude
cat > /root/.claude/settings.json << 'SETTINGS'
{
"permissions": {
"allow": ["*"],
"deny": []
}
}
SETTINGS
# Claude Code 全权限配置 —— developer 用户
cat > /home/developer/.claude/settings.json << 'SETTINGS'
{
"permissions": {
"allow": ["*"],
"deny": []
}
}
SETTINGS
chown developer:developer /home/developer/.claude/settings.json
# 创建便捷别名(含 Claude Code 密钥环境变量)
# root 用 --allow-dangerously-skip-permissionsroot 禁止 --dangerously-skip-permissions
# developer 用 --dangerously-skip-permissions
cat > /home/developer/.bashrc << BASHRC
alias claude='claude --dangerously-skip-permissions'
export PATH="/usr/local/bin:/usr/bin:/bin:\$PATH"
export ANTHROPIC_AUTH_TOKEN="${ANTHROPIC_AUTH_TOKEN}"
export ANTHROPIC_BASE_URL="${ANTHROPIC_BASE_URL}"
export API_TIMEOUT_MS="${API_TIMEOUT_MS:-3000000}"
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="${CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:-1}"
BASHRC
chown developer:developer /home/developer/.bashrc
# root 的全局别名
cat > /root/.bashrc << 'ROOTRC'
alias claude='claude --allow-dangerously-skip-permissions'
ROOTRC
# 写入 /etc/profile.d/ 让所有 shell 会话生效
cat > /etc/profile.d/dev-tools.sh << 'PROFILE'
[ -d /root/.cargo/bin ] && export PATH="/root/.cargo/bin:$PATH" && export RUSTUP_HOME=/root/.rustup CARGO_HOME=/root/.cargo
[ -d /root/gvm/gos ] && source /root/gvm/scripts/gvm 2>/dev/null
[ -d /root/.pyenv/shims ] && export PATH="/root/.pyenv/shims:/root/.pyenv/bin:$PATH"
[ -d /root/go/bin ] && export PATH="/root/go/bin:$PATH" && export GOROOT=/root/go
[ -d /root/.local/bin ] && export PATH="/root/.local/bin:$PATH"
RUST_DIR=$(ls -d /root/rust-*/bin 2>/dev/null | head -1)
[ -n "$RUST_DIR" ] && export PATH="$RUST_DIR:$PATH"
PROFILE
/usr/sbin/sshd
echo "[entrypoint] SSH 已启动"
ttyd -W -c jc:1234567 -t fontSize=16 -t theme='{"background":"#1a1a2e"}' /opt/ttyd-session.sh &
TTYD_PID=$!
sleep 1
if ! kill -0 "$TTYD_PID" 2>/dev/null; then
echo "[entrypoint] 错误: ttyd 启动失败"
exit 1
fi
echo "[entrypoint] ttyd 已启动 (PID: $TTYD_PID)"
if ! pidof sshd > /dev/null; then
echo "[entrypoint] 错误: sshd 启动失败"
exit 1
fi
echo ""
echo "========================================"
echo " WorkPod Test 开发环境已就绪"
echo "========================================"
echo "Node: $(node --version)"
echo "npm: $(npm --version)"
echo ""
echo "AI 工具:"
echo " Claude Code: $(claude --version 2>/dev/null || echo '未安装')"
echo ""
echo "开发工具:"
echo " Rust: $(rustc --version 2>/dev/null || echo '未安装')"
echo " Go: $(go version 2>/dev/null || echo '未安装')"
echo " Python: $(python3 --version 2>/dev/null || echo '未安装')"
echo ""
echo "连接方式:"
echo " Web: http://localhost:7682"
echo " SSH: ssh root@localhost -p 2223 (密码: workpod123)"
echo "========================================"
exec sleep infinity