forked from 0k/0k-charms
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
314 lines
7.6 KiB
314 lines
7.6 KiB
#!/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
|
|
|
|
if [ "$RELEASE" == "wheezy" ]; then
|
|
(
|
|
cd /tmp
|
|
wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.1/wkhtmltox-0.12.1_linux-precise-amd64.deb
|
|
dpkg -i wkhtmltox-0.12.1_linux-precise-amd64.deb
|
|
rm -f wkhtmltox-0.12.1_linux-precise-amd64.deb
|
|
)
|
|
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
|