Instalación y configuración inicial
Introducción
Documento escrito sobre OpenOffice 3.2
OpenERP v6, versión actual estable a fecha 1 de febrero de 2011 está formado por la relación de varias partes, que instalaremos y configuraremos una a una. Todo esto sobre Ubuntu 10.04 Server LTS
-
PostgresSQL 8.4
-
OpenERP-Server
-
OpenERP Web Client (cliente web que permite el acceso mediante los navegadores habituales)
Ubuntu ya trae por defecto Python instalado, pero si no lo tienes tendrás que hacerlo.
OpenERP v6 funciona con la versión 2.6 (esto es importante). No acepta la versión de Python 2.7
Sobre que usuario del sistema es el que ejecutará los procesos de OpenERP, hay administradores que prefieren que se ejecute sobre un nuevo usuario 'openerp', aunque yo prefiero que se ejecuten sobre mi misma cuenta de usuario, con lo que evito tener mas cuentas y contraseñas. Creo que no repercute para nada en el uso habitual de mi usuario, y además me da facilidad si quiero editar o cambiar algo, sin necesidad de cambiar de usuario. (Mi usuario es 'joseba')
Tened en cuenta que las líneas de código, si utilizáis copiar y pegar, pueden resultar erróneas, así que mejor copiadas a mano y seguidas, sin salto de línea (intro). Las que tengan la '\' si se pueden copiar y pegar, si no, quitáis la barra y a teclear a mano.
Por último recordar que SIEMPRE tenemos que hacer backups antes de modificar nada, por si las moscas. Si me apuras, copia de seguridad hasta cuando sólo voy a instalar un simple módulo.
Postgresql 8.4
Instalación
$ sudo apt-get update
$ sudo apt-get install postgresql
Configuración
CREAR el mismo usuario en postgresql que en el Ubuntu.
Realmente los clientes que se conectan al servidor, desde otros equipos, no acceden directamente al gestor de bdd.
Sería
openerp-client
o <--> openerp-server <--> postgresql
openerp-web
Debemos crear el usuario de la base de datos para OpenERP:
Crearemos acceso a postgresql de un usuario que ya exista en el sistema, por ejemplo, el mismo creado durante la instalación, aunque la contraseña la pondremos distinta.
$ sudo su – postgres
$ createuser --createdb --username postgres --no-createrole --pwprompt joseba
Enter password for new role: aqui la password para el usuario joseba (p.e. de momento la misma)
Enter it again: repetimos
Shall the new role be a superuser? (y/n) N No lo ponemos superuser
Contraseña: esta es la contraseña del usuario postgres, para poder dar de alta al usuario joseba
Explicación:
--createdb el usuario 'joseba' puede crear bases de datos
--username postgres el superusuario 'postgres' crea a 'joseba'
--no-createrole 'joseba' no puede crear usuarios
--pwprompt se te pregunta que contraseña asignar a 'joseba'
Ahora exit del usuario postgres:
$ exit
Por defecto postgresql8.4 sólo permite conectarse a las bases de datos a aquellos usuarios que tienen cuenta en el sistema (ident), así que modificamos /etc/postgresql/8.4/main/pg_hba.conf la opción que permite conectarse a postgresql8.4 y las bases de datos que contiene a todos los usuarios dados de alta en el sistema postgres además de aquellos que no tienen cuenta del sistema linux. (Pero si tienen cuenta creada en postgresql8.4)
$ sudo nano /etc/postgresql/8.4/main/pg_hba.conf
Y modificar:
lo local all all ident
Por:
local all all md5
Ahora reiniciamos el servidor:
$ sudo /etc/init.d/postgresql-8.4 restart
Aquí ya puedes saltar al punto siguiente, lo que sigue es para salvar / restaurar bases de datos a través de los clientes de openerp (web o GTK)
Si además quiero poder salvar / restaurar las bases de datos desde los clientes openerp es necesario:
Cómo el sistema de backup de los clientes openerp no admiten la autenticación md5, podemos (aunque rebajaría la seguridad del servidor postgresql bastante) cambiar en el pg_hba.conf la línea
$ sudo nano /etc/postgresql/8.4/main/pg_hba.conf
Cambio:
host all all 127.0.0.1/32 md5
Por:
host all all 127.0.0.1/32 trust
Tendrás que reiniciar el server postgresql, para que recoja los cambios.
Cómo es inseguro, cambialo sólo para pruebas o cuando lo necesites.
Lo mejor es manejar las bases de datos con pg_dump y pg_restore en el lado del servidor.
OpenERP v6 (Server, Cliente Web y addons)
Ahora es más fácil, ya que tenemos paquetes .deb en la página oficial, que nos permiten instalar el servidor o los clientes con un simple:
$ sudo dpkg -i paquete.deb
Sin embargo es preferible utilizar bazar, que me facilitará el proceso de actualización cuando sea necesario.
Repositorios bazar a utilizar
lp:openobject-server/6.0 El servidor
lp:openobject-addons/6.0 Los addons
lp:openobject-client/6.0 Cliente GTK
lp:openobject-client-web/6.0 Cliente web
lp:openobject-addons/extra-6.0 Extra addons
La localización española:
lp:openerp-spain/6.0
Para seguir su evolución podeís visitar:
https://code.launchpad.net/~openerp-spain-team/openerp-spain/6.0
Algunos módulos tienen sus propios repositorios, como ocurre con Poweremail:
lp:poweremail
(requiere los paquetes python-django y python-mako)
Utilizaremos bazar para la descarga de los fuentes, así que lo instalamos:
$ sudo apt-get update
$ sudo apt-get install bzr
Descargamos los fuentes del servidor (lo guarda en el directorio_actual/openerp-server60, en mi caso es /home/joseba/src/openerp_v6):
$ cd /home/joseba/src/openerp_v6
$ bzr branch lp:openobject-server/6.0 openerp-server60
Cliente web:
$ bzr branch lp:openobject-client-web/6.0 cliente-web60
Addons:
$ bzr branch lp:openobject-addons/6.0 addons60
Extra-addons:
$ bzr branch lp:openobject-addons/extra-6.0 extra-addons60
Los módulos de la localización española:
$ bzr branch lp:openerp-spain/6.0 openerp-spain60
Si utilizas en la misma máquina el cliente GTK, puedes también descargarlo:
$ bzr branch lp:openobject-client/6.0 cliente-gtk60
Instalar dependencias necesarias
$ sudo apt-get update
$ sudo apt-get install python-lxml python-psycopg2 python-pydot \
python-reportlab python-tz python-matplotlib python-pychart \
python-hippocanvas python-dev build-essential python-setuptools \
python-mako python-django python-yaml python-egenix-mxdatetime \
python-vobject python-imaging python-beaker
Instalación parte servidor
$ cd openerp-server60/
$ sudo ./setup.py install
Esto me instala el servidor de openerp en el directorio:
/usr/local/lib/python2.6/dist-packages/openerp-server/
Y el enlace al ejecutable en:
/usr/local/bin/openerp-server
Una vez instalado el servidor ya lo podemos ejecutar, pero aún no funcionará, debemos:
-
Crear archivo de configuración con los parámetros necesarios para conectar con la base de datos postgresql 8.4 que creamos anteriormente (mejor si lo creamos en el directorio /etc/ )
Además tendré que indicar al ejecutable donde encontrar el archivo de configuración durante la ejecución
(parámetro --config=/etc/openerp-server.conf)
-
Establecer el fichero que permite ejecutar automáticamente el servidor openerp con cada reinicio del ordenador (ejecutable en /etc/init.d y los necesarios en los runlevel)
ARCHIVO DE CONFIGURACIÓN /etc/openerp.conf
Creo /etc/openerp-server.conf con el siguiente contenido:
(debes ajustar db_user, db_password según lo que tengas puesto en el paso de la configuración de postgres)
Tener en cuenta que el usuario que aquí indicas puede realizar las operaciones normales desde los clientes de openerp, pero no el backup o restauración de bases de datos.
Para esto último se requiere acceso directo desde el cliente al servidor postgresql8.4, y permisos para realizarlo.
## Comienzo del archivo de configuración
[options]
#without_demo = False
netport = 8070
secure = False
demo = {}
#syslog = true
cache_timeout = 100000
port = 8069
smtp_password = False
secure_pkey_file = server.pkey
netinterface =
#log_level = 20
admin_passwd = admin
smtp_port = 25
smtp_server = localhost
price_accuracy = 2
import_partial =
soap = False
#pidfile = true
db_maxconn = 64
reportgz = False
xmlrpc = True
#db_port = False
debug_mode = False
netrpc = True
secure_cert_file = server.cert
#interface =
logfile = /var/log/openerp/openerp-server.log
csv_internal_sep = ,
pg_path = None
translate_modules = ['all']
stop_after_init = False
root_path = /usr/local/lib/python2.6/dist-packages/openerp-server
smtp_user = False
db_user = joseba
db_password = joseba
db_name = False
db_host = False
assert_exit_level = 30
email_from = False
addons_path = /usr/local/lib/python2.6/dist-packages/openerp-server/addons
## Fín del archivo de configuración
Como he indicado en el archivo de configuración, en /var/log/openerp/openerp-server.log
se guardarán los logs emitidos por el servidor, pero no antes de que tenga creados esos ficheros y directorio, con los permisos adecuados a mi configuración:
$ sudo mkdir /var/log/openerp
$ sudo touch /var/log/openerp/openerp-server.log
Ahora los permisos para que mi usuario 'joseba' pueda escribir en esos directorios / ficheros:
$ sudo chown -R joseba /var/log/openerp
Ahora lo puedo probar ejecutando e indicando el archivo de configuración:
$ openerp-server --config="/etc/openerp-server.conf"
Si la añado al final & arrancará en background
Esta última prueba sirve para comprobar que no le falta ninguna dependencia a la parte servidor, por lo menos en un primer momento.
Comentar que al tener configurado un archivo de log, al ejecutarlo en la consola no nos presentará nada de información, que si estará en /var/log/openerp/openerp-server.log
SCRIPTS DE INICIO / RUNLEVELS EN /etc/init.d
El siguiente paso es hacer que el servidor tenga su script de inicio y se inicie con el ordenador.
Para ello necesito crear el script de inicio asi cómo propagarlo en los runlevel:
Para ello creo un archivo /etc/init.d/openerp-server con el siguiente contenido, pero OJO, tienes que cambiar el campo USER= por un usuario que ya
tenga tu sistema, en mi caso el mio mismo, joseba
También vigilar que DAEMON apunte al path correcto de openerp-server, visto anteriormente con whereis. (usr/local/bin/openerp-server)
Ojo a los errores producidos al cortar / pegar
Para evitar errores al copiar / pegar con el tema de los formatos y los editores, mejor utilizar el fichero descargado desde alguna web.
## Comienzo script de init.d
#!/bin/sh
### BEGIN INIT INFO
# Provides: openerp-server
# Required-Start: $syslog
# Required-Stop: $syslog
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Enterprise Resource Management software
# Description: Open ERP is a complete ERP and CRM software.
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/openerp-server
NAME=openerp-server
DESC=openerp-server
USER=joseba
test -x ${DAEMON} || exit 0
set -e
case "${1}" in
start)
echo -n "Starting ${DESC}: "
start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- --config=/etc/openerp-server.conf
echo "${NAME}."
;;
stop)
echo -n "Stopping ${DESC}: "
start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \
--oknodo
echo "${NAME}."
;;
restart|force-reload)
echo -n "Restarting ${DESC}: "
start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \
--oknodo
sleep 1
start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- --config=/etc/openerp-server.conf
echo "${NAME}."
;;
restart|force-reload)
echo -n "Restarting ${DESC}: "
start-stop-daemon --stop --quiet --pidfile /var/run/${NAME}.pid \
--oknodo
sleep 1
start-stop-daemon --start --quiet --pidfile /var/run/${NAME}.pid \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- --config=/etc/openerp-server.conf
echo "${NAME}."
;;
*)
N=/etc/init.d/${NAME}
echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
## Fin de script
Ok, ahora lo hago ejecutable:
$ sudo chmod +x /etc/init.d/openerp-server
Lo probamos(verifica que lo tuvieras antes parado):
$ sudo /etc/init.d/openerp-server start
Compruebo que está cargado:
$ sudo ps aux | grep openerp-server
joseba 11376 1.5 2.4 36788 12780 ? Sl 20:16 0:00 /usr/bin/python ./openerp-server.py --config=/etc/openerp-server.conf
El script funciona perfectamente en mi equipo de pruebas.
Y ahora lo pruebo con un cliente, con lo que debería conectar sin problemas, como hasta ahora.
Ya que tenemos el script, lo que nos falta es indicarle a Ubuntu que quiero que arranque con el inicio, y se desconecte al apagar:
$ sudo update-rc.d openerp-server defaults
Reiniciamos el ordenador y lo probamos.
Ojo, porque así tenemos el servidor con los addons (módulos) que incorpora por defecto, pero hay que añadirle un montón mas.
Instalación cliente web
$ cd cliente-web60/lib
$ ./populate.sh
(esto ha bajado las dependencias necesarias para el cliente web)
$ cd ..
$ sudo python setup.py install
O bien :
$ sudo easy_install .
Esto lo instala en /usr/local/bin/openerp-web
Copiamos el archivo de configuración incluido al directorio /etc
(Ojo, porque esto ha cambiado con respecto a la versión anterior)
$ sudo cp /usr/local/lib/python2.6/dist-packages/openerp_web-6.0.1-py2.6.egg/doc/openerp-web.cfg /etc/
(todo en una línea)
Asegurarnos que el archivo de configuración del cliente web tiene los datos correctos de acceso al servidor, descomentando las líneas para guardar los logs del cliente web:
$ sudo nano /etc/openerp-web.cfg
Cambiamos:
# logging
#log.access_file = "/var/log/openerp-web/access.log"
#log.error_file = "/var/log/openerp-web/error.log"
Por (ajústalo a tus necesidades):
# logging
log.access_file = "/var/log/openerp/openerp-web_access.log"
log.error_file = "/var/log/openerp/openerp-web_error.log"
El directorio ya está creado anteriormente, asi que sólo debemos crear los archivos:
$ touch /var/log/openerp/openerp-web_access.log
$ touch /var/log/openerp/openerp-web_error.log
No utilizo el sudo, recordemos que el directorio ya pertenecía al usuario 'joseba', que es el mío propio de Ubuntu, con lo que no necesito ser superusuario.
Tenemos el problema, de que para la versión 6 del cliente web, no se incluye el script de inicio (para init.d), como en las versiones anteriores. Lo que haremos es utilizar el script de la versión 5.0.15:
## comienzo de script init.d para el cliente web versión 6.x
#!/bin/sh
### BEGIN INIT INFO
# Provides: openerp-web
# Required-Start: $syslog
# Required-Stop: $syslog
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: OpenERP Web - the Web Client of the OpenERP
# Description: OpenERP is a complete ERP and CRM software.
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/openerp-web
NAME=openerp-web
DESC=openerp-web
# Specify the user name (Default: openerp).
USER="openerp"
# Specify an alternate config file (Default: /etc/openerp-web.cfg).
CONFIGFILE="/etc/openerp-web.cfg"
# 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
}
if [ -f /lib/lsb/init-functions ] || [ -f /etc/gentoo-release ] ; then
do_start() {
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--chuid $USER --background --make-pidfile \
--exec $DAEMON -- $DAEMON_OPTS
RETVAL=$?
sleep 5 # wait for few seconds
return $RETVAL
}
do_stop() {
start-stop-daemon --stop --quiet --pidfile $PIDFILE --oknodo
RETVAL=$?
sleep 2 # wait for few seconds
rm -f $PIDFILE # remove pidfile
return $RETVAL
}
do_restart() {
start-stop-daemon --stop --quiet --pidfile $PIDFILE --oknodo
sleep 2 # wait for few seconds
rm -f $PIDFILE # remove pidfile
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--chuid $USER --background --make-pidfile \
--exec $DAEMON -- $DAEMON_OPTS
RETVAL=$?
sleep 5 # wait for few seconds
return $RETVAL
}
else
do_start() {
$DAEMON $DAEMON_OPTS > /dev/null 2>&1 &
RETVAL=$?
sleep 5 # wait for few seconds
echo $! > $PIDFILE # create pidfile
return $RETVAL
}
do_stop() {
pid=`cat $PIDFILE`
kill -15 $pid
RETVAL=$?
sleep 2 # wait for few seconds
rm -f $PIDFILE # remove pidfile
return $RETVAL
}
do_restart() {
if [ -f $PIDFILE ]; then
do_stop
fi
do_start
return $?
}
fi
start_daemon() {
if [ -f $PIDFILE ]; then
echo "pidfile already exists: $PIDFILE"
exit 1
fi
echo -n "Starting $DESC: "
do_start
checkpid
if [ $? -eq 1 ]; then
rm -f $PIDFILE
echo "failed."
exit 1
fi
echo "done."
}
stop_daemon() {
checkpid
if [ $? -eq 1 ]; then
exit 0
fi
echo -n "Stopping $DESC: "
do_stop
if [ $? -eq 1 ]; then
echo "failed."
exit 1
fi
echo "done."
}
restart_daemon() {
echo -n "Reloading $DESC: "
do_restart
checkpid
if [ $? -eq 1 ]; then
rm -f $PIDFILE
echo "failed."
exit 1
fi
echo "done."
}
status_daemon() {
echo -n "Checking $DESC: "
checkpid
if [ $? -eq 1 ]; then
echo "stopped."
else
echo "running."
fi
}
case "$1" in
start) start_daemon ;;
stop) stop_daemon ;;
restart|force-reload) restart_daemon ;;
status) status_daemon ;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
exit 1
;;
esac
exit 0
# vim: sts=4 st=4 et
## Fin del script de inicio para openerp web-client
Debemos modificar en el script de inicio el parámetro USER por un usuario del sistema que ya exista (el que ejecutará el cliente web), y también modifica el parámetro DAEMON que desde Ubuntu 9.10 cambia el path de instalación:
$ sudo nano /etc/init.d/openerp-web
USER="joseba"
DAEMON=/usr/local/bin/openerp-web
Lo hacemos ejecutable:
$ sudo chmod +x /etc/init.d/openerp-web
Ahora propagar los scripts por los runlevel para que se inicie al inicio del sistema:
$ sudo update-rc.d openerp-web defaults
Lo arrancamos con (en background):
$ sudo /etc/init.d/openerp-web start
O bien en la consola, para ver la salida:
$ openerp-web
Y nos conectamos desde cualquier navegador web a la ip del servidor http://ip_servidor:8080
(Recuerda que tienen que estar corriendo primero la parte servidor)
Añadir localización española y nuevos módulos a OpenERP
Antes del siguiente punto, que indica cómo utilizar nuestras bases de datos creadas anteriormente o bien en otro OpenERP, indicaré cómo enlazar los nuevos módulos y la localización española al directorio addons del servidor.
Comentar, que en la versión 6 ya está incluido de serie el plan contable general español. Para los módulos que podamos necesitar por sus distintas funciones (remesas, renumeraciones, . . .) tenemos que tener en cuenta su estado de desarrollo para la actual versión estable. (Puede que algunos módulos no estén todavía refactorizados)
Utilizaremos enlaces blandos desde addons en el servidor a las carpetas que creamos en el paso 1, de manera que si en un futuro actualizamos esas carpetas, no será necesario volcarlas de nuevo al servidor, aunque si será necesario y muy importante realizar lo que viene explicado en el punto siguiente.
Paramos openerp-server y el cliente web. Esto dependerá de cómo tengas configurado el sistema, pero algo infalible es hallar el pid del server y matarlo con un kill -9
$ sudo /etc/init.d/openerp-server stop
$ sudo /etc/init.d/openerp-web stop
Nos metemos en el directorio addons del servidor openerp:
$ cd /usr/local/lib/python2.6/dist-packages/openerp-server/addons/
Y ahora enlazamos a los directorios del paso 1:
$ sudo ln -sf origen destino
(-s para enlaces blandos, -f para forzar la copia aunque ya exista)
Así que (recuerda que mi directorio de trabajo es /home/joseba/src/openerp_v6):
$ sudo ln -sf /home/joseba/src/openerp_v6/addons60/* .
$ sudo ln -sf /home/joseba/src/openerp_v6/extra-addons60/* .
$ sudo ln -sf /home/joseba/src/openerp_v6/openerp-spain60/* .
Ya tenemos supervitaminado el directorio addons, podemos pasar al siguiente paso. (556 módulos me ha dado a mí, lo ves al actualizar los módulos desde el cliente)
Ejecuta el server y el cliente de openerp.
Sólo recuerda en el cliente darle a actualizar los módulos para que aparezcan los nuevos y los modificados.
Uso de bases de datos creadas anteriormente
Para utilizar nuestras bases de datos ya creadas, necesitaremos actualizarlas con los nuevos módulos.
-
Tenemos los módulos enlazados en el directorio addons del servidor
-
Tengo la base de datos (bdd) importada al postgres, bien mediante el asistente del cliente web o bien con pgadmin3 (Depende de con cual realizara anteriormente el backup). Yo realizo las copias mediante PgAdmin3, que sirve para gestionar gráficamente bases de datos postgresql
-
Iniciamos openerp-server con un par de opciones para cada base de datos, --update=all y --datebase=nombre_de_mi_bdd
$ sudo python /usr/local/lib/python2.6/dist-packages/openerp-server/openerp-server.py --config=/etc/openerp-server.conf --update=all --database=malagaTIC
O como ya lo tengo en el path:
$ openerp-server --config=/etc/openerp-server.conf --update=all --database=malagaTIC
Vas mirando los logs, y cuando termine de actualizar, cierras el servidor y lo arrancas normalmente. Termina cuando muestre:
[malagaTIC] INFO:web-services:the server is running, waiting for connections...
En los logs, no deben aparecer warnings o sobre todo ERROR. Lo ves en las últimas líneas:
INFO:init:[01]: Assertions report:
[2010-12-29 18:49:48,485][malagaTIC] INFO:init:[02]: Level success failed
[2010-12-29 18:49:48,485][malagaTIC] INFO:init:[03]: error 1 0
[2010-12-29 18:49:48,485][malagaTIC] INFO:init:[04]: total 1 0
Hay un aviso o error, en concreto es que el módulo 'Poweremail' no se a podido cargar, y mi bdd si lo utiliza. Lo veo en el log del server:
[2010-12-29 18:49:48,286][malagaTIC] WARNING:init:module poweremail: module not found
El error se debe a que poweremail tiene su propio repositorio, así que lo descargo:
$ bzr branch lp:poweremail otros_modulos/poweremail
Lo enlazo al servidor:
$ sudo ln -sf /home/joseba/src/openerp/otros_modulos/* /usr/local/lib/python2.6/dist- packages/openerp-server/addons/
Además poweremail requiere el parquete:
$ sudo apt-get install python-django
Paro el servidor y lo arranco de nuevo con la opción del --update y el –database
Y listo, base de datos actualizada con los nuevos módulos.
Es conveniente no dejar ningún ERROR o WARNING sin resolver (mirar los logs)
