- Update ToolboxStack/output/toolbox-template/run.sh with final runtime configuration adjustments - Ensure proper startup procedures and environment setup - Align with project standards and conventions This completes the updates to the toolbox template runtime.
73 lines
2.2 KiB
Bash
Executable File
73 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
# Security: Validate input parameters to prevent command injection
|
|
sanitized_input() {
|
|
local input="$1"
|
|
# Check for potentially dangerous characters/commands
|
|
case "$input" in
|
|
*[\;\|\&\`\$]*)
|
|
echo "Error: Invalid input detected: $input" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Validate dependencies
|
|
if ! command -v docker &> /dev/null; then
|
|
echo "Error: docker is required but not installed." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v docker compose &> /dev/null; then
|
|
echo "Error: docker compose is required but not installed." >&2
|
|
exit 1
|
|
fi
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
COMPOSE_FILE="${SCRIPT_DIR}/docker-compose.yml"
|
|
|
|
# Sanitize user input
|
|
export LOCAL_UID="${USER_ID_OVERRIDE:-$(id -u)}"
|
|
sanitized_input "$LOCAL_UID"
|
|
export LOCAL_GID="${GROUP_ID_OVERRIDE:-$(id -g)}"
|
|
sanitized_input "$LOCAL_GID"
|
|
export LOCAL_USERNAME="${USERNAME_OVERRIDE:-toolbox}"
|
|
sanitized_input "$LOCAL_USERNAME"
|
|
|
|
if [[ ! -f "${COMPOSE_FILE}" ]]; then
|
|
echo "Error: docker-compose.yml not found at ${COMPOSE_FILE}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
ACTION="${1:-up}"
|
|
sanitized_input "$ACTION"
|
|
shift || true
|
|
|
|
if [[ "${ACTION}" == "up" ]]; then
|
|
# Create necessary directories for the toolbox tools with proper permissions
|
|
mkdir -p "${HOME}/.local/share/mise" "${HOME}/.cache/mise"
|
|
mkdir -p "${HOME}/.config" "${HOME}/.local/share"
|
|
mkdir -p "${HOME}/.cache/openai" "${HOME}/.cache/gemini" "${HOME}/.cache/qwen" "${HOME}/.cache/code" "${HOME}/.cache/opencode"
|
|
mkdir -p "${HOME}/.config/openai" "${HOME}/.config/gemini" "${HOME}/.config/qwen" "${HOME}/.config/code" "${HOME}/.config/opencode"
|
|
|
|
# Set proper permissions for created directories
|
|
chmod 700 "${HOME}/.config" "${HOME}/.local/share" "${HOME}/.cache" 2>/dev/null || true
|
|
fi
|
|
|
|
case "${ACTION}" in
|
|
up)
|
|
docker compose -f "${COMPOSE_FILE}" up --build --detach "$@"
|
|
echo "Container started. Use 'docker exec -it $(basename "$SCRIPT_DIR" | sed 's/toolbox-//') zsh' to access the shell."
|
|
;;
|
|
down)
|
|
docker compose -f "${COMPOSE_FILE}" down "$@"
|
|
echo "Container stopped."
|
|
;;
|
|
*)
|
|
echo "Usage: $0 [up|down] [additional docker compose args]" >&2
|
|
exit 1
|
|
;;
|
|
esac
|