InfraPlatform

Windows WSL에 Ollama/CUDA 커스텀 경로 설치 가이드(Ubuntu 22.04)

IT오이시이 2026. 1. 6. 15:09
728x90

 
 

Windows  WSL에 Ollama 설치의 장점

  • WSL2는 NVIDIA GPU와 CUDA Toolkit을 직접 지원하므로, Ollama를 GPU 기반으로 실행 가능
  • Windows에서 개발하면서도 Linux 기반 AI 툴체인을 그대로 사용할 수 있음.
  • 예: VS Code(Windows) + Ollama(WSL) + CUDA(GPU) 조합으로 완전한 AI 개발 환경 구성.

 


 

WSL 사용법 – How To Start WSL

 


 

WSL Ubuntu 22.04에서 Ollama 커스텀 경로 설치 가이드

 
WSL에 설치한 ubuntu를 이용하여 노트북의 GPU를 활용하여 AI 개발 환경을 구성하려고 합니다.
Window WSL을 이용하여 Ubuntu 22.04 LTS 환경에 맞춰 /data/ollama_app에 Ollama를 설치하는 상세 가이드입니다.

1. WSL ubuntu 시스템  설치 환경 준비

     - 시스템 계정 및 nvdia graphic 드라이브 설치
1. ollama를 다운 받아 /usr/local/bin  과 /usr/local/lib/ollama 에 설치하는 방안입니다.
2. systemctl 로 ollama 시작/종료
 
 

1. Ubuntu 시스템 설치 환경 준비

 

1-1. 시스템 계정과 패키지 업데이트

 
 1.1.1 사용자 계정 생성

# ollama 서비스 관리자 계정 생성

sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
sudo usermod -a -G ollama $(whoami)
usermod  -g 2000 -u 2000  ollama

# * /usr/share/ollama 아래 다운 받은 Model이 저장됩니다.

 
1.1.2  Ubuntu 패키지 업그레이드

# 시스템 패키지 업데이트
sudo apt update
sudo apt upgrade -y

# 필수 패키지 설치
sudo apt install -y curl wget git build-essential

 

1-2. NVIDIA GPU 드라이버 설치 (GPU 사용 시)

# NVIDIA 드라이버 확인
nvidia-smi

# 드라이버가 없다면 설치
sudo apt install -y nvidia-driver-580
# 또는 최신 버전
sudo ubuntu-drivers autoinstall

# 재부팅 후 확인
sudo reboot
# 재부팅 후
nvidia-smi

 

# 패키지 설치 상태 확인 방법

# 패키지 설치 여부 확인
rpm -qa | grep nvidia   
dpkg -l  | grep nvidia

# 패키지 포함 파일 목록 확인
rpm -ql nvidia-driver-580
dpkg -L nvidia-driver-580 nvidia-firmware-580-580.95.05

 

1-3. NVIDIA GPU 드라이버 작동 확인

 
# nvidia-smi 로 설치된 드라이버 작동 확인
  * 윈도우의 드라이버 버전과 WSL에 설치되는 드라이버 버전이 동일해야함
   -  Windows nvidia 드라이버 버전 : 581.57   이고     Wsl : 580.95.05  최신을  설치 ( 완전 같지 않아도 같은 유사 등급으로 설치)가 되었습니다.  
 
* WSL 환경에서 nvidia-smi 실행 결과 (정상)

root@DESKTOP-RTQU492:/mnt/c/Users/couple# nvidia-smi
Tue Jan  6 16:08:44 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.95.05              Driver Version: 581.57         CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3050 ...    On  |   00000000:01:00.0 Off |                  N/A |
| N/A   52C    P0              8W /   30W |       0MiB /   4096MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

 
 

1-4. NVIDIA GPU 불일치 문제 해결

  - WSL 은 Windows Host에 설치된 드라이버와 리눅스 드라이버 버전이 불일치 하면 작동이 안되므로 아래와 같이 문제를 해결 할 수 있습니다. (윈도우가 Ubuntu의  드라이버 보다 최신 버전을 유지하게 맞추면 됩니다.)
 
[ GPU 드라이버 불일치 문제 해결]

  • Segmentation fault 원인: 드라이버 모듈(555.99)과 유틸리티(580.95.05) 버전 불일치

(아래 와 같이 오류가 나는 경우)    segment falut가 발생 합니다.

더보기

$ nvidia-smi
Tue Jan  6 15:13:02 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.95.05              Driver Version: 555.99         CUDA Version: 12.5     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|

Segmentation fault

  • NVIDIA-SMI 버전: 580.95.05   ( Wsl driver)
  • Driver Version: 555.99  (Windows Driver) : Windows의 드라이버 버전이 낮음 --> 
  • CUDA Version: 12.5

