diff --git a/scripts/setup-cloudflare-r2.sh b/scripts/setup-cloudflare-r2.sh new file mode 100755 index 0000000..b2007dc --- /dev/null +++ b/scripts/setup-cloudflare-r2.sh @@ -0,0 +1,114 @@ +#! /bin/sh + +# +# Connect to a Cloudflare's R2 storage using mochoa/s3fs +# +# Run this script on the Docker HOST to bind buckets using "linode-bucket" +# -- Or any alias you give with "--alias" option -- driver name. +# Please refer to https://hub.docker.com/r/mochoa/s3fs-volume-plugin. +# You may bind to different buckets using different aliases. +# + +# parse args +while test $# -ne 0; do + if test -n "$(echo $1 | grep "=")"; then + key=${1%=*}; + value=${1#*=}; + else + key=$1; + value=$2 + shift + fi + if test "${key}" = "-k" || test "${key}" = "--key"; then + ACCESS_KEY="${value}"; + elif test "${key}" = "-s" || test "${key}" = "--secret"; then + ACCESS_SECRET="${value}"; + elif test "${key}" = "-l" || test "${key}" = "--location"; then + ACCOUNT_ID="${value}"; + elif test "${key}" = "-i" || test "${key}" = "--account-id"; then + ACCOUNT_ID="${value}"; + elif test "${key}" = "-a" || test "${key}" = "--alias"; then + PLUGIN_ALIAS="${value}"; + elif test "${key}" = "-u" || test "${key}" = "--user"; then + if id "${value}" > /dev/null 2>&1; then + USER_ID="$(id -u "${value}")"; + else + USER_ID="$(id -u)"; + fi + elif test "${key}" = "-g" || test "${key}" = "--group"; then + if id "${value}" > /dev/null 2>&1; then + GROUP_ID="$(id -g "${value}")"; + else + GROUP_ID="$(id -g)"; + fi + else + echo "Invalid \"${key}\" option"; + exit 1; + fi + shift +done; + +if test -z "${PLUGIN_ALIAS}"; then + PLUGIN_ALIAS='r2storage'; +fi + +if test -z "${ACCOUNT_ID}" || test -z "${ACCOUNT_ID}"; then + echo "You must provide the \"--account-id\" of the R2 bucket"; + exit 1; +fi + +if test -z "${ACCESS_KEY}" || test -z "${ACCESS_SECRET}"; then + echo "You must provide both \"--key\" and \"--secret\" options"; + exit 1; +fi + +# test plugin +PLUGIN_ALIAS="${PLUGIN_ALIAS}"; +PLUGIN_STATUS="$(docker plugin list \ + | grep "${PLUGIN_ALIAS}" \ + | rev \ + | cut -d " " -f 1 \ + | rev \ +)"; + +# install s3fs-volume-plugin if not installed and disable it +if test -z "${PLUGIN_STATUS}"; then + docker plugin install \ + mochoa/s3fs-volume-plugin \ + --alias "${PLUGIN_ALIAS}" \ + --grant-all-permissions \ + --disable; +fi + +# disable plugin to allow update settings +docker volume ls | while read volume_info; do + volume_driver="$(echo "${volume_info}" | xargs | cut -d " " -f 1)" + volume_name="$(echo "${volume_info}" | xargs | cut -d " " -f 2)" + if test -n "$(echo $volume_driver | grep "${PLUGIN_ALIAS}")"; then + docker volume rm "${volume_name}" > /dev/null; + fi +done +if test "${PLUGIN_STATUS}" = "true"; then + docker plugin disable "${PLUGIN_ALIAS}" \ + > /dev/null \ + || exit 1; +fi + +# set service +SERVICE_DOMAIN="${SERVICE_DOMAIN:-r2.cloudflarestorage.com}"; +URL="https://${ACCOUNT_ID}.${SERVICE_DOMAIN}"; +DEFAULT_S3FSOPTS="url=${URL}/"; + +# set credentials +docker plugin set \ + "${PLUGIN_ALIAS}" AWSACCESSKEYID="${ACCESS_KEY}"; +docker plugin set \ + "${PLUGIN_ALIAS}" AWSSECRETACCESSKEY="${ACCESS_SECRET}"; + +# set permissions +DEFAULT_S3FSOPTS="uid=33,gid=33,allow_other,${DEFAULT_S3FSOPTS}"; + +docker plugin set "${PLUGIN_ALIAS}" DEFAULT_S3FSOPTS="${DEFAULT_S3FSOPTS}"; + +# enable plugin +docker plugin enable "${PLUGIN_ALIAS}"; \ No newline at end of file diff --git a/scripts/setup-linode-objects.sh b/scripts/setup-linode-objects.sh new file mode 100644 index 0000000..e216649 --- /dev/null +++ b/scripts/setup-linode-objects.sh @@ -0,0 +1,108 @@ +#! /bin/sh + +# +# Connect to a linode bucket using mochoa/s3fs +# +# Run this script on the Docker HOST to bind buckets using "linode-bucket" +# -- Or any alias you give with "--alias" option -- driver name. +# Please refer to https://hub.docker.com/r/mochoa/s3fs-volume-plugin. +# You may bind to different buckets using different aliases. +# + +# parse args +while test $# -ne 0; do + if test -n "$(echo $1 | grep "=")"; then + key=${1%=*}; + value=${1#*=}; + else + key=$1; + value=$2 + shift + fi + if test "${key}" = "-k" || test "${key}" = "--key"; then + ACCESS_KEY="${value}"; + elif test "${key}" = "-s" || test "${key}" = "--secret"; then + ACCESS_SECRET="${value}"; + elif test "${key}" = "-l" || test "${key}" = "--location"; then + BUCKET_LOCATION="${value}"; + elif test "${key}" = "-a" || test "${key}" = "--alias"; then + PLUGIN_ALIAS="${value}"; + elif test "${key}" = "-u" || test "${key}" = "--user"; then + if id "${value}" > /dev/null 2>&1; then + USER_ID="$(id -u "${value}")"; + else + USER_ID="$(id -u)"; + fi + elif test "${key}" = "-g" || test "${key}" = "--group"; then + if id "${value}" > /dev/null 2>&1; then + GROUP_ID="$(id -g "${value}")"; + else + GROUP_ID="$(id -g)"; + fi + else + echo "Invalid \"${key}\" option"; + exit 1; + fi + shift +done; + +if test -z "${PLUGIN_ALIAS}"; then + PLUGIN_ALIAS='linodeobjects'; +fi + +if test -z "${ACCESS_KEY}" || test -z "${ACCESS_SECRET}"; then + echo "You must provide both \"--key\" and \"--secret\" options"; + exit 1; +fi + +# test plugin +PLUGIN_ALIAS="${PLUGIN_ALIAS}"; +PLUGIN_STATUS="$(docker plugin list \ + | grep "${PLUGIN_ALIAS}" \ + | rev \ + | cut -d " " -f 1 \ + | rev \ +)"; + +# install s3fs-volume-plugin if not installed and disable it +if test -z "${PLUGIN_STATUS}"; then + docker plugin install \ + mochoa/s3fs-volume-plugin \ + --alias "${PLUGIN_ALIAS}" \ + --grant-all-permissions \ + --disable; +fi + +# disable plugin to allow update settings +docker volume ls | while read volume_info; do + volume_driver="$(echo "${volume_info}" | xargs | cut -d " " -f 1)" + volume_name="$(echo "${volume_info}" | xargs | cut -d " " -f 2)" + if test -n "$(echo $volume_driver | grep "${PLUGIN_ALIAS}")"; then + docker volume rm "${volume_name}" > /dev/null; + fi +done +if test "${PLUGIN_STATUS}" = "true"; then + docker plugin disable "${PLUGIN_ALIAS}" \ + > /dev/null \ + || exit 1; +fi + +# set service +BUCKET_LOCATION="${BUCKET_LOCATION:-us-southeast-1}"; +SERVICE_DOMAIN="${SERVICE_DOMAIN:-linodeobjects.com}"; +URL="https://${BUCKET_LOCATION}.${SERVICE_DOMAIN}"; +DEFAULT_S3FSOPTS="url=${URL}/"; + +# set credentials +docker plugin set \ + "${PLUGIN_ALIAS}" AWSACCESSKEYID="${ACCESS_KEY}"; +docker plugin set \ + "${PLUGIN_ALIAS}" AWSSECRETACCESSKEY="${ACCESS_SECRET}"; + +# set permissions +DEFAULT_S3FSOPTS="uid=33,gid=33,allow_other,${DEFAULT_S3FSOPTS}"; + +docker plugin set "${PLUGIN_ALIAS}" DEFAULT_S3FSOPTS="${DEFAULT_S3FSOPTS}"; + +# enable plugin +docker plugin enable "${PLUGIN_ALIAS}"; \ No newline at end of file