#!/bin/bash rclone_install () { local INSTALL_DIR="/opt" local BIN_DIR="/opt/bin" local FORCE=false local VERSION=current declare OPTION declare OPTARG declare OPTIND while getopts 'i:b:v:f' OPTION; do case "$OPTION" in i) INSTALL_DIR=$OPTARG ;; b) BIN_DIR=$OPTARG ;; v) echo "Installing Beta" VERSION=$OPTARG ;; f) echo "FORCING download/overwrite" FORCE=true ;; esac done shift $(( OPTIND - 1 )) # error codes # 0 - exited without problems # 1 - parameters not supported were used or some unexpected error occurred # 2 - OS or Architecture not supported by this script # 3 - installed version of rclone is up to date # 4 - supported unzip tools are not available # 5 - unable to install without sudo permission [[ ! -w "$INSTALL_DIR" ]] && echo $INSTALL is not writable by user $USER, can\'t install there && exit 5 [[ ! -w "$BIN_DIR" ]] && echo $BIN_DIR is not writable by user $USER, won\'t be able to link binary there && exit 5 INSTALL_DIR=$INSTALL_DIR/rclone # if [[ $EUID != 0 ]]; then # sudo "$0" "$@" # exit $? # fi #detect the platform set +e OS="`uname`" case $OS in Linux) OS='linux' ;; *) echo 'Only Linux OS not supported by this script' exit 2 ;; esac OS_type="`uname -m`" case $OS_type in x86_64|amd64) OS_type='amd64' ;; i?86|x86) OS_type='386' ;; arm*) OS_type='arm' ;; aarch64) OS_type='arm64' ;; *) echo 'OS architecture not supported' exit 2 ;; esac set -e #when adding a tool to the list make sure to also add its corresponding command further in the script # exit if no unzip tools available [[ -z "unzip" ]] && printf "Please install unzip and try again.\n\n" && exit 4 # Make sure we don't create a root owned .config/rclone directory #2127 # export XDG_CONFIG_HOME=config #check installed version of rclone to determine if update is necessary # installed_version=`rclone --version 2>>errors | head -n 1` # if [ -z "${install_beta}" ]; then # current_version=`curl https://downloads.rclone.org/version.txt` # else # current_version=`curl https://beta.rclone.org/version.txt` # fi # # if [ "$version" = "$current_version" ]; then # printf "\nThe latest ${install_beta}version of rclone ${version} is already installed.\n\n" # exit 3 # fi echo Installing to $INSTALL_DIR mkdir -p $INSTALL_DIR cd $INSTALL_DIR # mv rclone.bin rclone.bin.prev #create tmp directory and move to it with macOS compatibility fallback # mkdir $INSTALL_DIR/zip # $(mktemp -d -f rclone-zip) # cd $zip_dir # echo made temp #download and unzip if [[ $VERSION = "current" ]]; then download_link="https://downloads.rclone.org/rclone-current-$OS-$OS_type.zip" rclone_zip="rclone-current-$OS-$OS_type.zip" else download_link="https://beta.rclone.org/rclone-beta-latest-$OS-$OS_type.zip" rclone_zip="rclone-beta-latest-$OS-$OS_type.zip" fi echo downloading rclone binary archive $download_link # curl -O $download_link echo expanding archive unzip -j -o -a $rclone_zip mkdir -p $INSTALL_DIR/docs 2> /dev/null || true rm $INSTALL_DIR/docs/*.* 2> /dev/null || true echo moving documentation files to docs/ mv *.1 *.txt README.* $INSTALL_DIR/docs/ 2> /dev/null || true # rm *.zip echo preparing customized rclone command rm -rf rclone.bin mv rclone rclone.bin chown :sudo rclone.bin chmod 775 rclone.bin touch $INSTALL_DIR/rclone touch $INSTALL_DIR/rclone.conf mkdir $INSTALL_DIR/cache 2> /dev/null || true echo '#!/bin/bash' > $INSTALL_DIR/rclone CMD=$(echo $INSTALL_DIR/rclone.bin \ --config=$INSTALL_DIR/rclone.conf \ --cache-dir=$INSTALL_DIR/cache \ '$@' \ ) echo "$CMD" >> $INSTALL_DIR/rclone chown :sudo rclone chmod 775 rclone rm $BIN_DIR/rclone ln -s $INSTALL_DIR/rclone $BIN_DIR/rclone echo -e "rclone customized command can be launched from echo where: $(command -v rclone) \n $CMD" cd .. #update version variable post install version=`rclone --version 2>>errors | head -n 1` printf "\n${version} has successfully installed." printf '\nNow run "rclone config" for setup. Check https://rclone.org/docs/ for more details.\n\n' exit 0 }