즉, nvidia-utils (580.95.05)와 실제 커널 모듈 드라이버(555.99)가 버전이 낮아서 충돌하는 상황
    WSL의 드라이버를 동급대 로 다운하여 설치하거나 윈도우의 nvidia-driver 최신버전을 찾아 설치합니다.
     ( 참조: Official GeForce Drivers | NVIDIA : https://www.nvidia.com/en-us/geforce/drivers/)
ㅁ   Windows의 NVIDIA 드라이버  555.99 -> Driver Version: 581.57  으로 업그레이드 하였습니다.
   : NVIDIA-SMI 580.95.05              Driver Version: 581.57         CUDA Version: 13.0

 
ㅁ 아래와 같이 WSL내에 설치한  nvidia  드라이버를 제거하고 재설치를 합니다.

1) sudo apt purge 'nvidia-*'    #기존 패키지를 삭제한다 :

2) sudo apt autoremove         #불필요한 패키지 정리

3) sudo ubuntu-drivers devices     # 드라이버 설치 환경 재구성
   sudo ubuntu-drivers autoinstall  # 이 커널 모듈과 nvidia-utils 버전이 일치하도록 설치됩니다.

 
설치후 그래픽 카드 버전 확인:

sudo apt install nvidia-driver-580


sudo reboot   # 설치 후 재부팅


nvidia-smi   # 드라이버 설치 확인   : segment fault가 나지 않아야함

 
(설치후 확인)

더보기

 # nvidia-smi
Thu Jan  8 17:10:49 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.95.05              Driver Version: 581.57         CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3050 ...    On  |   00000000:01:00.0 Off |                  N/A |
| N/A   49C    P0              8W /   30W |       0MiB /   4096MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

 


 

(추가 팁) WSL을 시작하면서 다음 과 같은 Windows PATH  에러 메시지가 나오는 경우

<3>WSL (649) ERROR: UtilTranslatePathList:2866: Failed to translate D:\ProgramApps\maven\apache-maven-3.9.6\bin
<3>WSL (649) ERROR: UtilTranslatePathList:2866: Failed to translate D:\ProgramApps\gradle\gradle-8.5\bin

 

WSL은 기본적으로 Windows PATH를 Linux 환경에 병합합니다. 이를 끄면 에러 메시지가 사라집니다.

sudo vi /etc/wsl.conf
[interop]
appendWindowsPath = false

# Windows Command.exe 에서 아래를 다시 실행
wsl --shutdown  (윈도우셀에서 재기동)
wsl -d Ubuntu-22.4

 


1-5. 설치할 디스크 공간 확인

 

# 최소 50GB 이상 권장 (모델 크기에 따라)

# 각 디렉토리가 있는 파티션 용량 확인
# /usr 에는 프로그램을 설치하고 /data는 모델 작업용으로 사용

df -h


# 만약 /usr/share 가 없다면 생성
sudo mkdir -p /usr/share/ollama
sudo mkdir -p /data


# /usr/share/ollama/.ollama   아래 모델이 저장됩니다.

/usr/share/ollama/.ollama/models
    -- blobs
    x   -- sha256-5d6251ee5c30ac3e6fabf6aa77172581454e4d95813b8d349078fea4ae6a8da1
    x   -- sha256-7d4afa1d8a5587f4beb8b75dab755f90d13d3ae2b8b9f148545b414ecfb9123a
    x   -- sha256-a00920c28dfd776d75b999418d3736291dad8f7cede46bd8301cf64738460d0e
    x   -- sha256-cb589e80873e3610d36d4a8be370c09d41f87e1d52a27ab73b8ac4b22976995d
    --- manifests
        --- registry.ollama.ai
            --- library
                --- smollm
                    --- latest

 


 

2. Ubuntu 22.04용  설치 스크립트 

 

2-1 ollama download  패키지 정보

    참고 : https://github.com/ollama/ollama/releases
      Download :  https://github.com/ollama/ollama/releases/download/v0.13.5/ollama-linux-arm64.tgz

2-2 ollama  패키지 수동 다운로드 및 설치

    다운 받은 패키지를 /usr/local 으로 설치를 합니다.
     

# /usr/loca/bin 과 /usr/local/lib/ollama 에 패키지를 설치

sudo tar zx -C /usr/local -f ollama-linux-amd64.tgz

 
아래와 같이 ollama 패키지는 약 3.5 GB가 필요합니다.

