miércoles, abril 02, 2014

Buscar un texto en un archivo grande - LINUX

Por error borré una vista de un esquema en mysql. :D

Tome mi backup para buscar el script y cuando trate de abrirlo... se puso lento porque era muy grande.

Lo que quería era encontrar el script de la vista xxx_vw en un txt gigante.

Como lo solucioné:

  • Busque el número de linea que tiene la creación de la vista con grep: 
  • grep -nr xxx_vw mibackup.sql
  • Teniendo el número de linea, ej. 4108
  • Movi el fragmento del archivo a otro archivo, para tener algo manejable: 
  • sed -n '4100,4200p' backup.sql > salida.txt
  • Luego ya lo abri salida.txt con gedit y listo! ahi estaba mi script.- 


saludos!

jueves, octubre 03, 2013

Instalar Office 2007 en Linux Mint 15

Hace más de un año escribi esto: http://carcasco.blogspot.com/2012/04/instalar-office-2007-en-ubuntu-1204.html

Ahora lo actualizo sobre la versión que tengo actualmente Linux Mint 15 con Office 2007:

Instalé Wine
sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install wine1.7

Luego seguí con esta guia: http://community.linuxmint.com/tutorial/view/1325

Realmente solo paso 1 y paso 2 porque no apliqué los parches.

Hay que mencionar que solo instalé MSProject porque es lo único que necesitaba. Funcionó a la primera.

saludos!

lunes, septiembre 02, 2013

Configurar el monitor externo como primario

Recién formateé el fin de semana y hoy que vengo a la oficina y pongo mi monitor externo tengo el problema de configurar el monitor externo como primario. (Instalé mint 15)

Este es un problema sencillo que me ha pasado varias veces y siempre me toca volver a investigar porque lo olvido :D Así que decidí escribirlo para cuando lo vuelva a olvidar.-

Tengo mi laptop y un monitor externo, pero uso el monitor del lado izquierdo y la laptop del lado derecho, el problema es que el panel sale en la pantalla de la laptop y yo uso principalmente mi monitor externo.

Lo que he hecho es ver con xrand cual es el monitor externo:
carcasco@ccc ~ $ xrandr -q
Screen 0: minimum 320 x 200, current 3046 x 1050, maximum 32767 x 32767
LVDS1 connected 1366x768+1680+282 (normal left inverted right x axis y axis) 256mm x 144mm
   1366x768       60.0*+
   1360x768       59.8     60.0
   1024x768       60.0
   800x600        60.3     56.2
   640x480        59.9
VGA1 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 470mm x 300mm
   1680x1050      59.9*+
   1280x1024      75.0     72.0     70.0     60.0
   1280x960       60.0
   1024x768       75.1     72.0     70.1     60.0
   832x624        74.6
   800x600        72.2     75.0     60.3     56.2
   640x480        72.8     75.0     66.7     60.0
   720x400        70.1
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)

y luego setear desde terminal que el VGA es el primario.
xrandr --output VGA1 --primary
referencias:
http://ubuntuforums.org/showthread.php?t=1458743

--
Update 12pm GMT-6:
cuando reinicié ya no funcionó, asi que hice un archivo en mi home llamado setoutput.sh con el siguiente contenido:
#!/usr/bin/env sh
xrandr --output VGA1 --primary
le di permisos de execute
chmod +x setoutput.sh 
y de último lo puse en mis aplicaciones de startup de mint.

saludos!

lunes, enero 21, 2013

Configurar 2 certificados SSL en un mismo Apache

Tengo un servidor Apache funcionando con su nombre de dominio, un SSL y un proxypass hacia una máquina interna en la red que tiene la aplicación. Esto funciona bien desde hace tiempo.

Resulta que se hizo una aplicación nueva que debe estar en SSL con su propio dominio y certificado SSL.

Para configurar el dominio no hay problema solamente agregué un VirtualHost por nombre y funcionaba ok. (uno así para HTTP y otro para HTTPS usando los certificados)


Usar 2 puertos distintos: se verá muy feo. porque tendríamos que acceder a http://server:8443/algo y puede que algunos ISP incluso bloqueen puertos y puede dar problemas.

