SafeChildren Banner

Havoc Oracle Solaris Experts
Mostrando entradas con la etiqueta memcached. Mostrar todas las entradas
Mostrando entradas con la etiqueta memcached. Mostrar todas las entradas

martes, 25 de mayo de 2010

Instalar MemCached (32bits) en OpenSolaris

Introducción
Ya hemos visto anteriormente Cómo Instalar Memcached (32bits) en Solaris 10, sin embargo, ahora vamos a ver cómo podemos instalarlo sobre OpenSolaris.

La verdad es que el proceso de instalación es muy similar -no en vano OpenSolaris es Solaris- y sólo debemos tener en cuenta algunas cosas.

Si instalamos MemCached desde el binario para Solaris 10 que os preparé, y queremos hacer la instalación sobre una zona creada en OpenSolaris utilizando el instalador de texto, es probable que las bibliotecas de ejecución de GCC <GCC Runtime> no se encuentren instaladas, y eso nos haga aparecer un <Not Found> en la consulta del comando <ldd>.

Vamos a ver cómo podemos instalar memcached en OpenSolaris paso a paso utilizando el binario de MemCached 1.4.5 para Solaris 10 x86
root@appserver:/# cd /opt
root@appserver:/opt# wget http://blog.sfchildren.com/blogger/memcached/binary/memcached-1.4.5-SOLARIS-X86.tar.gz
root@appserver:/opt# gzip -dc memcached-1.4.5-SOLARIS-X86.tar.gz | tar xvpf -
x memcached/32, 0 bytes, 0 tape blocks
x memcached/32/include, 0 bytes, 0 tape blocks
x memcached/32/include/memcached, 0 bytes, 0 tape blocks
x memcached/32/include/memcached/protocol_binary.h, 14855 bytes, 30 tape blocks
x memcached/32/share, 0 bytes, 0 tape blocks
x memcached/32/share/man, 0 bytes, 0 tape blocks
x memcached/32/share/man/man1, 0 bytes, 0 tape blocks
x memcached/32/share/man/man1/memcached.1, 5304 bytes, 11 tape blocks
x memcached/32/run, 0 bytes, 0 tape blocks
x memcached/32/bin, 0 bytes, 0 tape blocks
x memcached/32/bin/memcached, 97104 bytes, 190 tape blocks
x memcached/libevent, 0 bytes, 0 tape blocks
x memcached/libevent/32, 0 bytes, 0 tape blocks
x memcached/libevent/32/include, 0 bytes, 0 tape blocks
x memcached/libevent/32/include/event-config.h, 8243 bytes, 17 tape blocks
x memcached/libevent/32/include/evrpc.h, 16358 bytes, 32 tape blocks
x memcached/libevent/32/include/event.h, 37776 bytes, 74 tape blocks
x memcached/libevent/32/include/evhttp.h, 11561 bytes, 23 tape blocks
x memcached/libevent/32/include/evdns.h, 18900 bytes, 37 tape blocks
x memcached/libevent/32/include/evutil.h, 5529 bytes, 11 tape blocks
x memcached/libevent/32/bin, 0 bytes, 0 tape blocks
x memcached/libevent/32/bin/event_rpcgen.py, 45502 bytes, 89 tape blocks
x memcached/libevent/32/share, 0 bytes, 0 tape blocks
x memcached/libevent/32/share/man, 0 bytes, 0 tape blocks
x memcached/libevent/32/share/man/man3, 0 bytes, 0 tape blocks
x memcached/libevent/32/share/man/man3/evdns.3, 11563 bytes, 23 tape blocks
x memcached/libevent/32/share/man/man3/event.3, 17705 bytes, 35 tape blocks
x memcached/libevent/32/lib, 0 bytes, 0 tape blocks
x memcached/libevent/32/lib/libevent_core.la, 891 bytes, 2 tape blocks
x memcached/libevent/32/lib/libevent_core-1.4.so.2.1.3, 98224 bytes, 192 tape blocks
x memcached/libevent/32/lib/libevent.la, 856 bytes, 2 tape blocks
x memcached/libevent/32/lib/libevent_extra-1.4.so.2.1.3, 188612 bytes, 369 tape blocks
x memcached/libevent/32/lib/libevent.so symbolic link to libevent-1.4.so.2.1.3
x memcached/libevent/32/lib/libevent-1.4.so.2.1.3, 233872 bytes, 457 tape blocks
x memcached/libevent/32/lib/libevent_core.a, 127760 bytes, 250 tape blocks
x memcached/libevent/32/lib/libevent_core.so symbolic link to libevent_core-1.4.so.2.1.3
x memcached/libevent/32/lib/libevent_core-1.4.so.2 symbolic link to libevent_core-1.4.so.2.1.3
x memcached/libevent/32/lib/libevent_extra.so symbolic link to libevent_extra-1.4.so.2.1.3
x memcached/libevent/32/lib/libevent.a, 290116 bytes, 567 tape blocks
x memcached/libevent/32/lib/libevent_extra.la, 898 bytes, 2 tape blocks
x memcached/libevent/32/lib/libevent-1.4.so.2 symbolic link to libevent-1.4.so.2.1.3
x memcached/libevent/32/lib/libevent_extra.a, 226568 bytes, 443 tape blocks
x memcached/libevent/32/lib/libevent_extra-1.4.so.2 symbolic link to libevent_extra-1.4.so.2.1.3
x memcached/README, 2348 bytes, 5 tape blocks
x memcached/svc, 0 bytes, 0 tape blocks
x memcached/svc/memcached_1, 3874 bytes, 8 tape blocks
x memcached/svc/memcached_1.xml, 5129 bytes, 11 tape blocks
root@appserver:/opt# ls -ltr
total 5
drwxr-xr-x   3 root     root           3 May 25 11:01 www
-rw-r--r--   1 root     root      602334 May 25 12:22 memcached-1.4.5-SOLARIS-X86.tar.gz
drwxr-xr-x   5 root     root           6 May 25 12:22 memcached
root@appserver:/opt# rm memcached-1.4.5-SOLARIS-X86.tar.gz

