fix: picoreplayer script
This commit is contained in:
@@ -1,6 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
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
|
# Default env file
|
||||||
ENV_FILE="./.env"
|
ENV_FILE="./.env"
|
||||||
|
|
||||||
@@ -14,12 +20,10 @@ DOWNLOAD_URL="${BASE_URL}/${IMG_ZIP}"
|
|||||||
usage() {
|
usage() {
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
Usage: sudo $0 --device <rpi-4|rpi-zero|rpi-zero-2> \
|
Usage: sudo $0 --device <rpi-4|rpi-zero|rpi-zero-2> \
|
||||||
--name <hostname> \
|
|
||||||
--sdcard </dev/sdX> \
|
--sdcard </dev/sdX> \
|
||||||
[--env-file /path/to/.env]
|
[--env-file /path/to/.env]
|
||||||
|
|
||||||
--device Target board (rpi-4, rpi-zero, rpi-zero-2)
|
--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)
|
--sdcard Device node of the SD card (e.g. /dev/sdb)
|
||||||
--env-file File containing WIFI_SSID and WIFI_PSK (defaults to ./.env)
|
--env-file File containing WIFI_SSID and WIFI_PSK (defaults to ./.env)
|
||||||
EOF
|
EOF
|
||||||
@@ -27,20 +31,19 @@ EOF
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Parse args
|
# Parse args
|
||||||
DEVICE="" NAME="" SDCARD=""
|
DEVICE="" SDCARD=""
|
||||||
while [[ $# -gt 0 ]]; do
|
while [[ $# -gt 0 ]]; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--device) DEVICE="$2"; shift 2;;
|
--device) DEVICE="$2"; shift 2;;
|
||||||
--name) NAME="$2"; shift 2;;
|
--sdcard) SDCARD="$2"; shift 2;;
|
||||||
--sdcard) SDCARD="$2"; shift 2;;
|
|
||||||
--env-file) ENV_FILE="$2"; shift 2;;
|
--env-file) ENV_FILE="$2"; shift 2;;
|
||||||
-h|--help) usage;;
|
-h|--help) usage;;
|
||||||
*) echo "Unknown option: $1"; usage;;
|
*) echo "Unknown option: $1" >&2; usage;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
# Validate
|
# Validate
|
||||||
if [[ -z "$DEVICE" || -z "$NAME" || -z "$SDCARD" ]]; then
|
if [[ -z "$DEVICE" || -z "$SDCARD" ]]; then
|
||||||
usage
|
usage
|
||||||
fi
|
fi
|
||||||
if [[ ! -b "$SDCARD" ]]; then
|
if [[ ! -b "$SDCARD" ]]; then
|
||||||
@@ -53,7 +56,6 @@ if [[ ! -f "$ENV_FILE" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Load Wi-Fi credentials
|
# Load Wi-Fi credentials
|
||||||
# Expect lines: WIFI_SSID=... and WIFI_PSK=...
|
|
||||||
source "$ENV_FILE"
|
source "$ENV_FILE"
|
||||||
if [[ -z "${WIFI_SSID:-}" || -z "${WIFI_PSK:-}" ]]; then
|
if [[ -z "${WIFI_SSID:-}" || -z "${WIFI_PSK:-}" ]]; then
|
||||||
echo "Error: WIFI_SSID and WIFI_PSK must be set in $ENV_FILE" >&2
|
echo "Error: WIFI_SSID and WIFI_PSK must be set in $ENV_FILE" >&2
|
||||||
@@ -67,18 +69,16 @@ if [[ ! -f "$IMG_ZIP" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Flash image
|
# Flash image
|
||||||
echo "Flashing $IMG_ZIP to $SDCARD (this will overwrite everything!)"
|
echo "Flashing $IMG_ZIP to $SDCARD (will overwrite everything!)"
|
||||||
sync
|
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
|
sync
|
||||||
|
|
||||||
# Determine partition suffixes (/dev/sdX1 vs /dev/mmcblk0p1)
|
# Determine partition suffixes (/dev/sdX1 vs /dev/mmcblk0p1)
|
||||||
if [[ "$SDCARD" =~ [0-9]$ ]]; then
|
if [[ "$SDCARD" =~ [0-9]$ ]]; then
|
||||||
PART1="${SDCARD}p1"
|
PART1="${SDCARD}p1"; PART2="${SDCARD}p2"
|
||||||
PART2="${SDCARD}p2"
|
|
||||||
else
|
else
|
||||||
PART1="${SDCARD}1"
|
PART1="${SDCARD}1"; PART2="${SDCARD}2"
|
||||||
PART2="${SDCARD}2"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Mount partitions
|
# Mount partitions
|
||||||
@@ -87,7 +87,7 @@ ROOT_MNT=$(mktemp -d)
|
|||||||
mount "$PART1" "$BOOT_MNT"
|
mount "$PART1" "$BOOT_MNT"
|
||||||
mount "$PART2" "$ROOT_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" <<EOF
|
cat > "$BOOT_MNT/wpa_supplicant.conf" <<EOF
|
||||||
ctrl_interface=/var/run/wpa_supplicant
|
ctrl_interface=/var/run/wpa_supplicant
|
||||||
ctrl_interface_group=staff
|
ctrl_interface_group=staff
|
||||||
@@ -103,13 +103,22 @@ network={
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Set hostname
|
# If a Zero device, enable Hifiberry DAC+ and disable onboard audio
|
||||||
echo "$NAME" > "$ROOT_MNT/etc/hostname"
|
if [[ "$DEVICE" == "rpi-zero" || "$DEVICE" == "rpi-zero-2" ]]; then
|
||||||
# Update /etc/hosts
|
cat >> "$BOOT_MNT/config.txt" <<EOF
|
||||||
sed -i "s/127\.0\.1\.1.*/127.0.1.1\t$NAME/" "$ROOT_MNT/etc/hosts"
|
|
||||||
|
|
||||||
# Clean up
|
# Hifiberry DAC+ overlay for Zero models
|
||||||
|
dtoverlay=hifiberry-dacplus-std
|
||||||
|
# turn off onboard audio
|
||||||
|
dtparam=audio=off
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
umount "$BOOT_MNT" "$ROOT_MNT"
|
umount "$BOOT_MNT" "$ROOT_MNT"
|
||||||
rmdir "$BOOT_MNT" "$ROOT_MNT"
|
rmdir "$BOOT_MNT" "$ROOT_MNT"
|
||||||
|
|
||||||
echo "Done! SD card is ready with PiCorePlayer on $DEVICE, hostname '$NAME', hidden Wi-Fi '$WIFI_SSID'."
|
echo "Done! SD card is ready with PiCorePlayer ${PCP_VERSION} on $DEVICE,"
|
||||||
|
echo "hidden Wi-Fi '$WIFI_SSID'."
|
||||||
|
echo "Insert the SD card into the Pi and power it on."
|
||||||
|
echo "You can now connect to the PiCorePlayer web interface at http://pcp.local"
|
||||||
|
|||||||
Reference in New Issue
Block a user