Espacio de tecnologia, software libre y sus derivados. Una horda de monos entrenados escriben de vez en cuando por aqui algunas noticias, opiniones e incluso alguna que otra cosa fuera del tema. Maqueros, favor de abstenerse que no somos lo suficientemente guapos.

Piano daemon

Archive for Solaris

Los que usamos Mysql ya no somos tan hippies…. ?

Ahora resulta que soy experto en la base de datos open source de sun.. ?



Jamas pense que algo asi pudiece pasar con mysql….. a lo mejor tu si lo pensaste(con un porrito en mano..)….

Buscar usando LIKE o Full Text Search - php/mysql

Vamos a crear un buscador que busque en una tabla de nuestra base de datos y que según el número de palabras buscadas utilice LIKE o el Full Text Search de MySQL.

Que és Full Text Search?
El Full Text Search utiliza los índices de la tabla para hacer las búsquedas y hace las comparaciones de la misma forma que se hacen en los grandes buscadores y no como una comparación sencilla y costosa en tiempo como la utilizada por el like.

El resultado que devuelve es ordenado por similitud a las palabras o cadena buscada, esto se puede hacer ya que cuando va encontrando los resultados el mismo le asigna un indice de similitud a lo buscado, con lo que podemos saber lo exacto que es el resultado.

Para crear el índice en la tabla a buscar haremos:

   ALTER TABLE noticias ADD FULLTEXT(titulo, texto);

Suponiendo que la tabla se llama noticias y los campos que queremos buscar són titulo y texto. Debemos tener en cuenta que los campos del índice solo pueden ser Char, Varchar o TEXT.

Nota: Los índices hacen que las tablas ocupen más espacio en disco peró agilizan mucho las búsquedas.

MATCH … AGAINST
Para buscar en la tabla utilizando el índice, haremos:

SELECT * FROM el índice WHERE MATCH(titulo, texto)
AGAINST ('palabras_a_buscar')

Si queremos saber noticias de similitud del resultado podemos hacer:

   SELECT * FROM noticias WHERE MATCH(titulo, texto)
   AGAINST ('palabras_a_buscar') AS similitud

Donde similitud sera el valor de aproximación a la busqueda.

Problemas del MATCH … AGAINST
El problema principal es que ens busquedas de una sola palabra acostumbra a fallar, ya que tiene un límite dado por el MySQL de busqueda de palabras mayores o iguales a 4 carácteres, por lo que si buscasemos por ejemplo PHP no tendriamos resultado. Lo que haremos es mirar si la cadena que nos llega es de una sola palabra o de más de una, en caso de ser una haremos la búsqueda usando LIKE y si es más de una usaremos MATCH … AGAINST Buscador con paginación.

 //Conectar con la base de datos,
 //también podemos poner el ADODB
 //Yo utilizo conexiones con código directamente aquí

 include ("conexion_bd.php");
        if ($p_busca!='')
        { if (!$num) $num=0;
             //Separamos las palabras usando cada espacio como separador
             //Hacemos la separación de la cadena a buscar
             $cadena_buscada=explode(" ",$p_busca);
             if (count($cadena_buscada)==1)
             {
               //Si solo hay una palabra usamos LIKE
               $sql=" SELECT SQL_CALC_FOUND_ROWS titulo, texto
                        FROM noticiasLIKE '%".$p_busca."%' OR texto LIKE '%".$p_busca."%'
                        WHERE titulo
                        LIMIT ".$num.",10";
             }
             elseif (count($cadena_buscada)>1)
             {
               //Si hay más de una palabra usaremos MATCH AGAINST
               $sql=" SELECT SQL_CALC_FOUND_ROWS titulo, texto, MATCH (titulo, texto)
                        AGAINST MATCH (titulo,AS Score FROM noticias
                                    ('".$p_busca."') texto) AGAINST ('".$p_busca."')
                        WHERE BY Score DESC LIMIT ".$num.",10";
                        ORDER
             }
               $rs = $db->Execute($sql);
               if (!$rs) echo $conn->ErrorMsg();
               else if ($rs->fields["id"])
               { while (!$rs->EOF)
                  { echo $rs->fields["titulo"].'‘.$rs->fields[”texto”];
                  } $rs->MoveNext();
     }
     else
        echo ‘No se han encontrado resultados correspondientes a su búsqueda.’;
     //Paginación
     $rs_cont=$db->Execute (”select found_rows() as total_filas”);
     if ($rs_cont->fields[”total_filas”]>10)
     { for ($i=0; $i<$rs_cont->fields[”total_filas”] && $i<50; $i=$i+10)
        { $a++;
            echo '[’.$a.’] ’;
     } }
}