Verificación de Dependencias
Debemos comprobar que tenemos todas las dependencias instaladas, para ello vamos a utilizar el comando <ldd> y veremos si el enlazador no ha podido encontrar alguna <so>.
NOTA: En función de la arquitectura que tengamos -x86, SPARC- se mostrarán unos archivos u otros, esto no importa mientras no aparezcan referencias <inválidas o no encontradas> En nuestro caso, no se ha encontrado el runtime de GCC -ya que se compiló con GCC-, por eso aparece libgcc_s.so.1 => (File not found)
root@appserver:/opt# cd memcached/32/bin
root@appserver:/opt/memcached/32/bin# ldd memcached
        libumem.so.1 =>  /lib/libumem.so.1
        libnsl.so.1 =>   /lib/libnsl.so.1
        libsocket.so.1 =>        /lib/libsocket.so.1
        libevent-1.4.so.2 =>     /opt/memcached/libevent/32/lib/libevent-1.4.so.2
        libpthread.so.1 =>       /lib/libpthread.so.1
        libc.so.1 =>     /lib/libc.so.1
        libmp.so.2 =>    /lib/libmp.so.2
        libmd.so.1 =>    /lib/libmd.so.1
        libscf.so.1 =>   /lib/libscf.so.1
        librt.so.1 =>    /lib/librt.so.1
        libresolv.so.2 =>        /lib/libresolv.so.2
        libgcc_s.so.1 =>         (file not found)
        libuutil.so.1 =>         /lib/libuutil.so.1
        libgen.so.1 =>   /lib/libgen.so.1
        libsmbios.so.1 =>        /usr/lib/libsmbios.so.1
        libm.so.2 =>     /lib/libm.so.2
Ya hemos visto que nos hace falta el runtime de GCC, por lo tanto, vamos a instalarlo utilizando el comando <pkg install SUNWgccruntime>. 
root@appserver:/# pkg install SUNWgccruntime
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                  1/1       34/34      1.9/1.9

