mi d.Espacio

jueves, marzo 29, 2007

Si mysql levantara la cabeza...

Estaba haciendo una práctica, y necesitaba usar mysql. El caso es que ya lo tenía instalado para un par de cosillas. Pero esta vez decidí usar el mysql-admin en vez de la linea de comando ...

Bueno, estoy con una dapper y usando el mysql-admin 1.1.10.
Cuando le daba a "Startup Parameters" y usaba el mysqld... puff... al carajo el mysql-admin.

*** glibc detected *** mysql-admin: munmap_chunk(): invalid pointer: 0x086563d5 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__libc_free+0x18a)[0xb6f0fb4a]
/usr/lib/libglib-2.0.so.0(g_free+0x31)[0xb70f9b51]
mysql-admin[0x8100a38]
mysql-admin[0x8101bdf]
mysql-admin[0x8105ab6]
mysql-admin[0x807ca5c]
mysql-admin[0x80a7eaf]
mysql-admin[0x80a8e37]
mysql-admin[0x8082a18]
mysql-admin[0x8082ba9]
/usr/lib/libglibmm-2.4.so.1(_ZN4Glib17SignalProxyNormal19slot0_void_callbackEP8_GObjectPv+0x4a)[0xb747c4da]
/usr/lib/libgobject-2.0.so.0(g_cclosure_marshal_VOID__VOID+0x49)[0xb7178b29]
/usr/lib/libgobject-2.0.so.0(g_closure_invoke+0x12b)[0xb716b79b]
/usr/lib/libgobject-2.0.so.0[0xb717be81]
/usr/lib/libgobject-2.0.so.0(g_signal_emit_valist+0x8c7)[0xb717d0b7]
/usr/lib/libgobject-2.0.so.0(g_signal_emit+0x29)[0xb717d279]
/usr/lib/libgtk-x11-2.0.so.0(_gtk_tree_selection_internal_select_node+0x92)[0xb76db652]
/usr/lib/libgtk-x11-2.0.so.0[0xb76ec139]
/usr/lib/libgtk-x11-2.0.so.0[0xb76fa686]
/usr/lib/libgtk-x11-2.0.so.0(_gtk_marshal_BOOLEAN__BOXED+0x60)[0xb75f9b00]
/usr/lib/libgobject-2.0.so.0[0xb7169fb9]
/usr/lib/libgobject-2.0.so.0(g_closure_invoke+0x12b)[0xb716b79b]
/usr/lib/libgobject-2.0.so.0[0xb717c1e3]
/usr/lib/libgobject-2.0.so.0(g_signal_emit_valist+0x68f)[0xb717ce7f]
/usr/lib/libgobject-2.0.so.0(g_signal_emit+0x29)[0xb717d279]
/usr/lib/libgtk-x11-2.0.so.0[0xb770d5f8]
/usr/lib/libgtk-x11-2.0.so.0(gtk_propagate_event+0x183)[0xb75f2ef3]
/usr/lib/libgtk-x11-2.0.so.0(gtk_main_do_event+0x317)[0xb75f40f7]
/usr/lib/libgdk-x11-2.0.so.0[0xb74057ea]
/usr/lib/libglib-2.0.so.0(g_main_context_dispatch+0x182)[0xb70f2802]
/usr/lib/libglib-2.0.so.0[0xb70f57df]
/usr/lib/libglib-2.0.so.0(g_main_loop_run+0x1a9)[0xb70f5b89]
/usr/lib/libgtk-x11-2.0.so.0(gtk_main+0xb4)[0xb75f4574]
/usr/lib/libgtkmm-2.4.so.1(_ZN3Gtk4Main8run_implEv+0x17)[0xb7a3c7c7]
/usr/lib/libgtkmm-2.4.so.1(_ZN3Gtk4Main3runEv+0x22)[0xb7a3c5b2]
mysql-admin[0x808f836]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xdc)[0xb6ebe8cc]
mysql-admin(__gxx_personality_v0+0x375)[0x8062511]
======= Memory map: ========
08048000-081dc000 r-xp 00000000 03:01 770557 /usr/bin/mysql-admin
081dc000-081df000 rw-p 00194000 03:01 770557 /usr/bin/mysql-admin
081df000-08826000 rw-p 081df000 00:00 0 [heap]
b5364000-b53c4000 rw-s 00000000 00:08 20447257 /SYSV00000000 (deleted)
b5433000-b5434000 rw-p b5433000 00:00 0
b5434000-b5443000 r--p 00000000 03:01 8159688 /usr/share/locale-langpack/en_GB/LC_MESSAGES/gtk20.mo
b5443000-b5452000 r--p 00000000 03:01 8127109 /usr/share/locale/en_GB/LC_MESSAGES/gtk20.mo
b5452000-b5462000 r--p 00000000 03:01 8159534 /usr/share/locale-langpack/es/LC_MESSAGES/gtk20.mo
b5462000-b54c9000 r--p 00000000 03:01 7979364 /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-BoldOblique.ttf
b54c9000-b552d000 r--p 00000000 03:01 7979366 /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Oblique.ttf
b552d000-b5599000 r--p 00000000 03:01 7979190 /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf
b5599000-b559a000 ---p b5599000 00:00 0
b559a000-b5d9a000 rw-p b559a000 00:00 0
b5d9a000-b5dfa000 rw-s 00000000 00:08 20414475 /SYSV00000000 (deleted)
b5dfa000-b5e09000 r-xp 00000000 03:01 5259306 /lib/libbz2.so.1.0.3
b5e09000-b5e0a000 rw-p 0000f000 03:01 5259306 /lib/libbz2.so.1.0.3
b5e0a000-b5e3a000 r-xp 00000000 03:01 7750991 /usr/lib/libcroco-0.6.so.3.0.1
b5e3a000-b5e3d000 rw-p 0002f000 03:01 7750991 /usr/lib/libcroco-0.6.so.3.0.1
b5e3d000-b5e68000 r-xp 00000000 03:01 7751200 /usr/lib/libgsf-1.so.114.0.1
b5e68000-b5e6b000 rw-p 0002a000 03:01 7751200 /usr/lib/libgsf-1.so.114.0.1
b5e6b000-b5e6c000 rw-p b5e6b000 00:00 0
b5e6c000-b5e9b000 r-xp 00000000 03:01 7749963 /usr/lib/librsvg-2.so.2.16.0
b5e9b000-b5e9c000 rw-p 0002f000 03:01 7749963 /usr/lib/librsvg-2.so.2.16.0
b5eaf000-b5eb0000 r-xp 00000000 03:01 7864366 /usr/lib/gtk-2.0/2.10.0/loaders/svg_loader.so
b5eb0000-b5eb1000 rw-p 00001000 03:01 7864366 /usr/lib/gtk-2.0/2.10.0/loaders/svg_loader.so
b5eb1000-b64c7000 r--p 00000000 03:01 8094624 /usr/share/icons/hicolor/icon-theme.cache
b64c7000-b6b26000 r--p 00000000 03:01 7995528 /usr/share/icons/gnome/icon-theme.cache
b6b26000-b6b2b000 r--p 00000000 03:01 8159572 /usr/share/locale-langpack/es/LC_MESCancelado (core dumped)





