| #!/bin/bash
|
|
|
|
|
|
|
|
|
| set -e
|
|
|
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββ"
|
| echo "β NEKOMATA η«ε β Environment Setup β"
|
| echo "ββββββββββββββββββββββββββββββββββββββββββββββββ"
|
| echo ""
|
|
|
|
|
| detect_os() {
|
| if [[ "$OSTYPE" == "darwin"* ]]; then
|
| echo "macos"
|
| elif [[ -f /etc/debian_version ]]; then
|
| echo "debian"
|
| elif [[ -f /etc/fedora-release ]]; then
|
| echo "fedora"
|
| elif [[ -f /etc/arch-release ]]; then
|
| echo "arch"
|
| else
|
| echo "unknown"
|
| fi
|
| }
|
|
|
| OS=$(detect_os)
|
| echo "[*] Detected OS: $OS"
|
| echo ""
|
|
|
|
|
| install_docker() {
|
| echo "[1/3] Installing Docker..."
|
| case $OS in
|
| debian)
|
| sudo apt-get update -qq
|
| sudo apt-get install -y -qq ca-certificates curl gnupg
|
| sudo install -m 0755 -d /etc/apt/keyrings
|
| curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 2>/dev/null || true
|
| sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
| echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
| sudo apt-get update -qq
|
| sudo apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-buildx-plugin
|
| ;;
|
| fedora)
|
| sudo dnf -y install dnf-plugins-core
|
| sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
|
| sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
|
| ;;
|
| arch)
|
| sudo pacman -Sy --noconfirm docker
|
| ;;
|
| macos)
|
| if ! command -v brew &>/dev/null; then
|
| echo "ERROR: Homebrew required. Install from https://brew.sh"
|
| exit 1
|
| fi
|
| brew install --cask docker
|
| echo "[!] Docker Desktop installed β launch it from Applications."
|
| echo "[!] Socket will be at: /var/run/docker.sock (after launch)"
|
| ;;
|
| *)
|
| echo "ERROR: Unsupported OS. Install Docker manually."
|
| echo " https://docs.docker.com/engine/install/"
|
| exit 1
|
| ;;
|
| esac
|
| echo "[+] Docker installed."
|
| }
|
|
|
|
|
| start_docker() {
|
| echo "[2/3] Starting Docker daemon..."
|
| case $OS in
|
| macos)
|
| open -a Docker 2>/dev/null || true
|
| echo "[!] Waiting for Docker Desktop to start..."
|
| for i in $(seq 1 30); do
|
| docker info &>/dev/null && break
|
| sleep 2
|
| done
|
| ;;
|
| *)
|
| sudo systemctl enable docker
|
| sudo systemctl start docker
|
| sudo usermod -aG docker "$USER" 2>/dev/null || true
|
| ;;
|
| esac
|
|
|
| if docker info &>/dev/null; then
|
| echo "[+] Docker running."
|
| else
|
| echo "[!] Docker installed but not yet running."
|
| echo " Run: sudo systemctl start docker"
|
| echo " Then: newgrp docker"
|
| fi
|
| }
|
|
|
|
|
| install_sbcl() {
|
| echo "[3/3] Installing SBCL + Quicklisp..."
|
| case $OS in
|
| debian)
|
| sudo apt-get install -y -qq sbcl cl-quicklisp
|
| ;;
|
| fedora)
|
| sudo dnf -y install sbcl
|
| ;;
|
| arch)
|
| sudo pacman -Sy --noconfirm sbcl
|
| ;;
|
| macos)
|
| brew install sbcl
|
| ;;
|
| *)
|
| echo "ERROR: Install SBCL manually from http://www.sbcl.org/platform-table.html"
|
| exit 1
|
| ;;
|
| esac
|
|
|
|
|
| if [ ! -f "$HOME/quicklisp/setup.lisp" ]; then
|
| echo "[*] Installing Quicklisp..."
|
| curl -fsSL https://beta.quicklisp.org/quicklisp.lisp -o /tmp/quicklisp.lisp
|
| sbcl --non-interactive --load /tmp/quicklisp.lisp \
|
| --eval '(quicklisp-quickstart:install)' \
|
| --eval '(ql-util:without-prompting (ql:add-to-init-file))'
|
| rm -f /tmp/quicklisp.lisp
|
| fi
|
| echo "[+] SBCL + Quicklisp ready."
|
| }
|
|
|
|
|
| verify_socket() {
|
| echo ""
|
| echo "βββ Verification βββ"
|
| if [ -S /var/run/docker.sock ]; then
|
| echo "[+] /var/run/docker.sock exists"
|
| if docker info &>/dev/null; then
|
| echo "[+] Docker API responding"
|
| docker version --format '{{.Server.Version}}' 2>/dev/null && echo " (server version)"
|
| fi
|
| else
|
| echo "[!] Socket not found yet β Docker may need a restart"
|
| fi
|
|
|
| if command -v sbcl &>/dev/null; then
|
| echo "[+] SBCL $(sbcl --version 2>&1 | head -1)"
|
| fi
|
|
|
| echo ""
|
| echo "βββ Ready βββ"
|
| echo ""
|
| echo " Load Nekomata:"
|
| echo ""
|
| echo " cd $(pwd)"
|
| echo " sbcl --load nekod.asd --eval '(ql:quickload :nekod)'"
|
| echo ""
|
| echo " Run tests:"
|
| echo ""
|
| echo " sbcl --load nekod.asd \\"
|
| echo " --eval '(ql:quickload :nekod)' \\"
|
| echo " --load tests/socket-tests.lisp \\"
|
| echo " --eval '(nekod.test.socket:run-all-tests)'"
|
| echo ""
|
| }
|
|
|
|
|
| if command -v docker &>/dev/null && docker info &>/dev/null; then
|
| echo "[*] Docker already installed and running."
|
| else
|
| install_docker
|
| start_docker
|
| fi
|
|
|
| if command -v sbcl &>/dev/null; then
|
| echo "[*] SBCL already installed."
|
| else
|
| install_sbcl
|
| fi
|
|
|
| verify_socket
|
|
|