Index

s3-bsync / c693349

Bidirectional syncing tool to sync local filesystem directories with S3 buckets. (Incomplete)

Latest Commit

{#}TimeHashSubjectAuthor#(+)(-)GPG?
729 May 2022 17:40c693349Update install scriptJosh Stockin1135G

Blob @ s3-bsync / install.sh

text/x-shellscript4286 bytesdownload raw
1#!/usr/bin/env bash
2
3# Script variables
4PYTHON_MAJOR=3
5PYTHON_MINOR=6
6ACCEPTABLE_PYTHON_COMMANDS="python3 python3.10 python3.9 python3.8 python3.7 python3.6 python"
7
8while read -r requirement
9do
10 REQUIRED_PIP_MODULES="$REQUIRED_PIP_MODULES $(sed -r "s/:.*//g" <<< $requirement)"
11 REQUIRED_PYTHON_MODULES="$REQUIRED_PYTHON_MODULES $(sed -r "s/.*://g" <<< $requirement)"
12done < requirements.txt
13
14# Plumbing
15set -o pipefail
16
17RESTORE=$(echo -en '\033[0m')
18STANDOUT=$(echo -en '\033[7m')
19RED=$(echo -en '\033[00;31m')
20GREEN=$(echo -en '\033[00;32m')
21YELLOW=$(echo -en '\033[00;33m')
22PURPLE=$(echo -en '\033[00;35m')
23LIGHTGRAY=$(echo -en '\033[00;37m')
24LRED=$(echo -en '\033[01;31m')
25LYELLOW=$(echo -en '\033[01;33m')
26LBLUE=$(echo -en '\033[01;34m')
27LCYAN=$(echo -en '\033[01;36m')
28
29SCRIPT_SOURCE_DIR=$(dirname -- "${BASH_SOURCE[0]}")
30
31
32# Handle argument input
33case $1 in
34 h|help|?|-h|-help|-?|--h|--help|--?)
35 echo "Usage: ./install.sh [install|uninstall] [<python executable>]"
36 exit 0
37 ;;
38 install)
39 PYTHON_COMMAND=$2
40 ;;
41 uninstall)
42 UNINSTALL=1
43 PYTHON_COMMAND=$2
44 ;;
45 *)
46 PYTHON_COMMAND=$1
47 ;;
48esac
49
50
51# Report operating mode
52if [ -z $UNINSTALL ]; then
53 echo "${YELLOW}Running in ${LYELLOW}INSTALL${YELLOW} mode${RESTORE}"
54else
55 echo "${YELLOW}Running in ${LYELLOW}UNINSTALL${YELLOW} mode${RESTORE}"
56 REQUIRED_PIP_MODULES="pip"
57 REQUIRED_PYTHON_MODULES="pip"
58fi
59
60
61# Determine Python interpreter to use
62echo "${LIGHTGRAY}Determining Python interpreter${RESTORE}"
63if [ -z $PYTHON_COMMAND ]; then
64 for COMMAND in $ACCEPTABLE_PYTHON_COMMANDS
65 do
66 if command -v $COMMAND &> /dev/null; then
67 PYTHON_COMMAND=$COMMAND
68 break
69 fi
70 done
71fi
72
73# Expand interpreter command, verify with `import sys` test instruction
74PYTHON_COMMAND=$(command -v $PYTHON_COMMAND)
75if [ -z $PYTHON_COMMAND ]; then
76 echo " ${RED}Python interpreter not found${RESTORE}"
77 exit 1
78fi
79if [ -h "$PYTHON_COMMAND" ]; then
80 PYTHON_COMMAND=$(readlink -f $PYTHON_COMMAND)
81fi
82echo " Trying interpreter [ ${LYELLOW}$PYTHON_COMMAND${RESTORE} ]"
83if ! $PYTHON_COMMAND -c "import sys"; then
84 echo " ${RED}Executable is not Python${RESTORE}"
85 exit 1
86fi
87
88
89# Verifying Python version
90echo "${LIGHTGRAY}Checking Python version${RESTORE} [ needs ${LIGHTGRAY}>=$PYTHON_MAJOR.$PYTHON_MINOR${RESTORE} ]"
91PYTHON_VERSION_STRING=$($PYTHON_COMMAND -c "print('.'.join([str(a) for a in __import__('sys').version_info[:3]]))")
92if ! $PYTHON_COMMAND -c "import sys;exit(not(sys.version_info.major==$PYTHON_MAJOR and sys.version_info.minor>=$PYTHON_MINOR))"; then
93 echo " ${RED}Python version must be ${RESTORE}[ ${LCYAN}>=$PYTHON_MAJOR.$PYTHON_MINOR${RESTORE} ]${RED}."\
94 "Installed is ${RESTORE}[ ${LCYAN}$PYTHON_VERSION_STRING${RESTORE} ]"
95 exit 1
96fi
97echo " Version [ ${LCYAN}$PYTHON_VERSION_STRING${RESTORE} ] acceptable"
98
99
100# Verifying required modules are installed
101echo "${LIGHTGRAY}Checking Python modules installed${RESTORE}"
102for MODULE in $(seq 1 $(wc -w <<< $REQUIRED_PIP_MODULES))
103do
104 PIP_MODULE=$(awk -v N=$MODULE '{print $N}' <<< "$REQUIRED_PIP_MODULES")
105 PYTHON_MODULE=$(awk -v N=$MODULE '{print $N}' <<< "$REQUIRED_PYTHON_MODULES")
106 if ! $PYTHON_COMMAND -c "import $PYTHON_MODULE" &> /dev/null; then
107 echo " ${RED}Required Python module ${RESTORE}[ ${LBLUE}$PYTHON_MODULE${RESTORE} ] ${RED}not found${RESTORE}"
108 echo " Install with ${PURPLE}$PYTHON_COMMAND -m pip install $PIP_MODULE${RESTORE}"
109 exit 1
110 fi
111 echo " Module [ ${LBLUE}$PYTHON_MODULE${RESTORE} ] found"
112done
113echo " ${GREEN}All required modules found${RESTORE}"
114
115
116# Set pip command based on script mode
117if [ -z $UNINSTALL ]; then
118 PIP_COMMAND="$PYTHON_COMMAND -m pip install $SCRIPT_SOURCE_DIR/"
119else
120 PIP_COMMAND="$PYTHON_COMMAND -m pip uninstall --yes s3-bsync"
121fi
122
123
124# Run pip command and handle output
125function indent() {
126 sed 's/^/ /';
127}
128echo "${LIGHTGRAY}Running [ ${PURPLE}$PIP_COMMAND${LIGHTGRAY} ]${RESTORE}"
129if $PIP_COMMAND 2>&1 | indent; then
130 echo "${GREEN}Success${RESTORE}"
131 exit 0
132else
133 ERROR_CODE=$?
134 echo "${LRED}${STANDOUT}pip did not exit successfully (status code $ERROR_CODE)${RESTORE}"
135 exit $ERROR_CODE
136fi
137