PHASE                                        ACTIONS
Install Phase                                115/115
Volvemos a comprobar las dependencias, y vemos que ya se ha resulto el problema del runtime de GCC
root@appserver:/# cd /opt/memcached/32/bin/
root@appserver:/opt/memcached/32/bin# ldd memcached
        libumem.so.1 =>  /lib/libumem.so.1
        libnsl.so.1 =>   /lib/libnsl.so.1
        libsocket.so.1 =>        /lib/libsocket.so.1
        libevent-1.4.so.2 =>     /opt/memcached/libevent/32/lib/libevent-1.4.so.2
        libpthread.so.1 =>       /lib/libpthread.so.1
        libc.so.1 =>     /lib/libc.so.1
        libmp.so.2 =>    /lib/libmp.so.2
        libmd.so.1 =>    /lib/libmd.so.1
        libscf.so.1 =>   /lib/libscf.so.1
        librt.so.1 =>    /lib/librt.so.1
        libresolv.so.2 =>        /lib/libresolv.so.2
        libgcc_s.so.1 =>         /usr/sfw/lib/libgcc_s.so.1
        libuutil.so.1 =>         /lib/libuutil.so.1
        libgen.so.1 =>   /lib/libgen.so.1
        libsmbios.so.1 =>        /usr/lib/libsmbios.so.1
        libm.so.2 =>     /lib/libm.so.2
Instalación de MemCached utilizando SVC
Vamos a copiar los archivos para SVC que tenemos en <$MEMCACHED_HOME/svc> -method y manifest- en sus ubicaciones correspondientes. Posteriormente añadiremos el grupo <memcache>, usuario <memcache> y project <user.memcache> definidos en nuestro archivo manifest
root@appserver:/opt/memcached/svc# cp memcached_1 /lib/svc/method
root@appserver:/opt/memcached/svc# groupadd memcache
root@appserver:/opt/memcached/svc# useradd -g memcache -s /bin/bash -d /export/home/memcache -m memcache
80 blocks
root@appserver:/opt/memcached/svc# projadd -G memcache -U memcache -c 'MemCached Project' user.memcache
root@appserver:/opt/memcached/svc# cp memcached_1.xml /var/svc/manifest/application/cache/memcached_1
root@appserver:/opt/memcached/svc# cd /var/svc/manifest/application/cache/memcached_1
root@appserver:/var/svc/manifest/application/cache/memcached_1# svccfg
svc:> validate memcached_1.xml
svc:> import memcached_1.xml
svc:> quit
root@appserver:/var/svc/manifest/application/cache/memcached_1# svcs memcached_1
STATE          STIME    FMRI
disabled       12:34:52 svc:/application/cache/memcached_1:memcached_default32bits
root@appserver:/var/svc/manifest/application/cache/memcached_1# svcadm enable memcached_1
root@appserver:/var/svc/manifest/application/cache/memcached_1# svcs memcached_1
STATE          STIME    FMRI
online         12:42:58 svc:/application/cache/memcached_1:memcached_default32bits
Conclusión
La verdad es que el proceso de instalación sobre OpenSolaris es idéntico a Solaris, además con el uso de los comandos de instalación <pkg> nos simplifica la resolución de dependencias.

Referencias

lunes, 12 de abril de 2010

Instalar MemCached (32bits) en Solaris 10

Introducción
En esta ocasión vamos a ver cómo instalar y configurar MemCached en Solaris 10, en 32bits. En otro post vimos cómo Instalar MemCached en Solaris 10 en 64bits, debéis tener en cuenta que si lo instalamos en 32bits no podremos poner un tamaño de caché superior a 4Gb, a parte de esto, no tenemos más limitaciones.

La instalación de MemCached necesita de la biblioteca LibEvent, por lo tanto, primero deberemos descargar y compilarla. En nuestro ejemplo vamos a utilizar la siguiente estructura:
$MEMCACHED_HOME=/opt/memcached/32
$LIBEVENT_HOME=/opt/memcached/libevent/32
Y crearemos el usuario <memcached> y el project <user.memcached&gt para gestionar el uso de recursos dentro del sistema. Además, haremos que nuestro servidor de MemCached esté ejecutado -y controlado- mediante SMF, por lo tanto, podremos incluirlo como servicio requerido.

Para aquellos que no tenéis la posibilidad de compilar los paquetes, os he dejado uno listo para instalar -en el path </opt/memcached> en Solaris 10 SPARC de MemCached 1.4.5 32bits y Solaris 10 X86 de MemCached 1.4.5 32bits

