adee5dfc78
- FastAPI server with scan/build/repo endpoints - LLM scanner (Ollama) with regex pre-scan - makepkg/devtools builder with chroot isolation - Scan cache with TTL + PKGBUILD hash - Client installer + safe-yay wrapper - Docs + config example
131 lines
4.4 KiB
Bash
131 lines
4.4 KiB
Bash
#!/usr/bin/env bash
|
|
# AUR-Shield Server Installer
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
echo "╔══════════════════════════════════════════════╗"
|
|
echo "║ AUR-Shield Server Installer ║"
|
|
echo "╚══════════════════════════════════════════════╝"
|
|
echo ""
|
|
|
|
# Check for Arch Linux
|
|
if ! command -v pacman &>/dev/null; then
|
|
echo "✗ This script requires Arch Linux (pacman)."
|
|
exit 1
|
|
fi
|
|
|
|
# Check for dependencies
|
|
echo "Checking dependencies..."
|
|
MISSING=()
|
|
|
|
if ! command -v ollama &>/dev/null; then
|
|
MISSING+=("ollama")
|
|
fi
|
|
if ! command -v makepkg &>/dev/null; then
|
|
MISSING+=("base-devel (makepkg)")
|
|
fi
|
|
if ! command -v python3 &>/dev/null; then
|
|
MISSING+=("python3")
|
|
fi
|
|
if ! command -v git &>/dev/null; then
|
|
MISSING+=("git")
|
|
fi
|
|
|
|
if [ ${#MISSING[@]} -gt 0 ]; then
|
|
echo "✗ Missing dependencies:"
|
|
for dep in "${MISSING[@]}"; do
|
|
echo " - $dep"
|
|
done
|
|
echo ""
|
|
echo "Install with: sudo pacman -S ${MISSING[*]}"
|
|
exit 1
|
|
fi
|
|
|
|
# Check for devtools (optional but recommended)
|
|
DEVTOOLS=""
|
|
if ! command -v extra-x86_64-build &>/dev/null; then
|
|
echo "⚠ devtools not found — builds will use makepkg directly (less isolation)"
|
|
echo " Install with: sudo pacman -S devtools"
|
|
echo ""
|
|
else
|
|
DEVTOOLS="✓ devtools found — builds will use chroot isolation"
|
|
fi
|
|
|
|
# Check for ollama model
|
|
echo "Checking Ollama models..."
|
|
if ! ollama list 2>/dev/null | grep -q "qwen2.5"; then
|
|
echo "⚠ No qwen2.5 model found in Ollama."
|
|
echo " Recommended: ollama pull qwen2.5:latest (4.7GB, needs ~6GB VRAM)"
|
|
echo " Fallback: ollama pull qwen2.5-coder:3b (1.9GB, needs ~3GB VRAM)"
|
|
echo ""
|
|
read -rp "Pull qwen2.5:latest now? [Y/n] " PULL
|
|
if [[ "${PULL,,}" != "n" ]]; then
|
|
ollama pull qwen2.5:latest
|
|
fi
|
|
fi
|
|
|
|
# Install Python deps
|
|
echo ""
|
|
echo "Installing Python dependencies..."
|
|
if command -v uv &>/dev/null; then
|
|
uv venv "$SCRIPT_DIR/.venv"
|
|
uv pip install --python "$SCRIPT_DIR/.venv/bin/python" -e "$SCRIPT_DIR[dev]"
|
|
echo "✓ Installed with uv"
|
|
else
|
|
python3 -m venv "$SCRIPT_DIR/.venv"
|
|
"$SCRIPT_DIR/.venv/bin/pip" install -e "$SCRIPT_DIR[dev]"
|
|
echo "✓ Installed with pip"
|
|
fi
|
|
|
|
# Create config if not exists
|
|
if [ ! -f "$SCRIPT_DIR/config.yaml" ]; then
|
|
cp "$SCRIPT_DIR/config.example.yaml" "$SCRIPT_DIR/config.yaml"
|
|
echo "✓ Created config.yaml from example"
|
|
fi
|
|
|
|
# Create cache dirs
|
|
sudo mkdir -p /var/cache/aur-shield/repo
|
|
sudo mkdir -p /var/cache/aur-shield/build
|
|
sudo mkdir -p /var/cache/aur-shield/cache
|
|
sudo chown -R "$USER" /var/cache/aur-shield/
|
|
echo "✓ Created cache directories"
|
|
|
|
# Create systemd service
|
|
SERVICE_FILE="/etc/systemd/system/aur-shield.service"
|
|
echo "Creating systemd service..."
|
|
sudo tee "$SERVICE_FILE" > /dev/null << EOF
|
|
[Unit]
|
|
Description=AUR-Shield — AI-powered AUR firewall
|
|
After=network.target ollama.service
|
|
|
|
[Service]
|
|
Type=simple
|
|
ExecStart=$SCRIPT_DIR/.venv/bin/python -m aur_shield $SCRIPT_DIR/config.yaml
|
|
WorkingDirectory=$SCRIPT_DIR
|
|
Environment="HOME=$SCRIPT_DIR"
|
|
User=$USER
|
|
Restart=on-failure
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
echo "✓ Created systemd service"
|
|
|
|
echo ""
|
|
echo "╔══════════════════════════════════════════════╗"
|
|
echo "║ Installation complete! ║"
|
|
echo "╠══════════════════════════════════════════════╣"
|
|
echo "║ ║"
|
|
echo "║ Start: systemctl start aur-shield ║"
|
|
echo "║ Enable: systemctl enable aur-shield ║"
|
|
echo "║ Status: systemctl status aur-shield ║"
|
|
echo "║ Logs: journalctl -u aur-shield -f ║"
|
|
echo "║ ║"
|
|
echo "║ API: http://localhost:8443/api/status ║"
|
|
echo "║ ║"
|
|
echo "║ Config: $SCRIPT_DIR/config.yaml ║"
|
|
echo "║ ║"
|
|
echo "╚══════════════════════════════════════════════╝" |