Criterios de Optimizacion para MySQL 5.0

Los siguientes criterios de configuracion, los he aplicado a un servidor de 8 cores y 8 gb en RAM, y la cosa funciona de maravilla.
Sobre el MYSQL que corre en este servidor hay tablas tanto innodb como myisam. incluyo parametros para las dos engines.

[mysqld]

innodb_log_buffer_size=8M
#Explicacion: medida del buffer que innodb usara para su archivo de log.
#Consecuencia:Un buffer de log grande, permite a transacciones extensas ejecutarce, sin necesidad de acceso a disco antes de que la
              # transaccion se confirme.
#Criterio de calculo: 1MB por cada GB de RAM.

innodb_buffer_pool_size=4294967296
#Explicacion: Empleado para almacenamiento intermedio de los datos e indices de sus tablas
#Consecuencia: Mientras mas grande sea este valor menos operaciones de IO disco seran necesarias para acceder a los datos de las tablas.
#Criterio de calculo: En un servidor de base de datos dedicado se puede asignar hasta el 80% de la memoria RAM. No dedicados Menos del 50% de RAM.

innodb_buffer_mem_pool_size=16M
#Explicacion: almacena info del diccionario de datos y estructuras internas, el valor por defecto es de 1MB
#Consecuencia: Evita que se haga paginacion a disco cuando, se acaba la memoria de este pool.
#Criterio de calculo: Entre mas tablas se tengan en la aplicacion, mayor debera ser el tamaño de este buffer,. 

join_buffer_size=16777216
#Explicacion: buffer que se usa para joins que no usan índices (full joins)
#Consecuencia: obtencion de un full join más rápido ( cuando se añaden índices no es posible.)
#Criterio de calculo:2097152 bytes por cada Gigabyte de RAM.

skip-bdb
skip-ndbcluster
#Explicacion: Deshabilita el soporte para base de datos bdb y ndbcluster
#Consecuencia: Ahorro en la memoria asignada por sistema operativo al proceso mysqld

innodb_data_file_path=/dev/hdc1:250MBraw;/dev/hdc2:250MBraw
#Explicacion: Utilizar dispositivos crudos como Datafiles
#Consecuencia: Aumento en velocidad relacionada a operaciones de IO sobre disco.

query_cache_size=134217728
#Explicacion: Almacena el texto de una consulta SELECT junto con el resultado que se le envió al cliente.
#Consecuencia: Si se recibe una consulta idéntica posteriormente, el servidor devuelve el resultado de la
#              caché de consultas en lugar de parsear y ejecutar la consulta de nuevo.
#Criterio de calculo:16777216 bytes por cada Gigabyte de RAM.

query_cache_limit=1M
#Criterio de calculo: consultas menores a 1MB no merecen ser cacheadas.

query_cache_type=1
#Consecuencia: Permite el cacheo excepto para aquellos comandos que empiecen con SELECT SQL_NO_CACHE

key_buffer_size=100663296
#Explicacion: Cachea los bloques de índices para tablas MyISAM. Cada vez que una búsqueda usa un índice,
#             MySQL mirará antes de nada a ver si el índice relevante está o no en memoria.
#Consecuencia: Incrementando el valor se obtiene un mejor tratamiento de índices y por consecuencia, mejor rendimiento.
#Criterio de calculo:12582912 bytes por cada Gigabyte de RAM. Pero si solo se utilizan tablas MyISAM utilice  5% a 50% de la RAM.

sort_buffer=67108864
#Explicacion: Búffer de ordenación se usa para responder a búsquedas que involucren el ordenamiento de los datos -aquellas
#             con una sentencia ORDER BY en ellas. Además, el búffer de ordenaciónse usa para las búsquedas que involucren
#             agrupar datos -aquellas con una sentencia GROUP BY.
#Consecuencia: Reduce dramáticamente la cantidad de tiempo que se usa para ordenar grandes grupos de resultados
#Criterio de calculo: 8388608  bytes por cada Gigabyte de RAM.