더보기

                ------------------------------
                 DIsk Usae of current Dir V2.2
                ------------------------------
                 [/usr/local/lib/ollama]

        -------------------------------------------------------------------------------
        DIRNAME                                            :    SIZE (MB)   : Subdir cnt
        -------------------------------------------------------------------------------
        ./                                                 :       6.32MB :          1
        vulkan                                             :      54.07MB :          1
        cuda_v13                                           :     926.91MB :          1
        cuda_v12                                           :    2419.66MB :          1
        -------------------------------------------------------------------------------
        TOTALSIZE                                          :    3406.96MB :          4
        -------------------------------------------------------------------------------
              --  Copy Right @ Choi Doo Rip  1999 09 01  --

 

2-3  ollama  자동 설치 스크립트

      - 1.ollama_download.sh
      -  2.ollama_env.sh 

1.ollama_download
0.01MB
2.ollama_env
0.01MB

 

2.3.1.ollama_download.sh

   -- ollama 패키지를 다운 받아 설치 하는 스크립트 입니다.
    다운 받은 패키지를 /usr/local/bin  과 /usr/local/lib/ollama 아래  설치를 합니다.

더보기

#!/bin/bash

#############################################
# Ollama 통합 설치 스크립트
# 지원 OS: Ubuntu 22.04, RHEL/CentOS 7/8/9
# 설치 경로: /data/ollama_app
#############################################

set -e

# 설정 변수
INSTALL_DIR="/data/ollama_app"
MODELS_DIR="${INSTALL_DIR}/models"
OLLAMA_URL="https://github.com/ollama/ollama/releases/download/v0.13.5/ollama-linux-arm64.tgz"
OLLAMA_FILE=$(basename ${OLLAMA_URL})
LOG_FILE="${INSTALL_DIR}/install.log"

# 색상 코드
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

log() {
    echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" | tee -a "$LOG_FILE"
}

error() {
    echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE"
}

warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1" | tee -a "$LOG_FILE"
}

# OS 감지 함수
detect_os() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS=$ID
        OS_VERSION=$VERSION_ID
        OS_NAME=$NAME
    elif [ -f /etc/redhat-release ]; then
        OS="rhel"
        OS_VERSION=$(cat /etc/redhat-release | grep -oP '[0-9]+' | head -1)
        OS_NAME=$(cat /etc/redhat-release)
    else
        error "지원하지 않는 운영체제입니다."
        exit 1
    fi

    log "감지된 OS: $OS_NAME (버전: $OS_VERSION)"

    case $OS in
        ubuntu|debian)
            PKG_MANAGER="apt"
            INSTALL_CMD="apt install -y"
            UPDATE_CMD="apt update"
            ;;
        rhel|centos|rocky|almalinux|fedora)
            if command -v dnf &> /dev/null; then
                PKG_MANAGER="dnf"
                INSTALL_CMD="dnf install -y"
                UPDATE_CMD="dnf check-update || true"
            else
                PKG_MANAGER="yum"
                INSTALL_CMD="yum install -y"
                UPDATE_CMD="yum check-update || true"
            fi
            ;;
        *)
            error "지원하지 않는 OS: $OS"
            exit 1
            ;;
    esac

    log "패키지 관리자: $PKG_MANAGER"
}

# 필수 패키지 설치
install_dependencies() {
    log "필수 패키지 설치 중..."

    sudo $UPDATE_CMD

    case $OS in
        ubuntu|debian)
            sudo $INSTALL_CMD curl wget ca-certificates gnupg lsb-release
            ;;
        rhel|centos|rocky|almalinux|fedora)
            sudo $INSTALL_CMD curl wget ca-certificates
            ;;
    esac
}

# 방화벽 설정
configure_firewall() {
    log "방화벽 설정 확인 중..."

    case $OS in
        ubuntu|debian)
            if command -v ufw &> /dev/null; then
                if sudo ufw status | grep -q "Status: active"; then
                    warning "UFW 방화벽이 활성화되어 있습니다."
                    read -p "포트 11434를 열겠습니까? [y/N]: " open_port
                    if [[ "$open_port" =~ ^[Yy]$ ]]; then
                        sudo ufw allow 11434/tcp
                        log "UFW: 포트 11434가 열렸습니다."
                    fi
                fi
            fi
            ;;
        rhel|centos|rocky|almalinux|fedora)
            if command -v firewall-cmd &> /dev/null; then
                if sudo firewall-cmd --state 2>/dev/null | grep -q "running"; then
                    warning "firewalld가 활성화되어 있습니다."
                    read -p "포트 11434를 열겠습니까? [y/N]: " open_port
                    if [[ "$open_port" =~ ^[Yy]$ ]]; then
                        sudo firewall-cmd --permanent --add-port=11434/tcp
                        sudo firewall-cmd --reload
                        log "firewalld: 포트 11434가 열렸습니다."
                    fi
                fi
            fi
            ;;
    esac
}

