@ -1,7 +1,8 @@
#!/bin/bash
#!/bin/bash
################################################################################
################################################################################
# Script for installing Odoo on Ubuntu 16.04, 18.04 and 20 .04 (could be used for other version too)
# Script for installing Odoo on Ubuntu 22 .04 (could be used for other version too)
# Author: Yenthe Van Ginneken
# Author: Yenthe Van Ginneken
# Contributed by: Behsoy Nabeih https://linkedin.com/in/beshoynabeih
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances
# This script will install Odoo on your Ubuntu 16.04 server. It can install multiple Odoo instances
# in one Ubuntu because of the different xmlrpc_ports
# in one Ubuntu because of the different xmlrpc_ports
@ -23,8 +24,7 @@ INSTALL_WKHTMLTOPDF="True"
# Set the default Odoo port (you still have to use -c /etc/odoo-server.conf for example to use this.)
# Set the default Odoo port (you still have to use -c /etc/odoo-server.conf for example to use this.)
OE_PORT = "8069"
OE_PORT = "8069"
# Choose the Odoo version which you want to install. For example: 13.0, 12.0, 11.0 or saas-18. When using 'master' the master version will be installed.
# Choose the Odoo version which you want to install. For example: 13.0, 12.0, 11.0 or saas-18. When using 'master' the master version will be installed.
# IMPORTANT! This script contains extra libraries that are specifically needed for Odoo 13.0
OE_VERSION = "17.0"
OE_VERSION = "15.0"
# Set this to True if you want to install the Odoo enterprise version!
# Set this to True if you want to install the Odoo enterprise version!
IS_ENTERPRISE = "False"
IS_ENTERPRISE = "False"
# Set this to True if you want to install Nginx!
# Set this to True if you want to install Nginx!
@ -47,18 +47,12 @@ ADMIN_EMAIL="odoo@example.com"
## === Ubuntu Trusty x64 & x32 === (for other distributions please replace these two links,
## === Ubuntu Trusty x64 & x32 === (for other distributions please replace these two links,
## in order to have correct version of wkhtmltopdf installed, for a danger note refer to
## in order to have correct version of wkhtmltopdf installed, for a danger note refer to
## https://github.com/odoo/odoo/wiki/Wkhtmltopdf ):
## https://github.com/odoo/odoo/wiki/Wkhtmltopdf ):
## https://www.odoo.com/documentation/1 3.0/setup/install.html#debian-ubuntu
## https://www.odoo.com/documentation/1 7.0/administration/on_premise/source.html
WKHTMLTOX_X64 = https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.trusty_amd64.deb
WKHTMLTOX_X32 = https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.trusty_i386.deb
#--------------------------------------------------
#--------------------------------------------------
# Update Server
# Update Server
#--------------------------------------------------
#--------------------------------------------------
echo -e "\n---- Update Server ----"
echo -e "\n---- Update Server ----"
# universe package is for Ubuntu 18.x
sudo add-apt-repository universe
# libpng12-0 dependency for wkhtmltopdf
sudo add-apt-repository "deb http://mirrors.kernel.org/ubuntu/ xenial main"
sudo apt-get update
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get upgrade -y
@ -66,7 +60,7 @@ sudo apt-get upgrade -y
# Install PostgreSQL Server
# Install PostgreSQL Server
#--------------------------------------------------
#--------------------------------------------------
echo -e "\n---- Install PostgreSQL Server ----"
echo -e "\n---- Install PostgreSQL Server ----"
sudo apt-get install postgresql postgresql-server-dev-all -y
sudo apt-get install postgresql postgresql-client -y
echo -e "\n---- Creating the ODOO PostgreSQL User ----"
echo -e "\n---- Creating the ODOO PostgreSQL User ----"
sudo su - postgres -c " createuser -s $OE_USER " 2> /dev/null || true
sudo su - postgres -c " createuser -s $OE_USER " 2> /dev/null || true
@ -75,7 +69,7 @@ sudo su - postgres -c "createuser -s $OE_USER" 2> /dev/null || true
# Install Dependencies
# Install Dependencies
#--------------------------------------------------
#--------------------------------------------------
echo -e "\n--- Installing Python 3 + pip3 --"
echo -e "\n--- Installing Python 3 + pip3 --"
sudo apt-get install git python3 python3-pip build-essential wget python3-dev python3-venv python3-wheel libxslt-dev libzip-dev libldap2-dev libsasl2-dev python3-setuptools node-less libpng12-0 libjpeg-dev gdebi -y
sudo apt install python3-pip libldap2-dev libpq-dev libsasl2-dev -y
echo -e "\n---- Install python packages/requirements ----"
echo -e "\n---- Install python packages/requirements ----"
sudo -H pip3 install -r https://github.com/odoo/odoo/raw/${ OE_VERSION } /requirements.txt
sudo -H pip3 install -r https://github.com/odoo/odoo/raw/${ OE_VERSION } /requirements.txt
@ -88,25 +82,18 @@ sudo npm install -g rtlcss
# Install Wkhtmltopdf if needed
# Install Wkhtmltopdf if needed
#--------------------------------------------------
#--------------------------------------------------
if [ $INSTALL_WKHTMLTOPDF = "True" ] ; then
if [ $INSTALL_WKHTMLTOPDF = "True" ] ; then
echo -e "\n---- Install wkhtml and place shortcuts on correct place for ODOO 13 ----"
echo -e "\n---- Install wkhtml topdf ----"
#pick up correct one from x64 & x32 versions:
#pick up correct one from x64 & x32 versions:
if [ "`getconf LONG_BIT`" = = "64" ] ; then
WKHTMLTOX_X64 = https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb
_url = $WKHTMLTOX_X64
sudo wget $WKHTMLTOX_X64
else
sudo apt install ./wkhtmltox_0.12.6.1-3.jammy_amd64.deb -y
_url = $WKHTMLTOX_X32
sudo rm wkhtmltox_0.12.6.1-3.jammy_amd64.deb
fi
sudo wget $_url
sudo gdebi --n ` basename $_url `
sudo ln -s /usr/local/bin/wkhtmltopdf /usr/bin
sudo ln -s /usr/local/bin/wkhtmltoimage /usr/bin
else
else
echo "Wkhtmltopdf isn't installed due to the choice of the user!"
echo "Wkhtmltopdf isn't installed due to the choice of the user!"
fi
fi
echo -e "\n---- Create ODOO system user ----"
echo -e "\n---- Create ODOO system user ----"
sudo adduser --system --quiet --shell= /bin/bash --home= $OE_HOME --gecos 'ODOO' --group $OE_USER
sudo adduser --system --quiet --shell= /bin/bash --home= $OE_HOME --group $OE_USER
#The user should also be added to the sudo'ers group.
sudo adduser $OE_USER sudo
echo -e "\n---- Create Log directory ----"
echo -e "\n---- Create Log directory ----"
sudo mkdir /var/log/$OE_USER
sudo mkdir /var/log/$OE_USER
@ -116,38 +103,30 @@ sudo chown $OE_USER:$OE_USER /var/log/$OE_USER
# Install ODOO
# Install ODOO
#--------------------------------------------------
#--------------------------------------------------
echo -e "\n==== Installing ODOO Server ===="
echo -e "\n==== Installing ODOO Server ===="
sudo git clone --depth 1 --branch $OE_VERSION https://www. github.com/odoo/odoo $OE_HOME_EXT /
sudo git clone --depth 1 --branch $OE_VERSION https://github.com/odoo/odoo.git $OE_HOME_EXT
if [ $IS_ENTERPRISE = "True" ] ; then
if [ $IS_ENTERPRISE = "True" ] ; then
# Odoo Enterprise install!
# Odoo Enterprise install!
sudo pip3 install psycopg2-binary pdfminer.six
sudo pip3 install psycopg2-binary pdfminer.six
echo -e "\n--- Create symlink for node"
sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo su $OE_USER -c " mkdir $OE_HOME /enterprise "
sudo su $OE_USER -c " mkdir $OE_HOME /enterprise/addons "
GITHUB_RESPONSE = $( sudo git clone --depth 1 --branch $OE_VERSION https://www.github.com/odoo/enterprise " $OE_HOME /enterprise/addons " 2>& 1)
GITHUB_RESPONSE = $( sudo git clone --depth 1 --branch $OE_VERSION https://www.github.com/odoo/enterprise " $OE_HOME " 2>& 1)
while [ [ $GITHUB_RESPONSE = = *"Authentication" * ] ] ; do
while [ [ $GITHUB_RESPONSE = = *"Authentication" * ] ] ; do
echo "------------------------WARNING------------------------------"
echo "------------------------WARNING------------------------------"
echo "Your authentication with Github has failed! Please try again."
echo "Your authentication with Github has failed! Please try again."
printf "In order to clone and install the Odoo enterprise version you \nneed to be an offical Odoo partner and you need access to\nhttp://github.com/odoo/enterprise.\n"
printf "In Odoo order to clone and install the Odoo enterprise version you \nneed to be an offical Odoo partner and you need access to\nhttp://github.com/odoo/enterprise.\n"
echo "TIP: Press ctrl+c to stop this script."
echo "TIP: Press ctrl+c to stop this script."
echo "-------------------------------------------------------------"
echo "-------------------------------------------------------------"
echo " "
echo " "
GITHUB_RESPONSE = $( sudo git clone --depth 1 --branch $OE_VERSION https://www.github.com/odoo/enterprise " $OE_HOME /enterprise/addons " 2>& 1)
GITHUB_RESPONSE = $( sudo git clone --depth 1 --branch $OE_VERSION https://www.github.com/odoo/enterprise " $OE_HOME /enterprise/addons " 2>& 1)
done
done
echo -e " \n---- Added Enterprise code under $OE_HOME /enterprise /addons ----"
echo -e " \n---- Added Enterprise code under $OE_HOME /enterprise ----"
echo -e "\n---- Installing Enterprise specific libraries ----"
echo -e "\n---- Installing Enterprise specific libraries ----"
sudo -H pip3 install num2words ofxparse dbfread ebaysdk firebase_admin pyOpenSSL
sudo -H pip3 install num2words ofxparse dbfread ebaysdk google_auth pyOpenSSL zeep pyjwt cryptography
sudo npm install -g less
sudo npm install -g less
sudo npm install -g less-plugin-clean-css
sudo npm install -g less-plugin-clean-css
fi
fi
echo -e "\n---- Create custom module directory ----"
sudo su $OE_USER -c " mkdir $OE_HOME /custom "
sudo su $OE_USER -c " mkdir $OE_HOME /custom/addons "
echo -e "\n---- Setting permissions on home folder ----"
echo -e "\n---- Setting permissions on home folder ----"
sudo chown -R $OE_USER :$OE_USER $OE_HOME /*
sudo chown -R $OE_USER :$OE_USER $OE_HOME /*
@ -162,104 +141,48 @@ if [ $GENERATE_RANDOM_PASSWORD = "True" ]; then
OE_SUPERADMIN = $( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1)
OE_SUPERADMIN = $( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1)
fi
fi
sudo su root -c " printf 'admin_passwd = ${ OE_SUPERADMIN } \n' >> /etc/ ${ OE_CONFIG } .conf "
sudo su root -c " printf 'admin_passwd = ${ OE_SUPERADMIN } \n' >> /etc/ ${ OE_CONFIG } .conf "
if [ $OE_VERSION > "11.0" ] ; then
sudo su root -c " printf 'http_port = ${ OE_PORT } \n' >> /etc/ ${ OE_CONFIG } .conf "
sudo su root -c " printf 'http_port = ${ OE_PORT } \n' >> /etc/ ${ OE_CONFIG } .conf "
else
sudo su root -c " printf 'xmlrpc_port = ${ OE_PORT } \n' >> /etc/ ${ OE_CONFIG } .conf "
fi
sudo su root -c " printf 'logfile = /var/log/ ${ OE_USER } / ${ OE_CONFIG } .log\n' >> /etc/ ${ OE_CONFIG } .conf "
sudo su root -c " printf 'logfile = /var/log/ ${ OE_USER } / ${ OE_CONFIG } .log\n' >> /etc/ ${ OE_CONFIG } .conf "
if [ $IS_ENTERPRISE = "True" ] ; then
if [ $IS_ENTERPRISE = "True" ] ; then
sudo su root -c " printf 'addons_path= ${ OE_HOME } /enterprise /addons ,${ OE_HOME_EXT } /addons\n' >> /etc/ ${ OE_CONFIG } .conf "
sudo su root -c " printf 'addons_path= ${ OE_HOME } /enterprise, ${ OE_HOME_EXT } /addons\n' >> /etc/ ${ OE_CONFIG } .conf "
else
else
sudo su root -c " printf 'addons_path= ${ OE_HOME_EXT } /addons ,${ OE_HOME } /custom/addons \n' >> /etc/${ OE_CONFIG } .conf "
sudo su root -c " printf 'addons_path= ${ OE_HOME_EXT } /addons \n' >> /etc/${ OE_CONFIG } .conf "
fi
fi
sudo chown $OE_USER :$OE_USER /etc/${ OE_CONFIG } .conf
sudo chown $OE_USER :$OE_USER /etc/${ OE_CONFIG } .conf
sudo chmod 640 /etc/${ OE_CONFIG } .conf
sudo chmod 640 /etc/${ OE_CONFIG } .conf
echo -e "* Create startup file"
sudo su root -c " echo '#!/bin/sh' >> $OE_HOME_EXT /start.sh "
sudo su root -c " echo 'sudo -u $OE_USER $OE_HOME_EXT /odoo-bin --config=/etc/ ${ OE_CONFIG } .conf' >> $OE_HOME_EXT /start.sh "
sudo chmod 755 $OE_HOME_EXT /start.sh
#--------------------------------------------------
#--------------------------------------------------
# Adding ODOO as a deamon (initscript)
# Adding ODOO as a deamon (initscript)
#--------------------------------------------------
#--------------------------------------------------
echo -e "* Create init file"
echo -e "* Create init file"
cat <<EOF > ~/$OE _CONFIG
cat <<EOF > ~/$OE _CONFIG
#!/bin/sh
[ Unit]
### BEGIN INIT INFO
Description = $OE_CONFIG
# Provides: $OE_CONFIG
Requires = postgresql.service
# Required-Start: \$remote_fs \$syslog
After = network.target postgresql.service
# Required-Stop: \$remote_fs \$syslog
# Should-Start: \$network
[ Service]
# Should-Stop: \$network
Type = simple
# Default-Start: 2 3 4 5
SyslogIdentifier = $OE_CONFIG
# Default-Stop: 0 1 6
PermissionsStartOnly = true
# Short-Description: Enterprise Business Applications
User = $OE_USER
# Description: ODOO Business Applications
Group = $OE_USER
### END INIT INFO
ExecStart = python3 ${ OE_HOME_EXT } /odoo-bin -c /etc/${ OE_CONFIG } .conf
PATH = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
StandardOutput = journal+console
DAEMON = $OE_HOME_EXT /odoo-bin
NAME = $OE_CONFIG
[ Install]
DESC = $OE_CONFIG
WantedBy = multi-user.target
# Specify the user name (Default: odoo).
USER = $OE_USER
# Specify an alternate config file (Default: /etc/openerp-server.conf).
CONFIGFILE = " /etc/ ${ OE_CONFIG } .conf "
# pidfile
PIDFILE = /var/run/\$ { NAME} .pid
# Additional options that are passed to the Daemon.
DAEMON_OPTS = "-c \$CONFIGFILE"
[ -x \$ DAEMON ] || exit 0
[ -f \$ CONFIGFILE ] || exit 0
checkpid( ) {
[ -f \$ PIDFILE ] || return 1
pid = \` cat \$ PIDFILE\`
[ -d /proc/\$ pid ] && return 0
return 1
}
case "\${1}" in
start)
echo -n "Starting \${DESC}: "
start-stop-daemon --start --quiet --pidfile \$ PIDFILE \
--chuid \$ USER --background --make-pidfile \
--exec \$ DAEMON -- \$ DAEMON_OPTS
echo "\${NAME}."
; ;
stop)
echo -n "Stopping \${DESC}: "
start-stop-daemon --stop --quiet --pidfile \$ PIDFILE \
--oknodo
echo "\${NAME}."
; ;
restart| force-reload)
echo -n "Restarting \${DESC}: "
start-stop-daemon --stop --quiet --pidfile \$ PIDFILE \
--oknodo
sleep 1
start-stop-daemon --start --quiet --pidfile \$ PIDFILE \
--chuid \$ USER --background --make-pidfile \
--exec \$ DAEMON -- \$ DAEMON_OPTS
echo "\${NAME}."
; ;
*)
N = /etc/init.d/\$ NAME
echo "Usage: \$NAME {start|stop|restart|force-reload}" >& 2
exit 1
; ;
esac
exit 0
EOF
EOF
echo -e "* Security Init File"
echo -e "* Security Init File"
sudo mv ~/$OE_CONFIG /etc/init.d/$OE_CONFIG
sudo mv ~/$OE_CONFIG /etc/systemd/system/$OE_CONFIG .service
sudo chmod 755 /etc/init.d/$OE_CONFIG
sudo chmod 755 /etc/systemd/system/$OE_CONFIG .service
sudo chown root: /etc/init.d/$OE_CONFIG
sudo chown root: /etc/systemd/system/$OE_CONFIG .service
echo -e "* Start ODOO on Startup "
echo -e "* restart daemon"
sudo update-rc.d $OE_CONFIG defaults
sudo systemctl daemon-reload
#--------------------------------------------------
#--------------------------------------------------
# Install Nginx if needed
# Install Nginx if needed
@ -365,7 +288,7 @@ else
fi
fi
echo -e "* Starting Odoo Service"
echo -e "* Starting Odoo Service"
sudo su root -c " /etc/init.d/ $OE_CONFIG start "
sudo sudo systemctl enable --now $OE_CONFIG .service
echo "-----------------------------------------------------------"
echo "-----------------------------------------------------------"
echo "Done! The Odoo server is up and running. Specifications:"
echo "Done! The Odoo server is up and running. Specifications:"
echo " Port: $OE_PORT "
echo " Port: $OE_PORT "