read_buffer_size=8M
#Explicacion: Cada thread que realiza un escaneo secuencial reserva un buffer de su tamaño (en bytes) para cada tabla que escanea.
#             Si realiza muchos escaneos secuenciales, puede incrementar este valor.
#Consecuencia: Mejora el rendimiento en los escaneos secuenciales.
#Criterio de calculo: 1MB por cada Gigabyte de RAM.

open_files_limit=4096
#Explicacion: limite de archivos abiertos por mysql
#Consecuencia: Ciertas operaciones requeriran mas de 1024 descriptores de archivos abiertos en mysqld, sobre todo aplicaciones web.
#Criterio de calculo: 1024 es el predeterminado, aumente este valor si observa errores referentes a esto en el log de errores de mysql.
#                     No aumente este valor mas alla de 4kb.

[mysqldump]
quick

Si tienen algo que agregar a esta configuracion, u algun otro criterio, lo anexare a este articulo a la brevedad.
Feliz año nuevo 2007 :)

Usando lsof

lsof (ls Open Files) o listado de archivos abiertos, es una gran aplicación pero bastante desconocida y que nos puede sacar de muchas dudas o apuros. lsof es una herramienta muy completa, por lo que en éste articulo solo se muestra la información que más vamos a necesitar.

NOTA: Si se quiere saber más sobre el uso de lsof ejecutad “man lsof “.

Utilidad de lsof.

Como he dicho antes, lsof muestra los archivos y procesos abiertos en el moment o del chequeo, por lo que nos será de utilidad para llevar un seguimiento de seguridad o de procesos bloqueados.

Desmontando un CD rebelde.

# umount /cdrom
umount: /cdrom: device is busy

Vaya, ¡¿por qué no se desmonta y me dice que el dispositivo está ocupado?! No se ha desmontado porque algun proceso esta haciendo uso del CDROM y hasta que no lo libere no podremos desmontarlo, el problema es que desconocemos que aplicacion se encuentra usando dicho CDROM, mediante lsof podremos conocerlo.

# lsof +D /cdrom
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
konqueror 621 zx80 cwd DIR 3,64 2048 57344 /cdrom

lsof nos dice que el proceso konqueror está usando el directorio /cdrom con el usuario zx80. La solución es sencilla entoces, basta con cerrar konqueror y problema resuelto. Para los que usamos mucho la consola y llegamos a tener unas cuantas sesiones abiertas pasa que en vez de konqueror puede salir bash. Esto es debido a que alguna de las consolas está dentro del directorio activo del cd-rom, por lo que bastaría salirse del directorio de trabajo del CD o cerrar ese bash.

# kill 621

Ya podemos desmontar.

Quien está detrás de una conexión ?

Esta vez usamos la herramienta netstat. Para quien no conozca esta herramienta decir que es un monitor de red. Nos dirá qué conexiones activas tenemos y mucha inform ación sobre ellas. Vamos a ver qué conexiones tenemos activas:

# netstat - n
Active Internet connections (only servers)
Proto Recv- Q Send - Q Local          Address       Foreign Address
tcp      0    0 *:printer                          *:*            LISTEN
tcp      0    0 localhost:www                 *:*            LISTEN
tcp      0    0 *:6000                            *:*             LISTEN
tcp      0    0 *:smtp                           *:*             LISTEN

Nos muestra información sobre algunos puertos en espera (Listen) pero desconocemos qué aplicación está detrás. Me llama la atención el puerto TCP 6000, así que voy a ver quien está detrás:

# lsoft - i :6000
COMMAND           PID USER    FD     TYPE     DEVICE        SIZE   NODE NAME
    X                 279 root    3u     Ipv4     349                  TCP     *:3000 (LISTEN)

Vemos que la aplicacion X es la culpable de que el puerto 6000 esté abierto y a la espera.

Qué procesos están usando un directorio.

Una de las utilidades que más se usan es averiguar qué aplicaciones están trabajando en un directorio concreto. Se usa esta opción sobre todo para vigilar el uso de troyanos o espias. SI quisiera saber qué procesos están usando mi directorio pondría lo siguiente:

