sábado, 16 de febrero de 2013

Ubuntu 12: Instalacion de OpenERP 6.

Ya que estamos entrados con OpenERP v6, mi lado fuerte es Centos, pero como la mayoria de los manuales hablan de Ubuntu, decidi darme  a la tarea de llevar a cabo la instalacion ya que deberia ser mas facil.

Pero me lleve la sorpresa que a el manual del OpenERP localizado en:

http://doc.openerp.com/v6.1/install/linux/server/index.html

Ahi vienen todas las dependencias que se deben instalar antes de proceder a la instalación, pero o sorpresa, le faltan, ya que ese doc fue hecho con la v10.x de Ubuntu que ya ha pasado algo de tiempo.

Entonces, solo voy a explicar lo que falta, lo demas es el mismo procedimiento o si gustan seguir en paralelo mi anterior post aunque habla de Centos no cambia, el proceso es muy parecido, algunas dependencias cambian en cuanto a sus nombres y es todo.

Este post: http://pheriko.blogspot.mx/2013/02/centos-6-instalar-openerp-6.html

Bien vamos a suponer que PostgreSQL ya esta instalado y todo listo para recibir OpenERP, entonces tenemos que instalar todo esto:

Instalacion de dependencias:

apt-get install python-dateutil python-feedparser python-gdata python-ldap python-libxslt1 \
python-lxml python-mako python-openid python-psycopg2 python-pybabel python-pychart python-pydot \
python-pyparsing python-reportlab python-simplejson python-tz python-vatnumber \ 

python-vobject python-webdav python-werkzeug python-xlwt python-yaml python-zsi \
python-setuptools python-cherrypy python-formencode python-dev gcc

NOTA: Lo marcado en color rojo/rosa es lo que le falta a el manual.

Ahora si una vez instalado todo esto pueden seguir el manual o mi manual sin problemas, les debe funcionar tanto para openerp-server y openerp-web.

Una cosa mas, pense que la instalacion bajo Ubuntu iba a instalar algun batch para arranque auntomatico pero no, es el mismo caso que con Centos, entonces lo que estoy haciendo para arrancar el servicio es entrar con el usuario openerp y usando el comando screen:

screen
su openerp
openerp-server
Ctrl+d
screen
su - openerp
openerp-web

Aun no doy tampoco en el batch de arranque automatico, he intentado con algunos pero no funcionan, si saben de alguno me avisan, saludos!!!

sábado, 9 de febrero de 2013

Centos 6: Instalacion de OpenERP 6

Hemos estado trabajando, leyendo y entendiendo como instalar este gran ERP que ha dado la comunidad OpenSource, mucha de la documentacion esta basada en Ubuntu quien ya tiene el paquete listo para usar, pero como dicen, digo, si corre en Ubuntu corre en Centos.

Muchos de los manuales que lei, hablaban que la version de Python era la clave, Centos 6 viene por default con la version 2.6.6, por ello opte por tratar de hacerlo con esta version de Centos.

La nube que tengo en la empresa esta soportada por Centos, no tengo problemas, para que meter otro OS como Ubuntu si no lo requiero?

Continuando con OERP(Para ahorrar teclasos), una de las grandes preguntas era, que version usar? con cual arrancar mi curva de aprendizaje?

Varios que lo han usado me comentaron que me fuera por la version 6.0, en el sitio de OERP, nos ofrecen la 7 que es la mas reciente, pero si nos vamos a la versiones anteriores en el sitio(older versions) tenemos 4:

  • 6.0
  • 6.1
  • 7.0
  • trunk
Por ello mejor optamos por la que tiene mas en el mercado y mas instalaciones, esto nos da la certeza que si algo sale mal, alguien pudiera ya haberlo arreglado y darnos el parche, entonces elegimos la 6.0 que sigue LTS.

Una gran caracteristica de OERP, es que se basa en PostgreSQL, por que? Bien tengo mucho tiempo trabajando con MySQL, muchos de los sistemas que administro se basan en el, por que OERP no? No he preguntado ni lo voy hacer, por que ? Muy simple.

Quiero pensar que los que iniciaron este gran proyecto se dieron a la tarea de probar distintas bases de datos y que fueran de codigo abierto, y estoy seguro que PostgreSQL fue la mejor BD para este gran producto.

Yo nunca la he usado pero ya estoy aprendiendo hacerca de, y no lo he hecho por que muchos de las aplicaciones que manejo como bacula, un sistema de almacenaje fueron disenados para ella y yo no he tenido problemas serios, han sido muy leves y pocas pero muy pocas veces han sido problemas relacionados con MySQL en si, confio en ella plenamente, pero en este caso la historia es otra.

Es bueno conocer cosas nuevas, asi que vamos a tener que meternos con PostgreSQL.

Una cosa importante es que Centos a diferencia de Ubuntu viene con la version 8.4, bueno es una larga historia del por que RedHat/Centos hacen uso de estas versiones, son estables y no hay otra no los culpo, las cosas funcionan y es lo que importa.

Pero esta vez voy a irme mas arriba, nosotros vamos a trabajar con una version mas reciente de PostgreSQL, lo bueno que alguien ya hizo la tarea por nosotros asi que nos lo puso muy facil, la version sera la 9.2.

De ahi siguen varias dependencias de Python, por ello vamos a tener que instalar 2 repos, rpmforge y epel ya que el sistema base Centos no tiene todas pero alguien ya nos la dio facil.

