Add files via upload
This commit is contained in:
@@ -1,25 +1,55 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
PORT=6053
|
PORT=6053
|
||||||
NAME="%h (Linux Voice Assistant)"
|
NAME="%h (Linux Voice Assistant)"
|
||||||
|
SERVICE=/etc/avahi/services/esphome-lva.service
|
||||||
|
|
||||||
mapfile -t IFACES < <(ip -o link show up | awk -F': ' '{print $2}' | grep -v '^lo$')
|
# Wait up to ~40s for any global IPv4 (cosmetic: to include ipv4_* TXT)
|
||||||
|
deadline=$((SECONDS+40))
|
||||||
|
while [ $SECONDS -lt $deadline ]; do
|
||||||
|
ip -o -4 addr show up scope global | grep -q . && break || true
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
# Collect all UP, non-loopback ifaces
|
||||||
|
mapfile -t IFACES < <(ip -o link show up | awk -F': ' '{print $2}' | grep -v '^lo$' | sort -u)
|
||||||
|
|
||||||
TXT=" <txt-record>platform=linux</txt-record>
|
TXT=" <txt-record>platform=linux</txt-record>
|
||||||
"
|
"
|
||||||
LIST=""
|
LIST=""
|
||||||
for i in "${IFACES[@]}"; do
|
for i in "${IFACES[@]}"; do
|
||||||
|
[ -e "/sys/class/net/$i/address" ] || continue
|
||||||
mac=$(cat "/sys/class/net/$i/address")
|
mac=$(cat "/sys/class/net/$i/address")
|
||||||
if [ -d "/sys/class/net/$i/wireless" ] || [[ $i == wl* ]]; then net=wifi; else net=ethernet; fi
|
mac_nc=${mac//:/} # no colons (ESPHome style)
|
||||||
TXT+=" <txt-record>mac_${i}=${mac}</txt-record>
|
if [ -d "/sys/class/net/$i/wireless" ] || [[ "$i" == wl* ]]; then net=wifi; else net=ethernet; fi
|
||||||
"
|
|
||||||
TXT+=" <txt-record>net_${i}=${net}</txt-record>
|
TXT+=" <txt-record>net_${i}=${net}</txt-record>
|
||||||
"
|
"
|
||||||
|
TXT+=" <txt-record>mac_${i}=${mac_nc}</txt-record>
|
||||||
|
"
|
||||||
|
|
||||||
|
# IPv4 (global)
|
||||||
|
while read -r a; do
|
||||||
|
[ -n "$a" ] || continue
|
||||||
|
a=${a%%/*}
|
||||||
|
TXT+=" <txt-record>ipv4_${i}=${a}</txt-record>
|
||||||
|
"
|
||||||
|
done < <(ip -o -4 addr show dev "$i" scope global | awk '{print $4}' || true)
|
||||||
|
|
||||||
|
# IPv6 (global, not link-local)
|
||||||
|
while read -r a6; do
|
||||||
|
[ -n "$a6" ] || continue
|
||||||
|
a6=${a6%%/*}
|
||||||
|
TXT+=" <txt-record>ipv6_${i}=${a6}</txt-record>
|
||||||
|
"
|
||||||
|
done < <(ip -o -6 addr show dev "$i" scope global | awk '{print $4}' || true)
|
||||||
|
|
||||||
LIST+="${i},"
|
LIST+="${i},"
|
||||||
done
|
done
|
||||||
LIST=${LIST%,}
|
LIST=${LIST%,}
|
||||||
|
|
||||||
cat >/etc/avahi/services/esphome-lva.service <<XML
|
cat >"$SERVICE" <<XML
|
||||||
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
|
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
|
||||||
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
|
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
|
||||||
<service-group>
|
<service-group>
|
||||||
@@ -31,3 +61,6 @@ cat >/etc/avahi/services/esphome-lva.service <<XML
|
|||||||
${TXT} </service>
|
${TXT} </service>
|
||||||
</service-group>
|
</service-group>
|
||||||
XML
|
XML
|
||||||
|
|
||||||
|
# Avahi will (re)publish on all active ifaces automatically
|
||||||
|
systemctl restart avahi-daemon || true
|
||||||
|
|||||||
Reference in New Issue
Block a user