¡No a las patentes de Software!

stopsoftwarepatents.eu petition banner

miércoles, 26 de noviembre de 2008

Error del "memory allocator" y los logs

Al intentar arrancar una instancia de LDAP daba un fallo y aparecía el siguiente mensaje en el fichero de log de errores:
[25/Nov/2008:16:40:25 +0100] - Fedora-Directory/1.0.1 B2005.342.161 starting up
[25/Nov/2008:16:40:25 +0100] - Detected Disorderly Shutdown last time Directory Server was running, recovering database.
[25/Nov/2008:16:40:28 +0100] memory allocator - cannot calloc 0 bytes; trying to allocate 0 or a negative number of bytes is not portable and gives different results on different platforms.
Luego de revisar el estado de la máquina y su memoria, desesperado por no conseguir encontrar la causa del problema, se me ocurrió buscar el mensaje en Google. Encontré un mensaje en el foro que decía que el error aparece cuando el fichero de control de rotación de logs estaba corrupto. En mi caso, el fichero access.rotationinfo tenía tamaño 0. Lo he borrado y ¡voilá! Al reiniciar, arranca correctamente.

martes, 27 de mayo de 2008

Migración a una instancia replicada

En este post trataré la migración de datos de una instancia LDAP (Fedora Directory Server) a otra replicada en Multi Master.

Requisitos:
  • Haber exportado los datos de la instancia origen y haber copiado las modificaciones sobre el schema (los ficheros 99user.ldif y 9?xxx.ldif de slapd-{instancia}/config/schema).
  • Haber copiado la configuración de los índices adicionales (si los hubiera). Esto se ve en la consola de administración, pestaña configuration rama "{máquina}/Data/sufijo/userRoot" y pestaña Indexes.
  • Haber creado la instancia destino, con los parámetros de configuración necesarios (memoria, ubicación de logs, etc.) y la replicación establecida. (Hay otro post con estos datos)
Procedimiento:
  • Una vez configuradas y arrancadas las instancias destino, se deben importar los datos. Se puede realizar desde la consola de administración de una de las instancias, que utiliza los mecanismos propios de LDAP y, en consecuencia, replica los datos en la otra instancia. Otra opción es utilizar el comando ldif2db (como root).
    • cd /opt/fedora-ds/slapd-instancia
    • ./stop-slapd
    • ./ldif2db -n userRoot -i /var/tmp/fichero.ldif
    • ./start-slapd
  • Llegado este punto, los datos están en una instancia. Desde la consola de administración, en la pestaña Configuration, rama "{máquina}/Replication/userRoot/'{acuerdo de replicación}'", se debe hacer clic con el botón derecho sobre el último elemento de la rama (el 'acuerdo' a la izquierda) y seleccionar "Initialize consumer". Esto desencadenará una replicación completa desde un nodo al otro.
  • Finalmente, queda recrear los índices adicionales (si los hubiera) desde la consola de administración. Lamentablemente se debe realizar a mano en las dos instancias (si alguien sabe como exportarlo, que me avise).
El comando ldif2db requiere acceso exclusivo a la base de datos del LDAP. Por eso hay que pararlo previamente (si no, sale un aviso y aborta). Es mucho mas rápido que el ldif2db.pl y que la consola de administración, que utilizan el protocolo LDAP.

La opción "Initialize consumer" realiza un borrado de datos del nodo consumidor (destino) antes de replicar. Como es una nueva instalación, nos da igual y es la opción mas rápida.

Los índices adicionales se mantienen en el fichero maestro de configuración: el dse.ldif. Es por esto que he optado por recrearlos manualmente. No se si habría problemas si copiara el fichero de una máquina a otra.

jueves, 20 de marzo de 2008

Convertir videos flv a xvid

