diff --git a/00-new3.sh b/00-new3.sh new file mode 100644 index 0000000..5c26134 --- /dev/null +++ b/00-new3.sh @@ -0,0 +1,230 @@ +#!/usr/bin/env bash +set -euo pipefail + +### CONFIG ### +OPENWEBUI_IMAGE="ghcr.io/open-webui/open-webui:main" +### /CONFIG ### + +echo "=== Step 2: Install Docker, Ollama, Stable Diffusion, and Open WebUI ===" + +if [[ $EUID -ne 0 ]]; then + echo "Please run this script as root, e.g.: sudo bash $0" + exit 1 +fi + +# Figure out the "real" user so we install things into their home directory +REALUSER="${SUDO_USER:-$USER}" +USER_HOME="$(eval echo ~${REALUSER})" +OPENWEBUI_DIR="${USER_HOME}/open-webui" +STABLEDIFF_DIR="${USER_HOME}/stablediff" + +echo "Real user: ${REALUSER}" +echo "User home: ${USER_HOME}" +echo "Open WebUI dir: ${OPENWEBUI_DIR}" +echo "Stable Diff dir: ${STABLEDIFF_DIR}" +echo + +# --- Sanity check: GPU should be visible now --- +if ! command -v nvidia-smi >/dev/null 2>&1; then + echo "WARNING: nvidia-smi not found." + echo "Make sure you ran 00-gpu-driver.sh and rebooted successfully." + echo "You can continue, but GPU usage may not work." +else + echo "nvidia-smi output:" + nvidia-smi || true +fi + +############################################################################### +# Step 1/4: Install Docker Engine + Docker Compose +############################################################################### +echo +echo "Step 1/4: Installing Docker Engine + Docker Compose..." + +# Remove old Docker bits if present (ignore errors) +apt-get remove -y docker docker-engine docker.io containerd runc || true + +# Add Docker’s official GPG key +install -m 0755 -d /etc/apt/keyrings +if [ ! -f /etc/apt/keyrings/docker.gpg ]; then + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ + gpg --dearmor -o /etc/apt/keyrings/docker.gpg + chmod a+r /etc/apt/keyrings/docker.gpg +fi + +# Add Docker apt repository +UBUNTU_CODENAME="$(. /etc/os-release && echo "$VERSION_CODENAME")" +if [ ! -f /etc/apt/sources.list.d/docker.list ]; then + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + ${UBUNTU_CODENAME} stable" > /etc/apt/sources.list.d/docker.list +fi + +apt-get update -y +apt-get install -y \ + docker-ce \ + docker-ce-cli \ + containerd.io \ + docker-buildx-plugin \ + docker-compose-plugin + +systemctl enable --now docker + +echo "Docker version:" +docker --version || true +echo "Docker Compose plugin version:" +docker compose version || true + +############################################################################### +# Step 2/4: Install Ollama (GPU-enabled) +############################################################################### +echo +echo "Step 2/4: Installing Ollama (GPU-enabled)..." + +# Let Ollama's installer run even if its CUDA driver step conflicts with Ubuntu's drivers +set +e +curl -fsSL https://ollama.com/install.sh | sh +OLLAMA_RC=$? +set -e + +if [ $OLLAMA_RC -ne 0 ]; then + echo "WARNING: Ollama installer returned non-zero (likely CUDA driver dependency issues)." + echo "As long as your NVIDIA driver works (nvidia-smi OK), you can ignore this." +fi + +# Make sure the service is enabled & running +systemctl enable --now ollama || true + +echo "Waiting for Ollama API on http://127.0.0.1:11434 ..." +for i in {1..30}; do + if curl -sSf http://127.0.0.1:11434/api/version >/dev/null 2>&1; then + echo "Ollama is up!" + break + fi + sleep 2 +done + +if ! curl -sSf http://127.0.0.1:11434/api/version >/dev/null 2>&1; then + echo "WARNING: Ollama API not responding yet. Check 'systemctl status ollama'." +fi + +############################################################################### +# Step 3/4: Install Stable Diffusion (AUTOMATIC1111) via pyenv + systemd autostart +############################################################################### +echo +echo "Step 3/4: Installing Stable Diffusion WebUI (AUTOMATIC1111) with pyenv..." + +echo "Installing prerequisites for Stable Diffusion..." +apt-get install -y \ + make build-essential libssl-dev zlib1g-dev libbz2-dev \ + libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \ + libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev git \ + python3-pip + +# Install pyenv for the REALUSER if not already present +sudo -u "${REALUSER}" bash -lc ' + if [ ! -d "$HOME/.pyenv" ]; then + echo "Installing pyenv for $USER..." + curl https://pyenv.run | bash + else + echo "pyenv already installed for $USER, skipping." + fi +' + +# Use pyenv to ensure Python 3.10 for Stable Diffusion +sudo -u "${REALUSER}" bash -lc ' + export PYENV_ROOT="$HOME/.pyenv" + if [ -d "$PYENV_ROOT/bin" ]; then + export PATH="$PYENV_ROOT/bin:$PATH" + fi + eval "$(pyenv init -)" + + echo "Ensuring Python 3.10 is installed with pyenv..." + pyenv install -s 3.10 + pyenv global 3.10 +' + +# Clone AUTOMATIC1111’s repo into ~/stablediff (if not already there) +sudo -u "${REALUSER}" bash -lc ' + if [ ! -d "$HOME/stablediff" ]; then + echo "Cloning Stable Diffusion WebUI repo into ~/stablediff..." + git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git "$HOME/stablediff" + else + echo "~/stablediff already exists, skipping clone." + fi +' + +# Create systemd service for Stable Diffusion WebUI to auto-start at boot +echo "Creating systemd service for Stable Diffusion WebUI..." + +cat >/etc/systemd/system/stablediff.service < docker-compose.yml <<'EOF' +version: "3.8" + +services: + open-webui: + image: ghcr.io/open-webui/open-webui:main + container_name: open-webui + restart: unless-stopped + network_mode: "host" + environment: + - OLLAMA_BASE_URL=http://127.0.0.1:11434 + # Uncomment to disable auth on local networks (optional, not recommended on exposed hosts) + # - OPENWEBUI_AUTH=False + volumes: + - ./data:/app/backend/data +EOF + +echo "docker-compose.yml created at ${OPENWEBUI_DIR}/docker-compose.yml" + +docker compose up -d + +############################################################################### +# Done +############################################################################### +echo +echo "==================== ALL DONE ====================" +echo "Ollama service: systemctl status ollama" +echo "Stable Diffusion WebUI: systemctl status stablediff.service" +echo "Open WebUI stack: cd ${OPENWEBUI_DIR} && docker compose ps" +echo +echo "Web UIs:" +echo " Open WebUI (LLMs via Ollama): http://:8080" +echo " Stable Diffusion WebUI (images): http://:7860" +echo +echo "Stable Diffusion is configured to auto-start on boot via:" +echo " systemctl enable stablediff.service" +echo "===================================================" + \ No newline at end of file