Automated installation scripts for Odoo ERP and ZSH shell setup on Ubuntu/Debian systems.
Minimal Odoo installer. Asks for the version, then installs everything.
- Minimal Prompts - Install user and Odoo version, plus the Python manager when an older Python is needed
- Dedicated User - Install under the current user or create a new one for Odoo
- uv Virtualenv - Dependencies are isolated in a venv, never installed system-wide
- systemd Service - Odoo runs as a service and starts on boot
- Native Installation - Installs Odoo directly on the system
- Supports Odoo versions 12-19
- Ubuntu/Debian based system
- sudo privileges
- Internet connection
chmod +x odoo_install.sh
./odoo_install.sh| Screen | Options | When |
|---|---|---|
| Installation User | current user / new user | Always |
| Odoo Version | 12, 13, 14, 15, 16, 17, 18, 19 | Always |
| Python Manager | pyenv / uv | Only for Odoo 12-16 |
Defaults are set at the top of the script (OE_PASSWORD, OE_PORT,
PY_FOR_12_14, PY_FOR_15, PY_FOR_16) — edit them there if you need
different values.
- current — everything is installed under the user running the script.
- new — you enter a username and the script creates it with
adduser --system --shell=/bin/bash, then installs everything under that user's home. If the name already exists, it asks whether to install under that existing user instead.
Either way the PostgreSQL superuser role is created with that same name, and uv/pyenv, the virtualenv, and the Odoo clone all live in that user's home.
Older Odoo releases don't run on the Python that ships with current Ubuntu, so the script asks how to get the right one:
| Odoo | Python | Prompted? |
|---|---|---|
| 12-14 | 3.6 | Yes — pyenv recommended |
| 15 | 3.9 | Yes — uv recommended |
| 16 | 3.10 | Yes — uv recommended |
| 17-19 | system Python | No |
- pyenv — builds the Python from source and pins it to the install directory
with
pyenv local. Requirements are installed into that pyenv Python. - uv — creates a venv at
~/workspace/odoo{version}/venvusinguv venv --python <version>. Requirements go into the venv.
uv can download Python 3.8 and newer, so it is the easy choice for Odoo 15/16.
It cannot supply Python 3.6, so Odoo 12-14 need pyenv unless a 3.6
interpreter is already on the machine. For Odoo 17+ no question is asked — the
script just creates the venv with uv venv. uv is installed automatically if
missing.
- Odoo source cloned from the official repository
- PostgreSQL locally, with a superuser role for the install user
- Python dependencies into a uv venv (or the pyenv Python)
- nodejs, npm and rtlcss (right-to-left language support)
- wkhtmltopdf (distro package, falling back to Odoo's nightly build on x86_64)
- An
odoo.confwith a generated master password - A systemd service that starts Odoo on boot
Under the install user's home:
~/workspace/odoo{version}/odoo/ # Odoo source
~/workspace/odoo{version}/odoo.conf # Configuration
~/workspace/odoo{version}/venv/ # Virtualenv (uv path only)
~/workspace/custom_addons/odoo{version}/ # Custom addons directory
Plus /etc/systemd/system/odoo{version}.service.
The script generates ~/workspace/odoo{version}/odoo.conf (mode 640, owned by
the install user) and the service runs odoo-bin -c against it. To change ports,
addons paths, workers or database settings, edit that file and restart:
sudo systemctl restart odoo{version}No daemon-reload is needed — the unit itself doesn't change.
A random 24-character master password is generated and printed at the end of
the install. It is stored as admin_passwd in the config and is required to
create, duplicate or drop databases. Save it.
Re-running the installer keeps an existing odoo.conf untouched, so your edits
and master password survive.
Two settings to review before going public:
list_db = Falseonce your database exists, to hide the database managerproxy_mode = Trueif you put nginx or another reverse proxy in front
The script installs odoo{version}.service, enables it, and starts it. It runs
as the install user and restarts on failure.
sudo systemctl status odoo{version}
sudo systemctl restart odoo{version}
sudo journalctl -u odoo{version} -f
# Turn off autostart
sudo systemctl disable --now odoo{version}To run in the foreground instead, stop the service first:
sudo systemctl stop odoo{version}
sudo -u <odoo-user> -H bash # only if installed under another user
cd ~/workspace/odoo{version}/odoo
~/workspace/odoo{version}/venv/bin/python odoo-bin -c ~/workspace/odoo{version}/odoo.confThe exact commands for your install are printed at the end of the script.
Installs a complete ZSH environment with Oh-My-Zsh, Powerlevel10k theme, and plugins.
- Oh-My-Zsh framework
- Powerlevel10k theme
- zsh-autosuggestions plugin
- MesloLGS NF fonts
chmod +x zsh_install.sh
./zsh_install.sh- Set terminal font to
MesloLGS NF - Run
exec zshor restart terminal - Run
p10k configureto customize prompt
| Package | Purpose |
|---|---|
| git | Repository cloning |
| curl | Downloading files |
| wget | Downloading packages |
| sudo | Administrative tasks |
| whiptail | Interactive menus (auto-installed) |
| uv | Virtualenv + package installs (auto-installed) |
| pyenv | Older Python builds, if chosen (auto-installed) |
- Ubuntu 22.04 LTS (Jammy)
- Ubuntu 24.04 LTS (Noble)
- Port already in use: Start Odoo with a different
--http-port - PostgreSQL auth failure: The role password is
OE_PASSWORDfrom the script (defaultadmin)
MIT License