Hal vor 3 Jahren
Commit
431e68d844
5 geänderte Dateien mit 153 neuen und 0 gelöschten Zeilen
  1. 29 0
      Dockerfile
  2. 47 0
      authfile.sh
  3. 15 0
      entrypoint.sh
  4. 52 0
      mount.sh
  5. 10 0
      requirements.txt

+ 29 - 0
Dockerfile

@@ -0,0 +1,29 @@
+FROM python:3.8-alpine AS build
+
+ARG S3QL_VERSION=3.8.1
+
+COPY requirements.txt /
+RUN apk --no-cache add curl gnupg jq bzip2 g++ make pkgconfig fuse3-dev sqlite-dev libffi-dev openssl-dev cargo
+RUN pip install --user --ignore-installed -r requirements.txt
+RUN gpg2 --batch --keyserver keyserver.ubuntu.com --recv-key 0xD113FCAC3C4E599F
+ARG FILE="s3ql-$S3QL_VERSION"
+ARG URL="https://github.com/s3ql/s3ql/releases/download/release-$S3QL_VERSION/$FILE.tar.gz"
+RUN set -x; \
+    curl -sfL "$URL" -o "/tmp/$FILE.tar.gz" \
+ && curl -sfL "$URL.asc" | gpg2 --batch --verify - "/tmp/$FILE.tar.gz" \
+ && tar -xmf "/tmp/$FILE.tar.gz"
+WORKDIR $FILE
+RUN python3 setup.py build_ext --inplace \
+ && python3 setup.py install --user
+
+FROM python:3.8-alpine
+RUN apk --no-cache add fuse3 psmisc
+COPY --from=build /root/.local/bin/ /usr/local/bin/
+COPY --from=build /root/.local/lib/ /usr/local/lib/
+COPY ./authfile.sh ./entrypoint.sh ./mount.sh /usr/local/bin/
+RUN chmod 755 /usr/local/bin/*.sh
+ENV MOUNTPOINT=/s3ql
+VOLUME /root/.s3ql
+HEALTHCHECK CMD ["/bin/sh","-c","s3qlstat --quiet $MOUNTPOINT"]
+ENTRYPOINT ["/bin/sh","/usr/local/bin/entrypoint.sh"]
+CMD ["/bin/sh","/usr/local/bin/mount.sh"]

+ 47 - 0
authfile.sh

@@ -0,0 +1,47 @@
+#!/bin/sh -e
+
+error() {
+  echo "An error occured. Exiting $0." >&2
+  exit 1
+}
+
+# Create Authfile
+if [ ! -f "$S3QL_AUTHFILE" ]
+then
+  echo "Creating $S3QL_AUTHFILE..." >&2
+  
+  if [ -z "$S3QL_USERNAME" ] || [ -z "$S3QL_PASSWORD" ] || [ -z "$S3QL_URL" ]
+  then
+    echo "Missing \$S3QL_* environment variables." >&2
+    error
+  fi
+
+  if [ ! -d "$S3QL_HOME" ]
+  then
+    mkdir -p "$S3QL_HOME" || error
+  fi
+
+  S3QL_LOGIN=$([ -z "$S3QL_PROJECT" ] && echo "$S3QL_USERNAME" || echo "$S3QL_PROJECT:$S3QL_USERNAME")
+
+  {
+    echo "[s3ql]";
+    echo "backend-login: $S3QL_LOGIN";
+    echo "backend-password: $S3QL_PASSWORD";
+    echo "storage-url: $S3QL_URL"
+  } > "$S3QL_AUTHFILE"
+
+  if [ -n "$FS_PASSPHRASE" ]
+  then
+    echo "fs-passphrase: $FS_PASSPHRASE" >> "$S3QL_AUTHFILE"
+  fi
+
+  if [ -n "$BACKEND_OPTIONS" ]
+  then
+    echo "backend-options: $BACKEND_OPTIONS" >> "$S3QL_AUTHFILE"
+  fi
+fi
+
+if [ -w "$S3QL_AUTHFILE" ]
+then
+  chmod 600 "$S3QL_AUTHFILE"
+fi

+ 15 - 0
entrypoint.sh

@@ -0,0 +1,15 @@
+#!/bin/sh -e
+
+S3QL_HOME=/root/.s3ql
+
+# Set default value if not provided
+if [ -z "$S3QL_AUTHFILE" ]
+then
+  S3QL_AUTHFILE="$S3QL_HOME/authinfo2"
+fi
+
+export S3QL_HOME
+export S3QL_AUTHFILE
+
+authfile.sh
+exec "$@"

+ 52 - 0
mount.sh

@@ -0,0 +1,52 @@
+#!/bin/sh
+
+PID=0
+
+term() {
+  if [ "$PID" -ne 0 ]
+  then
+    echo "Shutting down..." >&2
+    umount.s3ql "$MOUNTPOINT"
+    exit $?
+  fi
+}
+
+error() {
+  echo "An error occured. Exiting $0." >&2
+  exit 1
+}
+
+# Create mountpoint if not exists
+if [ ! -d "$MOUNTPOINT" ] 
+then
+  echo "Creating $MOUNTPOINT..."
+  mkdir -p "$MOUNTPOINT" || error
+fi
+
+# Mount FS
+if [ -f "$S3QL_AUTHFILE" ]
+then
+
+  # Set S3QL_URL if empty with first storage-url of authfile
+  if [ -z "$S3QL_URL" ]
+  then
+    S3QL_URL=$(sed -n 's/storage-url *: *\(.*\)/\1/p' "$S3QL_AUTHFILE"|head -n1)
+  fi
+
+  # shellcheck disable=SC2086
+  fsck.s3ql $S3QL_FSCK_OPTIONS --authfile "$S3QL_AUTHFILE" --batch "$S3QL_URL" && FSCK_RESULT=$?
+  if [ $FSCK_RESULT -ne 0 ] && [ $FSCK_RESULT -ne 128 ]; then
+    echo "fsck.s3ql reported errors! Exit code $FSCK_RESULT - see http://www.rath.org/s3ql-docs/man/fsck.html"
+    error
+  fi
+  
+  trap 'term' TERM INT HUP
+
+  # shellcheck disable=SC2086
+  mount.s3ql $S3QL_MOUNT_OPTIONS --authfile "$S3QL_AUTHFILE" --fg "$S3QL_URL" "$MOUNTPOINT" & PID=$!
+
+  wait $PID
+else
+  echo "Authfile not found" >&2
+  error
+fi

+ 10 - 0
requirements.txt

@@ -0,0 +1,10 @@
+setuptools
+apsw >= 3.7.0
+cryptography
+requests
+defusedxml
+dugong >= 3.4, < 4.0
+google-auth
+google-auth-oauthlib
+trio >= 0.15
+pyfuse3 >= 3.2.0, < 4.0