# SELinux 설정 (Red Hat 계열)
configure_selinux() {
    if [[ "$OS" =~ ^(rhel|centos|rocky|almalinux|fedora)$ ]]; then
        if command -v getenforce &> /dev/null; then
            SELINUX_STATUS=$(getenforce)
            log "SELinux 상태: $SELINUX_STATUS"

            if [ "$SELINUX_STATUS" != "Disabled" ]; then
                warning "SELinux가 활성화되어 있습니다."
                log "SELinux 컨텍스트 설정 중..."

                # 디렉토리에 대한 SELinux 컨텍스트 설정
                sudo semanage fcontext -a -t bin_t "${INSTALL_DIR}/ollama" 2>/dev/null || true
                sudo restorecon -v "${INSTALL_DIR}/ollama" 2>/dev/null || true

                # 포트 허용
                sudo semanage port -a -t http_port_t -p tcp 11434 2>/dev/null || \
                sudo semanage port -m -t http_port_t -p tcp 11434 2>/dev/null || true

                log "SELinux 설정 완료"
            fi
        fi
    fi
}

log "=== Ollama 통합 설치 시작 ==="

# OS 감지
detect_os

# Root 권한 확인
if [ "$EUID" -eq 0 ]; then
    error "이 스크립트를 root로 실행하지 마세요."
    exit 1
fi

# sudo 권한 확인
if ! sudo -v; then
    error "sudo 권한이 필요합니다."
    exit 1
fi

# 필수 패키지 설치
install_dependencies

# 설치 디렉토리 생성
log "설치 디렉토리 생성: ${INSTALL_DIR}"
if [ ! -d "$INSTALL_DIR" ]; then
    sudo mkdir -p "$INSTALL_DIR"
fi
sudo chown -R $USER:$USER "$INSTALL_DIR"
mkdir -p "$MODELS_DIR"
mkdir -p "${INSTALL_DIR}/logs"

# Ollama 바이너리 다운로드
log "Ollama 바이너리 다운로드 중..."
cd "$INSTALL_DIR"

if [ -f "ollama" ]; then
    log "기존 Ollama 백업 중..."
    mv ollama ollama.backup.$(date +%Y%m%d_%H%M%S)
fi

if ! wget -O ollama "$OLLAMA_URL" 2>&1 | tee -a "$LOG_FILE"; then
    if ! curl -L "$OLLAMA_URL" -o ollama 2>&1 | tee -a "$LOG_FILE"; then
        error "다운로드 실패"
        exit 1
    fi
fi
log "다운로드 완료 [$?] "

chmod +x ollama

 


2.ollama_env.sh

    - 다음 작업은 시스템 환경변수, ollama 시작,종료, 상태 확인을 위한 스크립트, 서비스 등록, 방화벽 설정 등의  절차를 수행합니다.

sudo sh 2.ollama_env.sh
-e [2026-01-06 17:06:45] 4. 환경 변수 설정 파일 생성
-e [2026-01-06 17:06:45] 5. 시작/정지 스크립트 생성
-e [2026-01-06 17:06:45] 6. systemd 서비스 설정

systemd 서비스로 등록하시겠습니까? (권장) [Y/n]: Y

 

더보기

#!/bin/bash

#############################################
# Ollama 통합 설치 스크립트
# 지원 OS: Ubuntu 22.04, RHEL/CentOS 7/8/9
# 설치 경로: /data/ollama_app
#############################################

set -e

# 설정 변수
INSTALL_DIR="/data/ollama_app"
MODELS_DIR="${INSTALL_DIR}/models"
OLLAMA_URL="https://github.com/ollama/ollama/releases/download/v0.13.5/ollama-linux-arm64.tgz"
OLLAMA_FILE=$(basename ${OLLAMA_URL})
LOG_FILE="${INSTALL_DIR}/install.log"

# 색상 코드
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

log() {
    echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" | tee -a "$LOG_FILE"
}

error() {
    echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE"
}

warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1" | tee -a "$LOG_FILE"
}

# OS 감지 함수
detect_os() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS=$ID
        OS_VERSION=$VERSION_ID
        OS_NAME=$NAME
    elif [ -f /etc/redhat-release ]; then
        OS="rhel"
        OS_VERSION=$(cat /etc/redhat-release | grep -oP '[0-9]+' | head -1)
        OS_NAME=$(cat /etc/redhat-release)
    else
        error "지원하지 않는 운영체제입니다."
        exit 1
    fi

    log "감지된 OS: $OS_NAME (버전: $OS_VERSION)"

    case $OS in
        ubuntu|debian)
            PKG_MANAGER="apt"
            INSTALL_CMD="apt install -y"
            UPDATE_CMD="apt update"
            ;;
        rhel|centos|rocky|almalinux|fedora)
            if command -v dnf &> /dev/null; then
                PKG_MANAGER="dnf"
                INSTALL_CMD="dnf install -y"
                UPDATE_CMD="dnf check-update || true"
            else
                PKG_MANAGER="yum"
                INSTALL_CMD="yum install -y"
                UPDATE_CMD="yum check-update || true"
            fi
            ;;
        *)
            error "지원하지 않는 OS: $OS"
            exit 1
            ;;
    esac

    log "패키지 관리자: $PKG_MANAGER"
}

