nvidia@4535:~$ more update_ollama.sh
#!/usr/bin/env bash
set -e
LOG_FILE="$HOME/ollama_update.log"
echo "======================================"
echo " Ollama Auto Update"
echo "======================================"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# ----------------------------
# Ollama 설치 여부 확인
# ----------------------------
if ! command -v ollama >/dev/null 2>&1; then
log "ERROR: Ollama not installed."
exit 1
fi
# ----------------------------
# jq 확인
# ----------------------------
if ! command -v jq >/dev/null 2>&1; then
log "WARNING: jq not installed. Context length may not be displayed."
fi
# ----------------------------
# 현재 / 최신 버전 확인
# ----------------------------
CURRENT_VERSION=$(ollama --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
LATEST_VERSION=$(curl -fsSL \
https://api.github.com/repos/ollama/ollama/releases/latest \
| grep '"tag_name"' \
| head -n 1 \
| sed -E 's/.*"v([^"]+)".*/\1/')
log "Current Ollama : $CURRENT_VERSION"
log "Latest Ollama : $LATEST_VERSION"
# ----------------------------
# Ollama 업데이트
# ----------------------------
if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then
log "Updating Ollama..."
curl -fsSL https://ollama.com/install.sh | sh
sudo systemctl restart ollama || true
log "Ollama updated."
else
log "Ollama already latest."
fi
# ----------------------------
# 모델 업데이트
# ----------------------------
log "Checking local models..."
MODELS=$(ollama list | awk 'NR>1 {print $1}')
if [ -z "$MODELS" ]; then
log "No local models found."
exit 0
fi
SUCCESS=0
FAILED=0
while read -r MODEL; do
[ -z "$MODEL" ] && continue
log "Updating model: $MODEL"
if ollama pull "$MODEL"; then
log "SUCCESS: $MODEL"
SUCCESS=$((SUCCESS + 1))
else
log "FAILED : $MODEL"
FAILED=$((FAILED + 1))
fi
done <<< "$MODELS"
# ----------------------------
# 설치된 모델 정보 출력
# ----------------------------
echo
echo "========================================================================================================"
echo "Installed Models (Sorted by Context)"
echo "========================================================================================================"
printf "%-40s %-10s %-12s %-20s\n" \
"MODEL" "SIZE" "CONTEXT" "ARCH"
printf "%-40s %-10s %-12s %-20s\n" \
"----------------------------------------" \
"--------" \
"------------" \
"--------------------"
(
tail -n +2 < <(ollama list) | while read -r MODEL ID SIZE UNIT REST; do
SIZE="${SIZE}${UNIT}"
JSON=$(curl -s http://localhost:11434/api/show \
-H "Content-Type: application/json" \
-d "{\"name\":\"$MODEL\"}")
ARCH=$(echo "$JSON" | jq -r '
.model_info["general.architecture"] // "-"
')
CONTEXT=$(echo "$JSON" | jq -r '
.model_info
| to_entries[]
| select(.key | endswith(".context_length"))
| .value
' 2>/dev/null | head -n1)
[ -z "$CONTEXT" ] && CONTEXT=0
[ "$CONTEXT" = "null" ] && CONTEXT=0
echo "${CONTEXT}|${MODEL}|${SIZE}|${ARCH}"
done
) | sort -t'|' -k1,1nr | while IFS='|' read -r CONTEXT MODEL SIZE ARCH; do
printf "%-40s %-10s %-12s %-20s\n" \
"$MODEL" \
"$SIZE" \
"$CONTEXT" \
"$ARCH"
done
echo
log "======================================"
log "Update Complete"
log "Success : $SUCCESS"
log "Failed : $FAILED"
log "Log File: $LOG_FILE"
log "======================================"