2026-04-05 09:04:45 +00:00
|
|
|
#!/bin/sh
|
|
|
|
|
# clawdie-vps-migrate.sh
|
|
|
|
|
# Migrate a Linux VPS to FreeBSD + Clawdie-AI
|
|
|
|
|
#
|
|
|
|
|
# Usage:
|
|
|
|
|
# curl -fsSL https://clawdie.si/vps.sh | sh
|
|
|
|
|
# # or
|
|
|
|
|
# ./clawdie-vps-migrate.sh https://your-ssh-key-url
|
|
|
|
|
#
|
|
|
|
|
# Requirements:
|
|
|
|
|
# - Linux VPS with rescue mode or root access
|
|
|
|
|
# - At least 2GB RAM (mfsBSD runs in RAM)
|
|
|
|
|
# - Disk will be COMPLETELY ERASED
|
|
|
|
|
#
|
|
|
|
|
# This script:
|
|
|
|
|
# 1. Downloads mfsBSD with Clawdie payload
|
|
|
|
|
# 2. Writes to disk (overwrites everything!)
|
|
|
|
|
# 3. Configures GRUB to boot mfsBSD
|
|
|
|
|
# 4. Reboots
|
|
|
|
|
#
|
|
|
|
|
# After reboot:
|
|
|
|
|
# ssh -p 1022 mfsbsd@your-ip
|
|
|
|
|
# # password: clawdie2026
|
|
|
|
|
# /usr/local/share/clawdie-iso/firstboot.sh
|
|
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
SSH_KEY_URL="${1:-}"
|
|
|
|
|
CLAWDIE_MFSBSD_URL="https://clawdie.si/clawdie-mfsbsd-latest.img.gz"
|
|
|
|
|
CLAWDIE_MFSBSD_SHA256_URL="https://clawdie.si/clawdie-mfsbsd-latest.img.gz.sha256"
|
|
|
|
|
MFSBSD_PASSWORD="clawdie2026"
|
|
|
|
|
|
|
|
|
|
echo "============================================"
|
|
|
|
|
echo " Clawdie-VPS Migration"
|
|
|
|
|
echo " WARNING: This will ERASE ALL DATA on disk"
|
|
|
|
|
echo "============================================"
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
# Detect disk
|
|
|
|
|
DISK=$(lsblk -nd -o NAME,ROTA | grep '1$' | head -1 | awk '{print $1}')
|
|
|
|
|
if [ -z "$DISK" ]; then
|
|
|
|
|
DISK=$(ls /dev/vd? /dev/sd? 2>/dev/null | head -1 | sed 's|/dev/||')
|
|
|
|
|
fi
|
|
|
|
|
if [ -z "$DISK" ]; then
|
|
|
|
|
echo "ERROR: Cannot detect disk. Set DISK= manually."
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
echo "Target disk: /dev/${DISK}"
|
|
|
|
|
echo ""
|
|
|
|
|
|
|
|
|
|
# Confirm
|
|
|
|
|
read -p "Continue? ALL DATA ON /dev/${DISK} WILL BE LOST! (type 'yes'): " CONFIRM
|
|
|
|
|
if [ "$CONFIRM" != "yes" ]; then
|
|
|
|
|
echo "Aborted."
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Download mfsBSD with Clawdie payload
|
|
|
|
|
echo "==> Downloading Clawdie-mfsBSD..."
|
|
|
|
|
TMPDIR=$(mktemp -d)
|
|
|
|
|
curl -L --progress-bar -o "${TMPDIR}/clawdie-mfsbsd.img.gz" "$CLAWDIE_MFSBSD_URL"
|
|
|
|
|
|
|
|
|
|
# Verify checksum
|
|
|
|
|
curl -L -o "${TMPDIR}/clawdie-mfsbsd.img.gz.sha256" "$CLAWDIE_MFSBSD_SHA256_URL"
|
|
|
|
|
cd "$TMPDIR"
|
|
|
|
|
sha256sum -c clawdie-mfsbsd.img.gz.sha256 || { echo "ERROR: Checksum mismatch!"; exit 1; }
|
|
|
|
|
cd - > /dev/null
|
|
|
|
|
|
|
|
|
|
# Decompress
|
|
|
|
|
echo "==> Decompressing..."
|
|
|
|
|
gunzip "${TMPDIR}/clawdie-mfsbsd.img.gz"
|
|
|
|
|
IMG_SIZE=$(stat -c%s "${TMPDIR}/clawdie-mfsbsd.img")
|
|
|
|
|
echo " Image size: $((IMG_SIZE / 1024 / 1024)) MB"
|
|
|
|
|
|
|
|
|
|
# Write to disk
|
|
|
|
|
echo "==> Writing to /dev/${DISK} (this takes a few minutes)..."
|
|
|
|
|
dd if="${TMPDIR}/clawdie-mfsbsd.img" of="/dev/${DISK}" bs=4M status=progress conv=fsync
|
|
|
|
|
|
|
|
|
|
# Sync
|
|
|
|
|
sync
|
|
|
|
|
|
|
|
|
|
# Cleanup
|
|
|
|
|
rm -rf "$TMPDIR"
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
echo "============================================"
|
|
|
|
|
echo " Migration complete!"
|
|
|
|
|
echo ""
|
|
|
|
|
echo " After reboot:"
|
|
|
|
|
echo " ssh -p 1022 mfsbsd@$(curl -s ifconfig.me)"
|
|
|
|
|
echo " Password: ${MFSBSD_PASSWORD}"
|
|
|
|
|
echo ""
|
|
|
|
|
echo " Then run:"
|
Align VPS firstboot with modular pipeline (Sam & Claude)
Rewrite vps/firstboot-vps.sh as phase-1 only: partition disk,
create ZFS pool "clawdie", install FreeBSD base, inject firstboot
payload, install bootloader, reboot. On first HDD boot the standard
firstboot.sh modular pipeline runs (zfs detect, wizard, gpu, pkg,
ssh, env, system, tailscale, deploy).
Pre-baked clawdie.conf values get written to build.cfg with
TARGET=cloud so the wizard is skipped. Pool named "clawdie"
(not zroot) for pool detection compatibility.
Remove duplicate clawdie-vps-setup.sh.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 11:31:59 +00:00
|
|
|
echo " /usr/local/share/clawdie-iso/firstboot-vps.sh"
|
2026-04-05 09:04:45 +00:00
|
|
|
echo "============================================"
|
|
|
|
|
echo ""
|
|
|
|
|
read -p "Press Enter to reboot now (or Ctrl+C to abort)..."
|
|
|
|
|
reboot
|