feat: 배포 파이프라인 — Ollama/sidecar 번들 + NSIS 자동 VC++ + GitLab CI + 온보딩 모달
- sidecar 슬림화: torch/pyannote 제거, ctranslate2 GPU 감지, /diarize 삭제 - Ollama 번들: resources/ollama/에 포터블 바이너리 배치, LocalLLMService 1순위 탐색 - installer.nsh: VC++ 재배포 x64 자동 다운로드(aka.ms 경유) + 사일런트 설치 - electron-builder: extraResources에 ollama 추가, nsis.include로 installer.nsh 연결 - scripts: download-ollama.ps1/sh 신규 - LLM.PULL_MODEL IPC 핸들러 + LocalLLMService.pullModel() 구현 (api/pull 스트리밍) - 온보딩 모달: gemma4:e4b 미설치 감지 시 자동 표시, 진행률 UI, i18n(ko/en) 키 추가 - .gitlab-ci.yml: Windows 러너에서 sidecar/sox/ollama 준비 후 NSIS 패키징, 태그 시 Release 자동 생성
This commit is contained in:
parent
d1edad6727
commit
aa65e710ec
16 changed files with 725 additions and 500 deletions
69
apps/desktop/scripts/download-ollama.ps1
Normal file
69
apps/desktop/scripts/download-ollama.ps1
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
# scripts/download-ollama.ps1
|
||||
# Ollama Windows 바이너리(포터블)를 resources/ollama/에 배치한다.
|
||||
# 실행: powershell -ExecutionPolicy Bypass -File scripts/download-ollama.ps1
|
||||
#
|
||||
# 주: Ollama 공식은 NSIS 설치러너만 배포하므로, 여기서는 압축 형식으로 배포되는
|
||||
# ollama-windows-amd64.zip(release asset)을 GitHub에서 받는다.
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$OLLAMA_VERSION = if ($env:OLLAMA_VERSION) { $env:OLLAMA_VERSION } else { "v0.5.7" }
|
||||
$OLLAMA_URL = "https://github.com/ollama/ollama/releases/download/$OLLAMA_VERSION/ollama-windows-amd64.zip"
|
||||
$DEST_DIR = Join-Path $PSScriptRoot "..\resources\ollama"
|
||||
$TEMP_ZIP = Join-Path $env:TEMP "ollama-$OLLAMA_VERSION-windows-amd64.zip"
|
||||
$TEMP_DIR = Join-Path $env:TEMP "ollama-extract"
|
||||
|
||||
Write-Host "=== Ollama $OLLAMA_VERSION Windows 바이너리 다운로드 ===" -ForegroundColor Cyan
|
||||
|
||||
if (Test-Path (Join-Path $DEST_DIR "ollama.exe")) {
|
||||
Write-Host "Ollama가 이미 존재합니다: $DEST_DIR\ollama.exe" -ForegroundColor Green
|
||||
exit 0
|
||||
}
|
||||
|
||||
if (Test-Path $TEMP_ZIP) { Remove-Item -Force $TEMP_ZIP }
|
||||
|
||||
Write-Host "다운로드 중: $OLLAMA_URL"
|
||||
try {
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
Invoke-WebRequest -Uri $OLLAMA_URL -OutFile $TEMP_ZIP -UseBasicParsing
|
||||
} catch {
|
||||
Write-Host "자동 다운로드 실패: $_" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host "=== 수동 설치 방법 ===" -ForegroundColor Yellow
|
||||
Write-Host "https://github.com/ollama/ollama/releases 에서 ollama-windows-amd64.zip 다운로드 후"
|
||||
Write-Host "압축 해제해 ollama.exe를 아래 경로로 복사:" -ForegroundColor White
|
||||
Write-Host " $DEST_DIR"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$fileSize = (Get-Item $TEMP_ZIP).Length
|
||||
if ($fileSize -lt 1000000) {
|
||||
Write-Host "다운로드된 파일이 너무 작습니다 (${fileSize} bytes)." -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "다운로드 완료 ($([math]::Round($fileSize / 1MB, 1)) MB)"
|
||||
Write-Host "압축 해제 중..."
|
||||
|
||||
if (Test-Path $TEMP_DIR) { Remove-Item -Recurse -Force $TEMP_DIR }
|
||||
Expand-Archive -Path $TEMP_ZIP -DestinationPath $TEMP_DIR -Force
|
||||
|
||||
New-Item -ItemType Directory -Force -Path $DEST_DIR | Out-Null
|
||||
|
||||
# zip 구조: ollama.exe + lib/ (DLL 등). 모두 복사.
|
||||
Get-ChildItem -Path $TEMP_DIR -Force | ForEach-Object {
|
||||
Copy-Item $_.FullName -Destination $DEST_DIR -Recurse -Force
|
||||
Write-Host " 복사: $($_.Name)" -ForegroundColor Green
|
||||
}
|
||||
|
||||
Remove-Item -Recurse -Force $TEMP_DIR -ErrorAction SilentlyContinue
|
||||
Remove-Item -Force $TEMP_ZIP -ErrorAction SilentlyContinue
|
||||
|
||||
if (Test-Path (Join-Path $DEST_DIR "ollama.exe")) {
|
||||
$ollamaSize = (Get-Item (Join-Path $DEST_DIR "ollama.exe")).Length
|
||||
Write-Host ""
|
||||
Write-Host "Ollama 설치 완료: $DEST_DIR ($([math]::Round($ollamaSize / 1MB, 1)) MB)" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "ollama.exe를 찾을 수 없습니다. zip 구조를 확인하세요." -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
61
apps/desktop/scripts/download-ollama.sh
Normal file
61
apps/desktop/scripts/download-ollama.sh
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
#!/usr/bin/env bash
|
||||
# scripts/download-ollama.sh
|
||||
# Ollama 포터블 바이너리를 resources/ollama/에 배치한다. (macOS/Linux)
|
||||
# 실행: bash scripts/download-ollama.sh
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
OLLAMA_VERSION="${OLLAMA_VERSION:-v0.5.7}"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
DEST_DIR="$SCRIPT_DIR/../resources/ollama"
|
||||
|
||||
OS="$(uname -s)"
|
||||
ARCH="$(uname -m)"
|
||||
|
||||
case "$OS" in
|
||||
Darwin)
|
||||
# macOS는 .tgz 형식 (ollama-darwin.tgz)
|
||||
ASSET="ollama-darwin.tgz"
|
||||
;;
|
||||
Linux)
|
||||
if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
|
||||
ASSET="ollama-linux-arm64.tgz"
|
||||
else
|
||||
ASSET="ollama-linux-amd64.tgz"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "지원하지 않는 OS: $OS" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
URL="https://github.com/ollama/ollama/releases/download/${OLLAMA_VERSION}/${ASSET}"
|
||||
TMP="$(mktemp -d)"
|
||||
trap 'rm -rf "$TMP"' EXIT
|
||||
|
||||
mkdir -p "$DEST_DIR"
|
||||
|
||||
if [ -f "$DEST_DIR/ollama" ]; then
|
||||
echo "Ollama가 이미 존재합니다: $DEST_DIR/ollama"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "=== Ollama ${OLLAMA_VERSION} ${OS} ${ARCH} 다운로드 ==="
|
||||
echo "URL: $URL"
|
||||
|
||||
curl -L --fail --retry 3 -o "$TMP/$ASSET" "$URL"
|
||||
tar -xzf "$TMP/$ASSET" -C "$TMP"
|
||||
|
||||
# tgz 구조: bin/ollama + lib/ (ROCm/CUDA 등). 필요한 것만 복사.
|
||||
if [ -f "$TMP/bin/ollama" ]; then
|
||||
cp "$TMP/bin/ollama" "$DEST_DIR/ollama"
|
||||
chmod +x "$DEST_DIR/ollama"
|
||||
fi
|
||||
|
||||
# 라이브러리 동봉(CUDA/ROCm 런타임용)
|
||||
if [ -d "$TMP/lib" ]; then
|
||||
cp -R "$TMP/lib" "$DEST_DIR/"
|
||||
fi
|
||||
|
||||
echo "Ollama 설치 완료: $DEST_DIR"
|
||||
Loading…
Add table
Add a link
Reference in a new issue