Instalación de LibEvent (32Bits)
$ wget http://www.monkey.org/%7Eprovos/libevent-1.4.13-stable.tar.gz
$ gtar zxpf libevent-1.4.13-stable.tar.gz
$ cd libevent-1.4.13-stable
$ ./configure --enable-static --prefix=/opt/memcached/libevent/32
$ make
# make install
Comprobamos que todo se ha instalado correctamente y que no tenemos dependencias fallidas
$ ldd /opt/memcached/libevent/32/lib/libevent.so
        libnsl.so.1 =>   /lib/libnsl.so.1
        librt.so.1 =>    /lib/librt.so.1
        libresolv.so.2 =>        /lib/libresolv.so.2
        libsocket.so.1 =>        /lib/libsocket.so.1
        libc.so.1 =>     /lib/libc.so.1
        libgcc_s.so.1 =>         /usr/sfw/lib/libgcc_s.so.1
        libmp.so.2 =>    /lib/libmp.so.2
        libmd.so.1 =>    /lib/libmd.so.1
        libscf.so.1 =>   /lib/libscf.so.1
        libaio.so.1 =>   /lib/libaio.so.1
        libdoor.so.1 =>  /lib/libdoor.so.1
        libuutil.so.1 =>         /lib/libuutil.so.1
        libgen.so.1 =>   /lib/libgen.so.1
        libm.so.2 =>     /lib/libm.so.2
        /platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1
        /platform/SUNW,Sun-Fire-280R/lib/libmd_psr.so.1


Instalación de MemCached (32bits)
En la instalación de MemCached, vamos a forzar a nuestro linker para que se asocie con la biblioteca libevent que hemos creado, es decir, vamos a utilizar el flag &lt:-R> y de esta forma, no será necesario exportar la variable de entorno LD_LIBRARY_PATH_32. Para ello, deberemos utilizar la variable de entorno LDFLAGS que nos permitirá incluirlo en el sistema de configuración de MemCache.


