mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-15 17:12:59 -04:00
auto mediamtx installation
This commit is contained in:
@@ -34,7 +34,7 @@ npm install
|
|||||||
npm run start
|
npm run start
|
||||||
```
|
```
|
||||||
|
|
||||||
Deploy a rover by copying the repo + `dist/roverd` to the Pi and running the helper:
|
Deploy a rover by copying the repo + `dist/roverd` to the Pi and running the helper (it will also fetch mediaMTX when `--mediamtx` is set):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/MultiRoombaRover
|
cd ~/MultiRoombaRover
|
||||||
@@ -43,3 +43,4 @@ sudo ./pi/install_roverd.sh --mediamtx
|
|||||||
|
|
||||||
Then point each rover's `/etc/roverd.yaml` at `ws://<server>:8080/rover`, enable the sensor stream from the UI, and drive with WASD.
|
Then point each rover's `/etc/roverd.yaml` at `ws://<server>:8080/rover`, enable the sensor stream from the UI, and drive with WASD.
|
||||||
Use the “Restart Camera” button if you enable media management so roverd can bounce the mediamtx service remotely.
|
Use the “Restart Camera” button if you enable media management so roverd can bounce the mediamtx service remotely.
|
||||||
|
Heads-up: the BRC pulser currently hits `/sys/class/gpio/export`, so the service needs root privileges on Raspberry Pi OS. Until it’s switched to `libgpiod`, set `brc.gpioPin: -1` if you prefer to run unprivileged (the Create will then nap unless something else keeps it awake).
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ What the script does:
|
|||||||
- creates the `roverd` (and optionally `mediamtx`) service users if missing and installs `/usr/local/bin/roverd`
|
- creates the `roverd` (and optionally `mediamtx`) service users if missing and installs `/usr/local/bin/roverd`
|
||||||
- copies `pi/roverd/roverd.sample.yaml` to `/etc/roverd.yaml` if the file is absent (existing configs are left untouched)
|
- copies `pi/roverd/roverd.sample.yaml` to `/etc/roverd.yaml` if the file is absent (existing configs are left untouched)
|
||||||
- installs/enables the `roverd.service` systemd unit, restarting it automatically when a config already exists
|
- installs/enables the `roverd.service` systemd unit, restarting it automatically when a config already exists
|
||||||
- when `--mediamtx` is passed, installs the sample mediaMTX config + unit, enables the service, and restarts it
|
- when `--mediamtx` is passed, downloads the requested mediaMTX release for the Pi’s architecture, installs it to `/usr/local/bin/mediamtx`, drops the sample config + unit, enables the service, and restarts it
|
||||||
|
|
||||||
Flags:
|
Flags:
|
||||||
|
|
||||||
@@ -40,7 +40,8 @@ Flags:
|
|||||||
|------|---------|
|
|------|---------|
|
||||||
| `-b PATH` | use a different roverd binary (defaults to `dist/roverd`) |
|
| `-b PATH` | use a different roverd binary (defaults to `dist/roverd`) |
|
||||||
| `-c PATH` | seed `/etc/roverd.yaml` from another template |
|
| `-c PATH` | seed `/etc/roverd.yaml` from another template |
|
||||||
| `--mediamtx` | install the provided mediaMTX config + unit alongside roverd |
|
| `--mediamtx` | download/install mediaMTX plus the provided config + unit |
|
||||||
|
| `--mediamtx-version X.Y.Z` | override the mediaMTX release tag (default `1.8.6`) |
|
||||||
|
|
||||||
If the script installs the sample config, it will remind you to edit `/etc/roverd.yaml` before manually restarting the service: set `name`, `serverUrl`, serial device, BRC pin, battery thresholds, and the WHEP URL that the central server should expose.
|
If the script installs the sample config, it will remind you to edit `/etc/roverd.yaml` before manually restarting the service: set `name`, `serverUrl`, serial device, BRC pin, battery thresholds, and the WHEP URL that the central server should expose.
|
||||||
|
|
||||||
@@ -62,6 +63,7 @@ If the script installs the sample config, it will remind you to edit `/etc/rover
|
|||||||
```
|
```
|
||||||
|
|
||||||
`roverd` requires access to `/dev/ttyAMA0` and `/sys/class/gpio`; keeping it under its own user ensures the rest of the system stays isolated.
|
`roverd` requires access to `/dev/ttyAMA0` and `/sys/class/gpio`; keeping it under its own user ensures the rest of the system stays isolated.
|
||||||
|
**BRC note:** writing to `/sys/class/gpio/export` typically requires root on Raspberry Pi OS. Until the pulser moves to `libgpiod`, either run the service as root or set `brc.gpioPin: -1` (rover may eventually sleep).
|
||||||
If you set `media.manage: true` in `/etc/roverd.yaml`, make sure the `roverd` service account can invoke `systemctl <action> <media.service>` (either run the unit as root or grant sudo privileges for that command).
|
If you set `media.manage: true` in `/etc/roverd.yaml`, make sure the `roverd` service account can invoke `systemctl <action> <media.service>` (either run the unit as root or grant sudo privileges for that command).
|
||||||
|
|
||||||
## Configuring mediaMTX
|
## Configuring mediaMTX
|
||||||
|
|||||||
+61
-3
@@ -6,7 +6,8 @@ set -euo pipefail
|
|||||||
|
|
||||||
BINARY_SRC="dist/roverd"
|
BINARY_SRC="dist/roverd"
|
||||||
CONFIG_SRC="pi/roverd/roverd.sample.yaml"
|
CONFIG_SRC="pi/roverd/roverd.sample.yaml"
|
||||||
INSTALL_MEDIAMTX=0
|
INSTALL_MEDIAMTX=1
|
||||||
|
MEDIAMTX_VERSION="1.8.6"
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
cat <<'USAGE'
|
cat <<'USAGE'
|
||||||
@@ -16,7 +17,8 @@ Options:
|
|||||||
-b, --binary <path> Path to the roverd binary (default: dist/roverd)
|
-b, --binary <path> Path to the roverd binary (default: dist/roverd)
|
||||||
-c, --config <path> Source config to install if /etc/roverd.yaml is missing
|
-c, --config <path> Source config to install if /etc/roverd.yaml is missing
|
||||||
(default: pi/roverd/roverd.sample.yaml)
|
(default: pi/roverd/roverd.sample.yaml)
|
||||||
--mediamtx Also install mediaMTX unit/config (requires pi/mediamtx files)
|
--mediamtx Install/download mediaMTX (binary, config, systemd unit)
|
||||||
|
--mediamtx-version <v> Override mediaMTX release tag (default: 1.8.6)
|
||||||
-h, --help Show this help text
|
-h, --help Show this help text
|
||||||
|
|
||||||
The script must run from the repository root and as root (sudo). It will:
|
The script must run from the repository root and as root (sudo). It will:
|
||||||
@@ -41,6 +43,10 @@ while [[ $# -gt 0 ]]; do
|
|||||||
INSTALL_MEDIAMTX=1
|
INSTALL_MEDIAMTX=1
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
--mediamtx-version)
|
||||||
|
MEDIAMTX_VERSION="${2:-}"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
-h|--help)
|
-h|--help)
|
||||||
usage
|
usage
|
||||||
exit 0
|
exit 0
|
||||||
@@ -70,9 +76,15 @@ fi
|
|||||||
|
|
||||||
ensure_user() {
|
ensure_user() {
|
||||||
local user="$1"
|
local user="$1"
|
||||||
local groups="$2"
|
local groups="${2:-}"
|
||||||
if ! id -u "$user" >/dev/null 2>&1; then
|
if ! id -u "$user" >/dev/null 2>&1; then
|
||||||
|
if [[ -n "$groups" ]]; then
|
||||||
useradd -r -s /usr/sbin/nologin -G "$groups" "$user"
|
useradd -r -s /usr/sbin/nologin -G "$groups" "$user"
|
||||||
|
else
|
||||||
|
useradd -r -s /usr/sbin/nologin "$user"
|
||||||
|
fi
|
||||||
|
elif [[ -n "$groups" ]]; then
|
||||||
|
usermod -a -G "$groups" "$user"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,6 +92,51 @@ log() {
|
|||||||
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] $*"
|
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] $*"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
detect_mediamtx_asset() {
|
||||||
|
local arch
|
||||||
|
arch="$(uname -m)"
|
||||||
|
case "$arch" in
|
||||||
|
armv7l|armv6l)
|
||||||
|
echo "mediamtx_v${MEDIAMTX_VERSION}_linux_armv7.tar.gz"
|
||||||
|
;;
|
||||||
|
aarch64|arm64)
|
||||||
|
echo "mediamtx_v${MEDIAMTX_VERSION}_linux_arm64.tar.gz"
|
||||||
|
;;
|
||||||
|
x86_64|amd64)
|
||||||
|
echo "mediamtx_v${MEDIAMTX_VERSION}_linux_amd64.tar.gz"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo ""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
install_mediamtx_binary() {
|
||||||
|
if ! command -v curl >/dev/null 2>&1; then
|
||||||
|
echo "curl is required to download mediaMTX" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
local asset
|
||||||
|
asset="$(detect_mediamtx_asset)"
|
||||||
|
if [[ -z "$asset" ]]; then
|
||||||
|
echo "Unsupported architecture $(uname -m) for mediaMTX download" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
local url="https://github.com/bluenviron/mediamtx/releases/download/v${MEDIAMTX_VERSION}/${asset}"
|
||||||
|
local tmpdir
|
||||||
|
tmpdir="$(mktemp -d)"
|
||||||
|
log "Downloading mediaMTX ${MEDIAMTX_VERSION} (${asset})"
|
||||||
|
if ! curl -fsSL "$url" -o "${tmpdir}/${asset}"; then
|
||||||
|
echo "Failed to download mediaMTX from ${url}" >&2
|
||||||
|
rm -rf "$tmpdir"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
tar -xzf "${tmpdir}/${asset}" -C "$tmpdir" mediamtx
|
||||||
|
install -o mediamtx -g mediamtx -m 0755 "${tmpdir}/mediamtx" /usr/local/bin/mediamtx
|
||||||
|
log "Installed /usr/local/bin/mediamtx"
|
||||||
|
rm -rf "$tmpdir"
|
||||||
|
}
|
||||||
|
|
||||||
ensure_user roverd "dialout,gpio"
|
ensure_user roverd "dialout,gpio"
|
||||||
install -o roverd -g roverd -m 0755 "$BINARY_SRC" /usr/local/bin/roverd
|
install -o roverd -g roverd -m 0755 "$BINARY_SRC" /usr/local/bin/roverd
|
||||||
log "Installed roverd binary"
|
log "Installed roverd binary"
|
||||||
@@ -117,6 +174,7 @@ if [[ $INSTALL_MEDIAMTX -eq 1 ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
ensure_user mediamtx ""
|
ensure_user mediamtx ""
|
||||||
|
install_mediamtx_binary
|
||||||
install -d -o mediamtx -g mediamtx /etc/mediamtx
|
install -d -o mediamtx -g mediamtx /etc/mediamtx
|
||||||
install -o mediamtx -g mediamtx -m 0644 pi/mediamtx/mediamtx.yml /etc/mediamtx/mediamtx.yml
|
install -o mediamtx -g mediamtx -m 0644 pi/mediamtx/mediamtx.yml /etc/mediamtx/mediamtx.yml
|
||||||
install -m 0644 pi/systemd/mediamtx.service /etc/systemd/system/mediamtx.service
|
install -m 0644 pi/systemd/mediamtx.service /etc/systemd/system/mediamtx.service
|
||||||
|
|||||||
Reference in New Issue
Block a user