diff --git a/raspberry/picoreplayer.sh b/raspberry/picoreplayer.sh index 7d8baac..85523f8 100755 --- a/raspberry/picoreplayer.sh +++ b/raspberry/picoreplayer.sh @@ -1,6 +1,12 @@ #!/usr/bin/env bash set -euo pipefail +# Must be run as root +if [[ $EUID -ne 0 ]]; then + echo "This script must be run as root. Try sudo $0 ..." >&2 + exit 1 +fi + # Default env file ENV_FILE="./.env" @@ -14,12 +20,10 @@ DOWNLOAD_URL="${BASE_URL}/${IMG_ZIP}" usage() { cat < \ - --name \ --sdcard \ [--env-file /path/to/.env] --device Target board (rpi-4, rpi-zero, rpi-zero-2) - --name Hostname for the Pi --sdcard Device node of the SD card (e.g. /dev/sdb) --env-file File containing WIFI_SSID and WIFI_PSK (defaults to ./.env) EOF @@ -27,20 +31,19 @@ EOF } # Parse args -DEVICE="" NAME="" SDCARD="" +DEVICE="" SDCARD="" while [[ $# -gt 0 ]]; do case "$1" in - --device) DEVICE="$2"; shift 2;; - --name) NAME="$2"; shift 2;; - --sdcard) SDCARD="$2"; shift 2;; + --device) DEVICE="$2"; shift 2;; + --sdcard) SDCARD="$2"; shift 2;; --env-file) ENV_FILE="$2"; shift 2;; - -h|--help) usage;; - *) echo "Unknown option: $1"; usage;; + -h|--help) usage;; + *) echo "Unknown option: $1" >&2; usage;; esac done # Validate -if [[ -z "$DEVICE" || -z "$NAME" || -z "$SDCARD" ]]; then +if [[ -z "$DEVICE" || -z "$SDCARD" ]]; then usage fi if [[ ! -b "$SDCARD" ]]; then @@ -53,7 +56,6 @@ if [[ ! -f "$ENV_FILE" ]]; then fi # Load Wi-Fi credentials -# Expect lines: WIFI_SSID=... and WIFI_PSK=... source "$ENV_FILE" if [[ -z "${WIFI_SSID:-}" || -z "${WIFI_PSK:-}" ]]; then echo "Error: WIFI_SSID and WIFI_PSK must be set in $ENV_FILE" >&2 @@ -67,18 +69,16 @@ if [[ ! -f "$IMG_ZIP" ]]; then fi # Flash image -echo "Flashing $IMG_ZIP to $SDCARD (this will overwrite everything!)" +echo "Flashing $IMG_ZIP to $SDCARD (will overwrite everything!)" sync -xzcat $IMG_ZIP | dd of="$SDCARD" bs=4M status=progress conv=fsync +xzcat "$IMG_ZIP" | dd of="$SDCARD" bs=4M status=progress conv=fsync sync # Determine partition suffixes (/dev/sdX1 vs /dev/mmcblk0p1) if [[ "$SDCARD" =~ [0-9]$ ]]; then - PART1="${SDCARD}p1" - PART2="${SDCARD}p2" + PART1="${SDCARD}p1"; PART2="${SDCARD}p2" else - PART1="${SDCARD}1" - PART2="${SDCARD}2" + PART1="${SDCARD}1"; PART2="${SDCARD}2" fi # Mount partitions @@ -87,7 +87,7 @@ ROOT_MNT=$(mktemp -d) mount "$PART1" "$BOOT_MNT" mount "$PART2" "$ROOT_MNT" -# Create hidden Wi-Fi config on boot partition (picoreplayer picks this up) +# Create hidden Wi-Fi config on boot partition cat > "$BOOT_MNT/wpa_supplicant.conf" < "$ROOT_MNT/etc/hostname" -# Update /etc/hosts -sed -i "s/127\.0\.1\.1.*/127.0.1.1\t$NAME/" "$ROOT_MNT/etc/hosts" +# If a Zero device, enable Hifiberry DAC+ and disable onboard audio +if [[ "$DEVICE" == "rpi-zero" || "$DEVICE" == "rpi-zero-2" ]]; then + cat >> "$BOOT_MNT/config.txt" <