SafeChildren Banner

Havoc Oracle Solaris Experts

lunes, 31 de mayo de 2010

Instalar IPFilter en OpenSolaris

Introducción
Ya hemos visto con anterioridad Cómo Instalar IPFilter en Solaris 10 paso a paso, ahora vamos a ver cómo instalar IPFilter en una zona de OpenSolaris, simplemente deberemos utilizar la herramienta <pkg> con el paquete <ipfilter>.

Esto, nos descargará los archivos necesarios y nos permitirá gestionarlo desde el framework SMF, a partír de aquí el proceso de Instalación y Configuración de IPFilter será igual que en Solaris 10
root@zrouter-ext:~# pkg install ipfilter
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                  1/1       51/51      1.0/1.0

PHASE                                        ACTIONS
Install Phase                                  99/99
root@zrouter-ext:~# svcs ipfilter
STATE          STIME    FMRI
disabled        9:57:09 svc:/network/ipfilter:default
Conclusiones
El proceso de instalación es similar al de Solaris, con la única salvedad que para poder instalar los binarios debemos de instalarlos utilizando el comadno <pkg>

Referencias

viernes, 28 de mayo de 2010

Instalar Java JDK en OpenSolaris

Introducción
Por defecto, nuestras instalaciones de OpenSolaris vienen con el JRE de Java -el Runtime- pero no el JDK -necesario para Tomcat, por ejemplo-

Para ello, deberemos instalar los paquetes <jdk> y <jdk64> -para 64bits- utilizando el comando <pkg>
root@appserver:~# pkg install jdk
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                  3/3   1334/1334    70.7/70.7 

PHASE                                        ACTIONS
Install Phase                              1717/1717 
root@appserver:~# pkg install jdk64
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                  2/2       94/94      7.4/7.4 

PHASE                                        ACTIONS
Install Phase                                153/153 
root@appserver:~# which java
/usr/bin/java
root@appserver:~# java -d64 -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)

Conclusiones
OpenSolaris nos ofrece una forma muy sencilla de gestionar los paquetes, pero "siempre debemos estar conectados" y por lo tanto, "puede" que en alguna ocasión nos traiga algún problema.

Por ello, debéis recordar que OpenSolaris es "Solaris" y siempre podemos utilizar la forma tradicional de instalación de paquetes -utilizando <pkgadd> que no requiere de conexión a Internet


Referencias



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, 24 de mayo de 2010

Crear un archivo de un tañano en concreto

Introducción
Muchas veces para poder realizar pruebas de rendimiento necesitamos tener archivo con tamaños concretos, por ejemplo para medir la latencia de nuestros servidores Apache HTTP con JMeter.

Para ello, podemos utilizar varios comandos, aunque yo principalmente utilizo dos: <dd> y <mkfile>.

Vamos a crear un archivo de <8Mb> utilizando primero <dd> y luego <mkfile>. El formato del comando <dd> es el siguiente:
dd if={device_origen} of={destino} bs={tamaño de bloque} count={número de veces}
Por lo tanto, si queremos crear un archivo de 8Mb, podemos tener un BlockSize (bs) de 8k y realizar la operación 1024 veces. Vamos a utilizar el device </dev/zero> que nos va a crear un archivo lleno de "ceros".

# time dd if=/dev/zero of=test.dd bs=8k count=1024
1024+0 registros dentro
1024+0 registros fuera

real    0m0.082s
user    0m0.006s
sys     0m0.043s
Pero si queremos que esté lleno de contenido variable podemos utilizar el device </dev/random> para que nos generes secuencias pseudo aleatorias, por ejemplo,
# time dd if=/dev/random of=test.dd_random count=1024
0+1024 registros dentro
0+1024 registros fuera

real    1m52.687s
user    0m0.012s
sys     1m50.498s

Podemos comprobar con un visor octal <od> como al crear el archivo con el device </dev/zero> está lleno de ceros -como es lógico- pero, cuando hacemos lo mismo con el archivo creado utilizando el device </dev/radom> nos ha creado un archivo completamente distinto.

Esto será muy importante cuando utilicemos servicios de compresión -por ejemplo mod_gzip, mod_defalte- ya que comprimirá prácticamente al 99% el archivo creado con </dev/zero> haciéndonos creer que el rendimiento será muy superior al real.

# od -c test.dd
0000000  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
40000000
# od -c test.ddrandom |head -3
0000000 017 260   Ò   -   ;   Р  à  ¿   x   N   < 230   ü 217   a   e
0000020   O   æ 254       k   û   ö   c   4   û 257   -   à  {   þ 271
0000040   Æ   Ù   l 243   Ü   ê   å   å   ] 217   f   >   l   C   É   q
Y si comprimimos los archivos utilizando <gzip> y su máxima compresión <-9>, veremos lo que os he comentado,
# ls -l
total 2048
-rw-r--r--   1 root     root      524288 may 20 11:42 test.dd
-rw-r--r--   1 root     root      524288 may 20 11:13 test.ddrandom
# gzip -9 test.ddrandom
# gzip -9 test.dd
# ls -l
total 1056
-rw-r--r--   1 root     root         551 may 20 11:42 test.dd.gz
-rw-r--r--   1 root     root      524400 may 20 11:13 test.ddrandom.gz
Como vemos, el archivo que hemos creado utilizando <dd if=/dev/zero> comprimido tiene un tamaño de 551 bytes y el creado con <dd if=/dev/random> no solo no ha sido comprimido, sino que ha aumentado de tamaño -por las cabeceras de GZIP-

Por el contrario, si no tenemos intención de utilizar sistemas de compresión, o queremos hacer métricas de uso de disco, podemos utilizar el comando <mkfile> con el siguiente formato
mkfile {tamaño}{unidad} {nombre archivo}
Donde unidad será k para Kb, m para Mb. Por ejemplo, para crear el mismo archivo de 8Mb, utilizaremos el siguiente comando.
# time mkfile 8m test.mkfile

real    0m0.049s
user    0m0.003s
sys     0m0.037s
# od -c test.mkfile
0000000  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
*
40000000
Como vemos, <mkfile> genera un archivo utilizando como device </dev/zero> al igual que <dd> pero de una forma más sencilla


Referencias

jueves, 20 de mayo de 2010

Cómo mostrar archivos en octal

Introducción
Vamos a ver cómo podemos mostrar archivos utilizando la base octal para ello, vamos a utilizar el comando <od> que viene en el paquete de Solaris <SUNWtoo>

Este comando Octal Dump nos permitirá mostrar el contenido en formato octal de los archivos, utilizando el siguiente formato
$ od -c {archivo}
También podemos utilizar <stdin> como archivo de entrada, por ejemplo
# echo "Hola Mundo" | od -c
0000000   H   o   l   a       M   u   n   d   o  \n
0000013

Referencias