OERP 6.0 se basa en 2 aplicaciones, que son el servidor llamado openerp-server y openerp-web que es la interface con la que trabajaran los usuarios directamente, existe otra pero es la GUI que se instala en Windows, creo que hay tambien para Linux pero no la requiero yo, nosotros nos vamos a basar directamente con un navegador como firefox ejemplo.

Ya hemos explicado un poco a lo que nos vamos a enfrentar es momento de iniciar.

Instalacion del OS

Esto solo lo voy a comentar, vamos a trabajar como ya lo mencione en la version 6.3 release, mi caso es la arquitectura x64, un servidor debe ser siempre este tipo de hw, ya no compren nada x86, al menos que no tengan otra opcion, pero aun asi la instalacion debe funciona en la x86.

Una gran ventaja es que Centos 6 hizo algo que FreeBSD tiene desde hace mucho, puede hacer una instalacion con lo minimo y ya instalado empezar a meter todo lo que se vaya necesitando, esto me agrada mucho, solo tener lo que requerimos, nada mas.
Instalen el OS, lo configuracion a su anotojo y lo actualizan antes de hacer cualquier instalacion, altamente recomendable lo actualicen.

Una vez actualizado, configurado a su antojo, lo reinician y seguimos lo que sigue.

Instalacion de Herramientas Basicas

La version minima de Centos que les mencione no tiene las siguientes herramientas que vamos a requerir, asi que debemos instalarlas:
  • wget
  • telnet
  • vim
yum install vim wget telnet

Instalacion de Repositorios Necesarios.

Como les comente, Centos base no proporciona todo lo requerido, asi que vamos a agregar los siguientes repos, estos los van a localizar rapido con google, pero aqui coloco los links por si tiene problemas de localizacion:

Para todos deben elegir que sea para su arquitectura en mi caso x64 para Centos 6.

Ya que los instalen vamos hacer unos ajustes, para epel, vamos abrir el archivo de configuracion y deshabilitar que centos los use cada que uno desea instalar algun paquete, pero no hay problema, cuando lo necesitemos le vamos hablar.

Asi quedaria:

Editar el siguiente archivo:

vim /etc/yum.repos.d/epel.repo

Y lo dejan asi:

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=0    <=========Solo cambian este parametro como dice aqui.
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6


Salvan y salen.

De ahi sigue, Centos, como vamos hacer la instalacion de PostgreSQL de un repo externo, tenemos que pedirle a Centos que excluya a el de su lista de paquetes, para ellos editamos el siguiente archivo:

vim /etc/yum.repos.d/CentOS-Base.repo

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgres*   <======= agregan esto

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
exclude=postgres*  <======= agregan esto

Salvan y salen.

De aqui yo voy a agregar el siguiente paquete:

screen que nos lo proporciona rpmforge.

yum install screen

Listo vamos por el siguiente paso.

Instalacion de PostgreSQL 9.2

Un simple comando:

yum install postgresql92 postgresql92-server

Aqui observen de donde esta trayendo los repos, debe ser de nuestro repo externo verifiquen esto.

Installing:
postgresql92              x86_64    9.2.3-2PGDG.rhel6    pgdg92    968 k
postgresql92-server             x86_64    9.2.3-2PGDG.rhel6       pgdg92    3.8 M
Installing for dependencies:
postgresql92-libs               x86_64  9.2.3-2PGDG.rhel6    pgdg92  185 k

Ya instalado, vamos a configurarlo para OERP.

Vamos iniciando el sistema base de PostgreSQL:

service postgresql-9.2 initdb
Initializing database:                                     [  OK  ]


Que arranca cada que prendamos el servidor:


chkconfig postgresql-9.2 on

Iniciamos el servicio:

service postgresql-9.2 start
Starting postgresql-9.2 service:                           [  OK  ]


PostgreSQL agrega un usuario llamado: postgres que es el administrador, algo que me agrado mucho es como el separa los permisos, este por default no tiene password y tiene su directorio en:

/var/lib/pgsql

Ahi dentro editamos el archivo .bash_profile y agregamos esto:

PATH=$PATH:$HOME/bin:/usr/pgsql-9.2/bin
export PATH


Ahora vamos a agregarle un pasword a el usuario admin de PostgreSQL ya saben 'postgres':

su - postgres
-bash-4.1$


psql postgres postgres
psql (9.2.3)
Type "help" for help.

postgres=#


postgres=# alter user postgres with password 'mipassword';
ALTER ROLE
postgres=#


NOTA: aqui ustedes elijan su propio password.

Salen, para esto es:

postgres=# \q
-bash-4.1$ exit


Salimos y regresamos a nuestro root.

Lo que sigue es editar el archivo pg_hba.conf y hacer los siguientes cambios:

vim /var/lib/pgsql/9.2/data/pg_hba.conf

local   all             all    md5
# IPv4 local connections:
host    all             all    127.0.0.1/32    md5
# IPv6 local connections:
host    all             all    ::1/128        md5

Debe quedar asi, salvan y salen.

Por ultimo configurar PostgreSQL para que escuche en cualquiera de nuestras interfaces de red, ya que por default solo escucha en el localhost y aqui requiero que tambien mi nic(ethX) pueda responder peticiones por si requiero accesar via pgadmin.

Abren el archivo de configuracion y buscan el parametro listen, por default esta comentado:

vim /var/lib/pgsql/9.2/data/postgresql.conf

#listen_addresses = 'localhost'