# 필수 패키지 설치
install_dependencies() {
    log "필수 패키지 설치 중..."

    sudo $UPDATE_CMD

    case $OS in
        ubuntu|debian)
            sudo $INSTALL_CMD curl wget ca-certificates gnupg lsb-release
            ;;
        rhel|centos|rocky|almalinux|fedora)
            sudo $INSTALL_CMD curl wget ca-certificates
            ;;
    esac
}

# 방화벽 설정
configure_firewall() {
    log "방화벽 설정 확인 중..."

    case $OS in
        ubuntu|debian)
            if command -v ufw &> /dev/null; then
                if sudo ufw status | grep -q "Status: active"; then
                    warning "UFW 방화벽이 활성화되어 있습니다."
                    read -p "포트 11434를 열겠습니까? [y/N]: " open_port
                    if [[ "$open_port" =~ ^[Yy]$ ]]; then
                        sudo ufw allow 11434/tcp
                        log "UFW: 포트 11434가 열렸습니다."
                    fi
                fi
            fi
            ;;
        rhel|centos|rocky|almalinux|fedora)
            if command -v firewall-cmd &> /dev/null; then
                if sudo firewall-cmd --state 2>/dev/null | grep -q "running"; then
                    warning "firewalld가 활성화되어 있습니다."
                    read -p "포트 11434를 열겠습니까? [y/N]: " open_port
                    if [[ "$open_port" =~ ^[Yy]$ ]]; then
                        sudo firewall-cmd --permanent --add-port=11434/tcp
                        sudo firewall-cmd --reload
                        log "firewalld: 포트 11434가 열렸습니다."
                    fi
                fi
            fi
            ;;
    esac
}

# SELinux 설정 (Red Hat 계열)
configure_selinux() {

    case "$OS" in
        rhel|centos|rocky|almalinux|fedora)
            if command -v getenforce >/dev/null 2>&1; then

                SELINUX_STATUS=$(getenforce)

                echo "SELinux 상태: $SELINUX_STATUS"

                if [ "$SELINUX_STATUS" != "Disabled" ]; then
                    warning "SELinux가 활성화되어 있습니다."
                    log "SELinux 컨텍스트 설정 중..."

                    # 디렉토리에 대한 SELinux 컨텍스트 설정
                    sudo semanage fcontext -a -t bin_t "${INSTALL_DIR}/ollama" 2>/dev/null || true
                    sudo restorecon -v "${INSTALL_DIR}/ollama" 2>/dev/null || true

                    # 포트 허용
                    sudo semanage port -a -t http_port_t -p tcp 11434 2>/dev/null || \
                    sudo semanage port -m -t http_port_t -p tcp 11434 2>/dev/null || true

                    log "SELinux 설정 완료"
                fi
            fi
            ;;
    esac

}

log "=== Ollama  환경 설정  시작 ==="

#################################################################3

# 환경 변수 설정 파일 생성
log "환경 변수 설정 파일 생성"
cat > "${INSTALL_DIR}/ollama_env.sh" << 'EOF'
#!/bin/bash
export OLLAMA_HOME=/data/ollama_app
export OLLAMA_MODELS=/data/ollama_app/models
export OLLAMA_HOST=0.0.0.0:11434
export PATH=/data/ollama_app:$PATH
echo "Ollama 환경 변수 로드 완료"
EOF

chmod +x "${INSTALL_DIR}/ollama_env.sh"

# 시작/정지 스크립트 생성
log "관리 스크립트 생성"

cat > "${INSTALL_DIR}/start_ollama.sh" << 'EOF'
#!/bin/bash
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG_FILE="${SCRIPT_DIR}/logs/ollama.log"
source "${SCRIPT_DIR}/ollama_env.sh"

if pgrep -f "ollama serve" > /dev/null; then
    echo "Ollama가 이미 실행 중입니다."
    exit 1
fi

echo "Ollama 시작 중..."
nohup "${SCRIPT_DIR}/ollama" serve >> "$LOG_FILE" 2>&1 &
sleep 3

if pgrep -f "ollama serve" > /dev/null; then
    echo "✓ Ollama 시작 완료 (포트: 11434)"
else
    echo "✗ 시작 실패. 로그: $LOG_FILE"
    exit 1