La parte del "directory" la puse porque me daba un problema de que no tenía acceso al directorio. Al final no revisé si era necesaria o no.

En el DocumentRoot tengo un index.html que hace un META REFRESH hacia la url http://web.server.com/miaplicacionweb o http://movil.server.com/miaplicacionmovil

Al momento de querer poner el certificado la cosa se complicó. Puse el SSL y me dió este error:
Init: You should not use name-based virtual hosts in conjunction with SSL!!

Leyendo la documentación encontré que hay un problema con esta configuración ya que el apache no puede usar múltiples SSL en una misma IP+Puerto.
http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts2

Entiendo que el problema es por esto: El SSL cifra el contenido de la página. Cuando Apache debe decidir cual virtualhost usar, para saber que SSL se usa debe decifrar el contenido de la página y como está cifrada apache no sabe cual certificado utilizar.

En el caso de tener múltiples IP's puede filtrar el virtualhost por IP sin tener que descifrar nada y ahí si funciona.
(confuso: si.    Estoy seguro: no. Pero eso entendí :p )

Alternativas:
Poner 2 IP's en la misma máquina: hay que tener 2 IP's públicas.

Lo primero que se hizo fué solicitar 2 IP's públicas. Como era una máquina virtual se le creó una segunda tarjeta de red y se le puso una segunda IP.

Como estaba atras de un Firewall las IP's publicas se nateaban en algún router y llegaban a las IP's privadas. Algo así como:
200.x.x.1 Publica1 apunta a 192.0.1.1 Privada1 (eth1)
200.x.x.2 Publica2 apunta a 192.0.1.2 Privada2 (eth2)

Al tener esto y los DNS's configurados:
web.server.com en 200.x.x.1
movil.server.com en 200.x.x.2
* esto lo confirmaba haciendo un nslookup web.server.com y luego un telnet web.server.com 80 (para ver si respondía el puerto).

Luego hice la configuración de virtualhost por IP. (IP-NAMED dice la configuración de apache). Perdí 4 horas de mi vida tratando de entender porque no funcionaban los virtualhost.

Para ver el problema le puse un log distinto a cada virtual host. Luego de batallar un buen rato encontré que el problema era que yo estaba usando en el virtualhost las ips publicas y no las internas. Al final, la conclusión es que hay que usar las ip's privadas. Dejando la configuración algo asi:


Para HTTP:



y para el HTTPS:



y ya. con eso debe de estar funcionando correctamente.

saludos!

lunes, abril 30, 2012

Instalar Office 2007 en Ubuntu 12.04


Acabo de instalar Ubuntu 12.04, en una máquina limpia.

Parte de lo que debía hacer es instalar office. Uso el LibreOffice para el 80% de los temas, pero hay un 20% de temas que requieren office. (MSProject y algunos archivos que deben tener cierto formato).

