nekomata / setup.sh
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/nekomata
3b70664 verified
Raw
History Blame Contribute Delete
6.05 kB
#!/bin/bash
# Nekomata β€” Docker + SBCL setup script
# Usage: bash setup.sh
# Supports: Ubuntu/Debian, Fedora/RHEL, Arch, macOS
set -e
echo "╔══════════════════════════════════════════════╗"
echo "β•‘ NEKOMATA 猫又 β€” Environment Setup β•‘"
echo "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•"
echo ""
# Detect OS
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
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 daemon
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 + Quicklisp
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
# Install Quicklisp if not present
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
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 ""
}
# Main
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