commit 12c0fef4632d9d5ad7d4952f1b9bc2ea4c7667e8 Author: Darsey Litzenberger Date: Sat Mar 21 00:22:15 2026 -0600 Initial import into git diff --git a/avahi-browse b/avahi-browse new file mode 100755 index 0000000..ed4fde0 --- /dev/null +++ b/avahi-browse @@ -0,0 +1,3 @@ +#!/bin/sh +set -eu +exec docker compose exec reflector avahi-browse "$@" diff --git a/avahi-resolve b/avahi-resolve new file mode 100755 index 0000000..ed4fb24 --- /dev/null +++ b/avahi-resolve @@ -0,0 +1,3 @@ +#!/bin/sh +set -eu +exec docker compose exec reflector avahi-resolve "$@" diff --git a/docker-compose-example.yml b/docker-compose-example.yml new file mode 100644 index 0000000..69f6d23 --- /dev/null +++ b/docker-compose-example.yml @@ -0,0 +1,18 @@ +services: + reflector: + build: + context: ./docker + container_name: "avahi-reflector" + pull_policy: build + restart: unless-stopped + network_mode: host + environment: + - "AVAHI_INTERFACES=dummy0" + # Ref: https://docs.docker.com/reference/dockerfile/#healthcheck + healthcheck: + test: ["CMD", "avahi-browse", "-a", "-c"] + interval: 1m30s + timeout: 30s + retries: 3 + start_period: 5s + start_interval: 5s diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..37fe68c --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,20 @@ +FROM alpine:latest +RUN apk --no-cache add \ + avahi \ + avahi-tools \ + dbus \ + envsubst \ + s6-overlay \ + socat + +COPY ./services.d/ /etc/services.d/ +COPY wait-for-dbus /usr/local/bin/ +COPY avahi-daemon.conf.template /etc/avahi/ +COPY entrypoint-dlitz.sh / + +ENTRYPOINT ["/entrypoint-dlitz.sh"] +ENV AVAHI_INTERFACES=dummy0 + +#CMD ["/usr/sbin/avahi-daemon"] +CMD ["/bin/sh", "-c", "wait-for-dbus ; exec /usr/sbin/avahi-daemon"] + diff --git a/docker/avahi-daemon.conf.template b/docker/avahi-daemon.conf.template new file mode 100644 index 0000000..227b497 --- /dev/null +++ b/docker/avahi-daemon.conf.template @@ -0,0 +1,21 @@ +# vim:set backupcopy=yes: + +[server] +use-ipv4=yes +use-ipv6=yes +ratelimit-interval-usec=1000000 +ratelimit-burst=1000 +enable-dbus=yes + +#allow-interfaces=br0,ve-wuuf-int +#allow-interfaces=br0,vlan-iot,ve-wuuf +#allow-interfaces=br0,ve-wuuf +allow-interfaces=${AVAHI_INTERFACES} + +[publish] +disable-publishing=yes + +[reflector] +enable-reflector=yes +#reflect-ipv=no +#reflect-filters= diff --git a/docker/entrypoint-dlitz.sh b/docker/entrypoint-dlitz.sh new file mode 100755 index 0000000..f2c1f6e --- /dev/null +++ b/docker/entrypoint-dlitz.sh @@ -0,0 +1,4 @@ +#!/bin/sh +set -eu +envsubst < /etc/avahi/avahi-daemon.conf.template > /etc/avahi/avahi-daemon.conf +exec /init "$@" diff --git a/docker/services.d/dbus/run b/docker/services.d/dbus/run new file mode 100755 index 0000000..f56d63f --- /dev/null +++ b/docker/services.d/dbus/run @@ -0,0 +1,5 @@ +#!/bin/sh +set -eu +[ -f ./setup ] && source ./setup +#exec /usr/bin/dbus-daemon --system --nofork --nosyslog +exec /usr/bin/dbus-daemon --system --nofork diff --git a/docker/services.d/dbus/setup b/docker/services.d/dbus/setup new file mode 100755 index 0000000..5dd4fb6 --- /dev/null +++ b/docker/services.d/dbus/setup @@ -0,0 +1,11 @@ +#!/bin/sh +set -eu +mkdir -p /run/dbus + +# Clean up stale pid file, if present. +pidfile=/run/dbus/dbus.pid +pid=$(cat "$pidfile" || true) +if [ -n "$pid" ] && ! [ -d "/proc/$pid" ]; then + echo >&2 "Removing stale PID file $pidfile" + rm -f "$pidfile" +fi diff --git a/docker/wait-for-dbus b/docker/wait-for-dbus new file mode 100755 index 0000000..60f0da0 --- /dev/null +++ b/docker/wait-for-dbus @@ -0,0 +1,14 @@ +#!/bin/sh +# dlitz 2025 +set -eu +prog="$(basename "$0")" +socket=/run/dbus/system_bus_socket +for i in 1 2 3 4 5 6 7 8 9 10; do + if test -e "$socket" && socat -u stdio unix-connect:"$socket" /dev/null; then + echo >&2 "$prog: dbus socket connection successful: $socket" + exit 0 + fi + echo >&2 "$prog: Could not connect to dbus socket $socket. Sleeping..." + sleep 1 +done +echo >&2 "$prog: dbus socket connection failed: continuing anyway: $socket"