Lo dejan asi:

listen_addresses = '*'

Reinician el servicio de postgresql:

service postgresql-9.2 restart

Ya con esto listo es ahora cuestion de agregar el usuario de PostgreSQL que administrara todo lo relacionado con OERP.

su - postgres

psql postgres postgres
Password for user postgres:
psql (9.2.3)
Type "help" for help.

postgres=#create user openerp with password 'admin' superuser;
CREATE ROLE


Ahora creamos la base de datos de OERP y de una vez le asignamos el usuario nuevo.

create database empresa1 owner=openerp;
CREATE DATABASE

postgres=# \q
-bash-4.1$exit


Regresamos a nuestro root y repetimos un paso, editar el archivo pg_hba.conf y agregamos esta linea:

host    all             openerp         192.168.50.0/24         md5

Reinician el servidor, ya saben como, correcto?

Instalacion de Dependencias

yum -y install python-dateutil python-ldap libxslt-python libxml2-python \ 
python-setuptools python-lxml python-mako python-psycopg2 babel \
python-babel pychart  python-pyparsing python-reportlab python-simplejson \
pytz PyXML postgresql-python  graphviz python-imaging python-devel  \
openldap-clients python-yaml python-cherrypy python-formencode

Las que dependen de epel:

yum install -y --enablerepo=epel python-feedparser python-ldaphelper \
pydot python-vobject python-vatnumber python-werkzeug python-ZSI \
python-werkzeug python-openid pywebdav

Por ultimo requerimos gcc:

yum install -y gcc

Instalacion de OpenERP 6

Tenemos que bajar los 2 paquetes, server y web, de aqui:

Estos los coloco en /opt y de ahi empiezo la fiesta:

tar -xzf openerp-server-6.0-latest.tar.gz
cd openerp-server-6.0.4
python setup.py install

Esto es solo una parte de la salida y no hay errores:

running install_data
copying man/openerp-server.1 -> /usr/share/man/man1
copying man/openerp_serverrc.5 -> /usr/share/man/man5
creating /usr/share/doc/openerp-server-6.0.4
copying doc/INSTALL -> /usr/share/doc/openerp-server-6.0.4
copying doc/openerp-server.logrotate -> /usr/share/doc/openerp-server-6.0.4
copying doc/README.userchange -> /usr/share/doc/openerp-server-6.0.4
copying doc/openerp-server.init -> /usr/share/doc/openerp-server-6.0.4
copying doc/Changelog-4.x -> /usr/share/doc/openerp-server-6.0.4
copying doc/openerp-server.conf -> /usr/share/doc/openerp-server-6.0.4
copying doc/Changelog-4.x.moved -> /usr/share/doc/openerp-server-6.0.4
copying doc/README.urpmi -> /usr/share/doc/openerp-server-6.0.4
copying doc/Changelog -> /usr/share/doc/openerp-server-6.0.4
copying doc/Changelog-6.x -> /usr/share/doc/openerp-server-6.0.4
creating /usr/share/doc/openerp-server-6.0.4/migrate
creating /usr/share/doc/openerp-server-6.0.4/migrate/3.3.0-3.4.0
copying doc/migrate/3.3.0-3.4.0/post.py -> /usr/share/doc/openerp-server-6.0.4/migrate/3.3.0-3.4.0
copying doc/migrate/3.3.0-3.4.0/pre.py -> /usr/share/doc/openerp-server-6.0.4/migrate/3.3.0-3.4.0
copying doc/migrate/3.3.0-3.4.0/README -> /usr/share/doc/openerp-server-6.0.4/migrate/3.3.0-3.4.0
creating /usr/share/doc/openerp-server-6.0.4/migrate/3.4.0-4.0.0
copying doc/migrate/3.4.0-4.0.0/pre-tiny.py -> /usr/share/doc/openerp-server-6.0.4/migrate/3.4.0-4.0.0
copying doc/migrate/3.4.0-4.0.0/post-tiny.py -> /usr/share/doc/openerp-server-6.0.4/migrate/3.4.0-4.0.0
copying doc/migrate/3.4.0-4.0.0/post.py -> /usr/share/doc/openerp-server-6.0.4/migrate/3.4.0-4.0.0
copying doc/migrate/3.4.0-4.0.0/pre.py -> /usr/share/doc/openerp-server-6.0.4/migrate/3.4.0-4.0.0
copying doc/migrate/3.4.0-4.0.0/README -> /usr/share/doc/openerp-server-6.0.4/migrate/3.4.0-4.0.0
running install_egg_info
Copying openerp_server.egg-info to /usr/lib/python2.6/site-packages/openerp_server-6.0.4-py2.6.egg-info
running install_scripts
copying build/scripts-2.6/openerp-server -> /usr/bin
changing mode of /usr/bin/openerp-server to 755


Listo, ahora vamos a agregar el usario en centos que ejecutar OERP:

useradd openerp

Una persona genero un script para poder arrancar openerp-server desde init, ya que por default esta forma de instalarlo no lo genera, recuerden solo Ubuntu tiene esas ventajas, pero no hay problema, baje este script y lo salvan en /etc/init.d/

cd /etc/init.d
wget http://www.bdeferme.net/downloads/openerp-server.txt
mv openerp-server.txt openerp-server
chmod +x openerp-server
chkconfig --add openerp-server
chkconfig openerp-server on

Como ya tenemos el usuario 'openerp' tenemos que agregar los parametros de PostgreSQL igual que a el usuario 'postgres', abre archivo

