2025-01-07 09:34:26 +07:00
#!/usr/bin/bash
export PATH = /usr/sbin:$PATH
export DEBIAN_FRONTEND = noninteractive
set -euo pipefail
DEPLOY_PATH = $( pwd ) /deployment
2025-01-07 17:52:17 +07:00
SETUP_PATH = $( pwd ) /setup
ODOO_IMAGE = $1
ODOO_TAG = $2
ODOO_CONTAINER = $3
2025-01-07 09:34:26 +07:00
PG_DB = nexterp
PG_USER = nexterp
ODOO_ADDONS = ./addons
ODOO_CONFIG = ./etc
# System
2025-01-07 12:20:00 +07:00
DEPENDS_PACKAGE = ( 'wget' 'curl' 'git' 'unzip' 'make' 'build-essential' 'wkhtmltopdf' )
DEPENDS_COMMAND = ( 'wget' 'curl' 'git' 'unzip' 'make' 'wkhtmltopdf' )
2025-01-07 09:34:26 +07:00
( ( 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
}
2025-01-07 17:52:17 +07:00
Generate_Config( ) {
2025-01-07 09:34:26 +07:00
if [ [ ! -f " ${ DEPLOY_PATH } /.env " ] ] ; then
cp " ${ DEPLOY_PATH } /env.template " " ${ DEPLOY_PATH } /.env "
fi
2025-01-07 17:52:17 +07:00
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"
2025-01-07 09:34:26 +07:00
}
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
}
2025-01-07 17:52:17 +07:00
# Check_OS
# Update_Package_Resource
# Install_Depends
# Check_Dependency_Installation
# Check_Docker_Install
Generate_Config