En fin, es lo de menos, los parametros de configuración no estoy cada dos por tres cambiandolos y no me molesta hacerlo manualmente.
Pero; cuando entraba en "User Administration", se quedaba colgado y tenía que forzar la salida.
Este bug está tiquetado en bugs.mysql.com
Este es el enlace: BUG-17879 Y actualmente está cerrado.
Por lo visto hay un workaround que a mi me ha funcionado y por eso hago mención:

export DEBUG_DONT_SPAWN_FETCHES=1

Con esta variable de entorno podemos ejecutar el mysql-admin sin el problema de que al administrar los usuarios se nos quede colgado.
Y si no, siempre puedes usar phpmyadmin ;)

Powered by ScribeFire.

lunes, marzo 26, 2007

Manipulando pdfs

Vaya diíta llevo...
Bueno, al final ya tengo la documentación que me hacía falta, pero en archivos pdfs distintos...
Menos mal que encontré una herramienta facilita para unirlos: pdftk
nada... que me la instale:
sudo apt-get install pdftk

y a usarla...
¿como? pués, francamente, usando un
man pdftk
averiguaremos como... porque se pueden hacer muchas cositas con este sencillo programa.

En fin, no tendría que haberme tomado aquel café esta tarde... son las 1:30 y aún tengo los ojos de par en par...
Si es que el café me sienta fatal, me pone tenso y nerviso y encima me entran unos retortijones gastrointestinales que pa'qué.
Lo confieso... soy un "coffe-adict".

