#!/bin/bash # ClearPilot provision script # Runs on first boot (no /data/quick_boot) when internet is available. # Installs packages, pulls latest code, and builds. # SSH is handled by on_start.sh before this runs. # Output is displayed on screen via qt_shell. mount -o rw,remount / # 1. Wait for internet connectivity echo "Waiting for internet connectivity (up to 30s)..." ONLINE=0 for i in $(seq 1 30); do if nmcli networking connectivity check 2>/dev/null | grep -q "full"; then echo "Online after ${i}s" ONLINE=1 break fi sleep 1 done if [ "$ONLINE" -eq 0 ]; then echo "No internet after 30s, skipping packages and updates" sleep 3 exit 0 fi # 3. Install packages echo "Remounting / read-write..." sudo mount -o remount,rw / echo "Installing packages..." sudo apt-get update -qq sudo apt-get install -y openvpn curl ccrypt #echo "Installing Node.js 20..." #curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs mount -o rw,remount / echo "Installing Claude Code..." curl -fsSL https://claude.ai/install.sh | bash cat > /usr/local/bin/claude <<'WRAPPER' #!/bin/bash sudo mount -o rw,remount / exec /root/.local/bin/claude "$@" WRAPPER chmod +x /usr/local/bin/claude echo "Packages installed" # 4. Ensure git remote uses SSH (not HTTPS) cd /data/openpilot EXPECTED_REMOTE="git@git.hanson.xyz:brianhansonxyz/clearpilot.git" CURRENT_REMOTE=$(git remote get-url origin 2>/dev/null) if [ "$CURRENT_REMOTE" != "$EXPECTED_REMOTE" ]; then echo "Fixing git remote: $CURRENT_REMOTE -> $EXPECTED_REMOTE" git remote set-url origin "$EXPECTED_REMOTE" fi # 5. Pull latest from remote (remote always wins) echo "Checking for updates..." git fetch origin clearpilot LOCAL=$(git rev-parse HEAD) REMOTE=$(git rev-parse origin/clearpilot) if [ "$LOCAL" != "$REMOTE" ]; then echo "Updating: $(git log --oneline -1 HEAD) -> $(git log --oneline -1 origin/clearpilot)" git reset --hard origin/clearpilot sudo chown -R comma:comma /data/openpilot echo "Update complete" else echo "Already up to date" fi # 5. Build echo "" sudo chown -R comma:comma /data/openpilot touch /data/quick_boot echo "Provision complete" sleep 2