su - openerp
vim .bash_profile

Y a el final agregamos esto:

PATH=$PATH:$HOME/bin:/usr/pgsql-9.2/bin
export PATH

Salimos y salvamos, regresamos a el usuario root.

Ya podemos arrancar el servicio, pero antes de recordar que este servicio no se ejecuta como root, por ello agregamos el usuario openerp, asi que entramos a su consola y ejecutamos esto:

su - openerp
openerp-server -s
[2013-02-09 13:46:44,980][?] INFO:server:OpenERP version - 6.0.4
[2013-02-09 13:46:44,980][?] INFO:server:addons_path - /usr/lib/python2.6/site-packages/openerp-server/addons
[2013-02-09 13:46:44,980][?] INFO:server:database hostname - localhost
[2013-02-09 13:46:44,980][?] INFO:server:database port - 5432
[2013-02-09 13:46:44,980][?] INFO:server:database user - openerp
[2013-02-09 13:46:44,980][?] INFO:server:initialising distributed objects services
[2013-02-09 13:46:45,413][?] INFO:web-services:starting HTTP service at 0.0.0.0 port 8069
[2013-02-09 13:46:45,415][?] INFO:web-services:starting HTTPS service at 0.0.0.0 port 8071
[2013-02-09 13:46:45,416][?] INFO:web-services:Registered XML-RPC over HTTP
[2013-02-09 13:46:45,417][?] INFO:web-services:starting NET-RPC service at 0.0.0.0 port 8070
[2013-02-09 13:46:45,418][?] INFO:server:Starting 3 services
[2013-02-09 13:46:45,419][?] INFO:server:OpenERP server is running, waiting for connections...


Nos salimos, Ctrl+c, este parametro -s le pide a OERP que nos genere el archivo de configuracion en el folder del directorio del usuario que lo ejecuta, abrimos el archivo 'openerp_serverrc' y editamos estos parametros, los demas los dejamos tal cual estan, que ya anteriormente los habiamos anotado.

db_password = 'mipasword'
db_port = 5432
db_name = empresa1
db_user = openerp
db_host = 'localhost'

Salvamos y salimos, nos vamos a el usuario root.

Ahora hacemos lo siguiente:

cd /var/run
mkdir openerp
chown openerp:openerp openerp/

Ahora si vamos a iniciar el servicio:

service openerp-server start

Van a empezar a ver muchas lineas en su consola, no hay problema toda va bien mientras el servicio este escuchando por peticiones, vamos a revisar:

netstat -na -l --inet | grep :80
tcp        0      0 0.0.0.0:8069                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:8070                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:8071                0.0.0.0:*                   LISTEN


Listo, puertos escuchando por peticiones, ahora vamos a ver nuestro archivo messages y ver que dice:

tail /var/log/messages
Feb  9 13:57:01 oerp61 ¿<15>OpenERP Server 6.0.4:empresa1:DEBUG:orm:column uid is in the table wkf_instance but not in the corresponding object workflow.instance
Feb  9 13:57:01 oerp61 ¿<15>OpenERP Server 6.0.4:empresa1:DEBUG:orm:column version_pattern is in the table ir_module_module_dependency but not in the corresponding object ir.module.module.dependency
Feb  9 13:57:01 oerp61 ¿<14>OpenERP Server 6.0.4:empresa1:INFO:init:[01]: Assertions report:
Feb  9 13:57:01 oerp61 ¿<14>OpenERP Server 6.0.4:empresa1:INFO:init:[02]: Level#011success#011failed
Feb  9 13:57:01 oerp61 ¿<14>OpenERP Server 6.0.4:empresa1:INFO:init:[03]: error#0111#0110
Feb  9 13:57:01 oerp61 ¿<14>OpenERP Server 6.0.4:empresa1:INFO:init:[04]: total#0111#0110
Feb  9 13:57:01 oerp61 ¿<14>OpenERP Server 6.0.4:empresa1:INFO:init:[05]: end of report (1 assertion(s) checked)
Feb  9 13:57:01 oerp61 ¿<14>OpenERP Server 6.0.4:empresa1:INFO:data:Computing parent left and right for table res_partner_category...
Feb  9 13:57:02 oerp61 OpenERP Server 6.0.4:empresa1:INFO:server:Starting 3 services
Feb  9 13:57:02 oerp61 OpenERP Server 6.0.4:empresa1:INFO:server:OpenERP server is running, waiting for connections...


Ahi esta, listo para recibir conexiones.

Instalacion de OpenERP-WEB

OERP server esta operando, pero necesitamos alguna interface para poder accesarlo, aqui entra openerp-web, como ya lo bajamos, ahora vamos por el.

tar -xzf openerp-web-6.0-latest.tar.gz
cd openerp-web-6.0.4/
cd lib/
../populate.sh
NOTA:Van a empezar a ver mucho informacion, no se asusten.
cd..


