fix(bundle): Ollama v0.5.7 → v0.32.1 — gemma4:e4b pull 412 해소
- 번들 v0.5.7이 gemma4 요구(0.20+) 미달 → 온보딩 다운로드 412 실패 - 다운로드 스크립트: .ollama-version 스탬프로 runner 캐시 무효화 - cuda*/rocm* 재귀 가지치기 (신구 zip 레이아웃 모두 대응) + 1.5GB 경고 - darwin: v0.6+ tgz 자산 복귀 (bin/ollama·루트 바이너리 모두 지원)
This commit is contained in:
parent
b73317d584
commit
4fb1738160
4 changed files with 64 additions and 26 deletions
|
|
@ -7,7 +7,8 @@ stages:
|
||||||
variables:
|
variables:
|
||||||
NODE_VERSION: "20"
|
NODE_VERSION: "20"
|
||||||
PYTHON_VERSION: "3.11"
|
PYTHON_VERSION: "3.11"
|
||||||
OLLAMA_VERSION: "v0.5.7"
|
# gemma4:e4b(기본 모델)는 Ollama 0.20+ 요구 — v0.5.7 번들이 412 에러의 원인이었음
|
||||||
|
OLLAMA_VERSION: "v0.32.1"
|
||||||
npm_config_cache: "$CI_PROJECT_DIR/.npm"
|
npm_config_cache: "$CI_PROJECT_DIR/.npm"
|
||||||
|
|
||||||
.node-cache: &node-cache
|
.node-cache: &node-cache
|
||||||
|
|
|
||||||
|
|
@ -7,17 +7,25 @@
|
||||||
|
|
||||||
$ErrorActionPreference = "Stop"
|
$ErrorActionPreference = "Stop"
|
||||||
|
|
||||||
$OLLAMA_VERSION = if ($env:OLLAMA_VERSION) { $env:OLLAMA_VERSION } else { "v0.5.7" }
|
$OLLAMA_VERSION = if ($env:OLLAMA_VERSION) { $env:OLLAMA_VERSION } else { "v0.32.1" }
|
||||||
$OLLAMA_URL = "https://github.com/ollama/ollama/releases/download/$OLLAMA_VERSION/ollama-windows-amd64.zip"
|
$OLLAMA_URL = "https://github.com/ollama/ollama/releases/download/$OLLAMA_VERSION/ollama-windows-amd64.zip"
|
||||||
$DEST_DIR = Join-Path $PSScriptRoot "..\resources\ollama"
|
$DEST_DIR = Join-Path $PSScriptRoot "..\resources\ollama"
|
||||||
$TEMP_ZIP = Join-Path $env:TEMP "ollama-$OLLAMA_VERSION-windows-amd64.zip"
|
$TEMP_ZIP = Join-Path $env:TEMP "ollama-$OLLAMA_VERSION-windows-amd64.zip"
|
||||||
$TEMP_DIR = Join-Path $env:TEMP "ollama-extract"
|
$TEMP_DIR = Join-Path $env:TEMP "ollama-extract"
|
||||||
|
$VERSION_STAMP = Join-Path $DEST_DIR ".ollama-version"
|
||||||
|
|
||||||
Write-Host "=== Ollama $OLLAMA_VERSION (Windows amd64) ===" -ForegroundColor Cyan
|
Write-Host "=== Ollama $OLLAMA_VERSION (Windows amd64) ===" -ForegroundColor Cyan
|
||||||
|
|
||||||
|
# Version-aware cache: CI runner reuses the checkout dir, so an old bundle can
|
||||||
|
# linger. Re-download whenever the stamped version differs from the wanted one.
|
||||||
if (Test-Path (Join-Path $DEST_DIR "ollama.exe")) {
|
if (Test-Path (Join-Path $DEST_DIR "ollama.exe")) {
|
||||||
Write-Host "Ollama already present: $DEST_DIR\ollama.exe" -ForegroundColor Green
|
$stamped = if (Test-Path $VERSION_STAMP) { (Get-Content $VERSION_STAMP -Raw).Trim() } else { "" }
|
||||||
exit 0
|
if ($stamped -eq $OLLAMA_VERSION) {
|
||||||
|
Write-Host "Ollama $OLLAMA_VERSION already present: $DEST_DIR\ollama.exe" -ForegroundColor Green
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
Write-Host "Cached Ollama version '$stamped' != '$OLLAMA_VERSION' - re-downloading" -ForegroundColor Yellow
|
||||||
|
Remove-Item -Recurse -Force $DEST_DIR
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Test-Path $TEMP_ZIP) { Remove-Item -Force $TEMP_ZIP }
|
if (Test-Path $TEMP_ZIP) { Remove-Item -Force $TEMP_ZIP }
|
||||||
|
|
@ -65,23 +73,30 @@ Get-ChildItem -Path $TEMP_DIR -Force | ForEach-Object {
|
||||||
Write-Host (" copied: {0}" -f $_.Name) -ForegroundColor Green
|
Write-Host (" copied: {0}" -f $_.Name) -ForegroundColor Green
|
||||||
}
|
}
|
||||||
|
|
||||||
# Remove heavy GPU runners to stay below NSIS size limits
|
# Remove heavy GPU runtimes to stay below NSIS size limits.
|
||||||
$runnersDir = Join-Path $DEST_DIR "lib\ollama\runners"
|
# Layout differs across versions (old: lib\ollama\runners\cuda*, new: lib\ollama\cuda_v12 etc.)
|
||||||
if (Test-Path $runnersDir) {
|
# so prune ANY cuda*/rocm* directory recursively - version-agnostic.
|
||||||
Get-ChildItem $runnersDir -Directory | Where-Object { $_.Name -like "cuda*" -or $_.Name -like "rocm*" } | ForEach-Object {
|
Get-ChildItem -Path $DEST_DIR -Directory -Recurse |
|
||||||
Remove-Item -Recurse -Force $_.FullName
|
Where-Object { $_.Name -like "cuda*" -or $_.Name -like "rocm*" } |
|
||||||
Write-Host (" pruned GPU runner: {0}" -f $_.Name) -ForegroundColor Yellow
|
ForEach-Object {
|
||||||
|
if (Test-Path $_.FullName) {
|
||||||
|
Remove-Item -Recurse -Force $_.FullName
|
||||||
|
Write-Host (" pruned GPU runtime: {0}" -f $_.FullName.Substring($DEST_DIR.Length)) -ForegroundColor Yellow
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Remove-Item -Recurse -Force $TEMP_DIR -ErrorAction SilentlyContinue
|
Remove-Item -Recurse -Force $TEMP_DIR -ErrorAction SilentlyContinue
|
||||||
Remove-Item -Force $TEMP_ZIP -ErrorAction SilentlyContinue
|
Remove-Item -Force $TEMP_ZIP -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
if (Test-Path (Join-Path $DEST_DIR "ollama.exe")) {
|
if (Test-Path (Join-Path $DEST_DIR "ollama.exe")) {
|
||||||
$ollamaSize = (Get-Item (Join-Path $DEST_DIR "ollama.exe")).Length
|
Set-Content -Path $VERSION_STAMP -Value $OLLAMA_VERSION
|
||||||
$ollamaMB = [math]::Round($ollamaSize / 1MB, 1)
|
$totalSize = (Get-ChildItem $DEST_DIR -Recurse -File | Measure-Object -Property Length -Sum).Sum
|
||||||
|
$totalMB = [math]::Round($totalSize / 1MB, 0)
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
Write-Host ("Ollama installed: {0} ({1} MB)" -f $DEST_DIR, $ollamaMB) -ForegroundColor Green
|
Write-Host ("Ollama $OLLAMA_VERSION installed: {0} (pruned total {1} MB)" -f $DEST_DIR, $totalMB) -ForegroundColor Green
|
||||||
|
if ($totalSize -gt 1500MB) {
|
||||||
|
Write-Host "WARNING: pruned bundle exceeds 1.5GB - NSIS 2GB installer limit at risk" -ForegroundColor Red
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Write-Host "ollama.exe not found after extraction. Inspect the zip layout." -ForegroundColor Red
|
Write-Host "ollama.exe not found after extraction. Inspect the zip layout." -ForegroundColor Red
|
||||||
exit 1
|
exit 1
|
||||||
|
|
|
||||||
|
|
@ -5,17 +5,18 @@
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
OLLAMA_VERSION="${OLLAMA_VERSION:-v0.5.7}"
|
OLLAMA_VERSION="${OLLAMA_VERSION:-v0.32.1}"
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
DEST_DIR="$SCRIPT_DIR/../resources/ollama"
|
DEST_DIR="$SCRIPT_DIR/../resources/ollama"
|
||||||
|
VERSION_STAMP="$DEST_DIR/.ollama-version"
|
||||||
|
|
||||||
OS="$(uname -s)"
|
OS="$(uname -s)"
|
||||||
ARCH="$(uname -m)"
|
ARCH="$(uname -m)"
|
||||||
|
|
||||||
case "$OS" in
|
case "$OS" in
|
||||||
Darwin)
|
Darwin)
|
||||||
# macOS는 단일 바이너리 asset (v0.5.x 기준 tgz 없음 — GitHub API로 확인)
|
# v0.6+ 기준 tgz 제공 (metal 포함, ~145MB). v0.5.x는 단일 바이너리였음.
|
||||||
ASSET="ollama-darwin"
|
ASSET="ollama-darwin.tgz"
|
||||||
;;
|
;;
|
||||||
Linux)
|
Linux)
|
||||||
if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
|
if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
|
||||||
|
|
@ -34,13 +35,20 @@ URL="https://github.com/ollama/ollama/releases/download/${OLLAMA_VERSION}/${ASSE
|
||||||
TMP="$(mktemp -d)"
|
TMP="$(mktemp -d)"
|
||||||
trap 'rm -rf "$TMP"' EXIT
|
trap 'rm -rf "$TMP"' EXIT
|
||||||
|
|
||||||
mkdir -p "$DEST_DIR"
|
# 버전 스탬프 캐시 무효화 — runner가 checkout 디렉토리를 재사용하므로
|
||||||
|
# 구버전 번들이 남아있으면 갈아엎는다.
|
||||||
if [ -f "$DEST_DIR/ollama" ]; then
|
if [ -f "$DEST_DIR/ollama" ]; then
|
||||||
echo "Ollama가 이미 존재합니다: $DEST_DIR/ollama"
|
STAMPED="$(cat "$VERSION_STAMP" 2>/dev/null || echo '')"
|
||||||
exit 0
|
if [ "$STAMPED" = "$OLLAMA_VERSION" ]; then
|
||||||
|
echo "Ollama ${OLLAMA_VERSION}가 이미 존재합니다: $DEST_DIR/ollama"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "캐시된 Ollama 버전('$STAMPED') != '$OLLAMA_VERSION' — 재다운로드"
|
||||||
|
rm -rf "$DEST_DIR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$DEST_DIR"
|
||||||
|
|
||||||
echo "=== Ollama ${OLLAMA_VERSION} ${OS} ${ARCH} 다운로드 ==="
|
echo "=== Ollama ${OLLAMA_VERSION} ${OS} ${ARCH} 다운로드 ==="
|
||||||
echo "URL: $URL"
|
echo "URL: $URL"
|
||||||
|
|
||||||
|
|
@ -49,21 +57,29 @@ curl -L --fail --retry 3 -o "$TMP/$ASSET" "$URL"
|
||||||
case "$ASSET" in
|
case "$ASSET" in
|
||||||
*.tgz)
|
*.tgz)
|
||||||
tar -xzf "$TMP/$ASSET" -C "$TMP"
|
tar -xzf "$TMP/$ASSET" -C "$TMP"
|
||||||
# tgz 구조: bin/ollama + lib/ (ROCm/CUDA 등). 필요한 것만 복사.
|
# tgz 구조는 버전에 따라 bin/ollama 또는 루트 ollama — 둘 다 지원
|
||||||
if [ -f "$TMP/bin/ollama" ]; then
|
if [ -f "$TMP/bin/ollama" ]; then
|
||||||
cp "$TMP/bin/ollama" "$DEST_DIR/ollama"
|
cp "$TMP/bin/ollama" "$DEST_DIR/ollama"
|
||||||
chmod +x "$DEST_DIR/ollama"
|
elif [ -f "$TMP/ollama" ]; then
|
||||||
|
cp "$TMP/ollama" "$DEST_DIR/ollama"
|
||||||
|
else
|
||||||
|
echo "ERROR: tgz 안에서 ollama 바이너리를 찾지 못했습니다" >&2
|
||||||
|
find "$TMP" -maxdepth 2 -type f | head -20 >&2
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
# 라이브러리 동봉(CUDA/ROCm 런타임용)
|
chmod +x "$DEST_DIR/ollama"
|
||||||
|
# 라이브러리 동봉 (linux: CUDA/ROCm은 용량 문제로 제외, darwin: metal 등 유지)
|
||||||
if [ -d "$TMP/lib" ]; then
|
if [ -d "$TMP/lib" ]; then
|
||||||
cp -R "$TMP/lib" "$DEST_DIR/"
|
cp -R "$TMP/lib" "$DEST_DIR/"
|
||||||
|
find "$DEST_DIR/lib" -maxdepth 3 -type d \( -name "cuda*" -o -name "rocm*" \) -exec rm -rf {} + 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
# darwin: 단일 실행 바이너리
|
# 단일 실행 바이너리 asset
|
||||||
cp "$TMP/$ASSET" "$DEST_DIR/ollama"
|
cp "$TMP/$ASSET" "$DEST_DIR/ollama"
|
||||||
chmod +x "$DEST_DIR/ollama"
|
chmod +x "$DEST_DIR/ollama"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo "Ollama 설치 완료: $DEST_DIR"
|
echo "$OLLAMA_VERSION" > "$VERSION_STAMP"
|
||||||
|
echo "Ollama ${OLLAMA_VERSION} 설치 완료: $DEST_DIR ($(du -sh "$DEST_DIR" | cut -f1))"
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,12 @@
|
||||||
- **자동 업데이트 실전 검증**: 실행 중이던 0.1.1-alpha 앱 재시작 → 30초 후 feed 체크 → "Found version 0.1.2-alpha" → 735MB 다운로드 7초(사내망) → 재시작 다이얼로그 표시. 전체 루프 완주.
|
- **자동 업데이트 실전 검증**: 실행 중이던 0.1.1-alpha 앱 재시작 → 30초 후 feed 체크 → "Found version 0.1.2-alpha" → 735MB 다운로드 7초(사내망) → 재시작 다이얼로그 표시. 전체 루프 완주.
|
||||||
- 알려진 사소 이슈: 차등(blockmap) 다운로드 시 이전 버전 blockmap URL에서 :8443 포트가 탈락해 404 → full download 폴백으로 동작 (electron-updater 비표준 포트 quirk, 비차단)
|
- 알려진 사소 이슈: 차등(blockmap) 다운로드 시 이전 버전 blockmap URL에서 :8443 포트가 탈락해 404 → full download 폴백으로 동작 (electron-updater 비표준 포트 quirk, 비차단)
|
||||||
|
|
||||||
|
### F: 온보딩 gemma4 pull 412 실패 → Ollama 번들 v0.32.1 범프 (v0.1.3-alpha)
|
||||||
|
- **증상**: 설치 앱 온보딩에서 "다운로드 실패" — Ollama 레지스트리가 412 반환 ("requires a newer version of Ollama")
|
||||||
|
- **원인**: 번들 Ollama v0.5.7 ≪ gemma4:e4b 요구 0.20+. 4/11 모델 전환과 4/15 번들 결정이 서로 버전 정합 안 됨. 개발 환경은 시스템 Ollama 0.20.5가 가려줌 (번들 우선은 패키지 앱에서만 발동)
|
||||||
|
- **수정**: OLLAMA_VERSION v0.32.1(최신), 다운로드 스크립트 2종에 `.ollama-version` 스탬프 캐시 무효화(runner가 checkout 재사용), cuda*/rocm* 재귀 가지치기(신구 zip 레이아웃 모두), darwin은 v0.6+부터 tgz 복귀(bin/ollama·루트 모두 지원), 1.5GB 초과 경고
|
||||||
|
- 배포 경로: v0.1.3-alpha 태그 → 설치 앱이 자동 업데이트로 수신
|
||||||
|
|
||||||
#### 남은 것
|
#### 남은 것
|
||||||
1. 설치 디렉토리명 `@d3rodesktop` 정리 (electron-builder가 package name에서 유도 — 다음 릴리스에서 명시)
|
1. 설치 디렉토리명 `@d3rodesktop` 정리 (electron-builder가 package name에서 유도 — 다음 릴리스에서 명시)
|
||||||
2. VIVEN runner의 signtool 서명이 어떤 인증서인지 확인 (twentyoz 조직 인증서면 유지)
|
2. VIVEN runner의 signtool 서명이 어떤 인증서인지 확인 (twentyoz 조직 인증서면 유지)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue