SafeChildren Banner

Havoc Oracle Solaris Experts

viernes, 31 de julio de 2009

Instalar subversion para compilar Hadoop en Solaris 10

Introducción
En esta nueva entrega, vamos a ver cómo podemos crear un entorno para trabajar con el código fuente de Hadoop, para ello, instalaremos subversion en una zona que aislaremos del resto con el fin de no interferir en las configuraciones de nuestro cluster de hadoop. Puede que te resulte interesante leer el post de como configurar wget, ant y subversion con proxy

Creación de una Zona para la compilación
Vamos a crear una zona como hemos visto en mi anterior post de Gestión básica de Zonas, con una modificación. Los paquetes que vamos a instalar los obtendremos en formato binario desde Sun Freeware y éstos se instalan en /usr/local por lo tanto, vamos a hacer que nuestra zona no comparta el directorio /usr ya que sino, lo montará como sólo lectura y no podremos instalarlos, para ello, eliminaremos la propiedad inherit-pkg-dir con valor /usr
# zonecfg -z hadoop-svn
hadoop-svn: No se ha configurado esa zona
Use 'create' para comenzar a configurar una zona nueva.
zonecfg:hadoop-svn> create
zonecfg:hadoop-svn> remove inherit-pkg-dir dir=/usr
zonecfg:hadoop-svn> set scheduling-class=FSS
zonecfg:hadoop-svn> set autoboot=false
zonecfg:hadoop-svn> set zonepath=/opt/zones/hadoop-svn
zonecfg:hadoop-svn> add net
zonecfg:hadoop-svn: net> set physical=e1000g0
zonecfg:hadoop-svn: net> set address=10.1.1.7/24
zonecfg:hadoop-svn: net> set defrouter=10.1.1.254
zonecfg:hadoop-svn: net> end
zonecfg:hadoop-svn> verify
zonecfg:hadoop-svn> commit
zonecfg:hadoop-svn> exit

# zoneadm -z hadoop-svn install
....
# zoneadm -z hadoop-svn boot
Una vez creada y configurada la zona podemos comenzar con la instalación de los paquetes, para ello, los descargaremos desde SunFreeware

Descargamos los paquetes

$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libgcc-3.4.6-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libgcc-3.4.6-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/zlib-1.2.3-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/openldap-2.4.16-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libtool-1.5.24-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/openssl-0.9.8k-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/sasl-2.1.21-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/db-4.7.25.NC-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libintl-3.4.0-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libiconv-1.11-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/libxml2-2.6.31-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/expat-2.0.1-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/swig-1.3.36-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/apache-2.0.59-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/apache-2.2.11-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/neon-0.28.3-sol10-x86-local.gz
$ wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/subversion-1.6.2-sol10-x86-local.gz
Descomprimimos los paquetes
$ gzip -d *.gz
Instalamos los paquetes
# pkgadd -d libgcc-3.4.6-sol10-x86-local
# pkgadd -d zlib-1.2.3-sol10-x86-local
# pkgadd -d openldap-2.4.16-sol10-x86-local
# pkgadd -d libtool-1.5.24-sol10-x86-local
# pkgadd -d openssl-0.9.8k-sol10-x86-local
# pkgadd -d sasl-2.1.21-sol10-x86-local
# pkgadd -d db-4.7.25.NC-sol10-x86-local
# pkgadd -d libintl-3.4.0-sol10-x86-local
# pkgadd -d libiconv-1.11-sol10-x86-local
# pkgadd -d libxml2-2.6.31-sol10-x86-local
# pkgadd -d expat-2.0.1-sol10-x86-local
# pkgadd -d swig-1.3.36-sol10-x86-local
# pkgadd -d apache-2.2.11-sol10-x86-local
# pkgadd -d neon-0.28.3-sol10-x86-local
# pkgadd -d subversion-1.6.2-sol10-x86-local
Comprobar la Instalación
Debemos incluir el directorio /usr/local/bin en nuestro path, para ello, podemos modificar el profile de la siguiente forma

$ cat >~/.profile<
##########################################################
# Developer Profile
##########################################################

# Common Home
ANT_HOME=/opt/ant
JAVA_HOME=/usr/java
HADOOP_HOME=/opt/hadoop
PATH=$ANT_HOME/bin:$PATH:$HADOOP_HOME/bin:/usr/sfw/bin:/usr/local/bin:/usr/ccs/bin:/usr/ucb

export PATH HADOOP_HOME JAVA_HOME ANT_HOME

# Simple Banner
banner Hadoop_Dev

MAIL=/usr/mail/${LOGNAME:?}