Installed /opt/openerp-web-6.0.4/lib/pytz-2012j-py2.6.egg
Processing dependencies for pytz>=2009j
Finished processing dependencies for pytz>=2009j
Searching for xlwt>=0.7
Reading http://pypi.python.org/simple/xlwt/
Reading https://secure.simplistix.co.uk/svn/xlwt/trunk
Best match: xlwt 0.7.4
Downloading http://pypi.python.org/packages/source/x/xlwt/xlwt-0.7.4.tar.gz#md5=231f4ff30894fc70d142b4ed1ba71cc0
Processing xlwt-0.7.4.tar.gz
Running xlwt-0.7.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-UgI6DI/xlwt-0.7.4/egg-dist-tmp-vvnHwe
zip_safe flag not set; analyzing archive contents...
Adding xlwt 0.7.4 to easy-install.pth file
Installed /opt/openerp-web-6.0.4/lib/xlwt-0.7.4-py2.6.egg
Processing dependencies for xlwt>=0.7
Finished processing dependencies for xlwt>=0.7


Seguimos la instalacion:

cd..
python setup.py install

Otra vez mucha info, al terminar tenemos algo +/- asi:

Finished processing dependencies for openerp-web==6.0.4

Copeamos el archivo de configuracion ejemplo que esta en el mismo folder donde estamos pero dentro del 'doc':

cd doc/
cp openerp-web.cfg /etc/

Ajustes, hacemos lo siguiente:

mkdir /var/log/openerp-web
touch /var/log/openerp-web/access.log
touch /var/log/openerp-web/error.log
chown -R openerp:openerp /var/log/openerp-web/

Editamos el archivo de configuracion y cambiamos los parametros acorde a su red, yo solo cambie estos:

server.socket_host = "192.168.50.112"

Y estos:

log.access_file = "/var/log/openerp-web/access.log"
log.error_file = "/var/log/openerp-web/error.log"
#log.access_level = "INFO"
#log.error_level = "INFO"

Salvamos y salimos.

Ahora vamos a arrancarlo, para ellos debemos entrar con el usuario que ya tenemos listo:

screen
su - openerp
openerp-web

No les va a arrojar nada hasta que empiecen a conectarse, pero vamos a verificar si nuestra inteface esta lista para recibir conexiones:

netstat -na -l --inet | grep :8080
tcp        0      0 192.168.50.112:8080         0.0.0.0:*                   LISTEN

Ahi esta lista, vamos a una pc que tenga navegador dentro de la red y entremos a ver que pasa?

Figura 1: Interface de Entrada.
Listo, hemos tenido exito.

Por default tenemos el usuario: admin con password: admin.

Entramos y... listo esta listo para hacer configurado.

miércoles, 30 de enero de 2013

Linux/Unix: Mover configuracion dePutty a otro equipo.

No se les ha pasado, nos llega maquina nueva para poder seguir estando a el dia, corriendo alguna version de Linux/Unix, ya tenemos todo configurado y operando.

Putty que muchos admin de sistemas usamos para accesar remotamente nuestros servidores atraves del protocolo SSH, lo tenemos con varios servidores ya configurados y nos es dificil volver a configurar uno a uno en la nueva estacion.

Podemos ahorrarnos tiempo, solo tenemos que sacar el profile de putty  del usuario en cuestion y mandarlo a la nueva estacion.

Putty genera en cada usuario que lo ejecuta, un folder escondido en la raiz del usuario:

/home/Yo/.putty

Ahi dentro esta un folder llamado: sessions

Solo movemos este folder a nuestra nueva estacion y listo, a lo mejor en la nueva no tenemos aun el folder .putty, no hay problema, solo abran putty y trate de hacer una conexion a un servidor remoto y el se encargara de generar el folder.

Una vez hecho esto, movemos este folder ahi y listo, tendran ya todas sus sesiones tal cual las tenian en su vieja estacion.

Saludos!!!

lunes, 28 de enero de 2013

Pfsense 2: Captive Portal+FreeRadius2 Manejo de Tiempo.

Hemos estado trabajando con otros usuarios de Pfsense en un problema que para muchos como yo es importante en un software como pFsense, como controlar los usuarios inhalambricos atraves de un CaptivePortal.

Como sabran, Pfsense tiene su propio CaptivePortal(CP de aqui en adelante) y asu vez tiene en su paqueteria a FreeRadius tanto 1 como 2, pero nos vamos a enfocar en la versión 2(FR2 de aqui en adelante).

Uniendo estos 2 paquetes tenemos algo que encontramos en productos como Mikrotik, Ruckus, etc. Ya podemos controlar nuestros usuarios en base a tiempos de navegación, por ejemplo:

usr1 2 minutos
usr2 4 minutos
usr3 8 minutos
etc.

La logica dice que CP estara autenticando los usuarios cada 60 segundos y con esto FR2 validara si a el usuario aun le queda tiempo de navegacion atraves del modulo "Counter" que es parte de FR2 y el llevara a cabo la funcion de estar llevando los contadores de tiempo de cada usuario.

Asi podriamos tener un sistema de cobro por tiempo por ejemplo, un usuario llega y paga 1 hora por adelantado, le damos su usuario+contraseña y listo.

Esto es como deberia funcionar, pero CP tiene ciertos problemas los cuales un usuario que lo veran en este link da un parche para atacar el problema que les voy a explicar enseguida:

Parche CP.

Problema de CP.

Resulta ser que CP no esta enviando los paquetes de Start/Stop cada 60 segundos, algo que yo he notado en mis pruebas es que no importa el tiempo que se le asigne a el usuario, siempre lo saca a los 5 minutos, y este asunto otros tambien lo han notado.

No es problema de FR2 si no del codigo de CP, por ello aqui plasmo  las indicaciones del parche que nos dan para este problema, quiero aclarar que ese parche es para versiones anteriores a la 2.0.2, ya que este ultima cambio algo no mucho pero si algo, no hay problema yo estoy con la ultima version(2.0.2) y aplique los cambios y al momento me esta funcionado.