pianodaemon@pianodaemon-laptop:~$ lsof +D /home/pianodaemon/
COMMAND    PID        USER   FD   TYPE DEVICE    SIZE    NODE NAME
x-session 5962 pianodaemon  cwd    DIR    8,1    4096 6684674 /home/pianodaemon/
compiz    6013 pianodaemon  cwd    DIR    8,1    4096 6684674 /home/pianodaemon/
gnome-pan 6015 pianodaemon  cwd    DIR    8,1    4096 6684674 /home/pianodaemon/
nautilus  6017 pianodaemon  cwd    DIR    8,1    4096 6684674 /home/pianodaemon/
emerald   6127 pianodaemon  cwd    DIR    8,1    4096 6684674 /home/pianodaemon/
compiz.re 6128 pianodaemon  cwd    DIR    8,1    4096 6684674 /home/pianodaemon/
................ ...

Otros usos.

Estos son otros usos de la herramienta lsof, que aunque son algo menos usados nos pueden sacar de algun apuro o duda.
# lsof - g n: Donde n es un ID de grupo.

Esto muestra los archivos abiertos por un grupo que queramos. Si quisieramos ver los archivos de varios grupos a la vez, los separariamos por comas:

# lsof - g wheel,users

# lsof - u n: Donde n es un ID de usuario, lo que nos mostrará los archivos abiertos por ese usuario. Al igual que con los grupos, se pueden especificar varios usuarios de una vez.

# lsof - l: Para no convertir el ID a nombre de usuario, útil en casos de logeos corruptos o sistemas lentos.

# lsof - N: Nos muestra los archivos NFS abiertos.

Marcas de Tiempo en Archivos Unix

Introducción

Como muchos ya saben, muchas cosas se manejan en Unix, y en consecuencia en Linux, como si fueran archivos, se abren, se cierran, se escribe en ellos, etc. Este pequeño artículo hace referencia a las marcas de tiempo que ponen los Unix en dichos archivos. Al menos los que estan basados en inodes.

Viendo las marcas de tiempos

Para el principiante el comando ls es su primera opción pero si entra en problemas, como yo lo hice, puede que se frustre con dicho comando. Ejemplo:

root@pianodaemon-laptop:/home/pianodaemon# ls -l proto.sh
-rw-r--r-- 1 pianodaemon pianodaemon 4878 2007-11-09 12:44 proto.sh

¿ En este caso qué marca de tiempo estamos viendo ?

Las tres marcas

Unix pone tres marcas de tiempo a un archivo:

  • Access
  • Modify
  • Change

stat el comando

stat es parte del paquete coreutils de GNU. Por favor, instalatelo si esta disponible para tu plataforma, hasta donde se, Linux, AIX, Solaris, y otros sabores de Unix, Esto te va a ahorrar muchos dolores de cabeza.

Cuando se crea por primera vez un archivo, por ejemplo con el comando touch, las tres marcas tienen el mismo valor. Miremos ahora la salida de stat del mismo archivo ejemplo:

