Blog, MacOSX

Recompilar MAMP

El soporte de LDAP en MAMP 1.7.1 esta roto asi que tube que recompilar el PHP, lo cual me obligo a recompilar todas sus dependencias, pero como no encontre ninguna guia de como realizarlo correctamente, aqui esta como lo hice yo.

Lo primero es descargarse el codigo fuente proporcionado por la gente de MAMP, y su version compilada.

Codigo fuente: MAMP 1.7.1 (src)

Version Intel: MAMP 1.7.1 (intel)

Version PPC: MAMP 1.7.1 (ppc)

Una vez que tengamos esto, hay que instalar MAMP la version compilada en /Applications y asi ya tenemos toda la estructura correcta lista para solo recompilar lo necesario.

Ahora descomprimimos el codigo fuente y vamos compilando las diferentes librerias:

CURL

tar zxvf curl-7.16.2.tar.gz
cd curl-7.16.2
./configure --prefix=/Applications/MAMP/Library
make
make install

Freetype

tar zxvf freetype-2.3.4.tar.gz
cd freetype-2.3.4
./configure --enable-shared --configure=/Applications/MAMP/Library/
make
make install

Gettext

tar zxvf gettext-0.16.1.tar.gz
cd gettext-0.16.1
./configure --prefix=/Applications/MAMP/Library
make
make install

IMAP (Parche para osx: imap-2006i-osx.patch)

tar zxvf imap-2006i.tar.Z
cd imap-2006i
patch -p1 < imap-2006i-osx.patch
make oxp
cp c-client/*.h /Applications/MAMP/Library/lib/imap-2006i/include/
cp c-client/*.c /Applications/MAMP/Library/lib/imap-2006i/lib/
cp c-client/c-client.a /Applications/MAMP/Library/lib/imap-2006i/lib/libc-client.a

JPEG

tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
./configure --enable-shared --prefix=/Applications/MAMP/Library
ln -s `which glibtool` ./libtool
make
make install

libiconv

tar zxvf libiconv-1.11.tar.gz
cd libiconv-1.11
./configure --enable-shared --prefix=/Applications/MAMP/Library
make
make install

LibIdn

tar xvfz libidn-0.6.14.tar.gz
cd libidn-0.6.14
./configure --enable-shared --prefix=/Applications/MAMP/Library/
make
make install

libmcrypt

tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --enable-shared --prefix=/Applications/MAMP/Library/
make
make install

libpng

tar zxvf libpng-1.2.18.tar.gz
cd libpng-1.2.18
./configure --enable-shared --prefix=/Applications/MAMP/Library
make
make install

libxml

tar zxvf libxml2-2.6.29.tar.gz
cd libxml2-2.6.29
./configure --enable-shared --prefix=/Applications/MAMP/Library
make
make install

libxst

tar zxvf libxslt-1.1.21.tar.gz
cd libxslt-1.1.21
./configure --enable-shared --prefix=/Applications/MAMP/Library/ --with-libxml-prefix=/Applications/MAMP/Library/
make
make install

t1lib

tar zxvf t1lib-5.1.1.tar.gz
cd t1lib-5.1.1
./configure --enable-shared --prefix=/Applications/MAMP/Library/
make without_doc
make install

libexpat

Esta libreria es necesaria y no esta incluida, asi que hay que bajarla de http://sourceforge.net/projects/expat/

tar zxvf expat-2.0.1.tar.gz
cd expat-2.0.1
./configure --enable-shared --prefix=/Applications/MAMP/Library/
make
make install

MySQL

tar xvfz mysql-5.0.41.tar.gz
cd mysql-5.0.41
./configure --prefix=/Applications/MAMP/Library --with-unix-socket-path=/Applications/MAMP/tmp/mysql/mysql.sock --with-tcp-port=9999 --localstatedir=/Applications/MAMP/db/mysql/
make
make install

Apache2

tar zxvf httpd-2.0.59.tar.gz
cd httpd-2.0.59
./configure --prefix=/Applications/MAMP/Library --sysconfdir=/Applications/MAMP/conf/apache --enable-nonportable-atomics --enable-so --enable-cgid --enable-auth-anon --enable-auth-dbm --enable-auth-digest --enable-file-cache --enable-echo --enable-charset-lite --enable-cache --enable-disk-cache --enable-mem-cache --enable-example --enable-ext-filter --enable-case-filter --enable-case-filter-in --enable-deflate --enable-mime-magic --enable-cern-meta --enable-expires --enable-headers --enable-usertrack --enable-unique-id --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy-http --enable-bucketeer --enable-http --enable-info --enable-cgid --enable-vhost-alias --enable-speling --enable-rewrite --enable-so --with-ssl=/usr --enable-dav --enable-dav-fs --enable-ssl=shared --enable-mods-shared=most --with-mpm=prefork --without-berkeley-db
make

Si al compilar nos aparece este error:

endrecv.c:965:2: error: #error APR has detected sendfile on your system, but nobody has written a
sendrecv.c:966:2: error: #error version of it for APR yet. To get past this, either write apr_sendfile
sendrecv.c:967:2: error: #error or change APR_HAS_SENDFILE in apr.h to 0.

Entonces tenemos que editar el fichero srclib/apr/include/apr.h y cambiar la linea #define APR_HAS_SENDFILE 1 por #define APR_HAS_SENDFILE 0

Y finalmente para instalar

make install

PHP

tar zxvf php-5.2.5.tar.gz
cd php-5.2.5
./configure --with-mysql=/Applications/MAMP/Library --with-apxs2=/Applications/MAMP/Library/bin/apxs --with-gd --with-jpeg-dir=/Applications/MAMP/Library --with-png-dir=/Applications/MAMP/Library --with-zlib --with-freetype-dir=/Applications/MAMP/Library --prefix=/Applications/MAMP/bin/php5 --exec-prefix=/Applications/MAMP/bin/php5 --sysconfdir=/Applications/MAMP/conf/php5 --with-soap --with-config-file-path=/Applications/MAMP/conf/php5 --enable-track-vars --enable-bcmath --enable-ftp --enable-gd-native-ttf --with-bz2=/usr --with-ldap --with-mysqli=/Applications/MAMP/Library/bin/mysql_config --with-sqlite --with-ttf --with-t1lib=/Applications/MAMP/Library --enable-mbstring=all --with-curl=/Applications/MAMP/Library --enable-dbx --enable-sockets --enable-bcmath --with-imap=shared,/Applications/MAMP/Library/lib/imap-2006i --enable-soap --with-kerberos --enable-calendar --with-pgsql=shared,/Applications/MAMP/Library/pg --enable-dbase --enable-exif --with-libxml-dir=/Applications/MAMP/Library --with-gettext=shared,/Applications/MAMP/Library --with-xsl=/Applications/MAMP/Library --with-pdo-mysql=shared,/Applications/MAMP/Library --with-pdo-pgsql=shared,/Applications/MAMP/Library/pg --with-mcrypt=shared,/Applications/MAMP/Library --with-openssl --with-iconv=shared,/Applications/MAMP/Library
make
make test
make install

Y con esto ya tenemos recompilado el MAMP y listos para funcionar. En cualquiera de las opciones se puede aprovechar para cambiar opciones, añadir o quitar modules, etc…

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;