powered by performancing firefox

viernes, marzo 23, 2007

to swap or not to swap

Bueno, el otro día me di cuenta que desde que actualicé la ubuntu dapper a la edgy, mi swap no iba ni para atrás.

Hoy que estaba un poco más tranquilo, decidí echarle un vistazo.
Primero, me di cuenta de que el gparted no me reconocía la partición o no la reconocía como swap.
Segundo cuando hice un
$ cat /proc/meminfo|grep Swap

En SwapTotal (y por ende en SwapFree y SwapCached) aparecía como 0.

Ups... mal asunto.

¿Que hice?
Bueno, me encontré una guía muy útil.

Desde aquí mis agradecimientos a la comunidad linux en general y a la de ubuntu en particular, por su excelente trabajo y contribución. Y en especial a jackbyte por su contribución altruista sin la que seguro me hubiese sido mucho más dificil solucionar el problema de la swap y que unida a la de otros muchos, ayuda a mejorar esta comunidad de usuarios.


Bueno, el caso es que seguí más o menos esta guía...
¿Porqué más o menos? Bueno porque no necesite de hacer un swapon -a al final, directamente me cargó la swap al iniciar con lo que no tuve que cargar la swap de esta manera.

Voy a poner lo que hice yo, ya que el resto viene muy bien explicado en la guía
guía
.

Básicamente lo que hice fue volver a crear la swap.
Con gparted (antes de encontrar la guía a la que hago referencia) formatee mi partición /dev/hda2 (donde debería estar el swap) como partición swap... porque no me la reconocía o más bien la reconocía como desconocida.

Cuando encontré la guía, ya era demasiado tarde, ya había terminado de formatear /dev/hda2 como swap, pero la verdad es que eso me daba un poquito igual.
Os comento. En una terminal escribí:
# sudo mkswap -c /dev/hda2
(o la que proceda)
Este comando me devuelve un uuid que utilizaré para /dev/hda2
Abrí el archivo fstab para editarlo
#sudo gedit /etc/fstab

Cambié el número identificador UUID del anterior por el nuevo, quedando algo así:
UUID=[número de UUID] none swap sw 0 0

Hasta que no reinicie no fue visible la particion en /dev/disk/by-uuid/

En realidad luego de reiniciar ya tenía swap, pero bueno, como tambien podía usar lo de hibernar, pues decidir seguir y edité el archivo /etc/initramfs-tools/conf.d/resume
sudo gedit /etc/initramfs-tools/conf.d/resume
el archivo solo tenía
RESUME=

y lo cambié por
RESUME=UUID=[número de UUID]

Luego ejecute:
sudo update-initramfs -u

Y listo.
Ahora ya disfruto de todo el poderío del swap...

