diff --git a/Dockerfile b/Dockerfile index b1a5ba1a0..35a186072 100644 --- a/Dockerfile +++ b/Dockerfile @@ -198,7 +198,7 @@ EXPOSE 8555/tcp 8555/udp ENV S6_LOGGING_SCRIPT="T 1 n0 s10000000 T" ENTRYPOINT ["/init"] -CMD [] +CMD ["/etc/s6-overlay/validate_services.sh"] # Frigate deps with Node.js and NPM for devcontainer FROM deps AS devcontainer diff --git a/docker/install_deps.sh b/docker/install_deps.sh index cdcb228fa..5e19b5217 100755 --- a/docker/install_deps.sh +++ b/docker/install_deps.sh @@ -91,3 +91,4 @@ rm -rf /var/lib/apt/lists/* curl -fsSL \ "https://github.com/mikefarah/yq/releases/download/v4.30.8/yq_linux_$(dpkg --print-architecture)" \ --output /usr/local/bin/yq +chmod +x /usr/local/bin/yq diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-prepare/down b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-prepare/down deleted file mode 100644 index c67fd290f..000000000 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-prepare/down +++ /dev/null @@ -1 +0,0 @@ -/etc/s6-overlay/s6-rc.d/frigate-prepare/finish diff --git a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-prepare/finish b/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-prepare/finish deleted file mode 100755 index 6d13bce11..000000000 --- a/docker/rootfs/etc/s6-overlay/s6-rc.d/frigate-prepare/finish +++ /dev/null @@ -1,26 +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 - -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-prepare" - -echo "[INFO] 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 -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 -fi - -exec /run/s6/basedir/bin/halt diff --git a/docker/rootfs/etc/s6-overlay/validate_services.sh b/docker/rootfs/etc/s6-overlay/validate_services.sh new file mode 100755 index 000000000..f1d7c57a6 --- /dev/null +++ b/docker/rootfs/etc/s6-overlay/validate_services.sh @@ -0,0 +1,25 @@ +#!/command/with-contenv bash +# shellcheck shell=bash +# Checks if all oneshot services executed succesfully +# https://github.com/just-containers/s6-overlay/issues/513#issuecomment-1401399995 + +set -o errexit -o nounset -o pipefail + +readonly wanted_services=( + log-prepare + frigate-prepare + # go2rtc-prepare +) + +services=$(s6-rc -a list) # lists active/executed services, one per line +readonly services + +for wanted_service in "${wanted_services[@]}"; do + if ! echo "${services}" | grep -qFx "${wanted_service}" ; then + echo "[ERROR] Service '${wanted_service}' failed to execute" >&2 + echo 1 > /run/s6-linux-init-container-results/exitcode # to say the container failed + exec /run/s6/basedir/bin/halt + fi +done + +exec s6-pause # or exec into your real CMD if you have one