196 lines
6.6 KiB
Bash
Executable File
196 lines
6.6 KiB
Bash
Executable File
#!/usr/bin/bash
|
|
|
|
export PATH=/usr/sbin:$PATH
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
set -euo pipefail
|
|
DEPLOY_PATH=$(pwd)/deployment
|
|
SETUP_PATH=$(pwd)/setup
|
|
ODOO_IMAGE=$1
|
|
ODOO_TAG=$2
|
|
ODOO_CONTAINER=$3
|
|
PG_DB=nexterp
|
|
PG_USER=nexterp
|
|
ODOO_ADDONS=./addons
|
|
ODOO_CONFIG=./etc
|
|
# System
|
|
DEPENDS_PACKAGE=('wget' 'curl' 'git' 'unzip' 'make' 'build-essential' 'wkhtmltopdf')
|
|
DEPENDS_COMMAND=('wget' 'curl' 'git' 'unzip' 'make' 'wkhtmltopdf')
|
|
((EUID)) && sudo_cmd="sudo" || sudo_cmd=""
|
|
readonly MINIMUM_DOCER_VERSION="20"
|
|
UNAME_U="$(uname -s)"
|
|
readonly UNAME_U
|
|
readonly COLOUR_RESET='\e[0m'
|
|
readonly aCOLOUR=(
|
|
'\e[38;5;154m' # green | Lines, bullets and separators
|
|
'\e[1m' # Bold white | Main descriptions
|
|
'\e[90m' # Grey | Credits
|
|
'\e[91m' # Red | Update notifications Alert
|
|
'\e[33m' # Yellow | Emphasis
|
|
)
|
|
trap 'onCtrlC' INT
|
|
onCtrlC() {
|
|
echo -e "${COLOUR_RESET}"
|
|
exit 1
|
|
}
|
|
|
|
Show() {
|
|
# OK
|
|
if (($1 == 0)); then
|
|
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[0]} OK $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
|
|
# FAILED
|
|
elif (($1 == 1)); then
|
|
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[3]}FAILED$COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
|
|
exit 1
|
|
# INFO
|
|
elif (($1 == 2)); then
|
|
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[0]} INFO $COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
|
|
# NOTICE
|
|
elif (($1 == 3)); then
|
|
echo -e "${aCOLOUR[2]}[$COLOUR_RESET${aCOLOUR[4]}NOTICE$COLOUR_RESET${aCOLOUR[2]}]$COLOUR_RESET $2"
|
|
fi
|
|
}
|
|
|
|
Warn() {
|
|
echo -e "${aCOLOUR[3]}$1$COLOUR_RESET"
|
|
}
|
|
|
|
GreyStart() {
|
|
echo -e "${aCOLOUR[2]}\c"
|
|
}
|
|
|
|
ColorReset() {
|
|
echo -e "$COLOUR_RESET\c"
|
|
}
|
|
|
|
|
|
Update_Package_Resource() {
|
|
GreyStart
|
|
if [ -x "$(command -v apk)" ]; then
|
|
${sudo_cmd} apk update
|
|
elif [ -x "$(command -v apt)" ]; then
|
|
${sudo_cmd} apt update
|
|
elif [ -x "$(command -v dnf)" ]; then
|
|
${sudo_cmd} dnf check-update
|
|
elif [ -x "$(command -v zypper)" ]; then
|
|
${sudo_cmd} zypper update
|
|
elif [ -x "$(command -v yum)" ]; then
|
|
${sudo_cmd} yum update
|
|
fi
|
|
ColorReset
|
|
}
|
|
# 3 Check OS
|
|
Check_OS() {
|
|
if [[ $UNAME_U == *Linux* ]]; then
|
|
Show 0 "Your System is : $UNAME_U"
|
|
else
|
|
Show 1 "This script is only for Linux."
|
|
exit 1
|
|
fi
|
|
}
|
|
Generate_Config(){
|
|
if [[ ! -f "${DEPLOY_PATH}/.env" ]]; then
|
|
cp "${DEPLOY_PATH}/env.template" "${DEPLOY_PATH}/.env"
|
|
fi
|
|
python "$SETUP_PATH/gen-config.py" --db_port 5432 --db_user $PG_USER --deploy_path "$DEPLOY_PATH" \
|
|
--db ${PG_DB:=odoo} --image "${ODOO_IMAGE}" --container "${ODOO_CONTAINER}" --tag "${ODOO_TAG:=latest}" --addons "${ODOO_ADDONS}" --config "${ODOO_CONFIG}"
|
|
Show 0 " Generate Config Complete"
|
|
}
|
|
|
|
Install_Depends() {
|
|
for ((i = 0; i < ${#DEPENDS_COMMAND[@]}; i++)); do
|
|
cmd=${DEPENDS_COMMAND[i]}
|
|
if [[ ! -x $(${sudo_cmd} which "$cmd") ]]; then
|
|
packagesNeeded=${DEPENDS_PACKAGE[i]}
|
|
Show 2 "Install the necessary dependencies: \e[33m$packagesNeeded \e[0m"
|
|
GreyStart
|
|
if [ -x "$(command -v apk)" ]; then
|
|
${sudo_cmd} apk add --no-cache "$packagesNeeded"
|
|
elif [ -x "$(command -v apt-get)" ]; then
|
|
${sudo_cmd} apt-get -y -q install "$packagesNeeded" --no-upgrade
|
|
elif [ -x "$(command -v dnf)" ]; then
|
|
${sudo_cmd} dnf install "$packagesNeeded"
|
|
elif [ -x "$(command -v zypper)" ]; then
|
|
${sudo_cmd} zypper install "$packagesNeeded"
|
|
elif [ -x "$(command -v yum)" ]; then
|
|
${sudo_cmd} yum install "$packagesNeeded"
|
|
elif [ -x "$(command -v pacman)" ]; then
|
|
${sudo_cmd} pacman -S "$packagesNeeded"
|
|
elif [ -x "$(command -v paru)" ]; then
|
|
${sudo_cmd} paru -S "$packagesNeeded"
|
|
else
|
|
Show 1 "Package manager not found. You must manually install: \e[33m$packagesNeeded \e[0m"
|
|
fi
|
|
ColorReset
|
|
else
|
|
Show 2 "\e[33m ${DEPENDS_COMMAND[i]}\e[0m Installed"
|
|
fi
|
|
done
|
|
}
|
|
|
|
Check_Dependency_Installation() {
|
|
for ((i = 0; i < ${#DEPENDS_COMMAND[@]}; i++)); do
|
|
cmd=${DEPENDS_COMMAND[i]}
|
|
if [[ ! -x $(${sudo_cmd} which "$cmd") ]]; then
|
|
packagesNeeded=${DEPENDS_PACKAGE[i]}
|
|
Show 1 "Dependency \e[33m$packagesNeeded \e[0m installation failed, please try again manually!"
|
|
exit 1
|
|
fi
|
|
done
|
|
}
|
|
Check_Docker_Install() {
|
|
if [[ -x "$(command -v docker)" ]]; then
|
|
Docker_Version=$(${sudo_cmd} docker version --format '{{.Server.Version}}')
|
|
if [[ $? -ne 0 ]]; then
|
|
Install_Docker
|
|
elif [[ ${Docker_Version:0:2} -lt "${MINIMUM_DOCER_VERSION}" ]]; then
|
|
Show 1 "Recommended minimum Docker version is \e[33m${MINIMUM_DOCER_VERSION}.xx.xx\e[0m,\Current Docker verison is \e[33m${Docker_Version}\e[0m,\nPlease uninstall current Docker and rerun the CasaOS installation script."
|
|
exit 1
|
|
else
|
|
Show 0 "Current Docker verison is ${Docker_Version}."
|
|
fi
|
|
else
|
|
Install_Docker
|
|
fi
|
|
}
|
|
Install_Docker() {
|
|
Show 2 "Install the necessary dependencies: \e[33mDocker \e[0m"
|
|
if [[ ! -d "${PREFIX}/etc/apt/sources.list.d" ]]; then
|
|
${sudo_cmd} mkdir -p "${PREFIX}/etc/apt/sources.list.d"
|
|
fi
|
|
GreyStart
|
|
if [[ "${REGION}" = "CN" ]]; then
|
|
${sudo_cmd} curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
|
|
else
|
|
${sudo_cmd} curl -fsSL https://get.docker.com | bash
|
|
fi
|
|
ColorReset
|
|
if [[ $? -ne 0 ]]; then
|
|
Show 1 "Installation failed, please try again."
|
|
exit 1
|
|
else
|
|
Check_Docker_Install_Final
|
|
fi
|
|
}
|
|
Check_Docker_Install_Final() {
|
|
if [[ -x "$(command -v docker)" ]]; then
|
|
Docker_Version=$(${sudo_cmd} docker version --format '{{.Server.Version}}')
|
|
if [[ $? -ne 0 ]]; then
|
|
Install_Docker
|
|
elif [[ ${Docker_Version:0:2} -lt "${MINIMUM_DOCER_VERSION}" ]]; then
|
|
Show 1 "Recommended minimum Docker version is \e[33m${MINIMUM_DOCER_VERSION}.xx.xx\e[0m,\Current Docker verison is \e[33m${Docker_Version}\e[0m,\nPlease uninstall current Docker and rerun the CasaOS installation script."
|
|
exit 1
|
|
else
|
|
Show 0 "Current Docker verison is ${Docker_Version}."
|
|
Check_Docker_Running
|
|
fi
|
|
else
|
|
Show 1 "Installation failed, please run 'curl -fsSL https://get.docker.com | bash' and rerun the CasaOS installation script."
|
|
exit 1
|
|
fi
|
|
}
|
|
# Check_OS
|
|
# Update_Package_Resource
|
|
# Install_Depends
|
|
# Check_Dependency_Installation
|
|
# Check_Docker_Install
|
|
Generate_Config |