Además, existe un bug en Solaris 10 que hace que el sistema incluya la opción <-pthread> que en algunas versiones antiguas de GCC no es válida, así que nos muestra el error:
gcc: unrecognized option `-pthread'
Para solucionarlo, simplemente exportaremos el valor a <-pthreads> en $CFLAGS y configuraremos. Si queréis más información aquí esta el link al bug
$ wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
$ gtar zxpf memcached-1.4.5.tar.gz
$ cd memcached-1.4.5
$ export LDFLAGS="-R/opt/memcached/libevent/32/lib -R/usr/sfw/lib"
$ export CFLAGS="-pthreads -O3"
$ ./configure --with-libevent=/opt/memcached/libevent/32 --prefix=/opt/memcached/32
$ make
# make install
Comprobamos que se ha instalado correctamente y que no tiene dependencias fallidas
$ ldd /opt/memcached/32/bin/memcached
        libumem.so.1 =>  /lib/libumem.so.1
        libnsl.so.1 =>   /lib/libnsl.so.1
        libsocket.so.1 =>        /lib/libsocket.so.1
        libevent-1.4.so.2 =>     /opt/memcached/libevent/32/lib/libevent-1.4.so.2
        libc.so.1 =>     /lib/libc.so.1
        libmp.so.2 =>    /lib/libmp.so.2
        libmd.so.1 =>    /lib/libmd.so.1
        libscf.so.1 =>   /lib/libscf.so.1
        librt.so.1 =>    /lib/librt.so.1
        libresolv.so.2 =>        /lib/libresolv.so.2
        libgcc_s.so.1 =>         /usr/sfw/lib/libgcc_s.so.1
        libdoor.so.1 =>  /lib/libdoor.so.1
        libuutil.so.1 =>         /lib/libuutil.so.1
        libgen.so.1 =>   /lib/libgen.so.1
        libaio.so.1 =>   /lib/libaio.so.1
        libm.so.2 =>     /lib/libm.so.2
        /platform/SUNW,Sun-Fire-280R/lib/libc_psr.so.1
        /platform/SUNW,Sun-Fire-280R/lib/libmd_psr.so.1
Configuración MemCached
A continuación vamos a crear el usuario y grupo <memcached> y el project <user.memcached> -recordar que SMF necesita hacer un chdir al home del usuario-
# groupadd memcache
# useradd -g memcache -s /bin/bash -d /export/home/memcache -m memcache
# projadd -G memcache -c 'MemCache Project' user.memcache
Creamos el Manifest para MemCached -en mi caso he decidido ponerlo en <application/cache> pero puedes ponerlo donde quieras-

# cd /var/svc/manifest/application/cache/
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/memcached/svc/memcached_1.xml
# svccfg
svc:> validate memcached_1.xml
svc:> import memcached_1.xml
svc:> quit
Y ahora, el Method para MemCached
# cd /lib/svc/method
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/memcached/svc/memcached_1
# chmod 555 memcached_1
# chown root:bin memcached_1
Ya hemos instalado todos los requisitos de Solaris SMF, sin embargo, hemos declarado que guarde el <PID> en <$MEMCACHED_HOME/run>, por lo tanto, debemos crear el directorio
# mkdir /opt/memcached/32/run
# chown memcache:memcache /opt/memcached/32/run
# chmod 750  /opt/memcached/32/run
Ahora ya podemos activar nuestro servicio MemCached utilizando el FRMI <memcached_1>
# svcs memcached_1
STATE          STIME    FMRI
disabled       11:37:41 svc:/application/cache/memcached_1:memcached_default32bits
# svcadm enable memcached_1
# svcs -p memcached_1
STATE          STIME    FMRI
online         12:04:25 svc:/application/cache/memcached_1:memcached_default32bits
               12:04:25    18580 memcached
Conclusiones
En esta ocasión hemos visto cómo instalarlo y configurarlo, la verdad es que no requiere de mucho tiempo -ni conocimientos- y, al introducir el control dentro de Solaris SMF, podemos gestionar las dependencias, por ejemplo, si nuestro memcached se cae, el servicio de Tomcat gestionado por SMF se marque como degraded


Referencias

jueves, 12 de noviembre de 2009

Instalación de JMemCached sobre Solaris utilizando SMF

Introducción
En artículos anteriores hemos visto Cómo instalar MemCached 64bits en Solaris 10. Bien, ahora vamos a ver cómo podemos instalar JMemCached, que como podeis imaginaros es la Implementación en Java de MemCached.

En este caso vamos a utilizar SMF para gestionar el sistema de cache y, de esta forma, poder tener un control sobre si correcto funcionamiento utilizando los comandos: svcadm y svcs

Para ello, descargamos el manifest, method y lo cargamos en nuestro repositorio, en mi caso /var/svc/manifest/application/cache.

Hay que tener en cuenta que las configuraciones por defecto del archivo de descripción <jmemcached.xml> son las siguientes:
  • HOME: Indica la ubicación de instalación de JMemCached, en mi caso /opt/www/jmemcached
  • PORT: Puerto de escucha de JMemCached, en mi caso 11212
  • JVMARGS: Parámetros de configuración de la JVM, en mi caso -Xms512m -Xmx512 -d64
  • PROJECT: Projecto del sistema, en mi caso cached.jmemcached
  • MEMORY: Memoria asignada a JMemCached <no confundir con memoria de JVM>, en mi caso 256M
  • BINARY: Binario de ejecución, en mi caso jmemcached-cli-0.8-main.jar
Además, el usuario y grupo de ejecución es <www>, por lo tanto, puedes editar aquellos parámetros que desees para adaptarlos a tu configuración. Vamos a ver la instalación paso a paso ...

Añadimos el usuario, grupo y project
# groupadd www
# useradd -s /bin/false -d /dev/null -g www www
# passwd -l www
# projadd -G www cached.jmemcached
Descargamos los manifest y creamos la  estructura de log del method
# cd /var/svc/manifest/application/
# mkdir cache
# cd cache/
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/jmemcached/jmemcached.xml
# cd /lib/svc/method/
# /usr/sfw/bin/wget http://blog.sfchildren.com/blogger/jmemcached/jmemcached
# mkdir -p /opt/www/jmemcached
# chown www:www /opt/www/jmemcached/
# mkdir -p /var/log/jmemcached/
# chown www:www /var/log/jmemcached
Descargamos JMemCached en /opt/www/jmemcache <home>
# cd /opt/www/jmemcached
# /usr/sfw/bin/wget http://jmemcache-daemon.googlecode.com/files/jmemcached-cli-0.8-main.jar
Cargar y Activar el FRMI
# cd /var/svc/manifest/application/cache
# svccfg
svc:> validate /var/svc/manifest/application/cache/jmemcached.xml
svc:> import /var/svc/manifest/application/cache/jmemcached.xml
svc:> quit
# svcadm enable jmemcached
# svcs jmemcached
STATE          STIME    FMRI
online         19:57:01 svc:/application/cache/jmemcached:jmemcached_main
Comprobación de Funcionamiento
Para comprobar su funcionamiento podemos hacer tanto un ps, como un telnet al puerto que tengamos definido. Además, si hacemos un kill -9 sobre el pid, veremos como SMF se encarga de levantarlo de nuevo.
# svcs jmemcached
STATE          STIME    FMRI
online         19:57:01 svc:/application/cache/jmemcached:jmemcached_main
# svcs -p jmemcached
STATE          STIME    FMRI
online         19:57:01 svc:/application/cache/jmemcached:jmemcached_main
               19:56:59      315 java

Como podemos ver, nuestro proceso de JMemCached tiene 315 como PID, así que si hacemos un ps, podremos verlo
# ps -ef|grep 315
www 315 1 0 19:56:59 ? 0:01 /usr/jdk/instances/jdk1.5.0/bin/sparcv9/java -Xms512m -Xmx512m -jar /opt/www/jmemcached
Conclusiones
La instalación de una aplicación Java utilizando SMF no supone mayores problemas, a excepción del uso de espacios en blanco en los argumentos de la propiedad jvmargs, para ello hemos tenido que utilizar un pequeño ajuste pero convertir los "\" por " " y "'" por "", a continuación vemos la línea que hay que utilizar en el script de inicio

# Patch to Solve multiples ARGS values onto JVMARGS
JMEMCACHED_JVMARGS=`echo $JMEMCACHED_JVMARGS | sed -e 's/"//g' | sed -e 's/\\\//g'`

Espero que esto os permita crear mas servicios utilizando el framework SMF y, perderle el miedo a esta nueva forma de trabajo.

Referencias

jueves, 1 de octubre de 2009

Instalar MemCached en Solaris 10 64bits

AVISO ABR.2010: He detectado que "en ciertas arquitecturas" el proceso de MemCached sobre 64bis, no responde correctamente cuando se compila con GCC, por ello, os recomiendo inicialmente Instalar y Configurar MemCache(32bits) en Solaris 10


Introducción
MemCached es una caché distribuida de alto rendimiento cuyo principal uso es la aceleración de páginas web mediante cacheo en memoria de las SQL. De esta forma, evitamos tener que llamar a la base de datos.

Aunque pueda parecer una tontería no lo es ya que una cache bien implementada es muy eficiente, más que la de la base de datos. Si, es cierto, bien implementada, pero esto es un tema de programación y nosotros nos vamos a centrar en cómo instalarlo sobre Solaris 10 en 64bits.

Por que en 64bits?
Simple, de esta forma podemos tener un tamaño de caché superior a 4Gb. En la actualidad ya no es raro encontrar máquinas con 8,16,32Gb de RAM ( y de ahí en adelante), por ello, vamos a instalarlo en 64bits.

Nota: Si lo que queremos es que sea de 32bits, simplemente no deberemos exportar el flag de gcc -m64 y las bibliotecas serán /usr/lib y no /usr/lib/64


Compilación de LibEvent en 64bits
La compilación de LibEvent no tiene mucha complicación, simplemente utilizaremos el flag -m64 de gcc para hacerlo de 64bits y --prefix para situarlo en la ubicación /opt/memcached
$ export CFLAGS=-m64
$ export CXXFLAGS=-m64
$ ./configure --enable-static --prefix=/opt/memcached/libevent/64
$ make
# make install

Comprobación de la instalación
Si la instalación ha concluido sin errores, ahora tendremos instalado nuestro libevent en /opt/memcached/libevent/64, sin embargo, tenemos que indicarle dónde se encuentran las bibliotecas de acceso correcto para gcc (si no lo tenemos asignado ya), por ejemplo, si no tenemos asignado nuestro LD64, nos encontraremos con el siguiente error,
$ ldd libevent.so
libnsl.so.1 => /lib/64/libnsl.so.1
librt.so.1 => /lib/64/librt.so.1
libresolv.so.2 => /lib/64/libresolv.so.2
libsocket.so.1 => /lib/64/libsocket.so.1
libc.so.1 => /lib/64/libc.so.1
libgcc_s.so.1 => /usr/sfw/lib/libgcc_s.so.1 - clase ELF incorrecta: ELFCLASS32
libmp.so.2 => /lib/64/libmp.so.2
libmd.so.1 => /lib/64/libmd.so.1
libscf.so.1 => /lib/64/libscf.so.1
libaio.so.1 => /lib/64/libaio.so.1
libdoor.so.1 => /lib/64/libdoor.so.1
libuutil.so.1 => /lib/64/libuutil.so.1
libgen.so.1 => /lib/64/libgen.so.1
libm.so.2 => /lib/64/libm.so.2
/platform/SUNW,Sun-Fire-280R/lib/sparcv9/libc_psr.so.1
/platform/SUNW,Sun-Fire-280R/lib/sparcv9/libmd_psr.so.1
Esto es debido a que está intentando enalzarse con la versión de 32bits de libgcc y nuestro binario es de 64bits, así que, simplemente, la indicaremos que no busque ahí, sino en /usr/sfw/lib/64
$ export LD_LIBRARY_PATH_64=/opt/memcached/libevent/64/lib:/usr/sfw/lib/64
$ pwd
/opt/memcached/libevent/64/lib
$ ldd libevent.so
libnsl.so.1 => /lib/64/libnsl.so.1
librt.so.1 => /lib/64/librt.so.1
libresolv.so.2 => /lib/64/libresolv.so.2
libsocket.so.1 => /lib/64/libsocket.so.1
libc.so.1 => /lib/64/libc.so.1
libgcc_s.so.1 => /usr/sfw/lib/64/libgcc_s.so.1
libmp.so.2 => /lib/64/libmp.so.2
libmd.so.1 => /lib/64/libmd.so.1
libscf.so.1 => /lib/64/libscf.so.1
libaio.so.1 => /lib/64/libaio.so.1
libdoor.so.1 => /lib/64/libdoor.so.1
libuutil.so.1 => /lib/64/libuutil.so.1
libgen.so.1 => /lib/64/libgen.so.1
libm.so.2 => /lib/64/libm.so.2
/platform/SUNW,Sun-Fire-280R/lib/sparcv9/libc_psr.so.1
/platform/SUNW,Sun-Fire-280R/lib/sparcv9/libmd_psr.so.1
Aunque ld buscará en LD_LIBRARY_PATH las bibliotecas de 64 o 32 (en función de lo que necesite) es más correcto poner las bibliotecas de 32bits en LD_LIBRARY_PATH y las de 64bits en LD_LIBRARY_PATH_64

Compilación de MemCache en 64bits
En memcached no es necesario exportar los CFLAGS ya que se puede configurar utilizando --enable-64bit, además utilizaremos --with-libevent para indicarle dónde tenemos instalado nuestro LibEvent
$ ./configure --enable-64bit --with-libevent=/opt/memcached/libevent/64 --prefix=/opt/memcached
$ make
# make install

Comprobación de la instalación
Al igual que hemos hecho antes, comprobaremos que todas las dependencias se encuentran. Si faltase alguna, entonces tendríamos que exportar correctamente nuestro LD_LIBRARY_PATH_64
$ pwd
/opt/memcached/bin
$ ldd memcached
libumem.so.1 => /lib/64/libumem.so.1
libnsl.so.1 => /lib/64/libnsl.so.1
libsocket.so.1 => /lib/64/libsocket.so.1
libevent-1.4.so.2 => /opt/memcached/libevent/64/lib/libevent-1.4.so.2
libc.so.1 => /lib/64/libc.so.1
libmp.so.2 => /lib/64/libmp.so.2
libmd.so.1 => /lib/64/libmd.so.1
libscf.so.1 => /lib/64/libscf.so.1
librt.so.1 => /lib/64/librt.so.1
libresolv.so.2 => /lib/64/libresolv.so.2
libgcc_s.so.1 => /usr/sfw/lib/64/libgcc_s.so.1
libdoor.so.1 => /lib/64/libdoor.so.1
libuutil.so.1 => /lib/64/libuutil.so.1
libgen.so.1 => /lib/64/libgen.so.1
libaio.so.1 => /lib/64/libaio.so.1
libm.so.2 => /lib/64/libm.so.2
/platform/SUNW,Sun-Fire-280R/lib/sparcv9/libc_psr.so.1
/platform/SUNW,Sun-Fire-280R/lib/sparcv9/libmd_psr.so.1
Un pequeño Tuning: Uso de libumem
Como podéis ver, yo tengo una biblioteca llamada libumem que, según man es "una biblioteca rápida, escalable para la caché de objetos en memoria con soporte para multithread", entonces, si estoy ejecutando memcached y a la vez libumem qué pasa? Libumem es una versión mejorada de malloc, calloc, alloc con funcionalidades de debug y memory leaks, además está demostrado que es mucho más eficiente así que por qué no usarla.

Para que libumem se precarge simplemente deberemos establecer las variables de entorno LD_PRELOAD_32 y LD_PRELOAD_64 con las ubicaciones de libumem.
$ echo $LD_PRELOAD_32
/usr/lib/libumem.so.1:/usr/lib/extendedFILE.so.1:
$ echo $LD_PRELOAD_64
/usr/lib/sparcv9/libumem.so.1:
Si queremos que las configuraciones de LD_PRELOAD_32/64 y LD_LIBRARY_PATH se cargen por defecto a todos los usuarios (aunque no es muy recomendable) podemos incluirlo en /etc/profile
$ vi /etc/profile
LD_PRELOAD_32=/usr/lib/libumem.so.1:/usr/lib/extendedFILE.so.1:$LD_PRELOAD_32
LD_PRELOAD_64=/usr/lib/sparcv9/libumem.so.1:$LD_PRELOAD_64

:wq
Nota: Esto tiene "algún" problema con Oracle 9i

Puedes obtener más información desde el man de LibUmem
$ man libumem
Iniciar MemCached
La ejecución de memcached no es muy diferente a cualquier otro binario, sin embargo, los parámetros son muy numerosos, por ello, es necesario entender qué hace cada uno. Para ello, puedes ejecutar memcached con la opción -h que muestra la ayuda

Por ejemplo, si queremos que tenga 256 Mb de caché y un máximo de 2048 conexiones con 4 threads, ejecutaremos

$ ./memcached -m 256 -c 2048 -L -t 4
^CSIGINT handled.
Para detener el proceso, pulsamos Ctrl+C y saldrá.

Conclusiones
Hemos visto cómo podemos instalar sin mayores problemas memcached en 64bits sobre Solaris, ejecutarlo y tenerlo ahí a la espera, sin embargo, nuestro siguiente paso debe ser integrarlo con SMF para poder gestionarlo de igual forma que otros servicios.

Aunque no he podido preparar la configuración del archivo manifiest de memcached, espero que alguien se anime a crearlo y compartirlo con todos, no?

Nota sobre versiones instaladas
Alguna vez me he econtrado con problemas al compilar en los diferentes Solaris, esto es debido a que gmake suele ser una version antigua y tiende a fallar. Por eso, os pongo las versiones con las que suelo compilar las herramientas para los post
$ which make
/usr/local/bin/make
$ which gcc
/usr/sfw/bin/gcc
$ make -v
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for sparc-sun-solaris2.10
$ gcc -v
Reading specs from /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/specs
Configured with: /sfw10/builds/build/sfw10-patch/usr/src/cmd/gcc/gcc-3.4.3/configure --prefix=/usr/sfw --with-as=/usr/ccs/bin/as --without-gnu-as --with-ld=/usr/ccs/bin/ld --without-gnu-ld --enable-languages=c,c++ --enable-shared
Thread model: posix
gcc version 3.4.3 (csl-sol210-3_4-branch+sol_rpath)

Referencias