A veces nos encontramos errores técnicos en aplicaciones, scripts, etc. y los resolvemos pero no guardamos en ningún lado la solución y los síntomas. Quise hacer una especie de repositorio de problemas/soluciones, y tener disponibles mis experiencias para todos. Espero no volver a decir "¡esto ya me había pasado, pero no me acuerdo cómo lo resolví!" [temas: Oracle DB, korn shell scripts, Oracle App Server, Oracle Collaboration Suite, Windows, Linux, ...]

martes, agosto 12, 2008

mensaje *** glibc detected *** malloc(): memory corruption: 0x081a2f80 *** sale al editar archivos con vi.

Era uno de esos días en que pienso "pa'qué diablos me levanté hoy" (en realidad no pensé eso de "diablos", sino otra cosa, pero mejor ahí la dejamos). Me disponía a generar unos scripts de ldap y me conecté a nuestro servidor linux SUSE9, con el usuario "oracle", e intenté abrir un archivo nuevo con el vi, cuando de pronto, ¡oh, sorpresa! Que sale el siguiente mensaje:

*** glibc detected *** malloc(): memory corruption: 0x081a2f80 ***

y pa'colmo de males, se quedó congelado el asunto, es decir, no volvió el "prompt". Guardé la calma y tranquilamente le di un "Cltr-C" para ver si volvía, y... ¡nada! Abrí otra sesión y le tuve que dar "kill -9" a mi proceso de vi. (Después descubrí que con Ctrl-Z me podía salir y luego ejecutar el kill desde esa misma sesión)

Fue un largo día, sin nada bueno qué recordar. Terminó al fin, y me fui a dormir.

En otro día menos nefasto, buscando en internet me encontré con un sitio donde recomendaban definir una variable de ambiente llamada MALLOC_CHECK_. Así procedí, pués:

export MALLOC_CHECK_=1

y volví a abrir el vi, el cual ya abrió y pude ver un archivo de prueba. Entonces, al cerrar el vi, salió el siguiente mensaje:

E138: Can't write viminfo file

el cual busqué de nuevo en internet, y me encontré con lo siguiente:

When you get error "E138: Can't write viminfo file"
check that no old temp files were left behind (e.g.
~/.viminf*) and that you can write in the directory of
the .viminfo file.
(http://www.mydatabasesupport.com/forums/shell/176820-vi-error.html)

Así que busqué en el home del usuario oracle los dichosos archivos .viminf*:

ls -ltra

y los borré todos (excepto .viminfo, si mal no recuerdo... o quizá ese también... mmm, pos mejor respáldenlo, por si acaso). Hecho esto, volví a abrir el vi y voilà!! Ya no hubo errores. Luego de terminada la misión, quité la variable MALLOC_CHECK_ (unset MALLOCK_CHECK_).

Listones.

Let's vi the world!

miércoles, agosto 06, 2008

los fastidiosos caracteres "^M" al final de cada línea de texto

Cuando se generan archivos de texto en windows (en el Notepad, por ejemplo) y se copian a unix para trabajar con ellos, resulta que "aparecen" algunos caracteres "raros" al final de cada línea, que a veces se ven como la combinación de los caracteres: ^M. Esto se debe a que el formato que maneja windows para un fin de línea lleva dos caracteres: "new line" y "carriage return" (\n\r), mientras que en unix sólo se usa el de "new line" (\n). (En Mac se usa sólo "carriage return" (\r))

A mí me sucedió que me pasaron un archivo con una lista de números que yo tenía que comparar con otra lista y hacer algunas operaciones más, y al hacer la comparación con el comando diff, no obtuve los resultados esperados, y al guardar el resultado de la salida del diff, me di cuenta de que aparecían los dichosos caracteres ^M, y por eso todas las líneas entre ambos archivos eran distintas.

Entonces encontré la manera de convertir el archivo que provenía de windows para quitarle esos caracteres, con el comando siguiente:

tr -d '\015' <> unix-format.txt

También es posible hacer la operación inversa, cuando se quiere llevar un archivo de unix a windows:
sed -e 's/$/\r/' unix-format.txt > win-format.txt
Después encontré otro blog interesante al respecto. Transcribo (copy-paste) aquí el contenido y luego incluyo el URL:

If the ^M character is showing up in files while opening the file concerned, then follow these steps to convert it to a new line.
In vi use the following:

:%s/^M/\n/g

or with perl on the command line:

$ perl -pi.bak -e ’s/^M/\n/g’

NOTE: Be sure to create the ^M by typing ctrl V followed by ctrl M.

^M is ASCII 13 (Ctrl M), which is the carriage return.

Different operating systems use different symbols to set the end of a line/new line.
Unix uses newline (\n)
Mac uses carriage return (\r)
And Windows/DOS use both (\n\r)

To prevent the ^M from showing up in files, be sure to use the ASCII (text) mode when transfering text files.

http://blog.eukhost.com/webhosting/convert-m-to-newline-character-in-text-files/


Ahi quedó.