Files
tomasz-syn-grzegorza 359afb3a59 Initial import: bare-metal stacks, Server UI, GPU fan, tutorials.
Infrastructure configs for GMKtec K11 (Docker, vLLM, LocalAI, ComfyUI,
control-plane, gpu-fan agent, Server UI with CLI/file explorer/GPU fan curve).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 12:02:04 +00:00

107 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Setup 1TB data disk on GMKtec K11
# nvme0n1 = 1TB data | nvme1n1 = 128GB system
set -euo pipefail
DATA_DISK=/dev/nvme0n1
DATA_PART=/dev/nvme0n1p1
MOUNT_POINT=/data
echo "=== Sprawdzam dyski ==="
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,MODEL
# Safety: refuse if DATA_DISK has mountpoints (system disk)
if lsblk -n -o MOUNTPOINT "$DATA_DISK" | grep -q '/'; then
echo "BŁĄD: $DATA_DISK ma partycje zamontowane — przerwanie!"
exit 1
fi
# Create partition if missing
if ! lsblk -n "$DATA_PART" &>/dev/null; then
echo "=== Partycjonowanie $DATA_DISK ==="
parted -s "$DATA_DISK" mklabel gpt
parted -s "$DATA_DISK" mkpart primary ext4 0% 100%
partprobe "$DATA_DISK"
sleep 2
fi
# Format if no filesystem
if ! blkid -o value -s TYPE "$DATA_PART" 2>/dev/null | grep -q ext4; then
echo "=== Formatowanie $DATA_PART (ext4) ==="
mkfs.ext4 -F -L data1tb "$DATA_PART"
fi
UUID=$(blkid -o value -s UUID "$DATA_PART")
echo "UUID=$UUID"
# Mount point
mkdir -p "$MOUNT_POINT"
if ! mountpoint -q "$MOUNT_POINT"; then
echo "=== Montowanie $DATA_PART -> $MOUNT_POINT ==="
mount "$DATA_PART" "$MOUNT_POINT"
fi
# fstab
FSTAB_LINE="UUID=${UUID} ${MOUNT_POINT} ext4 defaults,noatime 0 2"
if ! grep -q "$MOUNT_POINT" /etc/fstab; then
echo "=== Dodaję wpis do /etc/fstab ==="
cp /etc/fstab /etc/fstab.bak.$(date +%Y%m%d%H%M%S)
echo "$FSTAB_LINE" >> /etc/fstab
else
echo "=== fstab już zawiera $MOUNT_POINT ==="
fi
mount -a
df -h "$MOUNT_POINT"
# Directory structure
echo "=== Tworzę strukturę katalogów ==="
mkdir -p "$MOUNT_POINT/docker"
mkdir -p "$MOUNT_POINT/apps/vllm/huggingface"
mkdir -p "$MOUNT_POINT/apps/gguf/"{qwen3.6-27b,gemma-4-12b}
mkdir -p "$MOUNT_POINT/apps/localai/"{models,backends,configuration,images,data}
mkdir -p "$MOUNT_POINT/apps/comfyui/storage"
mkdir -p "$MOUNT_POINT/apps/comfyui/cache/"{hf-hub,torch-hub}
mkdir -p "$MOUNT_POINT/apps/comfyui/"{models,input,output,custom_nodes,workflows}
chown -R tomasz-syn-grzegorza:tomasz-syn-grzegorza "$MOUNT_POINT/apps"
# Docker data-root migration
echo "=== Migracja Docker data-root ==="
systemctl stop docker docker.socket 2>/dev/null || true
if [ -d /var/lib/docker ] && [ "$(ls -A /var/lib/docker 2>/dev/null)" ]; then
echo "Kopiuję /var/lib/docker -> $MOUNT_POINT/docker ..."
rsync -aHAX /var/lib/docker/ "$MOUNT_POINT/docker/"
fi
mkdir -p "$MOUNT_POINT/docker"
python3 <<'PYEOF'
import json
from pathlib import Path
p = Path("/etc/docker/daemon.json")
cfg = json.loads(p.read_text()) if p.exists() else {}
cfg["data-root"] = "/data/docker"
p.write_text(json.dumps(cfg, indent=2) + "\n")
print(p.read_text())
PYEOF
systemctl start docker
sleep 2
echo "=== Weryfikacja ==="
docker info | grep "Docker Root Dir"
df -h / "$MOUNT_POINT"
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,MODEL
echo "=== Test Docker ==="
docker run --rm hello-world
docker run --rm --gpus all nvidia/cuda:12.6.0-base-ubuntu24.04 nvidia-smi
echo ""
echo "=== GOTOWE ==="
echo "Dysk danych: $MOUNT_POINT ($UUID)"
echo "Docker Root: /data/docker"
echo "Modele vLLM: /data/apps/vllm/huggingface"
echo "LocalAI: /data/apps/localai/models"