y colorin colorado...
Para probarlo casi ejecuté todo lo que tenía a mano:
jdeveloper, netbeans, eclipse, tomcat, jboss, picasa, firefox, mozilla, gimp, openoffice, juegos, programas, y hasta la calculadora... Puse el beryl y me puse a ver varias páginas y a abrir y navegar como un cosaco. Empecé a abrir más, necesitaba consumir más memoria. Abrí pdfs, herramientas de Video como el Kino, reproductores de video, mp3, radio-online, gestores de descarga, p2p como amule azureus que también consumen lo suyo... y nada... oye, que la la memoria entre el 65 y el 70% de uso con un 29% cacheado, y la swap al 25% al 30%... con todo rulando... así que me di por vencido...
Parece que ya no tengo problemas de memoria. Y es que con 1gb de RAM y 1gb de swap, creo que es más que suficiente para mi, incluso conociendo mi manía de dejarme los programas abiertos, creo que la cosa pinta bien... vamos a ver lo que dura.
Eso sí, con todos mis respetos a los usuarios de Microsoft Windows... no creo que esta configuración de memoria sea suficiente si quieren usar Windows Vista :P

Hay un parametro que se le puede enviar al kernel y que controla el grado de uso de swap por parte del sistema. Este parametro es el swappiness. Por defecto se utiliza un 60.
Los valores rondan entre 0 y 100. Normalmente cuanto menor es su valor, más intenta consumir de RAM y menos de swap, por el contrario, cuanto mayor es el valor, más intentará hacer uso de la swap para liberar de memoria.
La disminución del swappiness normalmente conlleva un incremento en cuanto a la respuesta del equipo en determinados casos. Aunque en otros puede que no interese.

Yo la verdad es que con un 60 va bien, pero algunos dicen que con un valor entre 10 y 15 se nota la diferencia.

Si quereis probar podeis enviarle al kernel un nuevo valor para el swappiness con:
$ sudo sysctl vm.swappiness=10

Eso sí, cuando tengais el valor que más os guste y quereís que sea permanente, cambiamos el /etc/sysctl.conf y añadimos una línea como esta:
vm.swappiness=10


Y bueno, eso es todo lo que me he peleado hoy con la swap... ahora a otra cosa mariposa

powered by performancing firefox

martes, marzo 20, 2007

Arrancando el SUNWappserver

Sigo con el curso de EJB online (por cierto, en el curso de J2EE me han dado hoy un libro mu gonito... pero que no tiene EJB, así que me va a venir muy bien el curso online)

Hace tiempo instale el SUNWappserver, en realidad no se si lo instalé yo, o venía con el netbeans...

Me gustaría recordar como iniciar el servidor de aplicaciones:
Nos iremos al directorio "bin" dentro del directorio de instalación y ejecutaremos el programa "asadmin".

Suponiendo lo hemos instalado en "/home/user/SUNWappserver", escribiremos:

user@mihost:~/SUNWappserver/bin$ ./asadmin start-domain domain1


A continuación nos mostrará un mensaje que nos indicará que el servicio está iniciado.

Y ya está así de facil y así de sencillo, pero como siempre se me olvida pues ya lo tengo aquí.


powered by performancing firefox

domingo, marzo 18, 2007

Instalando postgresql en ubuntu

Bueno, estoy que no paro.
Ahora estoy haciendo un curso online, que espero me de tiempo a hacer. El caso es que:
  1. El curso está orientado a windows y a iexplorer. No funcionan algunas características en firefox. Y no se pueden hacer los test y los exámenes
  2. Utiliza una base de datos un tanto desconocida para mi: ibaccess. No pude hacer funcionar el cliente para linux
  3. Como es un curso especifico y en el que no tienen que entrar la SGBD para nada y solo se usa ese como "ejemplo" pués me voy a instalar postgres
  4. Necesitaba un driver jdbc que según el tutorial era fácil de encontrar pero que no me molesté en buscar porque no logré que funcionara el ibaccess y que por el contrario ya había manejado para postgresql


Así que voy a partir de que tenemos instalados con el synaptic o haciendo apt-get install desde la linea de comandos el postgresql-8.1 y el postgresql-client-8.1 (ya luego podremos instalar el pgadmin3 que es más gonito)

