From 55294b9605c930227406980baccc5c4ff80b6df9 Mon Sep 17 00:00:00 2001 From: Felipe Santos Date: Sat, 3 Dec 2022 13:41:16 -0300 Subject: [PATCH] Log all services to RAM --- Dockerfile | 15 ++++++++++++--- Makefile | 3 +++ docker/rootfs/etc/cont-init.d/prepare-logs.sh | 8 ++++++++ docker/rootfs/etc/services.d/frigate/finish | 7 +++++++ docker/rootfs/etc/services.d/frigate/log/run | 4 ++++ docker/rootfs/etc/services.d/frigate/run | 9 +++++++++ docker/rootfs/etc/services.d/go2rtc/log/run | 4 ++++ docker/rootfs/etc/services.d/go2rtc/run | 1 + docker/rootfs/etc/services.d/nginx/log/run | 4 ++++ docker/rootfs/etc/services.d/nginx/run | 1 + docker/rootfs/usr/local/bin/frigate | 5 +++++ docker/rootfs/usr/local/nginx/conf/nginx.conf | 4 ++-- 12 files changed, 60 insertions(+), 5 deletions(-) create mode 100755 docker/rootfs/etc/cont-init.d/prepare-logs.sh create mode 100755 docker/rootfs/etc/services.d/frigate/finish create mode 100755 docker/rootfs/etc/services.d/frigate/log/run create mode 100755 docker/rootfs/etc/services.d/frigate/run create mode 100755 docker/rootfs/etc/services.d/go2rtc/log/run create mode 100755 docker/rootfs/etc/services.d/nginx/log/run create mode 100644 docker/rootfs/usr/local/bin/frigate diff --git a/Dockerfile b/Dockerfile index 1f9bd7d16..5ffb259b7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -155,7 +155,14 @@ ENV NVIDIA_DRIVER_CAPABILITIES="compute,video,utility" ENV PATH="/usr/lib/btbn-ffmpeg/bin:/usr/local/go2rtc/bin:/usr/local/nginx/sbin:${PATH}" -# TODO: remove after a new verion of s6-overlay is released. See: +# 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 +# Configure logging to log to stdout and prepend timestamps +ENV S6_LOGGING_SCRIPT="T 1 n20 s1000000 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 @@ -176,10 +183,14 @@ EXPOSE 8554 EXPOSE 8555 ENTRYPOINT ["/init"] +CMD [] # Frigate deps with Node.js and NPM for devcontainer FROM deps AS devcontainer +# Do not start frigate on devcontainer +RUN rm -rf /etc/services.d/frigate + # Install Node 16 RUN apt-get update \ && apt-get install wget -y \ @@ -224,5 +235,3 @@ FROM deps WORKDIR /opt/frigate/ COPY --from=rootfs / / - -CMD ["with-contenv", "python3", "-u", "-m", "frigate"] diff --git a/Makefile b/Makefile index 3ec99eb16..81583e02e 100644 --- a/Makefile +++ b/Makefile @@ -30,6 +30,9 @@ build: version amd64 arm64 armv7 push: build docker buildx build --push --platform linux/arm/v7,linux/arm64/v8,linux/amd64 --tag $(IMAGE_REPO):${GITHUB_REF_NAME}-$(COMMIT_HASH) . +run: local + docker run --rm --volume=${PWD}/config/config.yml:/config/config.yml frigate:latest + run_tests: local docker run --rm --entrypoint=python3 frigate:latest -u -m unittest docker run --rm --entrypoint=python3 frigate:latest -u -m mypy --config-file frigate/mypy.ini frigate diff --git a/docker/rootfs/etc/cont-init.d/prepare-logs.sh b/docker/rootfs/etc/cont-init.d/prepare-logs.sh new file mode 100755 index 000000000..48056e794 --- /dev/null +++ b/docker/rootfs/etc/cont-init.d/prepare-logs.sh @@ -0,0 +1,8 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -euo pipefail + +mkdir -p /dev/shm/logs +chown nobody:nogroup /dev/shm/logs +chmod 02755 /dev/shm/logs diff --git a/docker/rootfs/etc/services.d/frigate/finish b/docker/rootfs/etc/services.d/frigate/finish new file mode 100755 index 000000000..3a9da25ce --- /dev/null +++ b/docker/rootfs/etc/services.d/frigate/finish @@ -0,0 +1,7 @@ +#!/command/with-contenv bash +# shellcheck shell=bash +# Take down the S6 supervision tree when the process fails + +if [[ "${1}" -ne 0 && "${1}" -ne 256 ]]; then + exec /run/s6/basedir/bin/halt +fi diff --git a/docker/rootfs/etc/services.d/frigate/log/run b/docker/rootfs/etc/services.d/frigate/log/run new file mode 100755 index 000000000..c10284862 --- /dev/null +++ b/docker/rootfs/etc/services.d/frigate/log/run @@ -0,0 +1,4 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +exec logutil-service /dev/shm/logs/frigate diff --git a/docker/rootfs/etc/services.d/frigate/run b/docker/rootfs/etc/services.d/frigate/run new file mode 100755 index 000000000..2390bc9d2 --- /dev/null +++ b/docker/rootfs/etc/services.d/frigate/run @@ -0,0 +1,9 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +set -euo pipefail + +cd /opt/frigate + +exec 2>&1 +exec python3 -u -m frigate diff --git a/docker/rootfs/etc/services.d/go2rtc/log/run b/docker/rootfs/etc/services.d/go2rtc/log/run new file mode 100755 index 000000000..96a204b9d --- /dev/null +++ b/docker/rootfs/etc/services.d/go2rtc/log/run @@ -0,0 +1,4 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +exec logutil-service /dev/shm/logs/go2rtc diff --git a/docker/rootfs/etc/services.d/go2rtc/run b/docker/rootfs/etc/services.d/go2rtc/run index 6ae2918e5..80d80636b 100755 --- a/docker/rootfs/etc/services.d/go2rtc/run +++ b/docker/rootfs/etc/services.d/go2rtc/run @@ -10,4 +10,5 @@ else config_path="/usr/local/go2rtc/go2rtc.yaml" fi +exec 2>&1 exec go2rtc -config="${config_path}" diff --git a/docker/rootfs/etc/services.d/nginx/log/run b/docker/rootfs/etc/services.d/nginx/log/run new file mode 100755 index 000000000..50057d1d7 --- /dev/null +++ b/docker/rootfs/etc/services.d/nginx/log/run @@ -0,0 +1,4 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +exec logutil-service /dev/shm/logs/nginx diff --git a/docker/rootfs/etc/services.d/nginx/run b/docker/rootfs/etc/services.d/nginx/run index 18de12f59..5585efaa0 100755 --- a/docker/rootfs/etc/services.d/nginx/run +++ b/docker/rootfs/etc/services.d/nginx/run @@ -1,4 +1,5 @@ #!/command/with-contenv bash # shellcheck shell=bash +exec 2>&1 exec nginx diff --git a/docker/rootfs/usr/local/bin/frigate b/docker/rootfs/usr/local/bin/frigate new file mode 100644 index 000000000..7e431b11c --- /dev/null +++ b/docker/rootfs/usr/local/bin/frigate @@ -0,0 +1,5 @@ +#!/command/with-contenv bash +# shellcheck shell=bash + +exec 2>&1 +exec python3 -u -m frigate "${@}" diff --git a/docker/rootfs/usr/local/nginx/conf/nginx.conf b/docker/rootfs/usr/local/nginx/conf/nginx.conf index e69eb739e..5a5a4944f 100644 --- a/docker/rootfs/usr/local/nginx/conf/nginx.conf +++ b/docker/rootfs/usr/local/nginx/conf/nginx.conf @@ -2,7 +2,7 @@ daemon off; user root; worker_processes 1; -error_log /usr/local/nginx/logs/error.log warn; +error_log /dev/stdout warn; pid /var/run/nginx.pid; events { @@ -17,7 +17,7 @@ http { '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; - access_log /usr/local/nginx/logs/access.log main; + access_log /dev/stdout main; sendfile on;