#!/bin/bash set -ex # -x for verbose logging to juju debug-log ## ## Options (changeable thanks to ``/etc/charm/openerp.conf``) ## OPENERP_PASSWORD=${OPENERP_PASSWORD:-openerp_password} ## 0k git remote path GIT_0K_BASE=${GIT_0K_BASE:-"git.0k.io:/var/git"} ## 0k git remote options GIT_0K_CLONE_OPTIONS=${GIT_0K_CLONE_OPTIONS:-""} ## 0k git-sub setup options GIT_0K_SUB_CLONE_OPTIONS=${GIT_0K_SUB_CLONE_OPTIONS:-""} ## 0k git default checkout reference (for 0k-oe root package) GIT_0K_CHECKOUT_REF=${GIT_0K_CHECKOUT_REF:-"8.0/0k/dev/master"} RELEASE=${RELEASE:-} test -z "$RELEASE" && RELEASE=$(lsb_release -c -s) ## ## Code ## if [ -z "$NO_VIRTUALENV" ]; then set +ex source /srv/virtualenv/default/bin/activate set -ex fi if [ "$NO_VIRTUALENV" ]; then apt-get install -y --no-install-recommends python-geoip python-gevent \ python-ldap python-lxml python-markupsafe python-pip \ python-psutil python-psycopg2 python-pychart python-pydot \ python-reportlab python-simplejson python-yaml wget wkhtmltopdf \ python-mysqldb fi pip install sact.epoch shyaml ## Install OOOP... from our git repo as: ## we have some bug correction and custom features PYTHON_LIB_DEST=/usr/lib/python2.7 if [ -z "$NO_VIRTUALENV" ]; then PYTHON_LIB_DEST=/srv/virtualenv/default/lib/python2.7 fi mkdir -p /opt/apps if ! [ -d "/opt/apps/ooop" ]; then ( cd /opt/apps && git clone $GIT_0K_CLONE_OPTIONS "$GIT_0K_BASE/0k/ooop.git" && cd /opt/apps/ooop && git checkout 0k/prod/master && ## beurk ln -sf /opt/apps/ooop/ooop.py $PYTHON_LIB_DEST/ooop.py ) fi ## Install aerolib... from our git repo as: if ! [ -d "/opt/apps/aeroolib" ]; then ( cd /opt/apps && git clone $GIT_0K_CLONE_OPTIONS "$GIT_0K_BASE/0k/aeroolib.git" && cd /opt/apps/aeroolib && git checkout master && ## beurk ln -sf /opt/apps/aeroolib/aeroolib/aeroolib $PYTHON_LIB_DEST/aeroolib ) fi ## Install werkzeug from github last version ## because last PyPi version is 8.4 and we need the 9.0+ ( cd /tmp && git clone https://github.com/mitsuhiko/werkzeug.git && cd werkzeug && python setup.py install && cd /tmp && rm -rf werkzeug ) ## ## Install 0k-oe ## AVOID_INSTALL="pil pillow" if [ "$NO_VIRTUALENV" ]; then ## These are provided in the system already our by our means AVOID_INSTALL="$AVOID_INSTALL psycopg2 lxml gevent python-ldap MarkupSafe psutil http://download.gna.org/pychart/PyChart-1.39.tar.gz pydot reportlab simplejson PyYAML" fi ( cd /opt/apps || exit 1 if [ "$ODOO_CP_FROM_DIR" ]; then cp -a "$ODOO_CP_FROM_DIR" "/opt/apps/0k-oe" else git sub clone $GIT_0K_CLONE_OPTIONS $GIT_0K_SUB_CLONE_OPTIONS -b "$GIT_0K_CHECKOUT_REF" \ "$GIT_0K_BASE"/0k/0k-oe fi && cd 0k-oe && ( [ -e odoo/requirements.txt ] && cat odoo/requirements.txt for req in addons/*/requirements.txt; do if [ -r "$req" ]; then cat "$req" fi done ) | sort -u > /tmp/requirements.txt for pack in $AVOID_INSTALL; do sed -ri "s%^($pack.*)$%#\1%g" /tmp/requirements.txt done ) || exit 1 ## ## Install PIL/Pillow if in Virtualenv or if Pillow is needed ## NEED_PILLOW=$(cat /tmp/requirements.txt | grep -i "^pillow") if [ -z "$NO_VIRTUALENV" -o "$NEED_PILLOW" ]; then ## ## Installing PIL/Pillow ## if [ "$NEED_PILLOW" ]; then DEV="$DEV build-essential libtiff5-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk python-dev" LIB="$LIB python-tk libjpeg8 libtiff5" else ## from http://www.sandersnewmedia.com/why/2012/04/16/installing-pil-virtualenv-ubuntu-1204 DEV="$DEV libxml2-dev libxslt-dev libpq-dev libyaml-dev zlib1g-dev libfreetype6-dev libsasl2-dev libjpeg-dev libmysqlclient-dev" LIB="libxslt1.1 libpq5 libjpeg8 libtiff5 libmysqlclient18" fi ## install deps for PIL compilations apt-get install $DEV $LIB \ -y --force-yes --no-install-recommends if ! [ -e "/usr/lib/libjpeg.so" ]; then if [ "$RELEASE" == "trusty" ]; then ## for some reason /etc/apt/sources.list can be WITHOUT deb-src lines apt-cache policy python-imaging | tail -n 1 | \ while read code url distrib arch type; do echo deb-src $url $(echo "$distrib" | tr "/" " "); done >> /etc/apt/sources.list && apt-get update fi if ! [ -d "/usr/include/freetype2/freetype" ]; then (cd /usr/include/freetype2 && ln -sf . freetype) fi apt-get build-dep python-imaging -y --force-yes && ln -s /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/ && ln -s /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/ && ln -s /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/ fi if [ "$NEED_PILLOW" ]; then pip install "$NEED_PILLOW" else ## Installing PIL with our archive is safer. #pip install pil ( cd /tmp && scp "$GIT_0K_BASE"/archives/PIL-1.1.7.tar.gz . && tar xvzf PIL-1.1.7.tar.gz && cd PIL-1.1.7 && python setup.py install cd /tmp rm -rf /tmp/PIL-1.1.7 ) fi fi if [ -z "$NO_VIRTUALENV" ]; then ## Install pychart... from our repo as : ## download link in PyPi is dead, ## and gna.org was down recently ( scp "$GIT_0K_BASE/archives/PyChart-1.39.tar.gz" /tmp && cd /tmp && tar xvzf PyChart*.tar.gz && cd PyChart* && python setup.py install && cd /tmp && rm -rf /tmp/PyChart* ) ## should be in connectors requirements. pip install mysql-python fi pip install -r /tmp/requirements.txt || exit 1 rm /tmp/requirements.txt ## System user adduser --system --home=/var/lib/openerp --group openerp ## /etc/init.d if [ -z "$DOCKER" ]; then cp -i etc/init.d/openerp-server /etc/init.d/ chown openerp /etc/init.d/openerp-server update-rc.d openerp-server defaults fi ## /etc/openerp-server.conf cp -i etc/openerp-server.conf /etc/ sed -ri "s/%%PASSWORD%%/$OPENERP_PASSWORD/g" /etc/openerp-server.conf chown openerp /etc/openerp-server.conf chmod 600 /etc/openerp-server.conf ## Log dir mkdir -p /var/log/openerp touch /var/log/openerp/openerp-server.log chown openerp /var/log/openerp -R cp -i etc/default/openerp-server /etc/default/openerp-server ## ## Linking with external filestore ! ## ( ## keeping for compatibility with older version cd /opt/apps/0k-oe/odoo/openerp && mkdir -p /var/openerp-filestore && ln -sf /var/openerp-filestore filestore && cd /var/openerp-filestore && chown openerp . ) ln -sf "/opt/apps/0k-oe/bin/oe" "/usr/local/bin/oe" ## ## Remove all unwanted libs ## if [ -z "$NO_VIRTUALENV" -o "$NEED_PILLOW" ]; then if [ "$NEED_PILLOW" ]; then ## it won't work for pillow as we didn't use any Build-Depends BUILD_DEPS= else BUILD_DEPS="python-imaging" fi for dep in $BUILD_DEPS; do apt-get autoremove -y --force-yes $(apt-cache showsrc "$dep" | sed -e '/Build-Depends/!d;s/Build-Depends: \|,\|([^)]*),*\|\[[^]]*\]//g') done fi apt-get autoremove $DEV -y --force-yes