He seguido una guía que había en la wiki de ubuntu. Aunque aquí solo voy a comentar los pasos sin entrar en mucho detalle para tener una versión más ligera y que me sea más útil para la próxima vez que quiera trabajar con postgresql en ubuntu (que siempre me pasa lo mismo y luego tengo que buscarlo en internet)

Preconfiguración
Establecemos la nueva contraseña al usuario de sistema creado por postgresql:
$ sudo passwd postgres


Verificamos la instalación y accedemos a la shell del servidor de base de datos como usuario postgres:
$ sudo su postgres -c "psql template1"


Cambiamos la contraseña al usuario predeterminado (postgres) del servidor de base de datos:
template1=# ALTER USER postgres WITH PASSWORD 'nueva_contraseña';

Yo, como siempre, pués le puse postgres por simplicidad.

Configuración - Permitir conexiones remotas
Esto siempre nos pasaba en el trabajo. La primera vez que trabajamos con postgresql queriamos tener una base de datos para todos los desarrolladores y por defecto la instalación de postgres no permite conexiones remotas. Tuvimos que cambiar el postgresql.conf y pg_hba.conf del servidor.

En mi caso, no lo voy a hacer porque solo me voy a conectar yo de manera local para las pruebas pero las pongo aquí por si me hicieran falta en otro momento.

En ubuntu, como bien dice la guía, editamos el archivo de configuracion:
$sudo gedit /etc/postgresql/8.1/main/postgresql.conf


Buscamos la línea (comentada)
#listen_addreses = 'localhost'

Y la substituimos por la siguiente línea:
listen_addreses = '*'

Posteriormente buscamos la línea y le quitamos la marca de comentario:
#password_encryption=true

quedandonos como:
password_encryption=true

para requerir password encriptadas al conectar con el cliente.

En el pgadmin3 se puede indicar al crear una conexión en el campo SSL si el servidor requiere, prefiere, permite o no permite conexiones seguras. Aunque yo por defecto lo dejo en blanco y pgadmin3 utiliza la mejor opción al conectarse al servidor.

Ahora guardamos los cambios y reiniciamos el demonio para que los cambios surtan efecto:
$ sudo /etc/init.d/postgresql-8.1 restart


Configurar la lista de acceso
Como dice la guía que miré, la configuración de la lista de acceso permite decirle a PostgreSQL qué método de autenticación usar y establecer relaciones de confianza para ciertas máquinas y redes.
Yo por ejemplo en el trabajo le dabamos confianza a toda la red local sin requerir password.

Primero editamos el pg_hba.conf
$ sudo gedit /etc/postgresql/8.1/main pg_hba.conf


Por ejemplo:
  • Si necesitamos que cualquier usuario se conecte por medio de una dirección IP especiífico, agregamos

host all all 192.168.1.1 255.255.255.0 md5

Así permitimos el acceso a todos los hosts de la red 192.168.1.0.

También me encontré otra manera de poner la máscara de red y es poniendo por ejemplo:
host all all 192.168.1.1/24 md5

Esta y la anterior son equivalentes.

  • Si necesitamos que cualquier usuario se conecte por medio de una ip determinada sin importar el password (confiaza en dicha IP), la línea es:

host all all 192.168.1.18 255.255.255.255 trust

Aquí solo confiamos en una máquina pero podríamos haber confiado en toda una red si la máscara hubiese sido otra. Así lo haciamos en el curro para quitarnos de complicaciones, ya que nuestros equipos obtenian ips por dchp.

  • Si lo que necesitamos es que cualquier usuario se conecte por medio de cualquier ip, pero verificando el password agregamos

host all all 0.0.0.0 0.0.0.0 md5


Para especificar que determinado usuario tiene acceso solo a determinada base de datos desde determinada red usamos:
host miBaseDeDatos miUsuario 192.168.1.1 255.255.255.0 md5


Siempre que queramos que tengan enfecto los cambios hay que reinciar el demonio posgres
$ sudo /etc/init.d/postgresql-8.1 restart

Algo de Administración
Ya de paso pondré algunos comandos que venían en la guía para completar y que a mi también me fueron de utilidad alguna vez que otra.

