From cfc2fbcb8e53f12524f1e8b85d9ac2811c455e8b Mon Sep 17 00:00:00 2001 From: Simon Prinz Date: Wed, 2 Oct 2024 20:43:27 +0000 Subject: [PATCH] add s6 and split scripts --- .env | 2 ++ .gitignore | 2 ++ Dockerfile | 22 ++++++++++--- docker-compose.yaml | 12 +++++++ entrypoint.sh | 21 ------------- rootfs/entrypoint.sh | 3 ++ rootfs/etc/s6-overlay/s6-rc.d/login/type | 1 + rootfs/etc/s6-overlay/s6-rc.d/login/up | 4 +++ rootfs/etc/s6-overlay/s6-rc.d/reload/run | 3 ++ rootfs/etc/s6-overlay/s6-rc.d/reload/type | 1 + .../s6-overlay/s6-rc.d/user/contents.d/webdav | 0 .../s6-rc.d/webdav/dependencies.d/login | 0 rootfs/etc/s6-overlay/s6-rc.d/webdav/run | 3 ++ rootfs/etc/s6-overlay/s6-rc.d/webdav/type | 1 + rootfs/login.sh | 31 +++++++++++++++++++ rootfs/reload.sh | 15 +++++++++ rootfs/webdav.sh | 16 ++++++++++ 17 files changed, 112 insertions(+), 25 deletions(-) create mode 100644 .env create mode 100644 .gitignore create mode 100644 docker-compose.yaml delete mode 100755 entrypoint.sh create mode 100755 rootfs/entrypoint.sh create mode 100644 rootfs/etc/s6-overlay/s6-rc.d/login/type create mode 100644 rootfs/etc/s6-overlay/s6-rc.d/login/up create mode 100644 rootfs/etc/s6-overlay/s6-rc.d/reload/run create mode 100644 rootfs/etc/s6-overlay/s6-rc.d/reload/type create mode 100644 rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/webdav create mode 100644 rootfs/etc/s6-overlay/s6-rc.d/webdav/dependencies.d/login create mode 100644 rootfs/etc/s6-overlay/s6-rc.d/webdav/run create mode 100644 rootfs/etc/s6-overlay/s6-rc.d/webdav/type create mode 100755 rootfs/login.sh create mode 100755 rootfs/reload.sh create mode 100755 rootfs/webdav.sh diff --git a/.env b/.env new file mode 100644 index 0000000..a761309 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +EMAIL= +PASSWORD= diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..87eb811 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.env.local +session/ diff --git a/Dockerfile b/Dockerfile index c681b8d..cdadb99 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,13 @@ FROM debian:11.4-slim -ENV DEBIAN_FRONTEND=noninteractive +ENV DEBIAN_FRONTEND=noninteractive \ + S6_OVERLAY_VERSION=3.1.6.2 \ + S6_CMD_WAIT_FOR_SERVICES_MAXTIME=300000 # updating and installing required components RUN apt update \ # software-properties-common curl gnupg zip libvips42 git xz-utils sudo htop micro jq - && apt install --no-install-recommends -y software-properties-common curl \ + && apt install --no-install-recommends -y software-properties-common curl xz-utils sudo \ # && curl -o /tmp/megacmd.deb https://mega.nz/linux/repo/Debian_11/amd64/megacmd-Debian_11_amd64.deb \ && apt --no-install-recommends -y install /tmp/megacmd.deb \ @@ -13,9 +15,21 @@ RUN apt update \ # cleaning up && apt-get autoremove -y \ && apt-get clean \ - && rm -rf /var/lib/apt/lists/* + && rm -rf /var/lib/apt/lists/* \ +# +# installing s6 + && curl -sL https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz | tar -C / -Jxpf - \ + && curl -sL https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-$([ $(uname -m) = 'aarch64' ] && echo 'aarch64' || echo 'x86_64').tar.xz | tar -C / -Jxpf - \ +# +# custom user + && useradd -u 1000 -ms /bin/bash mega \ + && adduser mega sudo \ + && echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers -COPY ./entrypoint.sh / +USER mega +WORKDIR /home/mega/.megaCmd +COPY --chown=mega rootfs / CMD ["/entrypoint.sh"] EXPOSE 80 +VOLUME /home/mega/.megaCmd diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..b750f0a --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,12 @@ +version: '3.7' + +# for testing +services: + test: + build: . + env_file: + - .env.local + volumes: + - "./session:/home/mega/.megaCmd" + ports: + - "80:80" diff --git a/entrypoint.sh b/entrypoint.sh deleted file mode 100755 index 2c32535..0000000 --- a/entrypoint.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -email="${EMAIL}" -password="${PASSWORD}" -mfa="${MFA}" -directory="${DIRECTORY}" - -if [ -z "${mfa}" ]; -then - mega-login "$email" "$password" -else - mega-login "$email" "$password" --auth-code="$mfa" -fi - -mega-webdav "$directory" --public --port=80 - -while true -do - sleep 3600 # 1 hours - mega-reload -done diff --git a/rootfs/entrypoint.sh b/rootfs/entrypoint.sh new file mode 100755 index 0000000..d232ec9 --- /dev/null +++ b/rootfs/entrypoint.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +exec /init diff --git a/rootfs/etc/s6-overlay/s6-rc.d/login/type b/rootfs/etc/s6-overlay/s6-rc.d/login/type new file mode 100644 index 0000000..3d92b15 --- /dev/null +++ b/rootfs/etc/s6-overlay/s6-rc.d/login/type @@ -0,0 +1 @@ +oneshot \ No newline at end of file diff --git a/rootfs/etc/s6-overlay/s6-rc.d/login/up b/rootfs/etc/s6-overlay/s6-rc.d/login/up new file mode 100644 index 0000000..8006616 --- /dev/null +++ b/rootfs/etc/s6-overlay/s6-rc.d/login/up @@ -0,0 +1,4 @@ +#!/command/execlineb -P + +with-contenv +exec /login.sh diff --git a/rootfs/etc/s6-overlay/s6-rc.d/reload/run b/rootfs/etc/s6-overlay/s6-rc.d/reload/run new file mode 100644 index 0000000..f37ba63 --- /dev/null +++ b/rootfs/etc/s6-overlay/s6-rc.d/reload/run @@ -0,0 +1,3 @@ +#!/command/with-contenv sh + +exec /reload.sh \ No newline at end of file diff --git a/rootfs/etc/s6-overlay/s6-rc.d/reload/type b/rootfs/etc/s6-overlay/s6-rc.d/reload/type new file mode 100644 index 0000000..1780f9f --- /dev/null +++ b/rootfs/etc/s6-overlay/s6-rc.d/reload/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/webdav b/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/webdav new file mode 100644 index 0000000..e69de29 diff --git a/rootfs/etc/s6-overlay/s6-rc.d/webdav/dependencies.d/login b/rootfs/etc/s6-overlay/s6-rc.d/webdav/dependencies.d/login new file mode 100644 index 0000000..e69de29 diff --git a/rootfs/etc/s6-overlay/s6-rc.d/webdav/run b/rootfs/etc/s6-overlay/s6-rc.d/webdav/run new file mode 100644 index 0000000..abd7436 --- /dev/null +++ b/rootfs/etc/s6-overlay/s6-rc.d/webdav/run @@ -0,0 +1,3 @@ +#!/command/with-contenv sh + +exec /webdav.sh \ No newline at end of file diff --git a/rootfs/etc/s6-overlay/s6-rc.d/webdav/type b/rootfs/etc/s6-overlay/s6-rc.d/webdav/type new file mode 100644 index 0000000..1780f9f --- /dev/null +++ b/rootfs/etc/s6-overlay/s6-rc.d/webdav/type @@ -0,0 +1 @@ +longrun \ No newline at end of file diff --git a/rootfs/login.sh b/rootfs/login.sh new file mode 100755 index 0000000..11cd234 --- /dev/null +++ b/rootfs/login.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +if [ -z "${MFA}" ]; +then + mega-login "${EMAIL}" "${PASSWORD}" +else + mega-login "${EMAIL}" "${PASSWORD}" --auth-code="${MFA}" +fi +exitCode=$? + +if [ $exitCode = "0" ]; +# success, everything is great +then + # do nothing + sleep 0 +elif [ $exitCode = "54" ]; +# exit code 54 is returned when the session already exists +then + mega-reload + exitCode=$? + if [ $exitCode != "0" ]; + then + # stop everything + /run/s6/basedir/bin/halt + exit $exitCode + fi +else + # stop everything + /run/s6/basedir/bin/halt + exit $exitCode +fi diff --git a/rootfs/reload.sh b/rootfs/reload.sh new file mode 100755 index 0000000..21a8391 --- /dev/null +++ b/rootfs/reload.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +while true +do + # default sleep interval for reload is 1 day + sleep "${RELOAD_INTERVAL:-86400}" + mega-reload + exitCode=$? + if [ $exitCode != "0" ]; + then + # stop everything + /run/s6/basedir/bin/halt + exit $exitCode + fi +done diff --git a/rootfs/webdav.sh b/rootfs/webdav.sh new file mode 100755 index 0000000..d43d641 --- /dev/null +++ b/rootfs/webdav.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +output=$(mega-webdav "${DIRECTORY:-/}" --public --port=80) # change port for caddy +exitCode=$? +if [ $exitCode != "0" ]; +then + # stop everything + /run/s6/basedir/bin/halt + exit $exitCode +fi + +path=$(echo $output | sed -n 's|.*http://.*/\([^/]*\)/.*|\1|p') +echo "prepared path for caddy: ${path}" + +# tail log file as "long running" task +tail -f /home/mega/.megaCmd/megacmdserver.log*