From f41372680d11c36c01e43e922c781845224dd62d Mon Sep 17 00:00:00 2001 From: Erik Hollensbe Date: Fri, 18 Mar 2022 00:08:23 -0700 Subject: [PATCH 1/6] Fix dockerfile & entrypoint: - Resolve issue with join not being checked properly for success without using external tools - Resolve issue where initial boot was not being checked properly - Now output errors when zerotier fails to start closes #1581 cc @altano for inspiration for this patch Signed-off-by: Erik Hollensbe --- Dockerfile.release | 2 ++ entrypoint.sh.release | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Dockerfile.release b/Dockerfile.release index aa0d422cc..52ef4d803 100644 --- a/Dockerfile.release +++ b/Dockerfile.release @@ -11,6 +11,8 @@ RUN curl -sSL -o zerotier-one.deb "${PACKAGE_BASEURL}/zerotier-one_${VERSION}_${ FROM debian:buster +RUN apt-get update -qq && apt-get install openssl libssl1.1 -y + COPY --from=stage zerotier-one.deb . RUN dpkg -i zerotier-one.deb && rm -f zerotier-one.deb diff --git a/entrypoint.sh.release b/entrypoint.sh.release index adc258194..bffaf6865 100644 --- a/entrypoint.sh.release +++ b/entrypoint.sh.release @@ -1,7 +1,7 @@ #!/bin/sh grepzt() { - [ ! -n "$(cat /var/lib/zerotier-one/zerotier-one.pid)" -a -d "/proc/$(cat /var/lib/zerotier-one/zerotier-one.pid)" ] + [ -f /var/lib/zerotier-one/zerotier-one.pid -a -n "$(cat /var/lib/zerotier-one/zerotier-one.pid)" -a -d "/proc/$(cat /var/lib/zerotier-one/zerotier-one.pid)" ] return $? } @@ -46,6 +46,7 @@ nohup /usr/sbin/zerotier-one & while ! grepzt do echo "zerotier hasn't started, waiting a second" + tail -n 10 nohup.out sleep 1 done @@ -55,9 +56,11 @@ for i in "$@" do echo "joining $i" - while ! zerotier-cli join "$i" + zerotier-cli join "$i" + + while [ "$(zerotier-cli get $i status)" != "OK" ] do - echo "joining $i failed; trying again in 1s" + echo "joining $i failed (are they added in central?); trying again in 1s" sleep 1 done done From 2388c9f4e4678abc096f5789db0500c7961e9d1d Mon Sep 17 00:00:00 2001 From: Erik Hollensbe Date: Fri, 18 Mar 2022 00:22:03 -0700 Subject: [PATCH 2/6] added additional informational messages to argument usage in zerotier docker image Signed-off-by: Erik Hollensbe --- entrypoint.sh.release | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/entrypoint.sh.release b/entrypoint.sh.release index bffaf6865..64160d02f 100644 --- a/entrypoint.sh.release +++ b/entrypoint.sh.release @@ -58,6 +58,12 @@ do zerotier-cli join "$i" + if [ $? -ne 0 ] + then + echo >&2 "ZeroTier could not be started; did you pass the right arguments to \`docker run\`?" + exit 1 + fi + while [ "$(zerotier-cli get $i status)" != "OK" ] do echo "joining $i failed (are they added in central?); trying again in 1s" From c30a1f60eae00b801c854fea4ba708a15ac04030 Mon Sep 17 00:00:00 2001 From: Erik Hollensbe Date: Wed, 23 Mar 2022 17:56:09 -0700 Subject: [PATCH 3/6] Join networks by touching a file Signed-off-by: Erik Hollensbe --- entrypoint.sh.release | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/entrypoint.sh.release b/entrypoint.sh.release index 64160d02f..dbbd3683f 100644 --- a/entrypoint.sh.release +++ b/entrypoint.sh.release @@ -40,30 +40,35 @@ killzerotier() { trap killzerotier INT TERM +echo "Configuring networks to join" +mkdir -p /var/lib/zerotier-one/networks.d + +echo "joining networks: $@" +for i in "$@" +do + echo "Configuring join for $i" + touch "/var/lib/zerotier-one/networks.d/${i}.conf" +done + echo "starting zerotier" nohup /usr/sbin/zerotier-one & while ! grepzt do echo "zerotier hasn't started, waiting a second" - tail -n 10 nohup.out + + if [ -f nohup.out ] + then + tail -n 10 nohup.out + fi + sleep 1 done -echo "joining networks: $@" +echo "Ensuring status for networks: $@" for i in "$@" do - echo "joining $i" - - zerotier-cli join "$i" - - if [ $? -ne 0 ] - then - echo >&2 "ZeroTier could not be started; did you pass the right arguments to \`docker run\`?" - exit 1 - fi - while [ "$(zerotier-cli get $i status)" != "OK" ] do echo "joining $i failed (are they added in central?); trying again in 1s" From d52ebaa41282894fbbbd03f9a5f904b2f7e88d17 Mon Sep 17 00:00:00 2001 From: Erik Hollensbe Date: Wed, 23 Mar 2022 18:08:46 -0700 Subject: [PATCH 4/6] HEALTHCHECK operation Signed-off-by: Erik Hollensbe --- Dockerfile.release | 2 ++ entrypoint.sh.release | 15 ++++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Dockerfile.release b/Dockerfile.release index 52ef4d803..ca05f171a 100644 --- a/Dockerfile.release +++ b/Dockerfile.release @@ -22,5 +22,7 @@ RUN rm -rf /var/lib/zerotier-one COPY entrypoint.sh.release /entrypoint.sh RUN chmod 755 /entrypoint.sh +HEALTHCHECK CMD bash /healthcheck.sh + CMD [] ENTRYPOINT ["/entrypoint.sh"] diff --git a/entrypoint.sh.release b/entrypoint.sh.release index dbbd3683f..853eb9ad7 100644 --- a/entrypoint.sh.release +++ b/entrypoint.sh.release @@ -65,15 +65,16 @@ do sleep 1 done -echo "Ensuring status for networks: $@" +echo "Writing healthcheck for networks: $@" -for i in "$@" +cat >/healthcheck.sh < Date: Wed, 23 Mar 2022 18:09:04 -0700 Subject: [PATCH 5/6] Fix ^C issue Signed-off-by: Erik Hollensbe --- entrypoint.sh.release | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/entrypoint.sh.release b/entrypoint.sh.release index 853eb9ad7..0194d3658 100644 --- a/entrypoint.sh.release +++ b/entrypoint.sh.release @@ -77,4 +77,8 @@ EOF chmod +x /healthcheck.sh -sleep infinity +echo "Sleeping infinitely" +while true +do + sleep 1 +done From da603208b403081898a6204c48f37288e75b5f86 Mon Sep 17 00:00:00 2001 From: Erik Hollensbe Date: Wed, 23 Mar 2022 18:17:21 -0700 Subject: [PATCH 6/6] Dockerfile: Reduce healthcheck interval to 1s (it's cheap) Signed-off-by: Erik Hollensbe --- Dockerfile.release | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.release b/Dockerfile.release index ca05f171a..a676226a3 100644 --- a/Dockerfile.release +++ b/Dockerfile.release @@ -22,7 +22,7 @@ RUN rm -rf /var/lib/zerotier-one COPY entrypoint.sh.release /entrypoint.sh RUN chmod 755 /entrypoint.sh -HEALTHCHECK CMD bash /healthcheck.sh +HEALTHCHECK --interval=1s CMD bash /healthcheck.sh CMD [] ENTRYPOINT ["/entrypoint.sh"]