[enh] Support Odoo 10.0

This commit is contained in:
ljf 2017-05-18 23:28:18 +02:00
parent cdeb9afbf2
commit 7e90882712
14 changed files with 586 additions and 281 deletions

View file

@ -22,10 +22,8 @@ https://example.com/odoo/ will NOT work
What does not work What does not work
------------------ ------------------
- Automatic database creation (experimental)
- Backup and restore via Odoo (works with a trick shared on the Github) - Backup and restore via Odoo (works with a trick shared on the Github)
- Backup and restore via YunoHost - Backup and restore via YunoHost
- Automatic LDAP configuration
Still to do Still to do
----------- -----------
@ -37,18 +35,6 @@ Still to do
Configuration Configuration
------------- -------------
**Create the database manually**
- The database must be named "*subdomain-domain-tld*" (for example *erp-test-com* if you access the database via *erp.test.com*
**Setup LDAP**
- Create a user named "template" with email "template". This user will give its permissions by default to YunoHost users so you can also give it appropriate permissions.
- In "Edit Company Data" (on the logo), go to "Configuration" and add a LDAP setting
- LDAP Address: localhost
- LDAP Port: 389
- LDAP Base: ou=users, dc=yunohost,dc=org
- LDAP filter: uid=%s
- Template user: template
- Save
**Backup via Odoo** **Backup via Odoo**
- In YunoHost, open the port 8069 - In YunoHost, open the port 8069

37
check_process Normal file
View file

@ -0,0 +1,37 @@
;; Test complet sans multisite
auto_remove=1
; Manifest
domain="domain.tld" (DOMAIN)
version="10.0"
oca=0
admin_password="testpassw0rD"
lang="en_US"
tz="Europe/Paris"
; Checks
pkg_linter=1
setup_sub_dir=0
setup_root=1
setup_nourl=0
setup_private=0
setup_public=1
upgrade=1
backup_restore=1
multi_instance=1
wrong_user=0
wrong_path=0
incorrect_path=0
corrupt_source=1
fail_download_source=1
port_already_use=1
final_path_already_use=0
;;; Levels
Level 1=auto
Level 2=auto
Level 3=auto
Level 4=0
Level 5=auto
Level 6=auto
Level 7=auto
Level 8=0
Level 9=0
Level 10=0

5
conf/app.src Normal file
View file

@ -0,0 +1,5 @@
SOURCE_URL=http://download.gna.org/wkhtmltopdf/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
SOURCE_SUM=049b2cdec9a8254f0ef8ac273afaf54f7e25459a273e27189591edc7d7cf29db
SOURCE_FILE=wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
SOURCE_FORMAT=tar.xz
SOURCE_SUM_PRG=sha256sum

View file

@ -1,4 +0,0 @@
#!/usr/bin/python
import oerplib
oerp = oerplib.OERP(server='localhost', protocol='xmlrpc', port=8069)
oerp.db.create_database('ADMIN_PASSWORD', 'DOMAIN_DATABASE', False, 'DATABASE_LANG', 'DATABASE_PASSWORD')

View file

@ -2,10 +2,10 @@ location / {
if ($scheme = http) { if ($scheme = http) {
rewrite ^ https://$server_name$request_uri? permanent; rewrite ^ https://$server_name$request_uri? permanent;
} }
try_files $uri @#YNH_APP_INSTANCE_NAME#; try_files $uri @{{ app }};
} }
location @#YNH_APP_INSTANCE_NAME# { location @{{ app }} {
proxy_pass http://127.0.0.1:8069; proxy_pass http://127.0.0.1:{{ port }};
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_buffers 16 64k; proxy_buffers 16 64k;
proxy_buffer_size 128k; proxy_buffer_size 128k;

View file

@ -1,11 +1,11 @@
[options] [options]
; This is the password that allows database operations: ; This is the password that allows database operations:
without_demo = all without_demo = all
admin_passwd = ADMIN_PASSWORD admin_passwd = {{ admin_password }}
db_host = false db_host = false
db_port = false db_port = false
db_user = odoo db_user = odoo
db_password = DATABASE_PASSWORD db_password = {{ dbpass }}
addons_path = /usr/lib/python2.7/dist-packages/openerp/addons addons_path = {{ source_path }}addons
proxy_mode = true proxy_mode = true
dbfilter = %h dbfilter = %h

