File size: 6,047 Bytes
3b70664 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | #!/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
|