Lo 1ro que vamos hacer es configurar FR2 en Pfsense, que es lo que sigue para probar, la instalacion no tiene ciencia ya que Pfsense se encarga de todo, asi que antes de seguir instalen el paquete FreeRadius2.

Caracteristicas de Instalacion:
Pfsense 2.0.2
3 NIC's:
  1. WAN
  2. Lan DHCP
  3. Wifi DHCP
La interface WiFi tiene conectado un access point Cisco WRT54G2 v1.5, no autentifica nada esta abierta, recuerden que todo lo controla CP asi que no hay problema ya que confio plenamente que aunque reciban IP los que no pertecen a mi red no podran navegar.


Configurando FreeRadius 2

Figura 1: Configuracion Incial de FR2.


Figura 2: Configuracion de la interface y puertos  necesarios.




Figura 3: Configuracion de NAS/Clientes.

Figura 4: Configuración de 1 usuario.
Figura 5: Configuración de Captive Portal.
Basados en la figura-4 pueden agregar mas usuarios solo modificando el parametro de "Amount of Time" para cada uno asi podran entender esta configuración.

Reglas de Firewall

Antes de seguir recordar que Pfsense por default la interface opt1 en adelante no tiene reglas asi que nada puede cruzar por ahi asi que yo solo deseo ofrecer lo siguiente:
Figura 6: Reglas de la red Inhalambrica.
 Por ultimo debemos aseguranos que ambos servicios esten operando
Figura 7: Servicios en linea.
Aplicación de Parche

Si ya llegaron aqui es momento de llevar a cabo la aplicación del parche, aqui les recomiendo que abran su shell o consola via ssh ya que ahi que ensuciarse las manos con nuestro editor "ee", no soy hacker asi que no logre crear al parche y darselos, si alguien sabe de favor agreguenlo con los pasos necesarios para aplicarlo :-).

Vamos a editar el archivo que controla a CP este se localiza en:

/etc/inc/captiveportal.inc

Recomendacion: Antes de modificar el archivo saquen un respaldo del archivo y tengalo a la mano por si algo les falla.

Vamos a usar a nuestro amigo "diff" para que nos muestre nuestras diferencias y hacer la  tarea mas sencilla:

diff  /etc/inc/captiveportal.inc /root/captiveportal.inc
730,731c730
<               $stop_time - 60,
<               //$cpentry[0], // start time
---
>               $cpentry[0], // start time
735,739c734,735
<               //10); // NAS Request
<               10, // NAS Request
<               false, //Not interim update
<               $stop_time);
<               exec("/sbin/ipfw table 1 entryzerostats {$cpentry[2]}");
---
>               10); // NAS Request
>               exec("/sbin/ipfw table 1 entryzerostats {$cpentry[2]}");
741,742c737
<               exec("sleep 1");
<               RADIUS_ACCOUNTING_START($cpentry[1], // ruleno
---
>               RADIUS_ACCOUNTING_START($cpentry[1], // ruleno
799d793
<               $stop_time - 60,
872d865
<               $stop_time = time();
878d870
<               $stop_time - 60,
883,885c875
<               //7); // Admin Reboot
<               7, // Admin Reboot
<               false, $stop_time);
---
>               7); // Admin Reboot

