From 01ab7b8cc9abc8f61a777ec5e06e0f8c9fe9e870 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 21 Mar 2026 02:11:39 +0000 Subject: [PATCH] Number drive mount points for Ollama and Kiwix storage selection Both [2/6] and [3/6] prompts now show detected mount points as a numbered list. Type 0 for default/Docker volume, or 1/2/3 to pick a drive directly. Typing a path manually still works as fallback. https://claude.ai/code/session_012gDnantBmFTWZGCiKyjazx --- laptop_full_setup.sh | 73 ++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/laptop_full_setup.sh b/laptop_full_setup.sh index b06c8c5..212fc64 100755 --- a/laptop_full_setup.sh +++ b/laptop_full_setup.sh @@ -225,25 +225,35 @@ if $INSTALL_AI; then echo -e " ${BOLD}[2/6] Where should Ollama models be stored?${NC}" echo " (Models are large — 5-50GB each. A fast SSD or large HDD is ideal.)" echo "" - echo " Available mount points with >20GB free:" - df -h --output=target,avail,fstype 2>/dev/null \ - | awk 'NR>1 && $2~/[0-9]/ { - val=$2; unit=substr(val,length(val)); - num=substr(val,1,length(val)-1)+0; - if ((unit=="G" && num>=20) || unit=="T") print " " $0 - }' | head -10 + mapfile -t _MPTS < <( + df -h --output=target,avail,fstype 2>/dev/null \ + | awk 'NR>1 && $2~/[0-9]/ { + val=$2; unit=substr(val,length(val)); + num=substr(val,1,length(val)-1)+0; + if ((unit=="G" && num>=20) || unit=="T") print $0 + }' | head -10 + ) + echo " 0) Docker volume (default — /var/lib/docker/volumes/)" + for _i in "${!_MPTS[@]}"; do + printf " %d) %s\n" "$((_i+1))" "${_MPTS[$_i]}" + done echo "" - echo " 1) Docker volume (default — stored in /var/lib/docker/volumes/)" - echo " 2) Custom path (e.g. /mnt/ssd/ollama or /data/ollama)" - echo "" - read -rp " Choice [1]: " STORAGE_CHOICE - STORAGE_CHOICE="${STORAGE_CHOICE:-1}" - if [[ "$STORAGE_CHOICE" == "2" ]]; then - read -rp " Enter full path for Ollama models: " OLLAMA_HOST_PATH - OLLAMA_HOST_PATH="${OLLAMA_HOST_PATH%/}" # strip trailing slash + read -rp " Choice [0]: " STORAGE_CHOICE + STORAGE_CHOICE="${STORAGE_CHOICE:-0}" + if [[ "$STORAGE_CHOICE" == "0" ]]; then + OLLAMA_STORAGE="volume" + elif [[ "$STORAGE_CHOICE" =~ ^[0-9]+$ ]] && (( STORAGE_CHOICE >= 1 && STORAGE_CHOICE <= ${#_MPTS[@]} )); then + _MP=$(awk '{print $1}' <<< "${_MPTS[$(( STORAGE_CHOICE-1 ))]}") + OLLAMA_HOST_PATH="$_MP/ollama-models" + OLLAMA_STORAGE="bind" + ok "Ollama models → $OLLAMA_HOST_PATH" + else + # Fallback: treat input as a literal path + OLLAMA_HOST_PATH="${STORAGE_CHOICE%/}" [[ -z "$OLLAMA_HOST_PATH" ]] && die "No path entered." OLLAMA_STORAGE="bind" fi + unset _MPTS _MP _i fi # ── Q3: Storage for Kiwix ZIMs ──────────────────────────────────────────────── @@ -254,19 +264,30 @@ if $SVC_KIWIX; then echo -e " ${BOLD}[3/6] Where should Kiwix ZIM files be stored?${NC}" echo " (ZIMs are large — Wikipedia alone is ~46GB. Total collection ~130GB.)" echo "" - echo " Available mount points with >50GB free:" - df -h --output=target,avail,fstype 2>/dev/null \ - | awk 'NR>1 && $2~/[0-9]/ { - val=$2; unit=substr(val,length(val)); - num=substr(val,1,length(val)-1)+0; - if ((unit=="G" && num>=50) || unit=="T") print " " $0 - }' | head -10 + mapfile -t _MPTS < <( + df -h --output=target,avail,fstype 2>/dev/null \ + | awk 'NR>1 && $2~/[0-9]/ { + val=$2; unit=substr(val,length(val)); + num=substr(val,1,length(val)-1)+0; + if ((unit=="G" && num>=50) || unit=="T") print $0 + }' | head -10 + ) + echo " 0) Default: $KIWIX_DIR" + for _i in "${!_MPTS[@]}"; do + printf " %d) %s\n" "$((_i+1))" "${_MPTS[$_i]}" + done echo "" - echo " Default: $KIWIX_DIR" - read -rp " Press Enter to use default, or type a different path: " KIWIX_INPUT - if [[ -n "$KIWIX_INPUT" ]]; then - KIWIX_DIR="${KIWIX_INPUT%/}" + read -rp " Choice [0]: " KIWIX_CHOICE + KIWIX_CHOICE="${KIWIX_CHOICE:-0}" + if [[ "$KIWIX_CHOICE" != "0" ]] && [[ "$KIWIX_CHOICE" =~ ^[0-9]+$ ]] && (( KIWIX_CHOICE >= 1 && KIWIX_CHOICE <= ${#_MPTS[@]} )); then + _MP=$(awk '{print $1}' <<< "${_MPTS[$(( KIWIX_CHOICE-1 ))]}") + KIWIX_DIR="$_MP/kiwix" + ok "Kiwix ZIMs → $KIWIX_DIR" + elif [[ "$KIWIX_CHOICE" != "0" ]] && [[ -n "$KIWIX_CHOICE" ]]; then + # Fallback: treat as a literal path + KIWIX_DIR="${KIWIX_CHOICE%/}" fi + unset _MPTS _MP _i _KIWIX_CHOICE # ── Q4: Download ZIMs now? ───────────────────────────────────────────────── echo ""