diff --git a/README.md b/README.md index 0f80d05..7c37a1c 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,13 @@ docker compose logs -f # Логи контейнеров ## 🐛 Устранение неполадок +### Ollama сервис не запускается: +```bash +# Если видите ошибку "permission denied" для /nonexistent +chmod +x fix-ollama.sh +sudo ./fix-ollama.sh +``` + ### GPU не найден: ```bash nvidia-smi # Проверка драйверов diff --git a/fix-ollama.sh b/fix-ollama.sh new file mode 100644 index 0000000..9e72b8d --- /dev/null +++ b/fix-ollama.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +# Fix script for Ollama service permission issues + +echo "🔧 Исправление проблем с сервисом Ollama..." + +# Colors +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[1;33m' +NC='\033[0m' + +# Stop the service +echo "Остановка сервиса Ollama..." +sudo systemctl stop ollama + +# Fix user home directory +echo "Исправление домашней директории пользователя aiserver..." +sudo usermod -d /opt/ai-server aiserver + +# Create proper Ollama directory +echo "Создание правильной директории для Ollama..." +sudo mkdir -p /opt/ai-server/.ollama +sudo chown -R aiserver:aiserver /opt/ai-server/.ollama +sudo chmod 755 /opt/ai-server/.ollama + +# Update systemd service +echo "Обновление systemd сервиса..." +sudo systemctl daemon-reload + +# Start the service +echo "Запуск сервиса Ollama..." +sudo systemctl start ollama + +# Wait a moment +sleep 5 + +# Check status +if sudo systemctl is-active --quiet ollama; then + echo -e "${GREEN}✅ Ollama сервис успешно запущен!${NC}" + + # Test connection + if curl -s http://localhost:11434 >/dev/null 2>&1; then + echo -e "${GREEN}✅ Ollama API доступен${NC}" + else + echo -e "${YELLOW}⚠️ Ollama API пока недоступен (может потребоваться время)${NC}" + fi +else + echo -e "${RED}❌ Ошибка запуска Ollama сервиса${NC}" + echo "Логи:" + sudo journalctl -u ollama --no-pager -l | tail -10 + exit 1 +fi + +echo "" +echo -e "${GREEN}🎉 Исправление завершено!${NC}" +echo "Теперь можете использовать: ai-start, ai-status" \ No newline at end of file diff --git a/install-ubuntu.sh b/install-ubuntu.sh index 5fa27b1..e318df0 100644 --- a/install-ubuntu.sh +++ b/install-ubuntu.sh @@ -178,10 +178,15 @@ install_ollama() { # Создание пользователя для сервиса if ! id "$SERVICE_USER" &>/dev/null; then - useradd -r -s /bin/false -d /nonexistent $SERVICE_USER + useradd -r -s /bin/false -d /opt/ai-server -m $SERVICE_USER usermod -aG docker $SERVICE_USER log_success "Пользователь $SERVICE_USER создан" fi + + # Создание домашней директории Ollama + mkdir -p /opt/ai-server/.ollama + chown -R $SERVICE_USER:$SERVICE_USER /opt/ai-server/.ollama + log_success "Директория Ollama создана" } # Настройка systemd сервиса для Ollama @@ -233,14 +238,14 @@ install_models() { log_step "Установка модели $DEFAULT_MODEL..." log_info "Это может занять несколько минут в зависимости от скорости интернета..." - # Установка модели от имени пользователя сервиса - sudo -u $SERVICE_USER ollama pull $DEFAULT_MODEL + # Установка модели от имени пользователя сервиса с правильной переменной окружения + sudo -u $SERVICE_USER OLLAMA_HOME=/opt/ai-server/.ollama ollama pull $DEFAULT_MODEL log_success "Модель $DEFAULT_MODEL установлена" # Список доступных моделей log_info "Доступные модели:" - sudo -u $SERVICE_USER ollama list + sudo -u $SERVICE_USER OLLAMA_HOME=/opt/ai-server/.ollama ollama list } # Создание рабочей директории diff --git a/ollama.service b/ollama.service index 52fe996..9dda1c6 100644 --- a/ollama.service +++ b/ollama.service @@ -18,6 +18,7 @@ Environment="OLLAMA_MAX_LOADED_MODELS=2" Environment="OLLAMA_FLASH_ATTENTION=1" Environment="CUDA_VISIBLE_DEVICES=0" Environment="OLLAMA_GPU_OVERHEAD=0.2" +Environment="OLLAMA_HOME=/opt/ai-server/.ollama" WorkingDirectory=/opt/ai-server StandardOutput=journal StandardError=journal @@ -26,7 +27,6 @@ StandardError=journal NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict -ProtectHome=true ReadWritePaths=/opt/ai-server # Resource limits for RTX 2060 diff --git a/scripts/models.sh b/scripts/models.sh index 3903f36..22a2683 100644 --- a/scripts/models.sh +++ b/scripts/models.sh @@ -27,7 +27,7 @@ show_menu() { list_models() { echo -e "${PURPLE}📦 Установленные модели:${NC}" - sudo -u aiserver ollama list + sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama list echo "" if command -v nvidia-smi &> /dev/null; then @@ -50,7 +50,7 @@ install_recommended() { desc="${descriptions[$i]}" echo -e "${BLUE}Устанавливаю: $model - $desc${NC}" - sudo -u aiserver ollama pull "$model" + sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama pull "$model" if [ $? -eq 0 ]; then echo -e "${GREEN}✅ $model установлена${NC}" @@ -73,7 +73,7 @@ install_custom() { echo -e "${BLUE}Установка модели: $model_name${NC}" echo -e "${YELLOW}Это может занять несколько минут...${NC}" - sudo -u aiserver ollama pull "$model_name" + sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama pull "$model_name" if [ $? -eq 0 ]; then echo -e "${GREEN}✅ Модель $model_name успешно установлена${NC}" @@ -84,7 +84,7 @@ install_custom() { remove_model() { echo -e "${PURPLE}📦 Доступные модели для удаления:${NC}" - sudo -u aiserver ollama list + sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama list echo "" echo -e "${YELLOW}Введите название модели для удаления:${NC}" @@ -99,7 +99,7 @@ remove_model() { read -r confirm if [[ $confirm =~ ^[Yy]$ ]]; then - sudo -u aiserver ollama rm "$model_name" + sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama rm "$model_name" if [ $? -eq 0 ]; then echo -e "${GREEN}✅ Модель $model_name удалена${NC}" @@ -113,7 +113,7 @@ remove_model() { test_model() { echo -e "${PURPLE}📦 Доступные модели:${NC}" - sudo -u aiserver ollama list + sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama list echo "" echo -e "${YELLOW}Введите название модели для тестирования:${NC}" @@ -127,7 +127,7 @@ test_model() { echo -e "${BLUE}Тестирование модели: $model_name${NC}" echo -e "${YELLOW}Задаю тестовый вопрос...${NC}" - sudo -u aiserver ollama run "$model_name" "Привет! Как дела? Ответь кратко." + sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama run "$model_name" "Привет! Как дела? Ответь кратко." } show_vram_usage() { diff --git a/scripts/status.sh b/scripts/status.sh index 5e15745..db3931c 100644 --- a/scripts/status.sh +++ b/scripts/status.sh @@ -85,7 +85,7 @@ if systemctl is-active --quiet ollama; then # List models echo " 📦 Установленные модели:" - sudo -u aiserver ollama list 2>/dev/null | tail -n +2 | while read -r line; do + sudo -u aiserver OLLAMA_HOME=/opt/ai-server/.ollama ollama list 2>/dev/null | tail -n +2 | while read -r line; do if [[ -n "$line" ]]; then model_name=$(echo "$line" | awk '{print $1}') model_size=$(echo "$line" | awk '{print $2}')