fi
EOF

cat > "${INSTALL_DIR}/stop_ollama.sh" << 'EOF'
#!/bin/bash
if pgrep -f "ollama serve" > /dev/null; then
    pkill -f "ollama serve"
    sleep 2
    if pgrep -f "ollama serve" > /dev/null; then
        pkill -9 -f "ollama serve"
    fi
    echo "✓ Ollama 정지 완료"
else
    echo "실행 중인 Ollama 없음"
fi
EOF

cat > "${INSTALL_DIR}/status_ollama.sh" << 'EOF'
#!/bin/bash
if pgrep -f "ollama serve" > /dev/null; then
    echo "✓ Ollama 실행 중"
    ps aux | grep "ollama serve" | grep -v grep
else
    echo "✗ Ollama 정지됨"
fi
EOF

chmod +x "${INSTALL_DIR}"/*.sh

# SELinux 설정 (Red Hat 계열)
configure_selinux

# systemd 서비스 생성
log "systemd 서비스 설정"
read -p "systemd 서비스로 등록하시겠습니까? [Y/n]: " create_service
create_service=${create_service:-Y}

if [[ "$create_service" =~ ^[Yy]$ ]]; then
    sudo tee /etc/systemd/system/ollama.service > /dev/null << EOF
[Unit]
Description=Ollama Service
Documentation=https://ollama.ai/
After=network-online.target
Wants=network-online.target

[Service]
Type=exec
User=$USER
Group=$USER
ExecStart=${INSTALL_DIR}/ollama serve
Environment="OLLAMA_HOME=${INSTALL_DIR}"
Environment="OLLAMA_MODELS=${MODELS_DIR}"
Environment="OLLAMA_HOST=0.0.0.0:11434"
Restart=always
RestartSec=3
StandardOutput=append:${INSTALL_DIR}/logs/ollama.log
StandardError=append:${INSTALL_DIR}/logs/ollama_error.log
LimitNOFILE=65536
LimitNPROC=4096

[Install]
WantedBy=default.target
EOF

    sudo systemctl daemon-reload
    sudo systemctl enable ollama
    log "Ollama 서비스 시작 중..."
    sudo systemctl start ollama
    sleep 3

    if sudo systemctl is-active --quiet ollama; then
        log "✓ Ollama 서비스 시작 완료"
    else
        error "✗ 서비스 시작 실패"
        sudo systemctl status ollama --no-pager
    fi
fi

# 방화벽 설정
configure_firewall

# 환경 변수를 shell rc 파일에 추가
log "환경 변수 설정"

# bash 사용자
if [ -f ~/.bashrc ]; then
    if ! grep -q "OLLAMA_HOME=${INSTALL_DIR}" ~/.bashrc; then
        cat >> ~/.bashrc << EOF

# Ollama 환경 변수
export OLLAMA_HOME=${INSTALL_DIR}
export OLLAMA_MODELS=${MODELS_DIR}
export PATH=${INSTALL_DIR}:\$PATH
EOF
        log "~/.bashrc에 환경 변수 추가됨"
    fi
fi

# zsh 사용자
if [ -f ~/.zshrc ]; then
    if ! grep -q "OLLAMA_HOME=${INSTALL_DIR}" ~/.zshrc; then
        cat >> ~/.zshrc << EOF

# Ollama 환경 변수
export OLLAMA_HOME=${INSTALL_DIR}
export OLLAMA_MODELS=${MODELS_DIR}
export PATH=${INSTALL_DIR}:\$PATH
EOF
        log "~/.zshrc에 환경 변수 추가됨"
    fi
fi

. ${INSTALL_DIR}/ollama_env.sh
source ${INSTALL_DIR}/ollama_env.sh

log "=== 설치 완료! ==="

cat << EOF

lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x          Ollama 설치 완료 ($OS_NAME)
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

📁 설치 경로: ${INSTALL_DIR}
📦 모델 경로: ${MODELS_DIR}
📋 로그 파일: ${INSTALL_DIR}/logs/

🚀 서비스 관리:
   sudo systemctl start ollama
   sudo systemctl stop ollama
   sudo systemctl restart ollama
   sudo systemctl status ollama
   sudo journalctl -u ollama -f

📚 모델 관리:
   ollama pull deepseek-coder:6.7b
   ollama list
   ollama run deepseek-coder

⚙️  환경 변수: source ${INSTALL_DIR}/ollama_env.sh

EOF

exit 0

 
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x          Ollama 설치 완료 ($OS_NAME)
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

📁 설치 경로: ${INSTALL_DIR}
📦 모델 경로: ${MODELS_DIR}
📋 로그 파일: ${INSTALL_DIR}/logs/

🚀 서비스 관리:
   sudo systemctl start ollama
   sudo systemctl stop ollama
   sudo systemctl restart ollama
   sudo systemctl status ollama
   sudo journalctl -u ollama -f

📚 모델 관리:
   ollama pull deepseek-coder:6.7b
   ollama list
   ollama run deepseek-coder

⚙️  환경 변수: source ${INSTALL_DIR}/ollama_env.sh

 


 

3. 스크립트 실행

# 스크립트 다운로드 또는 생성
nano 1.ollama_download.sh  2.ollama_env.sh

# (위 스크립트 내용을 붙여넣기)

# 실행 권한 부여
chmod +x 1.ollama_download.sh  2.ollama_env.sh

# 스크립트 실행
sudo 1.ollama_download.sh

sudo 2.ollama_env.sh

 

 

4. 설치 후 확인

 

4-1. 서비스 상태 확인

# systemd 서비스 상태
sudo systemctl status ollama

# 또는 스크립트 사용
/data/ollama_app/status_ollama.sh

# 로그 확인
sudo journalctl -u ollama -f

# 또는 파일로 확인
tail -f /data/ollama_app/logs/ollama.log

 

4-2. ollama service 포트 확인

# Ollama가 11434 포트를 사용하는지 확인
sudo netstat -tlnp | grep 11434
# 또는
sudo ss -tlnp | grep 11434


-----------------------------------
tcp        0      0 127.0.0.1:11434         0.0.0.0:*               LISTEN      10152/ollama




# curl로 API 테스트
curl http://localhost:11434/api/tags

-----------------------------------
{"models":[{"name":"smollm:latest","model":"smollm:latest","modified_at":"2026-01-08T09:29:55.395926403+09:00","size":144810885,"digest":"68774fff90deced6a0f40ea48fd5bcf03d462d52999f058ec7176e27a142a97a","details":{"parent_model":"","format":"gguf","family":"llama","families":["llama"],"parameter_size":"134.52M","quantization_level":"Q8_0"}}]}

 

 

5. 첫 모델 다운로드 및 실행

# 환경 변수 로드 (새 터미널이라면)
source /data/ollama_app/ollama_env.sh

# DeepSeek 모델 다운로드
ollama pull deepseek-coder:6.7b

# 다른 추천 모델들
ollama pull deepseek-chat
ollama pull llama2:7b
ollama pull mistral:7b

# 모델 목록 확인
ollama list

# 모델 실행 (대화형)
ollama run deepseek-coder

# 종료는 /bye 또는 Ctrl+D

 

 

6. Python 통합 설정

# Python 가상환경 생성
cd /data/ollama_app
python3 -m venv venv
source venv/bin/activate

# ollama 패키지 설치
pip install ollama

# 테스트 스크립트 생성
cat > test_ollama.py << 'EOF'
#!/usr/bin/env python3
import ollama

def test_ollama():
    try:
        # 모델 목록 확인
        models = ollama.list()
        print("사용 가능한 모델:")
        for model in models.get('models', []):
            print(f"  - {model['name']}")
        
        print("\n" + "="*50)
        
        # DeepSeek 모델 테스트
        print("\nDeepSeek 모델 테스트 중...")
        response = ollama.chat(
            model='deepseek-coder',
            messages=[
                {
                    'role': 'user',
                    'content': 'Write a Python function to calculate factorial'
                }
            ]
        )
        
        print("\n응답:")
        print(response['message']['content'])
        
    except Exception as e:
        print(f"에러 발생: {e}")
        print("\nOllama 서비스가 실행 중인지 확인하세요:")
        print("sudo systemctl status ollama")

if __name__ == "__main__":
    test_ollama()
EOF

chmod +x test_ollama.py

# 실행
python test_ollama.py

 

 

7. HTTPS 제한 환경을 위한 오프라인 설치

 

 

7-1. 온라인 환경에서 준비 (다른 Ubuntu 22.04 머신)

# 준비 디렉토리 생성
mkdir -p ~/ollama_offline_package
cd ~/ollama_offline_package

# 1. Ollama 바이너리 다운로드
wget https://ollama.com/download/ollama-linux-amd64 -O ollama
chmod +x ollama

# 2. 임시로 Ollama 시작하여 모델 다운로드
export OLLAMA_MODELS=./models
./ollama serve &
OLLAMA_PID=$!
sleep 5

# 3. 원하는 모델 다운로드
./ollama pull deepseek-coder:6.7b
./ollama pull deepseek-chat

# 4. Ollama 종료
kill $OLLAMA_PID

# 5. 설치 스크립트 복사
cp /path/to/install_ollama_ubuntu22.sh ./

# 6. 전체 패키징
cd ..
tar -czf ollama_offline_package.tar.gz ollama_offline_package/

# USB나 다른 저장장치로 이동

 

 

7-2. 오프라인 환경에서 설치

# 패키지 압축 해제
tar -xzf ollama_offline_package.tar.gz
cd ollama_offline_package

# 설치 디렉토리 생성
sudo mkdir -p /data/ollama_app
sudo chown $USER:$USER /data/ollama_app

# 파일 복사
cp ollama /data/ollama_app/
cp -r models /data/ollama_app/

# 설치 스크립트 실행 (다운로드 부분 스킵)
# 또는 수동으로 환경 설정
source /data/ollama_app/ollama_env.sh

# 서비스 시작
/data/ollama_app/start_ollama.sh

# 모델 확인
ollama list

 

 

8. 유용한 관리 명령어 모음

서비스 관리

# 서비스 시작/정지/재시작
sudo systemctl start ollama
sudo systemctl stop ollama
sudo systemctl restart ollama

# 서비스 자동 시작 설정
sudo systemctl enable ollama
sudo systemctl disable ollama

# 상태 및 로그
sudo systemctl status ollama
sudo journalctl -u ollama -n 100 --no-pager
sudo journalctl -u ollama -f  # 실시간 로그

모델 관리

# 모델 검색
ollama search deepseek

# 모델 다운로드
ollama pull model_name:tag

# 설치된 모델 목록
ollama list

# 모델 정보 확인
ollama show deepseek-coder

# 모델 삭제
ollama rm model_name

# 모든 모델 삭제
ollama list | awk 'NR>1 {print $1}' | xargs -I {} ollama rm {}

디스크 관리

# 모델 디렉토리 크기 확인
du -sh /data/ollama_app/models

# 개별 모델 크기
du -sh /data/ollama_app/models/blobs/*

# 사용하지 않는 모델 정리
ollama list  # 먼저 확인
ollama rm unused_model_name

9. 문제 해결

문제 1: 서비스가 시작되지 않음

# 로그 확인
sudo journalctl -u ollama -n 50

# 수동으로 실행하여 에러 확인
/data/ollama_app/ollama serve

# 포트 충돌 확인
sudo netstat -tlnp | grep 11434
# 다른 프로세스가 사용 중이면 종료

문제 2: 모델 다운로드 실패

# 네트워크 연결 확인
curl -I https://ollama.ai

# 디스크 공간 확인
df -h /data

# 프록시 설정 (필요시)
export HTTP_PROXY=http://proxy:port
export HTTPS_PROXY=http://proxy:port

문제 3: GPU 인식 안됨

# NVIDIA 드라이버 확인
nvidia-smi

# 드라이버 재설치
sudo apt purge nvidia-*
sudo apt autoremove
sudo apt install nvidia-driver-535
sudo reboot

# Ollama가 GPU를 사용하는지 확인
# 모델 실행 중 nvidia-smi로 GPU 사용률 확인
watch -n 1 nvidia-smi

문제 4: 권한 에러

# 디렉토리 소유권 확인 및 수정
ls -la /data/ollama_app
sudo chown -R $USER:$USER /data/ollama_app
chmod -R 755 /data/ollama_app

10. 성능 최적화

10-1. GPU 메모리 설정

# /data/ollama_app/ollama_env.sh 편집
nano /data/ollama_app/ollama_env.sh

# 다음 줄 추가
export OLLAMA_GPU_MEMORY_FRACTION=0.9  # GPU 메모리의 90% 사용

# 서비스 재시작
sudo systemctl restart ollama

10-2. 동시 요청 수 조정

# ollama_env.sh에 추가
export OLLAMA_NUM_PARALLEL=2  # 동시 2개 요청 처리

# 또는 systemd 서비스 파일 수정
sudo nano /etc/systemd/system/ollama.service
# Environment="OLLAMA_NUM_PARALLEL=2" 추가

sudo systemctl daemon-reload
sudo systemctl restart ollama

11. 백업 및 마이그레이션

백업

# 모델 백업
sudo tar -czf ollama_models_backup_$(date +%Y%m%d).tar.gz /data/ollama_app/models

# 전체 백업
sudo tar -czf ollama_full_backup_$(date +%Y%m%d).tar.gz /data/ollama_app

복원

# 서비스 정지
sudo systemctl stop ollama

# 백업 복원
sudo tar -xzf ollama_full_backup_20240101.tar.gz -C /

# 권한 수정
sudo chown -R $USER:$USER /data/ollama_app

# 서비스 시작
sudo systemctl start ollama

이제 Ubuntu 22.04에서 /data/ollama_app에 Ollama를 완전히 설치하고 사용할 수 있습니다! 추가 질문이 있으시면 언제든 말씀해주세요.

728x90
반응형