From 4326b86f1562fab38f5927f097208b97880678df Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Tue, 17 Jan 2023 11:34:01 -0300 Subject: [PATCH 01/16] Refator s6 scripts to the new format --- .../s6-rc.d/frigate/dependencies.d/go2rtc | 0 .../etc/s6-overlay/s6-rc.d/frigate/finish | 28 +++++++++++++++++++ .../s6-rc.d}/frigate/log/run | 0 .../s6-rc.d}/frigate/run | 0 .../etc/s6-overlay/s6-rc.d/frigate/type | 1 + .../s6-rc.d/go2rtc/dependencies.d/init-logs | 0 .../etc/s6-overlay/s6-rc.d/go2rtc/finish | 28 +++++++++++++++++++ .../s6-rc.d}/go2rtc/log/run | 0 .../s6-rc.d}/go2rtc/run | 0 .../rootfs/etc/s6-overlay/s6-rc.d/go2rtc/type | 1 + .../s6-rc.d/init-logs/run} | 0 .../etc/s6-overlay/s6-rc.d/init-logs/type | 1 + .../etc/s6-overlay/s6-rc.d/init-logs/up | 1 + .../s6-rc.d/nginx/dependencies.d/frigate | 0 .../etc/s6-overlay/s6-rc.d/nginx/finish | 28 +++++++++++++++++++ .../s6-rc.d}/nginx/log/run | 0 .../s6-rc.d}/nginx/run | 0 .../rootfs/etc/s6-overlay/s6-rc.d/nginx/type | 1 + docker/rootfs/etc/services.d/frigate/finish | 16 ----------- docker/rootfs/etc/services.d/go2rtc/finish | 8 ------ docker/rootfs/etc/services.d/nginx/finish | 8 ------ 21 files changed, 89 insertions(+), 32 deletions(-) create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/dependencies.d/go2rtc create mode 100755 docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish rename docker/rootfs/etc/{services.d => s6-overlay/s6-rc.d}/frigate/log/run (100%) rename docker/rootfs/etc/{services.d => s6-overlay/s6-rc.d}/frigate/run (100%) create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/type create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/dependencies.d/init-logs create mode 100755 docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish rename docker/rootfs/etc/{services.d => s6-overlay/s6-rc.d}/go2rtc/log/run (100%) rename docker/rootfs/etc/{services.d => s6-overlay/s6-rc.d}/go2rtc/run (100%) create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/type rename docker/rootfs/etc/{cont-init.d/prepare-logs.sh => s6-overlay/s6-rc.d/init-logs/run} (100%) create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/type create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/up create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/dependencies.d/frigate create mode 100755 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/finish rename docker/rootfs/etc/{services.d => s6-overlay/s6-rc.d}/nginx/log/run (100%) rename docker/rootfs/etc/{services.d => s6-overlay/s6-rc.d}/nginx/run (100%) create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/type delete mode 100755 docker/rootfs/etc/services.d/frigate/finish delete mode 100755 docker/rootfs/etc/services.d/go2rtc/finish delete mode 100755 docker/rootfs/etc/services.d/nginx/finish diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/dependencies.d/go2rtc b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/dependencies.d/go2rtc new file mode 100644 index 000000000..e69de29bb diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish new file mode 100755 index 000000000..14f63ae83 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish @@ -0,0 +1,28 @@ +#!/command/with-contenv bash +# shellcheck shell=bash +# Take down the S6 supervision tree when the service exits + +set -o errexit -o nounset -o pipefail + +declare exit_code_container +exit_code_container=$(cat /run/s6-linux-init-container-results/exitcode) +readonly exit_code_container +readonly exit_code_service="${1}" +readonly exit_code_signal="${2}" +readonly service="Frigate" + +echo "Service ${service} exited with code ${exit_code_service} (by signal ${exit_code_signal})" >&2 + +if [[ "${exit_code_service}" -eq 256 ]]; then + if [[ "${exit_code_container}" -eq 0 ]]; then + echo $((128 + exit_code_signal)) > /run/s6-linux-init-container-results/exitcode + fi + if [[ "${exit_code_signal}" -eq 15 ]]; then + exec /run/s6/basedir/bin/halt + fi +elif [[ "${exit_code_service}" -ne 0 ]]; then + if [[ "${exit_code_container}" -eq 0 ]]; then + echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode + fi + exec /run/s6/basedir/bin/halt +fi diff --git a/docker/rootfs/etc/services.d/frigate/log/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/log/run similarity index 100% rename from docker/rootfs/etc/services.d/frigate/log/run rename to docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/log/run diff --git a/docker/rootfs/etc/services.d/frigate/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/run similarity index 100% rename from docker/rootfs/etc/services.d/frigate/run rename to docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/run diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/type new file mode 100644 index 000000000..5883cff0c --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/type @@ -0,0 +1 @@ +longrun diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/dependencies.d/init-logs b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/dependencies.d/init-logs new file mode 100644 index 000000000..e69de29bb diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish new file mode 100755 index 000000000..2e95e74fc --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish @@ -0,0 +1,28 @@ +#!/command/with-contenv bash +# shellcheck shell=bash +# Take down the S6 supervision tree when the service exits + +set -o errexit -o nounset -o pipefail + +declare exit_code_container +exit_code_container=$(cat /run/s6-linux-init-container-results/exitcode) +readonly exit_code_container +readonly exit_code_service="${1}" +readonly exit_code_signal="${2}" +readonly service="go2rtc" + +echo "Service ${service} exited with code ${exit_code_service} (by signal ${exit_code_signal})" >&2 + +if [[ "${exit_code_service}" -eq 256 ]]; then + if [[ "${exit_code_container}" -eq 0 ]]; then + echo $((128 + exit_code_signal)) > /run/s6-linux-init-container-results/exitcode + fi + if [[ "${exit_code_signal}" -eq 15 ]]; then + exec /run/s6/basedir/bin/halt + fi +elif [[ "${exit_code_service}" -ne 0 ]]; then + if [[ "${exit_code_container}" -eq 0 ]]; then + echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode + fi + exec /run/s6/basedir/bin/halt +fi diff --git a/docker/rootfs/etc/services.d/go2rtc/log/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/log/run similarity index 100% rename from docker/rootfs/etc/services.d/go2rtc/log/run rename to docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/log/run diff --git a/docker/rootfs/etc/services.d/go2rtc/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run similarity index 100% rename from docker/rootfs/etc/services.d/go2rtc/run rename to docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/type new file mode 100644 index 000000000..5883cff0c --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/type @@ -0,0 +1 @@ +longrun diff --git a/docker/rootfs/etc/cont-init.d/prepare-logs.sh b/docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/run similarity index 100% rename from docker/rootfs/etc/cont-init.d/prepare-logs.sh rename to docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/run diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/type new file mode 100644 index 000000000..bdd22a185 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/type @@ -0,0 +1 @@ +oneshot diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/up b/docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/up new file mode 100644 index 000000000..f0a9d251f --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/up @@ -0,0 +1 @@ +/etc/s6-overlay/s6-rc.d/init-logs/run diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/dependencies.d/frigate b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/dependencies.d/frigate new file mode 100644 index 000000000..e69de29bb diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/finish b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/finish new file mode 100755 index 000000000..285928af0 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/finish @@ -0,0 +1,28 @@ +#!/command/with-contenv bash +# shellcheck shell=bash +# Take down the S6 supervision tree when the service exits + +set -o errexit -o nounset -o pipefail + +declare exit_code_container +exit_code_container=$(cat /run/s6-linux-init-container-results/exitcode) +readonly exit_code_container +readonly exit_code_service="${1}" +readonly exit_code_signal="${2}" +readonly service="NGINX" + +echo "Service ${service} exited with code ${exit_code_service} (by signal ${exit_code_signal})" >&2 + +if [[ "${exit_code_service}" -eq 256 ]]; then + if [[ "${exit_code_container}" -eq 0 ]]; then + echo $((128 + exit_code_signal)) > /run/s6-linux-init-container-results/exitcode + fi + if [[ "${exit_code_signal}" -eq 15 ]]; then + exec /run/s6/basedir/bin/halt + fi +elif [[ "${exit_code_service}" -ne 0 ]]; then + if [[ "${exit_code_container}" -eq 0 ]]; then + echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode + fi + exec /run/s6/basedir/bin/halt +fi diff --git a/docker/rootfs/etc/services.d/nginx/log/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/log/run similarity index 100% rename from docker/rootfs/etc/services.d/nginx/log/run rename to docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/log/run diff --git a/docker/rootfs/etc/services.d/nginx/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/run similarity index 100% rename from docker/rootfs/etc/services.d/nginx/run rename to docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/run diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/type new file mode 100644 index 000000000..5883cff0c --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/type @@ -0,0 +1 @@ +longrun diff --git a/docker/rootfs/etc/services.d/frigate/finish b/docker/rootfs/etc/services.d/frigate/finish deleted file mode 100755 index e219ed8b4..000000000 --- a/docker/rootfs/etc/services.d/frigate/finish +++ /dev/null @@ -1,16 +0,0 @@ -#!/command/with-contenv bash -# shellcheck shell=bash -# Take down the S6 supervision tree when the service exits - -set -o errexit -o nounset -o pipefail - -# Prepare exit code -if [[ "${1}" -eq 256 ]]; then - exit_code="$((128 + ${2}))" -else - exit_code="${1}" -fi - -# Make the container exit with the same exit code as the service -echo "${exit_code}" > /run/s6-linux-init-container-results/exitcode -exec /run/s6/basedir/bin/halt diff --git a/docker/rootfs/etc/services.d/go2rtc/finish b/docker/rootfs/etc/services.d/go2rtc/finish deleted file mode 100755 index c1b77fccc..000000000 --- a/docker/rootfs/etc/services.d/go2rtc/finish +++ /dev/null @@ -1,8 +0,0 @@ -#!/command/with-contenv bash -# shellcheck shell=bash -# Take down the S6 supervision tree when the service fails, or restart it -# otherwise - -if [[ "${1}" -ne 0 && "${1}" -ne 256 ]]; then - exec /run/s6/basedir/bin/halt -fi diff --git a/docker/rootfs/etc/services.d/nginx/finish b/docker/rootfs/etc/services.d/nginx/finish deleted file mode 100755 index c1b77fccc..000000000 --- a/docker/rootfs/etc/services.d/nginx/finish +++ /dev/null @@ -1,8 +0,0 @@ -#!/command/with-contenv bash -# shellcheck shell=bash -# Take down the S6 supervision tree when the service fails, or restart it -# otherwise - -if [[ "${1}" -ne 0 && "${1}" -ne 256 ]]; then - exec /run/s6/basedir/bin/halt -fi From 9223069e7972d1b43d6771ed564cd02e20766a17 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Tue, 17 Jan 2023 11:43:28 -0300 Subject: [PATCH 02/16] Remove unneeded workaround --- Dockerfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 17bf01a19..f39aa5862 100644 --- a/Dockerfile +++ b/Dockerfile @@ -205,9 +205,6 @@ ENV S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 ENV S6_SERVICES_GRACETIME=30000 # Configure logging to prepend timestamps, log to stdout, keep 0 archives and rotate on 10MB ENV S6_LOGGING_SCRIPT="T 1 n0 s10000000 T" -# TODO: remove after a new version of s6-overlay is released. See: -# https://github.com/just-containers/s6-overlay/issues/460#issuecomment-1327127006 -ENV S6_SERVICES_READYTIME=50 ENTRYPOINT ["/init"] CMD [] From 4209618420aa617ae05e06f2adbd1926c673c806 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Tue, 17 Jan 2023 12:00:14 -0300 Subject: [PATCH 03/16] Migrate logging to new s6 format --- docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/consumer-for | 1 + .../init-logs => frigate-log/dependencies.d/log-prepare} | 0 docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/pipeline-name | 1 + .../etc/s6-overlay/s6-rc.d/{frigate/log => frigate-log}/run | 0 docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/type | 1 + docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/producer-for | 1 + docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/consumer-for | 1 + .../etc/s6-overlay/s6-rc.d/go2rtc-log/dependencies.d/log-prepare | 0 docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/pipeline-name | 1 + .../rootfs/etc/s6-overlay/s6-rc.d/{go2rtc/log => go2rtc-log}/run | 0 docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/type | 1 + docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/dependencies.d/base | 0 docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/producer-for | 1 + .../etc/s6-overlay/s6-rc.d/log-prepare/dependencies.d/base | 0 .../rootfs/etc/s6-overlay/s6-rc.d/{init-logs => log-prepare}/run | 0 .../etc/s6-overlay/s6-rc.d/{init-logs => log-prepare}/type | 0 .../rootfs/etc/s6-overlay/s6-rc.d/{init-logs => log-prepare}/up | 0 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/consumer-for | 1 + .../etc/s6-overlay/s6-rc.d/nginx-log/dependencies.d/log-prepare | 0 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/pipeline-name | 1 + .../rootfs/etc/s6-overlay/s6-rc.d/{nginx/log => nginx-log}/run | 0 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/type | 1 + docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/producer-for | 1 + .../etc/s6-overlay/s6-rc.d/user/contents.d/frigate-pipeline | 0 .../etc/s6-overlay/s6-rc.d/user/contents.d/go2rtc-pipeline | 0 .../rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/nginx-pipeline | 0 26 files changed, 12 insertions(+) create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/consumer-for rename docker/rootfs/etc/s6-overlay/s6-rc.d/{go2rtc/dependencies.d/init-logs => frigate-log/dependencies.d/log-prepare} (100%) create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/pipeline-name rename docker/rootfs/etc/s6-overlay/s6-rc.d/{frigate/log => frigate-log}/run (100%) create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/type create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/producer-for create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/consumer-for create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/dependencies.d/log-prepare create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/pipeline-name rename docker/rootfs/etc/s6-overlay/s6-rc.d/{go2rtc/log => go2rtc-log}/run (100%) create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/type create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/dependencies.d/base create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/producer-for create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/dependencies.d/base rename docker/rootfs/etc/s6-overlay/s6-rc.d/{init-logs => log-prepare}/run (100%) rename docker/rootfs/etc/s6-overlay/s6-rc.d/{init-logs => log-prepare}/type (100%) rename docker/rootfs/etc/s6-overlay/s6-rc.d/{init-logs => log-prepare}/up (100%) create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/consumer-for create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/dependencies.d/log-prepare create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/pipeline-name rename docker/rootfs/etc/s6-overlay/s6-rc.d/{nginx/log => nginx-log}/run (100%) create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/type create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/producer-for create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/frigate-pipeline create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/go2rtc-pipeline create mode 100644 docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/nginx-pipeline diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/consumer-for b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/consumer-for new file mode 100644 index 000000000..5e9301778 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/consumer-for @@ -0,0 +1 @@ +frigate diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/dependencies.d/init-logs b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/dependencies.d/log-prepare similarity index 100% rename from docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/dependencies.d/init-logs rename to docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/dependencies.d/log-prepare diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/pipeline-name b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/pipeline-name new file mode 100644 index 000000000..01f465e4e --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/pipeline-name @@ -0,0 +1 @@ +frigate-pipeline diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/log/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/run similarity index 100% rename from docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/log/run rename to docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/run diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/type new file mode 100644 index 000000000..5883cff0c --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-log/type @@ -0,0 +1 @@ +longrun diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/producer-for b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/producer-for new file mode 100644 index 000000000..65f1316a4 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/producer-for @@ -0,0 +1 @@ +frigate-log diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/consumer-for b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/consumer-for new file mode 100644 index 000000000..02b16a879 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/consumer-for @@ -0,0 +1 @@ +go2rtc diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/dependencies.d/log-prepare b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/dependencies.d/log-prepare new file mode 100644 index 000000000..e69de29bb diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/pipeline-name b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/pipeline-name new file mode 100644 index 000000000..1fe545297 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/pipeline-name @@ -0,0 +1 @@ +go2rtc-pipeline diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/log/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/run similarity index 100% rename from docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/log/run rename to docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/run diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/type new file mode 100644 index 000000000..5883cff0c --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc-log/type @@ -0,0 +1 @@ +longrun diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/dependencies.d/base b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/dependencies.d/base new file mode 100644 index 000000000..e69de29bb diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/producer-for b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/producer-for new file mode 100644 index 000000000..20fbc45f8 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/producer-for @@ -0,0 +1 @@ +go2rtc-log diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/dependencies.d/base b/docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/dependencies.d/base new file mode 100644 index 000000000..e69de29bb diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/run similarity index 100% rename from docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/run rename to docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/run diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/type similarity index 100% rename from docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/type rename to docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/type diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/up b/docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/up similarity index 100% rename from docker/rootfs/etc/s6-overlay/s6-rc.d/init-logs/up rename to docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/up diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/consumer-for b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/consumer-for new file mode 100644 index 000000000..68b7d12d4 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/consumer-for @@ -0,0 +1 @@ +nginx diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/dependencies.d/log-prepare b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/dependencies.d/log-prepare new file mode 100644 index 000000000..e69de29bb diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/pipeline-name b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/pipeline-name new file mode 100644 index 000000000..e22259a61 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/pipeline-name @@ -0,0 +1 @@ +nginx-pipeline diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/log/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/run similarity index 100% rename from docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/log/run rename to docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/run diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/type b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/type new file mode 100644 index 000000000..5883cff0c --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx-log/type @@ -0,0 +1 @@ +longrun diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/producer-for b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/producer-for new file mode 100644 index 000000000..307d7404c --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/producer-for @@ -0,0 +1 @@ +nginx-log diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/frigate-pipeline b/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/frigate-pipeline new file mode 100644 index 000000000..e69de29bb diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/go2rtc-pipeline b/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/go2rtc-pipeline new file mode 100644 index 000000000..e69de29bb diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/nginx-pipeline b/docker/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/nginx-pipeline new file mode 100644 index 000000000..e69de29bb From 2d4ddd9434ffc9be0c6502279f2d987186a66073 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Tue, 17 Jan 2023 12:03:13 -0300 Subject: [PATCH 04/16] Remove more unnecessary s6 variables --- Dockerfile | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index f39aa5862..8f5baa21b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -194,15 +194,6 @@ EXPOSE 1935 EXPOSE 8554 EXPOSE 8555 -# Fails if cont-init.d fails -ENV S6_BEHAVIOUR_IF_STAGE2_FAILS=2 -# Wait indefinitely for cont-init.d to finish before starting services -ENV S6_CMD_WAIT_FOR_SERVICES=1 -ENV S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 -# Give services (including Frigate) 30 seconds to stop before killing them -# But this is not working currently because of: -# https://github.com/just-containers/s6-overlay/issues/503 -ENV S6_SERVICES_GRACETIME=30000 # Configure logging to prepend timestamps, log to stdout, keep 0 archives and rotate on 10MB ENV S6_LOGGING_SCRIPT="T 1 n0 s10000000 T" From 473c8d30c882ec7ed641442c746384729a01bfdb Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Tue, 17 Jan 2023 12:14:12 -0300 Subject: [PATCH 05/16] Fix prepare-log and when go2rtc is not present in config --- docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/up | 2 +- docker/rootfs/usr/local/go2rtc/create_config.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/up b/docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/up index f0a9d251f..f90be02e8 100644 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/up +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/log-prepare/up @@ -1 +1 @@ -/etc/s6-overlay/s6-rc.d/init-logs/run +/etc/s6-overlay/s6-rc.d/log-prepare/run diff --git a/docker/rootfs/usr/local/go2rtc/create_config.py b/docker/rootfs/usr/local/go2rtc/create_config.py index 20e8de494..4ad0b59f1 100644 --- a/docker/rootfs/usr/local/go2rtc/create_config.py +++ b/docker/rootfs/usr/local/go2rtc/create_config.py @@ -20,7 +20,7 @@ if config_file.endswith((".yaml", ".yml")): elif config_file.endswith(".json"): config = json.loads(raw_config) -go2rtc_config: dict[str, any] = config["go2rtc"] +go2rtc_config: dict[str, any] = config.get("go2rtc", {}) if not go2rtc_config.get("log", {}).get("format"): go2rtc_config["log"] = {"format": "text"} From 1d15eaae26e6797142c56cc2d2dc4eb95897d68e Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Tue, 17 Jan 2023 12:58:34 -0300 Subject: [PATCH 06/16] Restart the whole container if either Frigate or go2rtc fails --- docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish | 13 ++++++++----- docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/run | 3 +++ docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish | 11 +++++++---- docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run | 8 ++++++++ 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish index 14f63ae83..df31d41bb 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish @@ -9,7 +9,7 @@ exit_code_container=$(cat /run/s6-linux-init-container-results/exitcode) readonly exit_code_container readonly exit_code_service="${1}" readonly exit_code_signal="${2}" -readonly service="Frigate" +readonly service="frigate" echo "Service ${service} exited with code ${exit_code_service} (by signal ${exit_code_signal})" >&2 @@ -17,12 +17,15 @@ if [[ "${exit_code_service}" -eq 256 ]]; then if [[ "${exit_code_container}" -eq 0 ]]; then echo $((128 + exit_code_signal)) > /run/s6-linux-init-container-results/exitcode fi - if [[ "${exit_code_signal}" -eq 15 ]]; then - exec /run/s6/basedir/bin/halt - fi elif [[ "${exit_code_service}" -ne 0 ]]; then if [[ "${exit_code_container}" -eq 0 ]]; then echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode fi - exec /run/s6/basedir/bin/halt +else + # If the service exited with code 0, then we want to set the container exit code to 1 + if [[ "${exit_code_container}" -eq 0 ]]; then + echo "1" > /run/s6-linux-init-container-results/exitcode + fi fi + +exec /run/s6/basedir/bin/halt diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/run index c543ff0ff..905f4b670 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/run +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/run @@ -4,6 +4,9 @@ set -o errexit -o nounset -o pipefail +# Tell S6-Overlay not to restart this service +s6-svc -O . + cd /opt/frigate # Replace the bash process with the Frigate process, redirecting stderr to stdout diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish index 2e95e74fc..9ebb6375e 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish @@ -17,12 +17,15 @@ if [[ "${exit_code_service}" -eq 256 ]]; then if [[ "${exit_code_container}" -eq 0 ]]; then echo $((128 + exit_code_signal)) > /run/s6-linux-init-container-results/exitcode fi - if [[ "${exit_code_signal}" -eq 15 ]]; then - exec /run/s6/basedir/bin/halt - fi elif [[ "${exit_code_service}" -ne 0 ]]; then if [[ "${exit_code_container}" -eq 0 ]]; then echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode fi - exec /run/s6/basedir/bin/halt +else + # If the service exited with code 0, then we want to set the container exit code to 1 if it's 0 + if [[ "${exit_code_container}" -eq 0 ]]; then + echo "1" > /run/s6-linux-init-container-results/exitcode + fi fi + +exec /run/s6/basedir/bin/halt diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run index db5c2a869..b9d03962f 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run @@ -4,8 +4,16 @@ set -o errexit -o nounset -o pipefail +# Tell S6-Overlay not to restart this service +s6-svc -O . + raw_config=$(python3 /usr/local/go2rtc/create_config.py) # Replace the bash process with the go2rtc process, redirecting stderr to stdout exec 2>&1 + +echo starting go2rtc +sleep 20s +exit 0 + exec go2rtc -config="${raw_config}" From 6d75415f22889ef1ff5bf5c5f10c9c42e290a300 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Tue, 17 Jan 2023 12:59:41 -0300 Subject: [PATCH 07/16] D --- docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run index b9d03962f..aa753bd12 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/run @@ -11,9 +11,4 @@ raw_config=$(python3 /usr/local/go2rtc/create_config.py) # Replace the bash process with the go2rtc process, redirecting stderr to stdout exec 2>&1 - -echo starting go2rtc -sleep 20s -exit 0 - exec go2rtc -config="${raw_config}" From b7789dca16a95f29bc5350c499bae20c4dcb89c5 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Tue, 17 Jan 2023 13:02:19 -0300 Subject: [PATCH 08/16] Fix service name in finish --- docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish index df31d41bb..d759815c0 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish @@ -9,7 +9,7 @@ exit_code_container=$(cat /run/s6-linux-init-container-results/exitcode) readonly exit_code_container readonly exit_code_service="${1}" readonly exit_code_signal="${2}" -readonly service="frigate" +readonly service="Frigate" echo "Service ${service} exited with code ${exit_code_service} (by signal ${exit_code_signal})" >&2 From 5feaa0461f4f41fac22f9a36e94ae44d23e3e8c3 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Tue, 17 Jan 2023 13:03:18 -0300 Subject: [PATCH 09/16] Fix nginx finish comment --- docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/finish | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/finish b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/finish index 285928af0..01c37d192 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/finish +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/nginx/finish @@ -1,6 +1,6 @@ #!/command/with-contenv bash # shellcheck shell=bash -# Take down the S6 supervision tree when the service exits +# Take down the S6 supervision tree when the service fails set -o errexit -o nounset -o pipefail From 92e702a33c9e705777122c0bec1cd312977049b7 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Tue, 17 Jan 2023 13:53:07 -0300 Subject: [PATCH 10/16] Restart improvements --- docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish | 7 +++---- docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish | 5 +++-- frigate/http.py | 2 +- frigate/util.py | 9 ++------- web/src/AppBar.jsx | 2 +- 5 files changed, 10 insertions(+), 15 deletions(-) diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish index d759815c0..d83c1a6e6 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate/finish @@ -22,10 +22,9 @@ elif [[ "${exit_code_service}" -ne 0 ]]; then echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode fi else - # If the service exited with code 0, then we want to set the container exit code to 1 - if [[ "${exit_code_container}" -eq 0 ]]; then - echo "1" > /run/s6-linux-init-container-results/exitcode - fi + # Exit code 0 is expected when Frigate is restarted by the user. In this case, + # we create a signal for the go2rtc finish script to tolerate the restart. + touch /dev/shm/restarting-frigate fi exec /run/s6/basedir/bin/halt diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish index 9ebb6375e..26b34294a 100755 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish +++ b/docker/rootfs/etc/s6-overlay/s6-rc.d/go2rtc/finish @@ -22,8 +22,9 @@ elif [[ "${exit_code_service}" -ne 0 ]]; then echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode fi else - # If the service exited with code 0, then we want to set the container exit code to 1 if it's 0 - if [[ "${exit_code_container}" -eq 0 ]]; then + # go2rtc is not supposed to exit, so even when it exits with 0 we make the + # container with 1. We only tolerate it when Frigate is restarting. + if [[ "${exit_code_container}" -eq 0 && ! -f /dev/shm/restarting-frigate ]]; then echo "1" > /run/s6-linux-init-container-results/exitcode fi fi diff --git a/frigate/http.py b/frigate/http.py index a83b94751..16a121af6 100644 --- a/frigate/http.py +++ b/frigate/http.py @@ -769,7 +769,7 @@ def config_save(): logging.error(f"Error restarting Frigate: {e}") return "Config successfully saved, unable to restart Frigate", 200 - return "Config successfully saved, restarting...", 200 + return "Config successfully saved, restarting (this can take up to one minute)...", 200 else: return "Config successfully saved.", 200 diff --git a/frigate/util.py b/frigate/util.py index 69ead2a7a..2987099e8 100755 --- a/frigate/util.py +++ b/frigate/util.py @@ -628,13 +628,8 @@ def clipped(obj, frame_shape): def restart_frigate(): - proc = psutil.Process(1) - # if this is running via s6, sigterm pid 1 - if proc.name() == "s6-svscan": - proc.terminate() - # otherwise, just try and exit frigate - else: - os.kill(os.getpid(), signal.SIGTERM) + # S6 overlay is configured to exit once the Frigate process exits + os.kill(os.getpid(), signal.SIGTERM) class EventsPerSecond: diff --git a/web/src/AppBar.jsx b/web/src/AppBar.jsx index 95a6bfbf2..b5bb16c0f 100644 --- a/web/src/AppBar.jsx +++ b/web/src/AppBar.jsx @@ -78,7 +78,7 @@ export default function AppBar() { {showDialogWait ? ( ) : null} From 76fb367fd5b4a5f595befe2b7a102d697ec04871 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Tue, 17 Jan 2023 14:00:15 -0300 Subject: [PATCH 11/16] Fix devcontainer --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8f5baa21b..e76f20545 100644 --- a/Dockerfile +++ b/Dockerfile @@ -205,7 +205,7 @@ FROM deps AS devcontainer # Do not start the actual Frigate service on devcontainer as it will be started by VSCode # But start a fake service for simulating the logs -COPY docker/fake_frigate_run /etc/services.d/frigate/run +COPY docker/fake_frigate_run /etc/s6-overlay/s6-rc.d/frigate/run # Install Node 16 RUN apt-get update \ From 1a74fad81990e5327820c1a7f718a0346e1a5561 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Tue, 17 Jan 2023 14:00:30 -0300 Subject: [PATCH 12/16] Fix format --- frigate/http.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frigate/http.py b/frigate/http.py index 16a121af6..581635d5e 100644 --- a/frigate/http.py +++ b/frigate/http.py @@ -769,7 +769,10 @@ def config_save(): logging.error(f"Error restarting Frigate: {e}") return "Config successfully saved, unable to restart Frigate", 200 - return "Config successfully saved, restarting (this can take up to one minute)...", 200 + return ( + "Config successfully saved, restarting (this can take up to one minute)...", + 200, + ) else: return "Config successfully saved.", 200 From ef9338f5af7baac37e0a39764c96cb910b97847c Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 17 Jan 2023 21:36:27 -0700 Subject: [PATCH 13/16] Remove rpi warning about not working hwaccel (#5145) --- docs/docs/configuration/hardware_acceleration.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docs/docs/configuration/hardware_acceleration.md b/docs/docs/configuration/hardware_acceleration.md index 93fb568f2..c9ff695c5 100644 --- a/docs/docs/configuration/hardware_acceleration.md +++ b/docs/docs/configuration/hardware_acceleration.md @@ -7,12 +7,6 @@ It is recommended to update your configuration to enable hardware accelerated de ### Raspberry Pi 3/4 -:::caution - -There is currently a bug in ffmpeg that causes hwaccel to not work for the RPi kernel 5.15.61 and above. For more information see https://github.com/blakeblackshear/frigate/issues/3780 - -::: - Ensure you increase the allocated RAM for your GPU to at least 128 (raspi-config > Performance Options > GPU Memory). **NOTICE**: If you are using the addon, you may need to turn off `Protection mode` for hardware acceleration. From 2631a4c35b6f6e6ee08a1faf5aa6cadfcc78dbf1 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 17 Jan 2023 21:36:52 -0700 Subject: [PATCH 14/16] Fix not using custom set stream name (#5134) --- web/src/routes/Camera.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/routes/Camera.jsx b/web/src/routes/Camera.jsx index c703ea1ce..3be2bfb71 100644 --- a/web/src/routes/Camera.jsx +++ b/web/src/routes/Camera.jsx @@ -112,7 +112,7 @@ export default function Camera({ camera }) { player = (
- +
); @@ -129,7 +129,7 @@ export default function Camera({ camera }) { player = (
- +
); From f5466426dfafe97037d003a81d3de733c4e5d5a6 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Tue, 17 Jan 2023 21:38:17 -0700 Subject: [PATCH 15/16] Fix go2rtc error when not set (#5133) --- .../rootfs/usr/local/go2rtc/create_config.py | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/docker/rootfs/usr/local/go2rtc/create_config.py b/docker/rootfs/usr/local/go2rtc/create_config.py index 20e8de494..e2658a6bf 100644 --- a/docker/rootfs/usr/local/go2rtc/create_config.py +++ b/docker/rootfs/usr/local/go2rtc/create_config.py @@ -5,6 +5,7 @@ import os import yaml +BTBN_PATH = "/usr/lib/btbn-ffmpeg" config_file = os.environ.get("CONFIG_FILE", "/config/config.yml") # Check if we can use .yaml instead of .yml @@ -20,12 +21,27 @@ if config_file.endswith((".yaml", ".yml")): elif config_file.endswith(".json"): config = json.loads(raw_config) -go2rtc_config: dict[str, any] = config["go2rtc"] +go2rtc_config: dict[str, any] = config.get("go2rtc", {}) -if not go2rtc_config.get("log", {}).get("format"): +# we want to ensure that logs are easy to read +if go2rtc_config.get("log") is None: go2rtc_config["log"] = {"format": "text"} +elif go2rtc_config["log"].get("format") is None: + go2rtc_config["log"]["format"] = "text" +# should set default stun server so webrtc can work if not go2rtc_config.get("webrtc", {}).get("candidates", []): go2rtc_config["webrtc"] = {"candidates": ["stun:8555"]} -print(json.dumps(go2rtc_config)) \ No newline at end of file +# need to replace ffmpeg command when using ffmpeg4 +if not os.path.exists(BTBN_PATH): + if go2rtc_config.get("ffmpeg") is None: + go2rtc_config["ffmpeg"] = { + "rtsp": "-fflags nobuffer -flags low_delay -stimeout 5000000 -user_agent go2rtc/ffmpeg -rtsp_transport tcp -i {input}" + } + elif go2rtc_config["ffmpeg"].get("rtsp") is None: + go2rtc_config["ffmpeg"][ + "rtsp" + ] = "-fflags nobuffer -flags low_delay -stimeout 5000000 -user_agent go2rtc/ffmpeg -rtsp_transport tcp -i {input}" + +print(json.dumps(go2rtc_config)) From 55abdb48871a98d48f796ff6092984341909eda7 Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Wed, 18 Jan 2023 05:44:59 -0700 Subject: [PATCH 16/16] Update Dockerfile Co-authored-by: Felipe Santos --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e76f20545..244678b63 100644 --- a/Dockerfile +++ b/Dockerfile @@ -192,7 +192,7 @@ RUN ldconfig EXPOSE 5000 EXPOSE 1935 EXPOSE 8554 -EXPOSE 8555 +EXPOSE 8555/tcp 8555/udp # Configure logging to prepend timestamps, log to stdout, keep 0 archives and rotate on 10MB ENV S6_LOGGING_SCRIPT="T 1 n0 s10000000 T"