Una buena utilidad de conversión es ffmpeg. Para no perder calidad, es recomendable mantener los parámetros del video, sólo cambiando el formato (codec). Para ver los datos del fichero original se puede ejecutar:
ffmpeg -i video1.flv
Sobre el final debe haber una sección con información similar a:
Input #0, flv, from 'video1.flv':
Duration: 00:12:36.8, start: 0.000000, bitrate: 56 kb/s
Stream #0.0: Video: flv, yuv420p, 320x240, 29.97 fps(r)
Stream #0.1: Audio: mp3, 22050 Hz, stereo, 56 kb/s
El comando a ejecutar entonces sería:
ffmpeg -i video1.flv -ab 56 -ar 22050 -b 500 -s 320x200 -vcodec xvid -acodec mp3 video.avi
Las opciones han sido:
  • -i video1.flv: fichero de entrada
  • -ab 56: audio bitrate (obtenido del video original)
  • -ar 22050: frecuencia de muestreo del audio (obtenido del video original)
  • -b 500: video bitrate (ciencia infusa) ;-)
  • -s 320x200: tamaño del video (obtenido del video original)
  • -vcodec xvid: codec a utilizar (el que se desee, se pueden ver los disponibles ejecutando ffmpeg -formats)
  • -acodec mp3: codec de audio (obtenido del video original)
  • video.avi: fichero de salida
Actualización:

Con el método anterior el vídeo resultante queda bastante "pixelado". He encontrado un mejor resultado ejecutando:
ffmpeg -i video1.flv -vcodec xvid -acodec mp3 video.avi
Se ve que de esta forma, el resto de parámetros se configura como el original.

Como todo el tema multimedia, hay que basarse mucho en el "prueba y error".

martes, 5 de febrero de 2008

Errores de sincronización entre réplicas de LDAP

Recientemente, el log de errores de dos instancias configuradas en Multi Master Replication mostraban lo siguiente:
[26/Jan/2008:00:00:00 +0100] NSMMReplicationPlugin - agmt="cn="Replication to MaquinaTal"" (maquinatal:389): Incremental protocol: event update_window_opened should not occur in state wait_for_changes
Este error (no grave) se da por la programación de los momentos para replicar. El script mmr.pl utilizado para crear la replicación (ver post mas antiguos en este blog) configura lo siguiente:
  • nsDS5ReplicaUpdateSchedule => "0000-2359 0123456"
Que significa que realizará las actualizaciones cada minuto durante todo el día ("0000-2359") de los siete de la semana ("0123456"). El error no se da si las dos réplicas están como "Always in sync", con lo que las actualizaciones se realizan en cuanto ocurran.
Este parámetro se puede configurar desde la consola del servidor o eliminando el atributo nsDS5ReplicaUpdateSchedule.

miércoles, 9 de enero de 2008

Añadir líneas con sed

Recientemente he tenido que añadir un nuevo "objectClass" a todos los objetos de una rama de un LDAP. Para ello he exportado la rama a un fichero LDIF y he ejecutado el siguiente comando (todo en la misma línea):
sed '/objectClass: inetOrgPerson/{G;s/$/objectClass: nuevosAtributosGrupo/;}' fichero.ldif > nuevo.ldif
Este comando busca la cadena "objectClass: inetOrgPerson" y agrega "objectClass: nuevosAtributosGrupo" a continuación en una nueva línea.

(Obtenido de http://www.student.northpark.edu/pemente/sed/sedfaq4.html)

Cambiar el monitor (y la resolución) en Ubuntu

Me he comprado un nuevo monitor LCD, con una resolución nativa distinta al que tenía (un CRT). Al ser mas moderno y de distinta tecnología, además de la resolución cambian las frecuencias y seguramente algún otro parámetro. Con el antiguo no funcionaba correctamente el EDID y estaba deshabilitado, mientras que me ha parecido importante habilitarlo en el nuevo (que es la opción por defecto de las X).
En resumen: tuve que reconfigurar la configuración del Xserver. Inspirándome en https://help.ubuntu.com/community/FixVideoResolutionHowto, aquí está lo que he hecho.
  • Reconfigurar el Xserver: sudo dpkg-reconfigure xserver-xorg
  • Seguir las instrucciones de la pantalla. Se generará un nuevo fichero de configuración (/etc/X11/xorg.conf)
  • Reiniciar el Xserver con Ctrl-Alt-Backspace.
Si se han habilitado los "Desktop Effects", se pierden las decoraciones de las ventanas y las transparencias. Esto se debe a regenerar el xorg.conf, que no conserva algunas líneas. Por lo tanto, se debe agregar a mano en el Section "Screen" (y reiniciar el Xserver):
Option "AddARGBVisuals" "true"
Option "AddARGBGLXVisuals" "true"

Aunque se puede configurar con nvidia-settings, he aprovechado para habilitar la sombra del cursor del ratón poniendo:
Option "CursorShadow" "true"