En la 11.10 había seguido este manual (http://www.ubuntubuzz.com/2011/09/install-microsoft-office-2007-in-ubuntu.html) pero ahora me dió un problema, cuando trataba de instalar el dll dotnet20 me daba este error: "This product is not supported on a 64-bit operating system. Setup will now exit." desde una ventanita de windows.   Recordé que puse la versión de 64 bits de ubuntu. (no recuerdo si en 11.10 tenia 64 bits.. pero.. no importa).

Luego de algunas pruebas vi que tenía que hacer esto:

1. descargar ultima version de wine *no se si es necesario pero igual lo dejo.
Actualizar el Wine:
sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install wine1.3
El comando dice wine1.3 pero es la versión 1.4.  Tambíen me dió duda y lo busque :D
Verifico que esté correctamente la última versión:
wine --version
:~/.wine$ wine --version
wine-1.4
2. eliminar cualquier isntalación previa del Wine
rm -rf .wine
3. Forzar a que la máquina virtual tenga 32bits.
export WINEARCH=win32
export WINEPREFIX=~/.wine
winecfg
4. instalar winetricks
cd .wine/
wget http://www.kegel.com/wine/winetricks
chmod +x ./winetricks
./winetricks
5. Luego.. Seguir la guía que se tenía para 11.10 http://www.ubuntubuzz.com/2011/09/install-microsoft-office-2007-in-ubuntu.html saltando la parte donde dice install.wine

al final de cuentas solo agrego la parte de 32bits.

referencias:
http://appdb.winehq.org/objectManager.php?sClass=version&iId=3754
http://forums.fedoraforum.org/showthread.php?t=272681
http://pingato.wordpress.com/2009/04/16/winetricks-instalaciones-sencillas-en-wine/

Ojo.. no soy experto ni mucho menos en linux. Solo soy un usuario que soluciona los temas que vienen.  A veces sin saber exáctamente porque :D

viernes, octubre 14, 2011

Deadlock detected al obtener las conexiones JNDI en un WAS 7.0.0.13


Hace unos días dejamos en producción una aplicación que migramos de websphere 6.1 a websphere 7. (IBM WAS 7).


En principio vale mencionar que no hay nada transparente ni "migrable" entre lo que hicimos con RAD6 para que funcione en WAS7, RAD8 no soporta SDO y tuvimos que migrar "a mano" muchas cosas re-certificando toda la aplicacion, pero eso es otro tema que no comentaré a detalle.

Lo que sí quería mencionar es un error un poco raro que tuvimos luego de la salida en producción. La aplicación en testing y desarrollo funcionaba bien, pero al estar en producción empezó a dar algunos problemas, en momentos de stress de repente el WAS se colgaba completo, inclusive dejaba de responder la consola.


Revisando el SystemOut y el SystemErr empezaron a aparecer algunos errores en la clase que obtenía la conexión a la base de datos, pero no encontramos nada que nos diera una pista de que podría dar problemas.
Vale la pena comentar que como desarrollo no teníamos acceso a los servidores por lo que el proceso de resolución fué muy tortuoso y lento.

Lo primero que verificamos, lo obvio, fué pensar que había un leak de conexiones. Revisamos el systemout buscando cualquier error que nos diera una pista del error y no encontramos nada. Recibimos algunos reportes de los administradores donde se miraba que la caída era un problema que sucedía en poco tiempo (<2 minutos). No era un proceso de degradación poco a poco sino que era una caída casi inmediata.


Sospechabamos de algún reporte o algún proceso donde por algún error hubiera algún tipo de loop infinito donde no se cerraran las conexiones. No encontramos nada.
Luego encontramos en los reportes que el total de threads que tenía configurado el WAS se ocupaban al 100%, nuestra teoría en este momento era que el leak de conexiones hacía que las peticiones se encolaran en el jndi y ocuparan threads y esto hiciera que el server se cayera.
Exploramos algunas alternativas sobre la configuración del WAS, subimos los threads disponibles, pusimos un parámetro en el JNDI para que si no recibía la conexión en 5seg que diera exception. Esto aunque sabíamos que no corregía el error nos daba lapsos más grande
s entre una caída y otra y en lugar de que el was se quedara freeze empezaría a dar error de aplicación donde podríamos encontrar la raíz del problema. Hicimos los cambios y nada. Aunque subieramos los threads igual se ocupaban todos y por alguna extraña razón no respetaba el parametro que pusimos para que diera exception si no obtenía la conexión.

Un poco desesperados peinamos el código (una aplicación grande) y revisamos todas las conexiones para incluir un best practice en cuanto a cierre de las conexiones. Probamos de nuevo y nada. Es más, los errores ocurrian más seguido.

Luego un día estando en audio con los administradores de bdd y con los administradores de WAS, tuvimos una caída. Fué entonces cuando logramos tener al fin el error en las manos. Vimos las propiedades del pool y ... sorpresa! el uso del pool estaba al 50% de su capacidad... No podía ser un connection leak si solo teníamos 50% de las conexiones usadas. Ya habíamos limpiado todos los system.out.println y el systemout estaba sin ningun tema. el systemerr tampoco tenía nada. Generaron un dump de la caída y ahí vimos entonces el error.
buscando en el javacore encontramos un Deadlock detected.
Al analizar más a detalle el lugar donde se reporta el error, vimos que el metodo que muestra la traza es un metodo del pool y que no es parte del aplicativo sino parte del driver jndi de websphere.

Buscando un poco más sobre este tema encontramos algunos casos similares al nuestro:
Y encontramos luego un problema del driver de jdbc, "PK69110: THE SERVANT ABENDS CAUSED BY HUNG THREADS IN JDBC DRIVER".
Este bug tiene afectación en la versión de WAS que usamos http://www-01.ibm.com/support/docview.wss?uid=swg1PK69110&wv=1

La versión de WAS que usamos es la 7.0.0.13, encontramos entonces el problema definitivo. Un parámetro useRRASetEquals en la configuración custom del datasource.

se hizo la prueba, se pasó a producción y luego de varias semanas tratando de encontrar el problema en nuestra aplicación vimos que es un bug de WAS.

El bug era este: Cuando yo le pido una conexión al pool, el jndi usa un objeto con las conexiones utilizadas. Este objeto es compartido. Por alguna razón al tratar de reservar una conexión en el pool el objeto se quedaba tomado por otro thread y causaba un deadlock de threads. Todo esto a nivel de los javas que hacen el pool. mientras mas usuarios trataban de obtener la conexión habían más threads que se encolaban hasta que se acababan los threads del was. Luego ni siquiera la consola de WAS funcionaba y era el freeze. Como era el objeto que reservaba la conexión el error se daba antes de que el parametro de timeout que configuramos entrara y por eso no se tomaba en cuenta.
La moraleja:
hay que leer los javacore cuando hay servers colgados... aunque sean de 500MB.

saludos!

viernes, septiembre 02, 2011

Ubuntu dejó de reconocer mi modem usb

instalé hace unos días mi linux (ubuntu 11.04) y al poner mi modem de tigo todo funcionó ok, solo le cambié el APN por broadband.tigo.gt (es pospago y es un huawei e226) .-

hoy lo quise usar y no me lo reconocía la barrita de redes donde aparecía la conexión. Un poco oxidado en linux decidí buscar el var/log/messages para ver si aparecía una pista para buscar.

encontré que ahora el /var/log/messages ahora es /var/log/syslog en fin.. dejé un tail -f para ver que pasaba al conectarlo y salió algo como esto:



Sep 2 17:31:15 carloscastaneda kernel: [ 70.847353] usb 2-1.2: new full speed USB device using ehci_hcd and address 5
Sep 2 17:31:15 carloscastaneda kernel: [ 70.927358] usb 2-1.2: device descriptor read/64, error -32
Sep 2 17:31:15 carloscastaneda kernel: [ 71.117371] usb 2-1.2: device descriptor read/64, error -32
Sep 2 17:31:16 carloscastaneda kernel: [ 71.307382] usb 2-1.2: new full speed USB device using ehci_hcd and address 6
Sep 2 17:31:16 carloscastaneda kernel: [ 71.387526] usb 2-1.2: device descriptor read/64, error -32
Sep 2 17:31:16 carloscastaneda kernel: [ 71.577396] usb 2-1.2: device descriptor read/64, error -32
Sep 2 17:31:16 carloscastaneda kernel: [ 71.767412] usb 2-1.2: new full speed USB device using ehci_hcd and address 7
Sep 2 17:31:16 carloscastaneda kernel: [ 72.187310] usb 2-1.2: device not accepting address 7, error -32
Sep 2 17:31:16 carloscastaneda kernel: [ 72.267438] usb 2-1.2: new full speed USB device using ehci_hcd and address 8
Sep 2 17:31:17 carloscastaneda kernel: [ 72.687307] usb 2-1.2: device not accepting address 8, error -32
Sep 2 17:31:17 carloscastaneda kernel: [ 72.687486] hub 2-1:1.0: unable to enumerate USB device on port 2
al final encontré por acá la solución: http://www.absolutelytech.com/2009/11/01/solved-ath5k-wifi-module-not-working-in-karmic-koala/
cd /sys/bus/pci/drivers/ehci_hcd

ls
sudo sh -c 'echo -n "0000:00:xx.x" > unbind'
reinicié y listo.-

saludos!