root@pianodaemon-laptop:/home/pianodaemon# stat proto.sh
  File: `proto.sh'
  Size: 4878            Blocks: 16         IO Block: 4096   archivo regular
Device: 801h/2049d      Inode: 6685006     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/pianodaemon)   Gid: ( 1000/pianodaemon)
Access: 2007-11-09 17:27:44.000000000 -0600
Modify: 2007-11-09 17:27:44.000000000 -0600
Change: 2007-11-09 17:27:44.000000000 -0600

¡Esto si es información completa ! Vemos reportado, el nombre, el tamaño, los bloques, el tipo de archivo (regular), información física de donde se encuentra (dispositivo/inode), los permisos estandar, los dueños del archivo y las tres marcas de tiempo Unix.

Opciones interesantes de formato de salida del comando stat:

  • %X Time of last access as seconds since Unix Epoch
  • %x Time of last access
  • %Y Time of last modification as seconds since Unix Epoch
  • %y Time of last modification
  • %Z Time of last change as seconds since Unix Epoch
  • %z Time of last change

Las opciones en mayúscula nos imprimen la marca de tiempo transcurrido desde la Epoca Unix, y las opciones en minúscula imprimen la marca de tiempo legible para el humano.

Ejemplo:

root@pianodaemon-laptop:/home/pianodaemon# stat --format=%X proto.sh
1194650864
root@pianodaemon-laptop:/home/pianodaemon# stat --format=%x proto.sh
2007-11-09 17:27:44.000000000 -0600

Ambos “números” son equivalentes m¡s el primero es un número absoluto, el segundo es interpretado ya que muestra la configuración de la zona horaria (-0600). Mi configuración de hora/fecha es zona America/Mexico y uso UTC.

Marca de Tiempo

Las marcas de tiempo se almacenan en el inode del archivo correspondiente con, hasta donde he confirmado, 32 bits de codificacion. Estos enteros son con signo, los negativos representan fechas en el pasado de la época Unix, y los positivos, fechas futuras desde la época Unix. La época Unix es la hora/fecha 00:00:00 UTC del 1ero de Enero de 1970.

Algunos datos para desarrolladores Python

En lo personal prefiero el desarrollar scripts sobre el interprete Python a bash. Asi que uso stat sobre el mismo:

import os, glob

from stat import *

for folder in glob.glob( base_path ):
	for file in glob.glob( folder + '/*.mp3' ):
		print file
		# retrieves the stats for the current file
		# return the last-modified-date
		last_mod_date = os.stat( file )[ST_MTIME]
		print last_mod_date

Pentaho Integracion de Datos

Un amigo del IRC escribio lo siguiente ayer en #opensolaris-mx
GHReyes: Acabo de descubrir una herramienta muy grossa para hacer ETL de bases de datos multiplataforma (incluido Solaris)
GHReyes: :)
GHReye: http://kettle.pentaho.org/screenshots/

Cambiar el Hostname en Solaris 10

Despues de haber instalado Solaris 10… el nombre de mi host ha quedado como “unknow”, asi que me di a la tarea de buscar como cambiarlo al nombre que deseo:

1. - Cambie el hostname en los siguientes archivos:

/etc/nodename
/etc/hostname.*interface
/etc/inet/hosts
/etc/inet/ipnodes

y renombre el directorio bajo /var/crash

# cd /var/crash
# mv oldname newname

ahora reinicie el servidor.

Explicando DTrace

DTrace es una de las características mas novedosas e importantes introducidas a partir de Solaris 10. Tanto es así que ya se han anunciado ports del sistema DTrace para otros sistemas operativos

Existen tanto en la pagina de BigAdmin como en la comunidad opensolaris sobre DTrace numerosos recursos de introducción a DTrace, pero quiero introducir mi punto de vista a la par que vengo leyendo e investigando un poco mas del uso de este juguetito.

¿ Que es DTrace ?

DTrace es un sistema, que permite obtener información de utilidad sobre virtualmente cualquier cosa que haga tanto el sistema operativo como los programas que se ejecutan encima de el.

DTrace es una aplicacion ligera que podran entender un poco mejor, todos aquellos que alguna vez programaron en “C” cosas triviales, como algun acceso a archivos mediante “file descriptors”, o que invocaron a la API de algun UNIX/LINUX usando lenguaje “C”.

DTrace, es como poder tener un depurador sobre todo el sistema (tanto kernel como programas).

¿ Que tiene de especial DTrace ?

DTrace permite la depuración sea realizada sobre sistemas en producción, con un bajisimo impacto en el rendimiento (practicamente 0 si no se hace uso de el, aunque este activo).

El administrador maneja el sistema DTrace basicamente mediante el comando “dtrace”, DTrace requiere de programas en lenguaje D (que suelen tener extension .d) para realizar su magia :).

El lenguaje D es un lenguaje hibrido entre C y algo de awk ( “sabia que haber estudiado awk no habia sido en vano … :P” ) , que sirve para “enganchar” trozos de codigo a “puntos de prueba”.

Nuestro primer programa en lenguaje D implementado con DTrace

Un ejemplo de lenguaje D es el siguiente fichero (hello.d):

dtrace:::BEGIN
{
trace(”Hello Foxy Lady”);
exit(0);
}

Este programa lo que hace es cada vez que “ocurra” el probe BEGIN dentro del provider dtrace se ejecute el codigo entre corchetes, en este caso mediante el comando trace(”Hello Foxy Lady”) imprimiria en la salida estandar un bonito “Hello Foxy Lady” y saldria asi ;-)

Ejecutandolo de la siguiente manera:

root@jimmyhendrix ~ # dtrace -s hello.d
dtrace: script ‘hello.d’ matched 1 probe
CPU ID FUNCTION:NAME
0 1 :BEGIN Hello Foxy Lady

root@jimmyhendrix ~ #

En concreto este punto de prueba (”probe”) BEGIN dentro del provider dtrace ocurre cuando se inicia un programa D.

Existen mas de 30000 puntos de prueba (” en ingles se hace referencia a ellos como probes .. checalos, estan disponibles mediante un “dtrace -l ”) en el sistema Solaris 10, pudiendo un programador añadir mas cosas que comprobar (probes) implementando lo que se llama un provider dentro de sus programas.

Por ejemplo, el autor de un servidor web puede añadir codigo a este para que el administrador pueda ejecutar acciones (normalmente de información) cada vez que se solicita una pagina web, cada vez que suceda un error u otras informaciones de alto nivel sobre el programa.

No obstante, aunque no existiera ese código dentro del programa, el administrador siempre puede obtener mediante dtrace(1m) información de menor nivel sobre el proceso ( por ejemplo, cuando abre un archivo, cuando solicita mas memoria etc etc ).

Creating an IPF Firewall with Solaris 10

Outline
=======

1. Background
2. Configuring IPF
3. Enabling IPF
4. Common IPF commands

Background
==========

With the release of Solaris 10, ipfilter is now supported. Before
Solaris 10, EFS or SunScreen Lite was the default firewall. IPfilter
is a mature product traditionally found in BSDish Operating Systems.

Configuring IPF
===============

First, you will need an ipf ruleset. The Solaris default location for
this file is /etc/ipf/ipf.conf. Below is the ruleset I used for a
Solaris 10 x86 workstation. Note that the public NIC is called elx10.
Simply copy this ruleset to a file called /etc/ipf/ipf.conf, and edit
to your needs.

—>8—
# 11/18/04 - Newest Firewall for testing.
# Rich Shattuck
# My IP: 172.16.1.100
#
# Block any packets which are too short to be real
block in log quick all with short
#
# drop and log any IP packets with options set in them.
block in log all with ipopts
#
# Allow all traffic on loopback.
pass in quick on lo0 all
pass out quick on lo0 all
#
# Public Network. Block everything not explicity allowed.
block in on elxl0 all
block out on elxl0 all
#
# Allow pings out.
pass out quick on elxl0 proto icmp all keep state
#
# for testing, allow pings from ben and jerry
pass in quick on elxl0 proto icmp from 172.16.1.11/32 to 172.16.1.100/32
pass in quick on elxl0 proto icmp from 172.16.1.12/32 to 172.16.1.100/32
#
# Allow outbound state related packets.
pass out quick on elxl0 proto tcp/udp from any to any keep state
#
# allow ssh from 172.16.0.0/16 only.
# pass in log quick on elxl0 from 172.16.0.0/16 to 172.16.1.100/32 port = 22
# Actually, allow ssh only from ben, jerry, MSU
pass in log quick on elxl0 proto tcp from 172.16.1.11/32 to 172.16.1.100/32 port = 22
pass in log quick on elxl0 proto tcp from 172.16.1.12/32 to 172.16.1.100/32 port = 22
pass in log quick on elxl0 proto tcp from 153.90.0.0/16 to 172.16.1.100/32 port = 22
—>8—

Enabling IPF
============

Now that you have an ipf ruleset in place, you’ll need to tell the
Solaris packet filter which interface to use. This is accomplished by
uncommenting your interface name from /etc/ipf/pfil.ap.

My pfil.ap file looks like this:

—>8—
# IP Filter pfil autopush setup
#
# See the autopush(1M) manpage for more information.
#
# Format of the entries in this file is:
#
#major minor lastminor modules

#iprb -1 0 pfil
elxl -1 0 pfil
#e1000g -1 0 pfil
#bge -1 0 pfil
#nf -1 0 pfil
#fa -1 0 pfil
#ci -1 0 pfil
#el -1 0 pfil
#ipdptp -1 0 pfil
#lane -1 0 pfil
#dnet -1 0 pfil
#pcelx -1 0 pfil
#spwr -1 0 pfil
—>8—

That’s It! The ipf firewall should be enabled and working with the next reboot!

Note that the Solaris 10 implementation of ipf will start ipmon.
Ipmon is the ipf utility used to monitor and log packets. By default,
ipmon will write logged packets to /var/adm/messages.

Some Commonly used ipf commands
===============================

ipf -E : Enable ipfilter when running
: for the first time.
: (Needed for ipf on Tru64)

ipf -f /etc/ipf/ipf.conf : Load rules in /etc/ipf/ipf.conf file
: into the active firewall.

ipf -Fa -f /etc/ipf/ipf.conf : Flush all rules, then load rules in
: /etc/ipf/ipf.conf into active firwall.

ipf -Fi : Flush all input rules.

ipf -I -f /etc/ipf/ipf.conf : Load rules in /etc/ipf/ipf.conf file
: into inactive firewall.

ipf -V : Show version info and active list.

ipf -s : Swap active and inactive firewalls.

ipfstat : Show summary

ipfstat -i : Show input list

ipfstat -o : Show output list

ipfstat -hio : Show hits against all rules

ipfstat -t -T 5 : Monitor the state table and refresh every
: 5 seconds. Output is similiar to
: ‘top’ monitoring the process table.

ipmon -s S : Watch state table.

ipmon -sn : Write logged entries to syslog, and
: convert back to hostnames and servicenames.

ipmon -s [file] : Write logged entries to some file.

ipmon -Ds : Run ipmon as a daemon, and log to
: default location.
: (/var/adm/messages for Solaris)
: (/var/log/syslog for Tru64)

MySQL 5 sobre Solaris 10

Hola a todos,

Despues de jugar un rato con Solaris, decidi que era hora de hacer cosas, ya un poquito mas productivas, he migrado los mysql que tengo en linux a solaris.

Asi que ha manera de ayudar a otros, les dejo aqui una how to de como hacerlo:

A). - Donde descargar MYSQL 5.0 para Solaris 10

Aqui escoge el paquete estatico compilado para solaris 10 (podras escoger entre x86 u SPARC) http://dev.mysql.com/downloads/mysql/5.0.html

B). - Preparacion

1. Haga un login como root
2. Liste los paquetes instalados, tipee: “pkginfo | grep mysql” desde la shell.
3. SI ves versiones anteriores de mysql remueve estas tipeando “pkgrm ”. Los nombres de los paquetes seran listados en una segunda columna despues de ejecutar pkginfo.
4. Muevete al directorio donde descargaste Mysql 5.0 y descomprimelo “gzip –d mysql-xxx.pkg.gz”.


C). - Instalacion

Los siguientes pasos son realizados como root:

1. Crea el grupo mysql “groupadd mysql”.
2. Crea el usuario mysql “useradd -g mysql mysql”.
3. Muevace al directorio donde el paquete de mysql 5 ya fue descomprimido.
4. Primero instale el paquete “Standard” tipeando: “pkgadd -d mysql-standard-xxx.pkg”. Solo acepte el directorio de instalacion por default “/opt/mysql”.
5. Segundo, instale El paquete “Max” tipeando lo siguiente: “pkgadd –d mysql-max-xxx.pkg”. Solo acepte el directorio de instalacion por default .
6. Ahora MySQL-Server debera de estar instalado en “/opt/mysql/mysql”.
7. Muevace al directorio /etc/init.d y edite el archivo “mysql” con un editor de texto. Localiza la linea: “datadir=“. y cambia su valor a esto “datadir=/opt/mysql/mysql/data”. Salva los cambios y deja el archivo.
8. Despues de la instalacion, cambia los propietarios al directorio del servidor mysql: “chown -R mysql:mysql /opt/mysql”.

D). - Initializando la base de datos.

1. Cambia al usuario mysql tipeando esto en la shell “su mysql”.
2. Cambia al directorio de trabajo “cd /opt/mysql/mysql/scripts”.
3. Ejecuta el script “mysql_db_install” tipeando esto: “./mysql_install_db –user=mysql –ldata=/opt/mysql/mysql/data”.
4. Cambia de directorio de trabajo a “/opt/mysql/mysql/bin”.
5. He inicia la base de datos de la siguiente manera: “./mysqld_safe –datadir=/opt/mysql/mysql/data –user=mysql &”.

6.- ln -s /etc/init.d/mysql /etc/rc3.d/S99mysql
7.- ln -s /etc/init.d/mysql /etc/rc0.d/K01mysql

Prueba solaris poco a poco… es una experiencia que disfrutaras… si linux ya no te parece suficientemente complejo…

« Entradas anteriores