Files
reterminal-dm4/emmc-provisioning/scripts/populate-tftpboot-from-git.sh

48 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Populate /srv/tftpboot with Raspberry Pi 4 / CM4 boot files from the official firmware repo.
# Run inside the LXC (as root), or from your machine: ./populate-tftpboot-from-git.sh root@10.130.60.141
# Requires: curl or wget, tar; the LXC must have internet (eth0).
set -e
TARGET="${1:-}"
FIRMWARE_URL="https://github.com/raspberrypi/firmware/archive/refs/heads/master.tar.gz"
TFTP_ROOT="${TFTP_ROOT:-/srv/tftpboot}"
do_populate() {
echo "Populating $TFTP_ROOT from Raspberry Pi firmware (GitHub) ..."
mkdir -p "$TFTP_ROOT"
if [[ -f "$TFTP_ROOT/start4cd.elf" ]]; then
echo "start4cd.elf already present; skipping download (remove it to re-fetch)."
return 0
fi
if ! command -v curl >/dev/null 2>&1 && ! command -v wget >/dev/null 2>&1; then
echo "Installing curl ..."
apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq curl
fi
local tmpdir
tmpdir=$(mktemp -d)
trap "rm -rf $tmpdir" EXIT
if command -v curl >/dev/null 2>&1; then
curl -sL "$FIRMWARE_URL" -o "$tmpdir/firmware.tar.gz"
else
wget -q -O "$tmpdir/firmware.tar.gz" "$FIRMWARE_URL"
fi
tar xzf "$tmpdir/firmware.tar.gz" -C "$tmpdir"
if [[ ! -d "$tmpdir/firmware-master/boot" ]]; then
echo "Error: boot folder not found in archive"
exit 1
fi
cp -a "$tmpdir/firmware-master/boot/." "$TFTP_ROOT/"
echo "Copied boot files to $TFTP_ROOT ($(ls "$TFTP_ROOT" | wc -l) items)."
ls -la "$TFTP_ROOT"/start4*.elf "$TFTP_ROOT"/fixup4*.dat "$TFTP_ROOT"/config.txt 2>/dev/null || true
}
if [[ -n "$TARGET" ]]; then
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
scp "$SCRIPT_DIR/populate-tftpboot-from-git.sh" "$TARGET:/tmp/populate-tftpboot.sh"
ssh "$TARGET" "bash /tmp/populate-tftpboot.sh"
exit 0
fi
do_populate