krr / start.sh
StarrySkyWorld's picture
Update start.sh
1513f3a verified
#!/bin/bash
set -e
# ============================================
# Kiro Shell 启动脚本 v1.0
# ============================================
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
check_env() {
local missing=0
for var in WORKER_URL AUTH_TOKEN ENCRYPTION_KEY API_KEY; do
if [ -z "${!var}" ]; then
log_error "缺少环境变量: $var"
missing=1
fi
done
if [ $missing -eq 1 ]; then
exit 1
fi
log_success "环境变量检查通过"
}
download_credentials() {
log_info "从 Worker 下载凭据..."
local response http_code body
response=$(curl -sS --tlsv1.2 --connect-timeout 10 --max-time 20 \
-H "Authorization: Bearer $AUTH_TOKEN" \
-w "\nHTTP_CODE:%{http_code}\n" \
"${WORKER_URL}/api/credentials")
http_code=$(echo "$response" | awk -F'HTTP_CODE:' 'END{print $2}' | tr -d '\r')
body=$(echo "$response" | sed '/HTTP_CODE:/d')
if [ "$http_code" != "200" ]; then
log_error "下载凭据失败 (HTTP $http_code): $body"
exit 1
fi
ENCRYPTED=$(echo "$body" | jq -r '.encrypted')
IV=$(echo "$body" | jq -r '.iv')
COUNT=$(echo "$body" | jq -r '.count')
if [ "$ENCRYPTED" = "null" ] || [ "$IV" = "null" ]; then
log_error "凭据格式错误: $body"
exit 1
fi
log_success "凭据下载成功 (共 $COUNT 个)"
}
decrypt_credentials() {
log_info "解密凭据..."
local iv_hex decrypted
iv_hex=$(echo "$IV" | base64 -d | xxd -p | tr -d '\n')
decrypted=$(echo "$ENCRYPTED" | base64 -d | \
openssl enc -aes-256-cbc -d \
-K "$ENCRYPTION_KEY" \
-iv "$iv_hex" 2>/dev/null)
if [ $? -ne 0 ] || [ -z "$decrypted" ]; then
log_error "解密失败,请检查 ENCRYPTION_KEY"
exit 1
fi
if ! echo "$decrypted" | jq . > /dev/null 2>&1; then
log_error "解密后的数据不是有效 JSON"
exit 1
fi
echo "$decrypted" > /app/credentials.json
log_success "凭据解密成功"
}
generate_config() {
log_info "生成配置文件..."
cat > /app/config.json << EOF
{
"host": "0.0.0.0",
"port": 7860,
"apiKey": "$API_KEY",
"region": "${REGION:-us-east-1}",
"adminApiKey": "${ADMIN_API_KEY:-admin12345}"
}
EOF
log_success "配置文件生成完成"
}
start_kiro() {
log_info "启动 kiro-rs..."
echo ""
echo "========================================"
echo " Kiro Proxy 已启动"
echo " 监听地址: 0.0.0.0:7860"
echo "========================================"
echo ""
exec /app/kiro-rs -c /app/config.json --credentials /app/credentials.json
}
main() {
echo ""
echo "========================================"
echo " Kiro Shell v1.0"
echo "========================================"
echo ""
check_env
download_credentials
decrypt_credentials
generate_config
start_kiro
}
main