Blog, Development, GNU/Linux, IT Security

ChiliProject 1.4.0 + Ruby Enterprise + Passenger + Apache2

I was a happy Trac user, but after seeing Redmine, I realized that Trac has many missing features and that you must do a lot of things with plugins, Redmine has this features out-of-box. After working a bit with Redmine I discovered ChiliProject, which is a fork of Redmine, and its actually compatible with Redmine Themes and Plugins.

Here is a comparison of Redmine/ChiliProject and Trac features:
Continue reading

Blog, GNU/Linux, IT Security

Installing TRAC with mod_wsgi using virtualenv

This guide is for installing Trac as a user using virtualenv for a isolated Python environment so that the whole installation runs under a specific user.

First of all we need to install needed packages

apt-get install libapache2-mod-wsgi python-virtualenv python-setuptools

Once we have installed the required packages proceed to create the Python environment

mkdir /usr/local/trac
cd /usr/local/trac
virtualenv python

We now have the isolated Python environment locate under /usr/local/trac/python.

To make possible to use easy_install with repositories we need to upgrade easy_install. I use this to install Trac plugins directly from SVN.

/usr/local/trac/python/bin/easy_install -U trunk

We now can install trac 0.12 using the 0.12b1 SVN Tag (http://svn.edgewall.com/repos/trac/tags/trac-0.12b1 or Trac==0.12b1) or directly from SVN Trunk:

/usr/local/trac/python/bin/easy_install http://svn.edgewall.org/repos/trac/trunk

This will download and install the latest trunk version for Trac.

To have webaccess to the Trac projects, we need a .wsgi script, were we define where our local python environment is located:

# Not needed if mod_wsgi >= 3.0
import sys
sys.stdout = sys.stderr

# Load Trac
import trac.web.main
application = trac.web.main.dispatch_request

And finally we need to configure apache. If you want only one Trac project, you should define trac.env to the location of your trac, but if you want multiproject support, you must use trac.env_parent_dir (this is what I used)


    ServerName trac.dns.com

    DocumentRoot /usr/local/trac/htdocs
    ErrorLog /var/log/apache2/trac-error.log
    CustomLog /var/log/apache2/trac-access.log combined

    # Trac Auth
    
        AuthType Basic
        AuthName "Trac"
        AuthUserFile /usr/local/trac/.htpasswd
        Require valid-user
    < /location>

    #Trac
    #Define ProcessGroup with user and group under which it should run
    WSGIDaemonProcess trac user=trac group=trac python-path=/usr/local/trac/python/lib/python2.5/site-packages python-eggs=/usr/local/trac/python/cache
    WSGIScriptAlias / /usr/local/trac/htdocs/trac.wsgi

    
        WSGIProcessGroup trac
        WSGIApplicationGroup %{GLOBAL}
        SetEnv trac.env_parent_dir /usr/local/trac/projects
    

We need to create the user and change the permissions for /usr/local/trac for that user trac

adduser --home /usr/local/trac --shell /bin/false --no-create-home trac
chown -R trac:trac /usr/local/trac

If you get an error “ImportError: No module named simplejson” just install it using easy_install

/usr/local/trac/python/bin/easy_install simplejson
Blog, GNU/Linux

Mysql Replication

Aqui voy a explicar como poder montar un sistema de maestro-esclavo(s) en mysql. La idea es que hay un servidor principal, que es en el que se modifican los datos y los esclavos solo estan ahi para tenerlo todo duplicado, esto es perfecto para hacer copias de seguridad. Si la idea es tener transferencia de datos bidireccional, hay que montar un “MySQL Cluster

La replicacion funciona por medio de los binary log de mysql, asi que lo primero sera configurar correctamente el servidor maestro. Asi que añadimos estas opciones en el fichero my.cnf si aun no estan.

[mysql]
#Activamos el log binario
log-bin=mysql-bin
#Establecemos un id para el servidor, el maestro SIEMPRE sera 1
server_id=1
#Esto ayuda por si el master tiene un cuelgue y no haya problemas en la replicacion al volver a arrancarlo
sync_binlog=1
#Si trabajamos con INNODB, hay que activar esto
innodb_flush_log_at_trx_commit=1

IMPORTANTE: Hay que comprobar que la linea skip-networking no este puesta en el master, ya que sino no abrira el puerto

Ahora dejaremos lista la configuracion en el esclavo

[mysql]
#Activamos el log binario
log-bin=mysql-bin
#Id del esclavo, este tiene que ser unico
server_id=2

Ahora en el maestro le damos permisos al esclavo

GRANT REPLICATION SLAVE ON *.* TO [email protected]_ESCLAVO IDENTIFIED BY 'slavepass';

Ahora vamos a hacer un snapshot de la posicion actual del maestro para dejar el esclavo en la misma posicion para empezar a replicar. Nos conectamos al servidor maestro y ejecutamos lo siguiente:

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Esto nos va a devolver la posicion actual del log, asi que apuntamos “File” y “Position“, que lo necesitaremos para ponerselo al esclavo, en caso de que salga en blanco “File” es y “Position” es 4

Ahora sin cerrar la conexion mysql (sino se pondria en marcha otra vez), ejecutamos esto desde otro terminal:

$ mysqladmin -u root -p shutdown

Realizamos ahora la copia de la base de datos, hay dos metodos:

  • mysqldump
    $ mysqldump --all-databases --master-data -u root -p > /tmp/dump.sql
    
  • tar
    $ cd /var/lib ; tar cf /tmp/mysql.tar mysql
    

Pasamos la copia al esclavo y lo importamos:

  • mysqldump
    $ mysql -u root -p < /tmp/dump.sql
    
  • tar
    $ cd /var/lib ; tar xcf /tmp/mysql.tar
    

Lo siguiente es ponerle los datos del maestro al esclavo:

CHANGE MASTER TO master_host='IP_MAESTRO', master_user='slave', master_password='slavepass', master_log_file='', master_log_pos=4;
start slave;
Blog, GNU/Linux

PHP5 eAccelerator

Hacia tiempo que queria poner esto, pero nunca me he puesto. eAccelerator es un modulo de php que compila y carga en memoria las aplicaciones php, y con esto consigue que haya una mejora de respuesta y descarga bastante el servidor. Aqui os explico como instalar eAccelerator con PHP5 en una debian.

Lo primero que hay que hacer es descargarse la ultima version de eAccelerator, tambien necesitaremos en el server las utilidades de desarrollo de php

apt-get install php5-dev

La instalacion es realmente muy sencilla, solo tenemos que descomprimir, compiler, instalar y configurar.

  • Descomprimimos
tar xvfj eaccelerator-0.9.5.tar.bz2
  • Compilamos
cd eaccelerator-0.9.5
phpize
./configure
make
  • Instalamos (nos pondra el modulo en la carpeta de modulos de php)
make install
  • Copiamos la configuracion para que la cargue php
cp eaccelerator.ini /etc/php5/conf.d/

Lo primero que hay que hacer en la configuracion es decirle que no es una zend_extension, por lo tanto cambiamos

zend_extension="/usr/lib/php4/eaccelerator.so"

por

extension="eaccelerator.so"

Luego yo en la configuracion he dejado todo como venia por defecto excepto

eaccelerator.log_file = "/var/log/apache/eaccelerator_log"