EOF
A continuación, vamos a comprobar que todas las dependencias de svn están correctamente, para ello ejecutaremos el siguiente comando
$ ldd $(which svn)
libsvn_client-1.so.0 => /usr/local/lib/libsvn_client-1.so.0
libsvn_wc-1.so.0 => /usr/local/lib/libsvn_wc-1.so.0
libsvn_ra-1.so.0 => /usr/local/lib/libsvn_ra-1.so.0
libsvn_diff-1.so.0 => /usr/local/lib/libsvn_diff-1.so.0
libsvn_ra_local-1.so.0 => /usr/local/lib/libsvn_ra_local-1.so.0
libsvn_repos-1.so.0 => /usr/local/lib/libsvn_repos-1.so.0
libsvn_fs-1.so.0 => /usr/local/lib/libsvn_fs-1.so.0
libsvn_fs_fs-1.so.0 => /usr/local/lib/libsvn_fs_fs-1.so.0
libsvn_fs_util-1.so.0 => /usr/local/lib/libsvn_fs_util-1.so.0
libsvn_ra_svn-1.so.0 => /usr/local/lib/libsvn_ra_svn-1.so.0
libsvn_ra_neon-1.so.0 => /usr/local/lib/libsvn_ra_neon-1.so.0
libsvn_ra_serf-1.so.0 => /usr/local/lib/libsvn_ra_serf-1.so.0
libserf-0.so.0 => /usr/local/lib/libserf-0.so.0
libm.so.2 => /usr/lib/libm.so.2
libsvn_delta-1.so.0 => /usr/local/lib/libsvn_delta-1.so.0
libsvn_subr-1.so.0 => /usr/local/lib/libsvn_subr-1.so.0
libaprutil-1.so.0 => /usr/local/apache2/lib/libaprutil-1.so.0
libldap-2.4.so.2 => /usr/local/lib/libldap-2.4.so.2
libsasl2.so.2 => /usr/local/lib/libsasl2.so.2
libgss.so.1 => /usr/lib/libgss.so.1
liblber-2.4.so.2 => /usr/local/lib/liblber-2.4.so.2
libresolv.so.2 => /usr/lib/libresolv.so.2
libgen.so.1 => /usr/lib/libgen.so.1
libapr-1.so.0 => /usr/local/apache2/lib/libapr-1.so.0
libuuid.so.1 => /usr/lib/libuuid.so.1
libsendfile.so.1 => /usr/lib/libsendfile.so.1
librt.so.1 => /usr/lib/librt.so.1
libpthread.so.1 => /usr/lib/libpthread.so.1
libneon.so.27 => /usr/local/lib/libneon.so.27
libz.so => /usr/local/lib/libz.so
libssl.so.0.9.8 => /usr/local/ssl/lib/libssl.so.0.9.8
libcrypto.so.0.9.8 => /usr/local/ssl/lib/libcrypto.so.0.9.8
libnsl.so.1 => /usr/lib/libnsl.so.1
libdl.so.1 => /usr/lib/libdl.so.1
libexpat.so.1 => /usr/local/lib/libexpat.so.1
libsocket.so.1 => /usr/lib/libsocket.so.1
libintl.so.8 => /usr/local/lib/libintl.so.8
libiconv.so.2 => /usr/local/lib/libiconv.so.2
libsec.so.1 => /usr/lib/libsec.so.1
libc.so.1 => /usr/lib/libc.so.1
libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1
libcmd.so.1 => /lib/libcmd.so.1
libaio.so.1 => /lib/libaio.so.1
libmd.so.1 => /lib/libmd.so.1
libmp.so.2 => /lib/libmp.so.2
libscf.so.1 => /lib/libscf.so.1
libavl.so.1 => /lib/libavl.so.1
libdoor.so.1 => /lib/libdoor.so.1
libuutil.so.1 => /lib/libuutil.so.1
Si por algún motivo nos faltase alguna, nos mostraría un mensaje (archivo no encontrado). A continuación se muestra un ejemplo de whoami sin una de su dependencia.
# ldd /usr/local/bin/whoami
libintl.so.8 => (archivo no encontrado)
libc.so.1 => /usr/lib/libc.so.1
libm.so.2 => /lib/libm.so.2
/platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1

Requisitos Especiales
Para una correcta compilación de hadoop sobre Solaris, tenemos que tener en cuenta algunos requisitos como son el hecho de que hadoop asume que whoami se encuentra en el path, como he comentado en el post anterior, además también asume que md5sum existe y está accesible, por lo tanto, vamos a hacer algunos cambios en nuestra instalación para que todo funcione correctamente.

1.- Instalaremos el paquete md5 desde SunFreeware
$ wget ftp://ftp.sunfreeware.com/pub/freeware/sparc/10/md5-6142000-sol10-intel-local.gz
$ gzip -d md5-6142000-sol10-intel-local.gz
$ su -
password
# pkgadd -d md5-6142000-sol10-intel-local.gz
2.- Crearemos un link desde md5 a md5sum ya que el paquete no lo crea
# cd /usr/local/bin
# ln md5 md5sum
3.- Introduciremos el directorio /usr/ucb en el path del usuario si no lo tenemos hecho ya

4.- Instalaremos la versión 1.7 de Apache ant
# cd /opt
# /usr/sfw/bin/wget http://apache.inetbridge.net/ant/binaries/apache-ant-1.7.1-bin.tar.gz
# /usr/sfw/bin/gtar zxvpf apache-ant-1.7.1-bin.tar.gz
# mv apache-ant-1.7.1 ant
# rm apache-ant-1.7.1-bin.tar.gz

Pondremos las variables de entorno ANT_HOME e introduciremos $ANT_HOME/bin en el path para que lo encuentre (esto está puesto en el profile de ejemplo) y con esto, ya tenemos el entorno preparado para poder hacer un checkout del proyecto Hadoop


CheckOut del Proyecto
Vamos a crear un directorio hadoop-source en el cual haremos el checkout de hadoop, para ello, realizaremos los siguientes pasos
$ mkdir ~/hadoop-source
$ cd ~/hadoop-source
$ svn checkout http://svn.apache.org/repos/asf/hadoop/common/trunk/ hadoop-common-trunk
Con esto ya podemos comenzar a probar el código fuente de hadoop, hacer parches, etc.

Conclusiones
Hemos visto cómo instalar subversion desde SunFreeware utilizando los paquetes en formato binario, además, hemos modificado el profile para incluir el famoso whoami en el path para que hadoop lo encuentre. Además, hemos incluido md5sum ya que también es necesario para la compilación de hadoop

Espero no haberos aburrido con este lago post y en los próximos veremos cómo trabajar con subversion para hacer parches y subirlos al source de hadoop

Referencias

No hay comentarios:

Publicar un comentario