From 089462f9d4f93ba92d1d7f2b18f1a2617494c994 Mon Sep 17 00:00:00 2001 From: Travis Glenn Hansen Date: Mon, 18 Mar 2024 13:18:55 -0600 Subject: [PATCH] install rclone, restic, and kopia using upstream binary files Signed-off-by: Travis Glenn Hansen --- .github/workflows/main.yml | 4 ++- Dockerfile | 12 +++++-- ci/configs/objectivefs/objectivefs.yaml | 2 +- docker/kopia-installer.sh | 3 +- docker/rclone-installer.sh | 41 ++++++++++++++++++++++++ docker/restic-installer.sh | 42 +++++++++++++++++++++++++ 6 files changed, 97 insertions(+), 7 deletions(-) create mode 100755 docker/rclone-installer.sh create mode 100755 docker/restic-installer.sh diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e9a9f24b..c5d4f0c8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -243,7 +243,9 @@ jobs: OBJECTIVEFS_POOL: ${{ secrets.SANITY_OBJECTIVEFS_POOL }} OBJECTIVEFS_LICENSE: ${{ secrets.SANITY_OBJECTIVEFS_LICENSE }} OBJECTIVEFS_OBJECTSTORE: ${{ secrets.SANITY_OBJECTIVEFS_OBJECTSTORE }} - OBJECTIVEFS_ENDPOINT: ${{ secrets.SANITY_OBJECTIVEFS_ENDPOINT }} + OBJECTIVEFS_ENDPOINT_PROTOCOL: ${{ secrets.SANITY_OBJECTIVEFS_ENDPOINT_PROTOCOL }} + OBJECTIVEFS_ENDPOINT_HOST: ${{ secrets.SANITY_OBJECTIVEFS_ENDPOINT_HOST }} + OBJECTIVEFS_ENDPOINT_PORT: ${{ secrets.SANITY_OBJECTIVEFS_ENDPOINT_PORT }} OBJECTIVEFS_SECRET_KEY: ${{ secrets.SANITY_OBJECTIVEFS_SECRET_KEY }} OBJECTIVEFS_ACCESS_KEY: ${{ secrets.SANITY_OBJECTIVEFS_ACCESS_KEY }} OBJECTIVEFS_PASSPHRASE: ${{ secrets.SANITY_OBJECTIVEFS_PASSPHRASE }} diff --git a/Dockerfile b/Dockerfile index d738948b..a177f01d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -77,11 +77,17 @@ COPY --from=build /usr/local/lib/nodejs/bin/node /usr/local/bin/node # netbase is required by rpcbind/rpcinfo to work properly # /etc/{services,rpc} are required RUN apt-get update && \ - apt-get install -y wget netbase socat e2fsprogs exfatprogs xfsprogs btrfs-progs fatresize dosfstools ntfs-3g nfs-common cifs-utils fdisk gdisk cloud-guest-utils sudo rsync procps util-linux nvme-cli fuse3 restic rclone && \ - restic self-update && \ - rclone self-update && \ + apt-get install -y wget netbase zip bzip2 socat e2fsprogs exfatprogs xfsprogs btrfs-progs fatresize dosfstools ntfs-3g nfs-common cifs-utils fdisk gdisk cloud-guest-utils sudo rsync procps util-linux nvme-cli fuse3 && \ rm -rf /var/lib/apt/lists/* +ARG RCLONE_VERSION=1.66.0 +ADD docker/rclone-installer.sh /usr/local/sbin +RUN chmod +x /usr/local/sbin/rclone-installer.sh && rclone-installer.sh + +ARG RESTIC_VERSION=0.16.4 +ADD docker/restic-installer.sh /usr/local/sbin +RUN chmod +x /usr/local/sbin/restic-installer.sh && restic-installer.sh + ARG KOPIA_VERSION=0.15.0 ADD docker/kopia-installer.sh /usr/local/sbin RUN chmod +x /usr/local/sbin/kopia-installer.sh && kopia-installer.sh diff --git a/ci/configs/objectivefs/objectivefs.yaml b/ci/configs/objectivefs/objectivefs.yaml index 6cb95c48..44264513 100644 --- a/ci/configs/objectivefs/objectivefs.yaml +++ b/ci/configs/objectivefs/objectivefs.yaml @@ -7,7 +7,7 @@ objectivefs: env: OBJECTIVEFS_LICENSE: ${OBJECTIVEFS_LICENSE} OBJECTSTORE: ${OBJECTIVEFS_OBJECTSTORE} - ENDPOINT: ${OBJECTIVEFS_ENDPOINT} + ENDPOINT: ${OBJECTIVEFS_ENDPOINT_PROTOCOL}://${OBJECTIVEFS_ENDPOINT_HOST}:${OBJECTIVEFS_ENDPOINT_PORT} SECRET_KEY: ${OBJECTIVEFS_SECRET_KEY} ACCESS_KEY: ${OBJECTIVEFS_ACCESS_KEY} OBJECTIVEFS_PASSPHRASE: ${OBJECTIVEFS_PASSPHRASE} diff --git a/docker/kopia-installer.sh b/docker/kopia-installer.sh index c425457c..67f2a8ec 100755 --- a/docker/kopia-installer.sh +++ b/docker/kopia-installer.sh @@ -27,10 +27,9 @@ else exit 0 fi -export DEB_FILE="kopia.deb" - echo "I am installing kopia $KOPIA_VERSION" +export DEB_FILE="kopia.deb" wget -O "${DEB_FILE}" "https://github.com/kopia/kopia/releases/download/v${KOPIA_VERSION}/kopia_${KOPIA_VERSION}_linux_${PLATFORM_ARCH}.deb" dpkg -i "${DEB_FILE}" diff --git a/docker/rclone-installer.sh b/docker/rclone-installer.sh new file mode 100755 index 00000000..3eeb6c67 --- /dev/null +++ b/docker/rclone-installer.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +set -e +set -x + +PLATFORM_TYPE=${1} + +if [[ "${PLATFORM_TYPE}" == "build" ]]; then + PLATFORM=$BUILDPLATFORM +else + PLATFORM=$TARGETPLATFORM +fi + +# linux/amd64,linux/arm64,linux/arm/v7,linux/s390x,linux/ppc64le +if [[ "x${PLATFORM}" == "x" ]]; then + PLATFORM="linux/amd64" +fi + +# these come from the --platform option of buildx, indirectly from DOCKER_BUILD_PLATFORM in main.yaml +# linux/amd64,linux/arm64,linux/arm/v7,linux/s390x,linux/ppc64le +if [ "$PLATFORM" = "linux/amd64" ]; then + export PLATFORM_ARCH="amd64" +elif [ "$PLATFORM" = "linux/arm64" ]; then + export PLATFORM_ARCH="arm" +elif [ "$PLATFORM" = "linux/arm/v7" ]; then + export PLATFORM_ARCH="arm-v7" +else + echo "unsupported/unknown restic PLATFORM ${PLATFORM}" + exit 0 +fi + +echo "I am installing rclone $RCLONE_VERSION" + +export ZIP_FILE="rclone.zip" +wget -O "${ZIP_FILE}" "https://github.com/rclone/rclone/releases/download/v${RCLONE_VERSION}/rclone-v${RCLONE_VERSION}-linux-${PLATFORM_ARCH}.zip" +unzip "${ZIP_FILE}" + +mv rclone-*-linux-*/rclone /usr/local/bin/rclone +rm -rf rclone-*-linux-* +chown root:root /usr/local/bin/rclone +chmod +x /usr/local/bin/rclone diff --git a/docker/restic-installer.sh b/docker/restic-installer.sh new file mode 100755 index 00000000..d4210a3c --- /dev/null +++ b/docker/restic-installer.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +set -e +set -x + +PLATFORM_TYPE=${1} + +if [[ "${PLATFORM_TYPE}" == "build" ]]; then + PLATFORM=$BUILDPLATFORM +else + PLATFORM=$TARGETPLATFORM +fi + +if [[ "x${PLATFORM}" == "x" ]]; then + PLATFORM="linux/amd64" +fi + +# these come from the --platform option of buildx, indirectly from DOCKER_BUILD_PLATFORM in main.yaml +# linux/amd64,linux/arm64,linux/arm/v7,linux/s390x,linux/ppc64le +if [ "$PLATFORM" = "linux/amd64" ]; then + export PLATFORM_ARCH="amd64" +elif [ "$PLATFORM" = "linux/arm64" ]; then + export PLATFORM_ARCH="arm64" +elif [ "$PLATFORM" = "linux/arm/v7" ]; then + export PLATFORM_ARCH="arm" +elif [ "$PLATFORM" = "linux/s390x" ]; then + export PLATFORM_ARCH="s390x" +elif [ "$PLATFORM" = "linux/ppc64le" ]; then + export PLATFORM_ARCH="ppc64le" +else + echo "unsupported/unknown restic PLATFORM ${PLATFORM}" + exit 0 +fi + +echo "I am installing restic $RESTIC_VERSION" + +export TAR_FILE="restic.bz2" +wget -O "${TAR_FILE}" "https://github.com/restic/restic/releases/download/v${RESTIC_VERSION}/restic_${RESTIC_VERSION}_linux_${PLATFORM_ARCH}.bz2" +bunzip2 "${TAR_FILE}" +mv restic /usr/local/bin +chown root:root /usr/local/bin/restic +chmod +x /usr/local/bin/restic