57 lines
2.4 KiB
Bash
Executable File
57 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build usbboot (rpiboot) on THIS machine (e.g. Fedora) and deploy to the Proxmox host.
|
|
# Use this when the host has no internet. Requires: dnf (Fedora) or apt (Debian/Ubuntu), git, ssh to host.
|
|
# Usage: ./build-and-deploy-usbboot-to-host.sh [proxmox_host]
|
|
# Example: ./build-and-deploy-usbboot-to-host.sh root@10.130.60.224
|
|
|
|
set -e
|
|
PROXMOX="${1:-root@10.130.60.224}"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
BUILD_DIR="/tmp/usbboot-build-$$"
|
|
cleanup() { rm -rf "$BUILD_DIR"; }
|
|
trap cleanup EXIT
|
|
|
|
echo "[$(date -Iseconds)] Building usbboot for host $PROXMOX ..."
|
|
|
|
# Install build deps (Fedora or Debian/Ubuntu)
|
|
if command -v dnf &>/dev/null; then
|
|
echo "Installing build deps (dnf)..."
|
|
sudo dnf install -y git libusb1-devel pkg-config glibc-devel gcc gcc-c++ make
|
|
elif command -v apt-get &>/dev/null; then
|
|
echo "Installing build deps (apt)..."
|
|
sudo apt-get update -qq
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y git libusb-1.0-0-dev pkg-config build-essential
|
|
else
|
|
echo "Error: need dnf or apt-get to install dependencies."
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$BUILD_DIR"
|
|
cd "$BUILD_DIR"
|
|
echo "Cloning usbboot (with submodules)..."
|
|
git clone --recurse-submodules --shallow-submodules --depth=1 https://github.com/raspberrypi/usbboot
|
|
cd usbboot
|
|
echo "Building..."
|
|
make
|
|
|
|
# Deploy: binary + gadget dir(s) to host /opt/usbboot
|
|
echo "[$(date -Iseconds)] Deploying to $PROXMOX:/opt/usbboot ..."
|
|
ssh "$PROXMOX" "mkdir -p /opt/usbboot"
|
|
rsync -a "$BUILD_DIR/usbboot/rpiboot" "$PROXMOX:/opt/usbboot/"
|
|
# CM4 needs mass-storage-gadget (64-bit); copy whichever exists
|
|
for dir in mass-storage-gadget64 mass-storage-gadget; do
|
|
if [[ -d "$BUILD_DIR/usbboot/$dir" ]]; then
|
|
rsync -a "$BUILD_DIR/usbboot/$dir/" "$PROXMOX:/opt/usbboot/$dir/"
|
|
echo " Copied $dir/"
|
|
fi
|
|
done
|
|
ssh "$PROXMOX" "chmod +x /opt/usbboot/rpiboot"
|
|
|
|
# Verify gadget has boot files (rpiboot needs bootfiles.bin or bootcode*.bin)
|
|
if ! ssh "$PROXMOX" "test -f /opt/usbboot/mass-storage-gadget64/bootfiles.bin || test -f /opt/usbboot/mass-storage-gadget64/boot.img" 2>/dev/null; then
|
|
echo "Warning: mass-storage-gadget64 may be missing boot files. If rpiboot fails with 'No bootcode files found', run: ./populate-gadget-on-host.sh $PROXMOX"
|
|
fi
|
|
|
|
echo "[$(date -Iseconds)] usbboot deployed to $PROXMOX:/opt/usbboot"
|
|
echo "Ensure the host flash script runs rpiboot with: -d /opt/usbboot/mass-storage-gadget64 (or mass-storage-gadget)."
|