Aproximadamente en la linea 730 nuestro codigo queda asi:

                /* do periodic RADIUS reauthentication? */
                if (!$timedout && !empty($radiusservers)) {
                        if (isset($config['captiveportal']['radacct_enable'])) {
                                if ($config['captiveportal']['reauthenticateacct'] == "stopstart") {
                                        /* stop and restart accounting */
                                        RADIUS_ACCOUNTING_STOP($cpentry[1], // ruleno
                                                $cpentry[4], // username
                                                $cpentry[5], // sessionid
                                                $stop_time - 60,
                                                //$cpentry[0], // start time
                                                $radiusservers,
                                                $cpentry[2], // clientip
                                                $cpentry[3], // clientmac
                                                //10); // NAS Request
                                                10, // NAS Request
                                                false, //Not interim update
                                                $stop_time);
                                        exec("/sbin/ipfw table 1 entryzerostats {$cpentry[2]}");
                                        exec("/sbin/ipfw table 2 entryzerostats {$cpentry[2]}");
                                        exec("sleep 1");

Luego nos brincamos a la linea 799 vamos a dejar asi el codigo:

function captiveportal_disconnect($dbent, $radiusservers,$term_cause = 1,$stop_time = null) {
        global $g, $config;

        $stop_time = (empty($stop_time)) ? time() : $stop_time;

        /* this client needs to be deleted - remove ipfw rules */
        if (isset($config['captiveportal']['radacct_enable']) && !empty($radiusservers)) {
                RADIUS_ACCOUNTING_STOP($dbent[1], // ruleno
                        $dbent[4], // username
                        $dbent[5], // sessionid
                        $stop_time - 60,
                        $dbent[0], // start time
                        $radiusservers,
                        $dbent[2], // clientip
                        $dbent[3], // clientmac
                        $term_cause, // Acct-Terminate-Cause
                        false,
                        $stop_time);
        }

Y aproximadamente en la linea 872 dejamos asi el codigo:

/* send RADIUS acct stop for all current clients */
function captiveportal_radius_stop_all() {
        global $config;

        if (!isset($config['captiveportal']['radacct_enable']))
                return;

        $radiusservers = captiveportal_get_radius_servers();
        if (!empty($radiusservers)) {
                $stop_time = time();
                $cpdb = captiveportal_read_db();
                foreach ($cpdb as $cpentry) {
                        RADIUS_ACCOUNTING_STOP($cpentry[1], // ruleno
                                $cpentry[4], // username
                                $cpentry[5], // sessionid
                                $stop_time - 60,
                                $cpentry[0], // start time
                                $radiusservers,
                                $cpentry[2], // clientip
                                $cpentry[3], // clientmac
                                //7); // Admin Reboot
                                7, // Admin Reboot
                                false, $stop_time);
                }
        }
}

Revisen muy bien sus cambios, si creen que ya hicieron todo acorde, les recomiendo ampliamente reiniciar su equipo y revisar si no les marca algun error el archivo, lo van a ver en el GUI cuando le digan si a el boton de reboot.

Pruebas

Ya con su equipo en linea, sin errores y sobre todo ambos servicios operando, conecten su "access point" y prendan su PC, tableta o lo que tengan inhalambrico para empezar las pruebas, se conectan a su red y les debe aparecer la pagina de CP.

Metan su usuario de prueba y empiecen a navegar, se van a su pfsense y abran la pagina de Status-CaptivePortal y vean la hora que inicio su usuario:

Figura 8: Estatus de CP.
Un detalle es que una vez que el usuario termina si sesión el GUI no muestra su historial, pero por ello entra en funcion el log atraves de la consola, abran su shell y vean como van evolucionando el usuario:

Figura 9: Log de fr2.
Como podran ver cada cierto tiempo NAS esta enviando paquetes a FR2 y este asu vez los valida y si el usuario aun esta dentro del tiempo asignado le es permitido seguir navegando.

Cuando llega a su fin tenemos esto:

Figura 10: Usuario llego a su limite.
El contador no es exacto, aun estan haciendo ajustes que estos dias voy a probar, si sacamos la diferencia el usuario navego:
Figura 11: Tiempo que duro usuario navegando.
Pero aqui lo importante es que ya CP puede ser usado para controlar los tiempos de navegacion, ya podemos cobrar x tiempo, espero puedan llevar a cabo sus pruebas y regresen con sus resultados, mientras mas informacion de pruebas haya mejor, y si hay errores para informacion y seguir mejorando el codigo, saludos.

2013-01-30

Detalles
Sesion abierta y cambio de dia: Supongamos que el usuario8, tiene 1 hora diario ejemplo arranca su sesion el dia 30/01/2013, pero el entra a las 23:30PM, que pasa?

Bien CP le va a dar 2 horas de navegacion, por que?

CP/FR2 validan la duracion de la sesion pero no controlan estos cambios de dia, ya que ellos validan que durante el dia X el usuario haya consumido su tiempo asignado, y al brincarse a el dia Y es otro dia, por lo tanto reinicia el contador en 0, por ello el usuario tendra su hora del dia X+Y siempre y cuando en el dia X le quede menos de lo asignado cuando el inicio su navegacion.

Esto les puede pasar, entonces si tienen usuarios nocturnos y les reclaman por que ya no puede navegar en Y dia por la noche, digales que dice radius.log no miente sale, saludos!!!

sábado, 12 de enero de 2013

Centos 5.x: Compilar cooavachilli

Ahora nos toca meternos con este paquete para poder configurar un CaptivePortal, me vi en la tarea de compilar este paquete desde las fuentes(src) ya que en la pagina oficial http://coova.org/CoovaChilli no encontre por ningun lado el rpm para centos.

Bien, leyendo un poco la doc de como llevar a cabo esta labor que fue nada complicado, les quiero recordar que software debe tener nuestro sistema para llevar a cabo esto:
  1. rpm-build
  2. gcc
De aqui arrancamos todo, ahora viene la parte donde bajamos la fuente que en esta ocasión nos toco        trabajar con la versión: 1.3.0.

Seguimos el manual, o sea que ponemos al archivo en:

/usr/src/redhat/SOURCES/

Lo descomprimimos segun la doc y luego dice que:

cd coova-chilli-1.0.X/
rpmbuild -ba coova-chilli.spec
 
Bien aqui viene la parte fea, el ultimo comando no funciona ya que el archivo
coova-chilli.spec no existe en esa ruta, entonces donde esta?
 
Usando la artilleria de Linux o sea el comando find, este localizo este archivo
en:

/usr/src/redhat/SOURCES/coova-chilli-1.3.0/distro/redhat/
 
Asi que nos vamos a esa ruta y ahora si ejecutamos el comando:

rpmbuild -ba coova-chilli.spec

Y esperamos resultados, una vez terminado ya tenemos nuestro archivo.rpm en:

/usr/src/redhat/RPMS/i386

Asi que nos movemos a ese folder y de nuevo nuestra artilleria Linux para la instalación:

rpm -iv coova-chilli-1.3.0-1.i386.rpm

Listo, la configuracion esta en:

/etc/chilli

El servicio se llama:

chilli

Asi que lo que sigue es configurarlo, a darle, saludos!!!

lunes, 7 de enero de 2013

Windows 7 x64: Contpaq i.

   Hoy me tire una pelea con un Contpaq i, el contador me trajo una laptop donde lo queria correr ya que era nueva, el lo intento pero no logro hecharlo a volar, decia que arrancaba todo bien, pero cuando llegaba a el 100% la instalación ahi se quedaba colgada.

   Y no le dejo otra opción que deter la instalacion, y claro como queda a medias no le permitia desinstalarlo ya que queda a medias, Contpaq instala 4 cosas:
  • Microsoft SQL Server 2005
  • ContPAQ i 2.0.0
  • ContPAQ 2005
  • Compak SDK
   Uno de los grandes problemas era que si aparecian en el listado de programas instalados, pero cuando uno deseaba desintalarlos era donde las cosas no funcionaban, y el problema era el SDK ya que nos decia que no estaba instalado, y ni intentar quitar el ContPAQ i ya que regresa y quiere desinstalar el SDK y era el cuento de nunca acabar, ni ccleaner logro ayudar..

   Como atacamos el problema:
  • Renombrar todas las carpetas de contpaq, tanto las de la raiz como las de Program Files(x86).
  • Buscar en los registros de windows todo lo relacionado a computrabajo y renombrarlo, pero antes respaldo.
  • Ejecutar ccleaner y hacer limpia.
  • Reiniciar el equipo.
  • Ejecutar el instalador de contPAQ I como administrador.
  • Nos va a decir que la version de SQL Server tiene conflictos de compatibilidad y que si deseamos continuar, a lo cual le decimos que si, guardan la clave del usuario de SQL Server ya que contpaq se las va a requerir.
  • Cuando arranque la instalación de contpaq i, se abren 2 instalaciones: SDK y Contpaq i, cuando llegue a 100% y se quede colgada la instalación de ambos, cancelan la instalación de SDK, yo lo hice desde el "Taskmgr", contpaq i se terminara de instalar sin problemas.
   Segun mi sentido comun, el SDK tiene que ver con opciones para desarrolladores asi que no creo que contador quiera hacer programas para contpaq.

   Bien, ya que termina todo, una reiniciada.

   Cruzan las manos, todo lo relacionado a contpaq lo ejecutan como "Administrador" no se les olvide. Ejecutan el contpaq i configuracion, ahi le dan el password del usuario de la BD "sa", salvan y ahora si ejecutan el contPAQ i como "Administrador".

   Asi me funciono a mi, saludos!!!

miércoles, 2 de enero de 2013

Freebsd/Pfsense: comando gnu-watch/ifstat

Feliz 2013 a todos los que llegan a mi blog, espero este 2013 sea mucho mejor que cualquiera de los anteriores y que todos sus deseos sean cumplidos y que tengan buen salud que es lo mas importante para continuar nuestro viaje por este vida.

Regresando a lo que hago dia a dia, bien he estado trabajando en distintos temas que me agradan con pfsense,  a veces uno se pregunta como podre ver mis logs en tiempo real sin tener que estar ejecutando tail o cat:

tail -n 30 /var/log/radiusd.log

Yo deseo ejecutar este comando constantemente sin mi intervención para poder debugear ciertos problemas que tengo, se puede?

Claro que si, tenemos el comando gnu-watch en freebsd y por lo tanto para pfsense, en Linux se llama watch.

Como funciona?

Yo deseo que el comando anterior sea ejecutado constantemente, esto lo hacemos asi:

gnu-watch tail -n 30 /var/log/radiusd.log

Lo que va hacer el comando es mostrar ejecutar nuestro comando cada 2 segundos que es el valor que tiene por default, pero podemos reducirlo hasta 0 segundos que es lo minimo con el parametro -n.

Ver siguiente figura:
Figura-1: gnu-watch en operación.
Si observan la figura-2 esa pantalla se estara refrescando cada 2 segundos segun dice en la esquina superior izquierda, podemos estar trabajando y ver nuestro log como va cambiando si es que el sistema esta agragando entradas, de lo contrario nunca van a ver cambios.

Ustedes vean que utilidad pueden darle a este comando, y no solo para ver log, que tal si deseamos ver el comando netstat -m cada segundo:

Ejecuten en su consola:

gnu-watch -n 1 netstat -m

Y vean el resultado.

Ya hable del comando, ahora viene como instalarlo, estamos usando pfsense 2.0.2 asi que nos vamos a la consola y ejecutamos el comando:

NOTA: Puede ser que ya exista una version mas arriba, no hay problema solo verifiquen la versión y listo.

pkg_add -r ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.2-release/misc/gnu-watch-3.2.8.tbz

Ya que termine recuerde ejectar rehash para que pfsense actualice su indice de aplicaciones y este lista para usar.

Comando Ifstat, pfsense tiene el gui que nos dice la taza de transferencia de cada tarjeta, pero a mi me gusta compararlo con algo en la consola para validar el dato, aparte ifstat te muestra todas las tarjetas de un solo golpe, es una herramienta que hasta para windows existe.

Su instalacion es parecida a el paquete anterior pero esta se localiza en otro directorio, asi lo instale:

pkg_add -r ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.2-release/net/ifstat-1.1_4.tbz

Al momento de ejecutarla a mi me muestra lo siguiente:

Figura-2: Ifstat en ejecucion.
Una vez instalada, puedo probar como esta la taza de transferencia interna, a lo mejor la PC de un cliente no esta operando a 100MBs Full, copeo un archivo de maquina a maquina y de cualquier lado ejecuto ifstat y veo los datos en consola.

Estas son 2 de mis herramientas favoritas cuando deseo encontrar la solucion a distintos problemas que se me presentan, espero a ustedes tambien les sirvan de algo, saludos!!!