Para crear un usuario, usamos el comando createuser.
$ createuser -A -d -P -h host -U usuario nuevo_usuario
Enter password for user "nuevo_usuario":
Enter it again:


Eliminar usuario con dropuser
$ dropuser -h host -U usuario usuario_borrar


Volcado (dump) para backup de seguridad:
$ pg_dump -h host -U usuario nombre_bd > nombre_bd.sql


Para hacer una copia de seguridad de todas las bases de datos PostgreSQL de un servidor, usa este script:
#!/bin/bash

## BEGIN CONFIG ##
HOST=localhost
BACKUP_DIR=tmp
## END CONFIG ##

if [ ! -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
fi

POSTGRE_DBS=$(psql -h $HOST -U postgres -l | awk ' (NR > 2) (/[a-zA-Z0-9]+[ ]+[|]/) ( $0 !~ /template[0-9]/) { print $1 }');

for DB in $POSTGRE_DBS ; do
echo "* Backuping PostgreSQL data from $DB@$HOST..."
pg_dump -h $HOST -U postgres $DB > $BACKUP_DIR/pg_$DB.sql
done


En fin, y creo que con esto ya tengo suficiente para la próxima vez :)

powered by performancing firefox

viernes, marzo 09, 2007

kad firewalled

Es curioso como el amule que instalé en la ubuntu trae unas urls por defecto que no son muy válidas...
Me explico:
Antes me aparecia el amule como Kad firewalled, pensé que podría ser del firewall, descartado una vez realicé las pruebas necesarias. Por lo visto la url que viene para el kad ya no va...
Es decir la antigua:
http://download.overnet2000.de/nodes.dat
ya no es válida
En cambio:
www.emule-inside.net/nodes.dat
ahora sí

Bueno, siempre es bueno saberlo :) por si alguna vez hiciese falta de nuevo

powered by performancing firefox

sábado, marzo 03, 2007

Reinventando la rueda

Esta tarde he instalado y configurado (minimamente eso sí, pero funcional) unos cuantos CMS.
En menos de 2 horas y con el apache2, el php5 y el mysql5 instalados a través de los repositorios de ubuntu.

Descargados el postNuke, que es un portal general, con sus foros y sus cosas... vamos un CMS genérico...
Luego el osCommerce. En 5 minutos instalado... muy sencillo y fácil. Tiene documentos que explican muy bien como instalarlo ya sea en nuestro local o en un hosting a través de ftp.
Eso sí, obliga a tener el globals de php.ini en On... y eso ya es más de los administradores de cada hosting... Eso sí, normalmente dan esta información a los usuarios.
Este es un buen CMS para comercios online, tiene modulos de pago telemático, etc y está muy interesante.
Por último, me instalé una wiki...
En mi trabajo están muy preocupados por el tiempo que puede tardarse en instalar una wiki... yo tardé unos 10 minutos, mientras me bajo el mediawiki, lo copio, lo extraigo, lo configuro y lo inicio. Y ya está, todo el knowledge, conocimiento de la empresa centralizado... Otro tema sería que ya probaré mañana es a instalarme el alfresco, que es un gestor documental... Los de mi trabajo quieren ordenar sus documentos y se están montando una estructura de arbol... que me da risa... porque en cuanto intentes buscar entre 50 documentos cual puede ser el más apropiado lo llevas chungo. Eso sí, con alfresco, puedes asociar tags o palabras clave, además de una descripción a los documentos, e indexar estos documentos por estos elementos permite realizar busquedas mucho más concretas y rápidas...
Pero claro... nunca hay tiempo para el I+D... en algunos incluso tienen I+D+i, pero donde yo trabajo lo que hay es como dice un antigüo compañero un D+A (Desarrollo y Adivinación)....

En fin... que he echado la tarde en hacerme con unas herramientas y echarles un vistazo... porque considero que para dar soluciones hay que conocer los productos que ya hay... más que reinventar la rueda.

powered by performancing firefox