View file

@ -10,10 +10,11 @@
"name": "scith, ljf", "name": "scith, ljf",
"email": "ljf+yunohost@grimaud.me" "email": "ljf+yunohost@grimaud.me"
}, },
"version": "10.0-1",
"url": "https://www.odoo.com", "url": "https://www.odoo.com",
"license": "free", "license": "LGPL-3.0",
"requirements": { "requirements": {
"yunohost": ">= 2.4.0" "yunohost": ">= 2.6.0"
}, },
"multi_instance": true, "multi_instance": true,
"services": [ "services": [

View file

@ -4,113 +4,121 @@
APPNAME="odoo" APPNAME="odoo"
function define_paths() {
# Package name for dependencies # In odoo 10 some file change
DEPS_PKG_NAME="${APPNAME}-deps" if [ $(echo "$odoo_version >= 10" | bc) -ne 0 ]; then
export source_path=/usr/lib/python2.7/dist-packages/odoo/
# Remote URL to fetch tarball conf_file=/etc/odoo/odoo.conf
SOURCE_URL="http://download.gna.org/wkhtmltopdf/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz" bin_file=/usr/bin/odoo
# Remote URL to fetch tarball checksum
SOURCE_SHA256="049b2cdec9a8254f0ef8ac273afaf54f7e25459a273e27189591edc7d7cf29db"
# App package root directory should be the parent folder
PKGDIR=$(cd ../; pwd)
#
# Common helpers
#
# # Execute a command as root user
#
# usage: ynh_psql_execute_as_root sql [db]
# | arg: sql - the SQL command to execute
# | arg: db - the database to connect to
ynh_psql_execute_as_root () {
sudo su -c "psql" - postgres <<< ${1}
}
# Create a user
#
# usage: ynh_psql_create_user user pwd [host]
# | arg: user - the user name to create
# | arg: pwd - the password to identify user by
ynh_psql_create_user() {
ynh_psql_execute_as_root \
"CREATE USER ${1} WITH PASSWORD '${2}';"
}
# Create a database and grant optionnaly privilegies to a user
#
# usage: ynh_psql_create_db db [user [pwd]]
# | arg: db - the database name to create
# | arg: user - the user to grant privilegies
# | arg: pwd - the password to identify user by
ynh_psql_create_db() {
db=$1
# grant all privilegies to user
if [[ $# -gt 1 ]]; then
ynh_psql_create_user ${2} "${3}"
sudo su -c "createdb -O ${2} $db" - postgres
else else
sudo su -c "createdb $db" - postgres export source_path=/usr/lib/python2.7/dist-packages/openerp/
conf_file=/etc/odoo/openerp-server.conf
bin_file=/usr/bin/openerp-server
fi
}
function check_odoo_version () {
if [ $(echo "$odoo_version >= 10" | bc) -ne 0 ]; then
if [ -f /usr/bin/openerp-server ]; then
ynh_die "Another version of odoo is installed"
fi
else
if [ -f /usr/bin/odoo ]; then
ynh_die "Another version of odoo is installed"
fi
fi
}
function define_is_master() {
if [ -f $bin_file ]; then
export is_master=false
else
export is_master=true
fi
}
function define_port () {
if [ "$is_master" = true ]; then
export port=$(ynh_find_port 8069)
yunohost app checkport $port
if [[ ! $? -eq 0 ]]; then
ynh_die "Port 8069 unavailable" 1
fi
else
# FIXME find master port
export port="8069"
fi
}
function define_dbpass () {
# TODO set -x
if [ "$is_master" = true ]; then
# Generate random password
if [ "${1:-}" = "restore" ]; then
export dbpass=$(ynh_app_setting_get $app psqlpwd)
else
export dbpass=$(ynh_string_random)
fi
else
export dbpass=$(grep db_password /etc/odoo/odoo.conf | cut -d \= -f 2 | sed -e 's/^[ \t]*//')
fi
ynh_app_setting_set "$app" psqlpwd "$dbpass"
}
# Install dependencies
function install_dependencies() {
if [ ! -f /etc/apt/sources.list.d/odoo.list ]; then
# Install Odoo
# Prepare installation
ynh_package_install curl
# Install Odoo
curl -sS https://nightly.odoo.com/odoo.key | sudo apt-key add -
sh -c "echo 'deb http://nightly.odoo.com/${odoo_version}/nightly/deb/ ./' > /etc/apt/sources.list.d/odoo.list"
# TODO if 8.0 install https://www.odoo.com/apps/modules/8.0/shell/
fi fi
} apt-get update
# Drop a database ynh_install_app_dependencies curl postgresql odoo xfonts-75dpi xfonts-base wkhtmltopdf node-less python-xlrd
#
# usage: ynh_psql_drop_db db
# | arg: db - the database name to drop
ynh_psql_drop_db() {
sudo su -c "dropdb ${1}" - postgres
}
# Drop a user if ! wkhtmltopdf --version | grep "wkhtmltopdf 0.12.4 (with patched qt)"; then
# # The debian package has a bug so we deploy a more recent version
# usage: ynh_psql_drop_user user ynh_setup_source /usr/
# | arg: user - the user name to drop fi
ynh_psql_drop_user() {
sudo su -c "dropuser ${1}" - postgres
} }
# Download and extract sources to the given directory # Create db
# usage: extract_sources DESTDIR [AS_USER] function create_general_db() {
extract_sources() { service postgresql reload
local DESTDIR=$1 if ! su -c "psql -lqt | cut -d \| -f 1 " - postgres | grep $APPNAME; then
local AS_USER=${2:-admin} # Generate random password
ynh_psql_execute_as_root "ALTER USER $APPNAME WITH CREATEDB;"
# retrieve and extract Roundcube tarball ynh_psql_execute_as_root "ALTER USER $APPNAME WITH PASSWORD '$dbpass';"
tarball="/tmp/${APPNAME}.tar.xz" su -c "createdb -O $APPNAME $APPNAME" - postgres
rm -f "$tarball" fi
wget -q -O "$tarball" "$SOURCE_URL" \
|| ynh_die "Unable to download tarball"
echo "$SOURCE_SHA256 $tarball" | sha256sum -c >/dev/null \
|| ynh_die "Invalid checksum of downloaded tarball"
exec_as "$AS_USER" tar xJf "$tarball" -C "$DESTDIR" --strip-components 1 \
|| ynh_die "Unable to extract tarball"
rm -f "$tarball"
# apply patches
if [[ -d "${PKGDIR}/patches" ]]; then
(cd "$DESTDIR" \
&& for p in ${PKGDIR}/patches/*.patch; do \
exec_as "$AS_USER" patch -p1 < $p; done) \
|| ynh_die "Unable to apply patches"
fi
} }
# Execute a command as another user # Add services
# usage: exec_as USER COMMAND [ARG ...] function add_services() {
exec_as() { if ! grep "^postgresql:$" /etc/yunohost/services.yml; then
local USER=$1 yunohost service add postgresql
shift 1 fi
if ! grep "^odoo:$" /etc/yunohost/services.yml; then
if [[ $USER = $(whoami) ]]; then yunohost service add odoo --log /var/log/odoo/odoo-server.log
eval "$@" yunohost service stop odoo
else yunohost service start odoo
# use sudo twice to be root and be allowed to use another user fi
sudo sudo -u "$USER" "$@" }
fi
function ssowat_and_restart() {
# Restart odoo service
service odoo restart
# Configure SSOWat
ynh_sso_access "/web/database/manager"
# Reload services
service nginx reload
} }

205
scripts/_future.sh Normal file
View file

@ -0,0 +1,205 @@
log() {
echo "${1}"
}
info() {
log "[INFO] ${1}"
}
warn() {
log "[WARN] ${1}"
}
err() {
log "[ERR] ${1}"
}
ynh_check_var () {
test -n "$1" || ynh_die "$2"
}
ynh_exit_properly () {
exit_code=$?
if [ "$exit_code" -eq 0 ]; then
exit 0
fi
trap '' EXIT
set +eu
echo -e "\e[91m \e[1m"
err "$app script has encountered an error."
if type -t CLEAN_SETUP > /dev/null; then
CLEAN_SETUP
fi
ynh_die
}
# Activate signal capture
# Exit if a command fail, and if a variable is used unset.
# Capturing exit signals on shell script
#
# example: CLEAN_SETUP () {
# # Clean residual file un remove by remove script
# }
# ynh_trap_on
ynh_trap_on () {
set -eu
trap ynh_exit_properly EXIT # Capturing exit signals on shell script
}
ynh_export () {
local ynh_arg=""
for var in $@;
do
ynh_arg=$(echo $var | awk '{print toupper($0)}')
ynh_arg="YNH_APP_ARG_$ynh_arg"
export $var=${!ynh_arg}
done
}
# Save listed var in YunoHost app settings
# usage: ynh_save_args VARNAME1 [VARNAME2 [...]]
ynh_save_args () {
for var in $@;
do
ynh_app_setting_set $app $var ${!var}
done
}
ynh_sso_access () {
ynh_app_setting_set $app unprotected_uris "/"
if [[ $is_public -eq 0 ]]; then
ynh_app_setting_set $app protected_uris "$1"
fi
sudo yunohost app ssowatconf
}
ynh_configure () {
local TEMPLATE=$1
local DEST=$2
type j2 2>/dev/null || sudo pip install j2cli
j2 "${YNH_CWD}/../conf/$TEMPLATE.j2" > "${YNH_CWD}/../conf/$TEMPLATE"
sudo cp "${YNH_CWD}/../conf/$TEMPLATE" "$DEST"
}
ynh_configure_nginx () {
ynh_configure nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf
sudo service nginx reload
}
# Find a free port and return it
#
# example: port=$(ynh_find_port 8080)
#
# usage: ynh_find_port begin_port
# | arg: begin_port - port to start to search
ynh_find_port () {
port=$1
test -n "$port" || ynh_die "The argument of ynh_find_port must be a valid port."
while netcat -z 127.0.0.1 $port # Check if the port is free
do
port=$((port+1)) # Else, pass to next port
done
echo $port
}
ynh_rm_nginx_conf () {
if [ -e "/etc/nginx/conf.d/$domain.d/$app.conf" ]; then
sudo rm "/etc/nginx/conf.d/$domain.d/$app.conf"
sudo service nginx reload
fi
}
ynh_secure_rm () {
[[ "/var/www /opt /home/yunohost.app" =~ $1 ]] \
|| (test -n "$1" && sudo rm -Rf $1 )
}
# Upgrade
ynh_read_json () {
python3 -c "import sys, json;print(json.load(open('$1'))['$2'])"
}
ynh_read_manifest () {
if [ -f '../manifest.json' ] ; then
ynh_read_json '../manifest.json' "$1"
else
ynh_read_json '../settings/manifest.json' "$1"
fi
}
ynh_exit_if_up_to_date () {
if [ "${version}" = "${last_version}" ]; then
info "Up-to-date, nothing to do"
exit 0
fi
}
# # Execute a command as root user
#
# usage: ynh_psql_execute_as_root sql [db]
# | arg: sql - the SQL command to execute
# | arg: db - the database to connect to
ynh_psql_execute_as_root () {
sudo su -c "psql" - postgres <<< ${1}
}
# Create a user
#
# usage: ynh_psql_create_user user pwd [host]
# | arg: user - the user name to create
# | arg: pwd - the password to identify user by
ynh_psql_create_user() {
ynh_psql_execute_as_root \
"CREATE USER ${1} WITH PASSWORD '${2}';"
}
# Create a database and grant optionnaly privilegies to a user
#
# usage: ynh_psql_create_db db [user [pwd]]
# | arg: db - the database name to create
# | arg: user - the user to grant privilegies
# | arg: pwd - the password to identify user by
ynh_psql_create_db() {
db=$1
# grant all privilegies to user
if [[ $# -gt 1 ]]; then
ynh_psql_create_user ${2} "${3}"
sudo su -c "createdb -O ${2} $db" - postgres
else
sudo su -c "createdb $db" - postgres
fi
}
# Drop a database
#
# usage: ynh_psql_drop_db db
# | arg: db - the database name to drop
ynh_psql_drop_db() {
sudo su -c "dropdb ${1}" - postgres
}
# Drop a user
#
# usage: ynh_psql_drop_user user
# | arg: user - the user name to drop
ynh_psql_drop_user() {
sudo su -c "dropuser ${1}" - postgres
}
# Execute a command as another user
# usage: exec_as USER COMMAND [ARG ...]
exec_as() {
local USER=$1
shift 1
if [[ $USER = $(whoami) ]]; then
eval "$@"
else
# use sudo twice to be root and be allowed to use another user
sudo sudo -u "$USER" "$@"
fi
}

View file

@ -3,22 +3,28 @@
# Exit on command errors and treat unset variables as an error # Exit on command errors and treat unset variables as an error
set -eu set -eu
# See comments in install script source /usr/share/yunohost/helpers
app=$YNH_APP_INSTANCE_NAME #source _future.sh
source ../settings/scripts/_common.sh
# Source YunoHost helpers app=$YNH_APP_INSTANCE_NAME
. /usr/share/yunohost/helpers domain=$(ynh_app_setting_get "$app" domain)
odoo_version=$(ynh_app_setting_get "$app" odoo_version)
define_paths
# Backup sources & data # Backup sources & data
ynh_backup "/usr/lib/python2.7/dist-packages/openerp/" "sources" ynh_backup "${source_path}addons" "$1${source_path}addons"
# Backup configuration
ynh_backup "$conf_file" "$1$conf_file"
# Copy NGINX configuration # Copy NGINX configuration
domain=$(ynh_app_setting_get "$app" domain) ynh_backup "/etc/nginx/conf.d/${domain}.d/${app}.conf" "etc/nginx/conf.d/${domain}.d/${app}.conf"
ynh_backup "/etc/nginx/conf.d/${domain}.d/${app}.conf" "nginx.conf"
ynh_backup "/etc/odoo/openerp-server.conf" "openerp-server.conf" # Save postgresql conf
ynh_backup "/etc/postgresql/9.4/main/pg_hba.conf" "etc/postgresql/9.4/main/pg_hba.conf"
# Copy database # Copy database
database=${domain//./-} database=${domain//./-}
sudo su -c "pg_dump $database" postgres > ./dump.sql sudo su -c "pg_dump $database" postgres > ./dump.sql
pwd=`pwd`
ynh_backup "$pwd/dump.sql" "dump.sql"

View file

@ -2,128 +2,66 @@
set -eu set -eu
app=$YNH_APP_INSTANCE_NAME source /usr/share/yunohost/helpers
source _future.sh
source _common.sh
# Retrieve arguments ynh_trap_on
domain=$YNH_APP_ARG_DOMAIN
version=$YNH_APP_ARG_VERSION
oca=$YNH_APP_ARG_OCA
admin_password=$YNH_APP_ARG_ADMIN_PASSWORD
lang=$YNH_APP_ARG_LANG
tz=$YNH_APP_ARG_TZ
# Load common variables # Arguments from manifest
source ./_common.sh export app=$YNH_APP_INSTANCE_NAME
export domain=$YNH_APP_ARG_DOMAIN
export odoo_version=$YNH_APP_ARG_VERSION
export oca=$YNH_APP_ARG_OCA
export admin_password=$YNH_APP_ARG_ADMIN_PASSWORD
export lang=$YNH_APP_ARG_LANG
export tz=$YNH_APP_ARG_TZ
export is_public=0
# Source YunoHost helpers #=================================================
. /usr/share/yunohost/helpers # CHECK IF THE APP CAN BE INSTALLED WITH THIS ARGS
#=================================================
# Check domain/path availability ynh_check_var "$app" "app name not set"
domain=${domain}"/" ynh_webpath_available "$domain" "/"
sudo yunohost app checkurl $domain -a $app \ check_odoo_version
|| (ynh_die "Path not available: $domain" 1) define_paths
define_is_master
# Remove trailing "/" for next commands define_port
domain=${domain%/} define_dbpass
# Generate random password
# Fix a bug on ynh_string_random https://github.com/YunoHost/yunohost/pull/205/commits/0d6cf499a0b858e7009245fd11a9210188047c13
dbpass=$(ynh_string_random | sed "s/\[/e/g" | sed "s/\]/e/g")
ynh_app_setting_set "$app" domain "$domain"
ynh_app_setting_set "$app" lang "$lang"
ynh_app_setting_set "$app" tz "$tz"
ynh_app_setting_set "$app" psqlpwd "$dbpass"
if [ -f /usr/bin/openerp-server ]; then #=================================================
echo "Odoo is already installed, switching to multi-instances" # SETUP THE APP BY MODIFYING THE SYSTEM
ynh_app_setting_set "$app" instance "slave" #=================================================
function setup_files() {
else
sudo yunohost app checkport 8069
if [[ ! $? -eq 0 ]]; then
ynh_die "Port 8069 unavailable" 1
fi
echo "Installing odoo"
ynh_app_setting_set "$app" version "$version"
ynh_app_setting_set "$app" instance "master"
# Install Odoo
# Prepare installation
ynh_package_install curl
# Install Odoo
sudo curl -sS https://nightly.odoo.com/odoo.key | sudo apt-key add -
sudo sh -c "echo 'deb http://nightly.odoo.com/${version}/nightly/deb/ ./' > /etc/apt/sources.list.d/odoo.list"
# TODO if 8.0 install https://www.odoo.com/apps/modules/8.0/shell/
sudo apt-get update
# Initialize installation
ynh_package_install postgresql
ynh_package_install odoo
# Install wkhtmltopdf to print PDF reports
ynh_package_install xfonts-75dpi xfonts-base wkhtmltopdf node-less python-xlrd
# The debian package has a bug so we deploy a more recent version
DESTDIR="/tmp/wkhtmltox/"
sudo mkdir -p $DESTDIR
sudo chown -R $APPNAME: /tmp/wkhtmltox
extract_sources $DESTDIR "$APPNAME"
sudo cp -R "$DESTDIR." /usr/
sudo rm -Rf $DESTDIR
ynh_psql_execute_as_root "ALTER USER $APPNAME WITH CREATEDB;"
ynh_psql_execute_as_root "ALTER USER $APPNAME WITH PASSWORD '$dbpass';"
sudo su -c "createdb -O $APPNAME $APPNAME" - postgres
# Set admin password # Set admin password
# TODO Support @ in password ynh_configure openerp-server.conf $conf_file
sudo sed -i "s@ADMIN_PASSWORD@$admin_password@g" ../conf/openerp-server.conf chown odoo:odoo $conf_file
sudo sed -i "s@DATABASE_PASSWORD@$dbpass@g" ../conf/openerp-server.conf
sudo cp ../conf/openerp-server.conf /etc/odoo/openerp-server.conf
sudo chown odoo:odoo /etc/odoo/openerp-server.conf
# Autoinstall the LDAP auth module # Autoinstall the LDAP auth module
sudo sed -i "s@'auto_install': False@'auto_install': True@g" /usr/lib/python2.7/dist-packages/openerp/addons/auth_ldap/__openerp__.py if [ $(echo "$odoo_version >= 10" | bc) -ne 0 ]; then
ynh_replace_string "^{$" "{'auto_install': True," ${source_path}addons/auth_ldap/__manifest__.py
else
ynh_replace_string "'auto_install': False" "'auto_install': True" ${source_path}addons/auth_ldap/__openerp__.py
fi
# Install oerplib to manage databases # Fix peer authentification issue
#sudo pip install oerplib sed -i '/local\s*all\s*all\s*peer/i \
local all odoo password' /etc/postgresql/9.4/main/pg_hba.conf
# Add services ynh_configure_nginx
sudo yunohost service add postgresql }
sudo yunohost service add odoo --log /var/log/odoo/odoo-server.log
sudo yunohost service stop odoo
sudo yunohost service start odoo
fi
# Configure Nginx and reload function setup_database() {
sed -i "s@#YNH_APP_INSTANCE_NAME#@${YNH_APP_INSTANCE_NAME}@g" ../conf/nginx.conf
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf
# Make Odoo public # Setup database: not working
ynh_app_setting_set "$app" skipped_uris "/" database=${domain//./-}
sudo service nginx reload # Load translation
$bin_file -c $conf_file --stop-after-init -i auth_ldap -d $database
# Fix peer authentification issue $bin_file -c $conf_file --stop-after-init -d $database --load-language $lang
sudo sed -i '/local\s*all\s*all\s*peer/i \ # Configure language, timezone and ldap
local all odoo password' /etc/postgresql/9.4/main/pg_hba.conf $bin_file shell -c $conf_file -d $database <<< \
sudo service postgresql reload
# Setup database: not working
database=${domain//./-}
# Load translation
sudo /usr/bin/openerp-server -c /etc/odoo/openerp-server.conf --stop-after-init -d $database
sudo /usr/bin/openerp-server -c /etc/odoo/openerp-server.conf --stop-after-init -d $database --load-language $lang
# Configure language, timezone and ldap
sudo /usr/bin/openerp-server shell -c /etc/odoo/openerp-server.conf -d $database <<< \
" "
self.change_password('admin','$admin_password') self.change_password('admin','$admin_password')
self.env.cr.commit() self.env.cr.commit()
@ -149,5 +87,14 @@ self.company_id.ldaps.create({
}) })
self.env.cr.commit() self.env.cr.commit()
" "
}
ynh_webpath_register "$app" "$domain" "/"
ynh_save_args domain odoo_version oca lang tz is_master port
install_dependencies
setup_files
create_general_db
add_services
setup_database
ssowat_and_restart
sudo service odoo restart

View file

@ -1,42 +1,54 @@
#!/bin/bash #!/bin/bash
set -eu set -u
source /usr/share/yunohost/helpers
source _future.sh
source _common.sh
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
# Load common variables
source ./_common.sh
# Source YunoHost helpers
. /usr/share/yunohost/helpers
# Retrieve app settings # Retrieve app settings
domain=$(ynh_app_setting_get "$app" domain) domain=$(ynh_app_setting_get "$app" domain)
odoo_version=$(ynh_app_setting_get "$app" odoo_version)
database=${domain//./-} if [ "$odoo_version" = "" ]; then
instance=$(ynh_app_setting_get "$app" instance) exit 0
sudo yunohost service stop odoo | true
# If removing master instance, remove Odoo.
if [ "$instance" = "master" ]; then
sudo rm -f /etc/apt/sources.list.d/odoo.list
sudo apt-get update
sudo yunohost service remove odoo | true
ynh_package_remove odoo | true
sudo dpkg -P odoo | true
ynh_psql_drop_db $APPNAME | true
fi fi
database=${domain//./-}
is_master=$(ynh_app_setting_get "$app" is_master)
define_paths
yunohost service stop odoo
list=$(yunohost app list --installed | grep odoo)
# If removing master instance, remove Odoo.
if [ $(echo $list | wc -l) = 1 ]; then
rm -f /etc/apt/sources.list.d/odoo.list
apt-get update
yunohost service remove odoo
ynh_psql_drop_db $APPNAME
#ynh_psql_drop_user $APPNAME
else
# Set another app as master
if [ "$is_master" = "true" ]; then
for instance in $list; do
if [ "$instance" != "$app" ]; then
ynh_app_setting_set "$instance" is_master "true"
break
fi
done
is_master="false"
fi
fi
ynh_remove_app_dependencies
# Remove database # Remove database
ynh_psql_drop_db $database | true ynh_psql_drop_db $database
ynh_psql_drop_user $database | true
if [ "$instance" = "slave" ]; then if [ "$is_master" = "false" ]; then
sudo yunohost service start odoo | true yunohost service start odoo
fi fi
# Remove NGINX conf
sudo rm /etc/nginx/conf.d/$domain.d/$app.conf | true
# Reload # Remove NGINX conf
sudo service nginx reload ynh_rm_nginx_conf
sudo yunohost app ssowatconf

View file

@ -1,3 +1,65 @@
#!/bin/bash #!/bin/bash
app=odoo set -eu
# TO BE DONE
# Import helpers
source /usr/share/yunohost/helpers
source ../settings/scripts/_future.sh
source ../settings/scripts/_common.sh
ynh_trap_on
export app=$YNH_APP_INSTANCE_NAME
export domain=$(ynh_app_setting_get $app domain)
export odoo_version=$(ynh_app_setting_get $app odoo_version)
export oca=$(ynh_app_setting_get $app oca)
export port=$(ynh_app_setting_get $app port)
export is_public=0
#=================================================
# CHECK IF THE APP CAN BE RESTORED
#=================================================
ynh_check_var "$app" "app name not set"
ynh_webpath_available "$domain" "/"
check_odoo_version
define_paths
define_is_master
define_port
define_dbpass restore
#=================================================
# RESTORE THE APP BY MODIFYING THE SYSTEM
#=================================================
# Restore files
function restore_files () {
if [ "$is_master" = true ]; then
ynh_restore
else
# If odoo is already setup we just restore nginx and add some missing
# modules. Other files are already on system, and we don't want to
# erase it
# Configure Nginx and reload
ynh_restore_file "/etc/nginx/conf.d/${domain}.d/${app}.conf"
# TODO Restore plugin/addons
fi
}
# Restore database
function restore_database () {
# Restore database
database=${domain//./-}
su -c "createdb -O $APPNAME $database" - postgres
su -c "psql $database" postgres < ./dump.sql
}
ynh_save_args is_master port
install_dependencies
restore_files
create_general_db
add_services
restore_database
ssowat_and_restart

View file

@ -1,14 +1,54 @@
#!/bin/bash #!/bin/bash
set -eu set -eu
app=$YNH_APP_INSTANCE_NAME
# Source YunoHost helpers # Source YunoHost helpers
. /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
source _future.sh
source _common.sh
ynh_trap_on
# Retrieve arguments # Retrieve arguments
domain=$(ynh_app_setting_get "$app" domain) export app=$YNH_APP_INSTANCE_NAME
export domain=$(ynh_app_setting_get "$app" domain)
export odoo_version=$(ynh_app_setting_get "$app" odoo_version)
export is_master=$(ynh_app_setting_get "$app" is_master)
export oca=$(ynh_app_setting_get "$app" oca)
export port=$(ynh_app_setting_get $app port)
export is_public=0
version=$(ynh_read_json "/etc/yunohost/apps/$app/manifest.json" 'version' 2> /dev/null || echo '9.0-0')
last_version=$(ynh_read_manifest 'version')
#ynh_exit_if_up_to_date
ynh_check_var "$app" "app name not set"
# Upgrade official package # Upgrade official package
sudo apt-get install odoo -y -qq apt-get install odoo -y -qq
# Zamentur version https://github.com/zamentur/odoo_ynh/commit/cdeb9afbf218431781f752dedfbf4247afbd5b44
if [ "${version}" = "9.0-0" ]; then
# set new args
odoo_version=${odoo_version:-$(ynh_app_setting_get "$app" version)}
if [ "$is_master" = "" ]; then
if [ "$(ynh_app_setting_get "$app" instance)" = "master" ];then
is_master="true"
else
is_master="false"
fi
fi
port=${port:-8069}
oca=${oca:-false}
ynh_save_args odoo_version oca is_master port
# Install official debian package
install_dependencies
fi
if [ "${version}" = "10.0-1" ]; then
# Put here your migrations
echo ""
fi
# TBD