jueves, 17 de febrero de 2011

Instalacion de Ubuntu

Esto que les voy a comentar lo había leído muchas veces pero realmente no lo creía, y como me acaba de pasar (ahora sí creo a los muchos usuarios que decían que funcionaba) y realmente funciona se los comento, para que cada uno de ustedes o me crea a mi (yo no lo haría), o les pasa como a mí que piensan que soy otro pirado amante de linux que anda en la vuelta.

Bueno la cuestión es que hace muchos meces instale Ubuntu en un equipo, y lo particione de la siguiente manera, una parte para todo el S.O., lo que sería la "/", otra partición para los datos de los usuarios, lo que sería el "/home", y luego otras particiones una para swap y otra para datos (para que si tengo que reiniciar no perder cosas)

Por motivos que no vienen al caso, se me rompió Linux (todo metida de pata mía), y obviamente debería de reinstalar de nuevo, lo primero que se me viene a la mente, fueron los blog que comentaban, que decían, que luego de instalar el S.O., como todas las cosas de los usuarios estaban en el home, que si definía los mismos usuarios que el "escritorio" y todos sus seteos se mantenían. Obviamente yo parte de esto lo creía pero nunca que funcionara tan bien.
Entonces instalo Ubuntu de nuevo, y reinicio. Bueno acá empieza mi sorpresa, primero que nada, ya de arranque la imagen del fondo apenas me logueo, es el mismo, eso ya me levanto una carita de asombro. Bueno, luego abro firefox, ahhh, se acuerda de las ultimas pestañas que tenía abierto antes de que se rompiera todo. Después dije ta en esta lo jodo, instalo JDownloader, que es el programa de descargas que utilizo (para las cosas legales ;-) ), este programa antes de hacer patapuf Linux, tenía 3 cosas descargando, de las cuales había varias partes de cada una que se habían descargado, yo lo que pensé es que al instalar, el programa arrancaría virgen, pero mi GRAN sorpresa, apenas lo arranco, se mantenía las cosas que estaba descargando, en las carpetas que estaban, lo que se había descargado estaba marcado como descargado, etc.

Ya ta, me saco el sombrero una vez más con el pingüino que me facilita tremendamente las cosas.

Moralejas, 1: siempre instalen Linux, y dejen una pequeña partición para la carpeta home, e intenten pensar y luego mantener la misma estructura de particiones, por ejemplo la de datos, llamarla siempre DATOS, y montarla siempre en /DATOS (por ejemplo)
2: no todo lo que dicen es internet es verdad, pero si hay muchos que lo dicen mmm, debe de ser verdad (como dice el dicho, si el rio suena, algo trae)

Instalar JDownloader en Ubuntu 10.10

El proceso para instalar jDownloader en Ubuntu 10.10 es el siguiente:

Lo primero que debes hacer es abrir el terminal.

A continuación debes copiar y pegar el siguiente código. El cual agrega el PPA de jDownloader al listado de sources.list.

sudo add-apt-repository ppa:jd-team/jdownloader

hecho esto debes actualizar tu sistema.

sudo apt-get update

Y luego instalar jDownloader.

Sudo apt-get install jdownloader

Una vez termine la instalación solo restara que abras jDownloader y permitas que se actualice para luego configurar el idioma.

Terminado ese proceso. Ahora cuentas en Ubuntu 10.10 con el mejor gestor de descargas de rapidshare.


Este post es una copia, el post original agrego el link abajo.

http://linuxtremo.com/instalar-jdownloader-en-ubuntu-10-10/

fstab, monter discos en Ubuntu (Linux)

Para montar o editar los discos que se monten en Linux debemos editar el archivo /etc/fstab, y debemos de cargar algo de este estilo.


UUID=257deaa4-7dc4-47e2-863c-6f6866104def6 /mnt/carpeta ext2 user,exec,rw,auto,async,noatime 0 0

UUID=257deaa4-7dc4-47e2-863c-6f6866104def6 /mnt/carpeta ext3 user,exec,rw,auto,async,noatime 0 0

UUID=257deaa4-7dc4-47e2-863c-6f6866104def6 /mnt/carpeta reiserfs user,exec,rw,auto,async,noatime 0 0


el UUID depende de cada equipo y de cada disco así que esto lo tienen que sacar ustedes, para obtenerlo deben de hacer lo siguiente:

ls -l /dev/disk/by-uuid


con lo que debemos jugar además son con los parámetros, acá dejo una pequeña explicación de cada uno:


user sirve para que todos los usuarios tengan permiso para montar y desmontar la partición (contrario simplemente no añadir)

exec sirve para que podamos ejecutar binarios en esa partición (contrario noexec)

rw leer/escribir en la partición (contrario ro)

auto al iniciar la computadora la partición se monta automáticamente (contrario noauto)

noatime la información respecto a cuándo se ha accesado un fichero de la partición la última vez no se actualiza (contrario atime)

async sirve para que la escritura en la partición correspondiente se retrase un determinado tiempo en llevar a cabo, eso quiere decir que por ejemplo al copiar un fichero en esta partición este no se copia instantáneamente sino que se copiará cuando el sistema tenga suficiente recurso como para poder hacerlo. Por ejemplo si el sistema tiene una gran carga, o si se realiza la copia de varios ficheros al mismo tiempo no congestionar esta operación. (contrario es sync, Nota: sync se puede ejecutar como usuario normal para sincronizar las particiones)


Luego siguen dos 0 que el primero de ello simboliza un valor lógico (0 o 1) que indica si se debe intentar escribir un registro con los fallos que se han tenido al accesar la información de esa partición. El segundo 0 simboliza si se debe llevar a cabo comprobación periódica del sistema de ficheros.



bueno esto para arrancar da y sobra.



les copio como queda mi fstab, siendo que tengo 3 discos el primero con 4 partición (/,/home,/DATOS1, y swap), el segundo con 1 partición (/DATOS2), estos 2 son SATA, y el terceo con 1 partición (/DATOS3) y es un disco IDE.




# /etc/fstab: static file system information.

#

# Use 'blkid -o value -s UUID' to print the universally unique identifier

# for a device; this may be used with UUID= as a more robust way to name

# devices that works even if disks are added and removed. See fstab(5).

#

#

proc /proc proc nodev,noexec,nosuid 0 0

# / was on /dev/sda1 during installation

UUID=802801c8-36cb-4420-a22d-99858cb5b9f7 / ext4 errors=remount-ro 0 1

# /DATOS1 was on /dev/sda5 during installation

UUID=cc083e50-c72f-47dc-bff3-f8856f10ad6a /DATOS1 ext4 user,rw,auto,exec,async 0 1

# /DATOS2 was on /dev/sdb1 during installation

UUID=dc521035-8215-4cc6-a0c1-bc76d4525adc /DATOS2 ext4 user,noauto,exec,async 0 1

# /DATOS3 was on /dev/sdc1 during installation

UUID=481515a3-6cb1-46c0-baa5-5e71e6cc4fab /DATOS3 ext4 user,noauto,exec,async 0 1

# /home was on /dev/sda3 during installation

UUID=1fcf7d15-7fbc-4a52-9567-7b5397a0acfe /home ext4 defaults 0 1

# swap was on /dev/sda2 during installation

UUID=f83a7212-1dcb-4109-84d1-f4980c082b7d none swap sw 0 0

/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0

viernes, 11 de febrero de 2011

orphaned case en Genexus

En algunas situaciones en KB genexus 9, al compilar me ha saltado este error “orphaned case”, esto se da cuando tenemos algún Datastor, que no tienen definido bien el tipo de motor que se usa, esto pasa cuando creamos un modelo nuevo, y no definimos bien la parte de Datastor.

Lo que hay que hacer es elegir el motor que van a trabajar y con esto se soluciona, lo que van a tener que hacer es además generar los objetos que dan problemas.

jueves, 27 de enero de 2011

Tarjeta de red en VMWare Linux

Algunas veces me ha pasado, y a muchos de mis compañeros, que se copian una máquina virtual hecha en VMWare, con Linux (el caso particular es Ubuntu Server pero creo que aplica a cualquier distribución) de un equipo a otro y cuando inician la VMWare en el otro equipo, este no detecta la tarjeta de red.

La solución para esto la he encontrado con uno de los dos pasos que voy a mencionar abajo, pude que solo con el primero se solucione, pero como he dicho en algunos casos tengo que combinar los 2 pasos, y a veces no basta con hacer el 1 y luego el 2, sino que hay que hacer el 2 y luego el 1.


Primero que nada, lo mejor es la configuración de la red, de la vmware, ponerla en NAT (igual después si no le andan los pasos que pongo abajo, pueden cambar a Bridged)

Paso 1:

Por consola, vamos a /etc/network, y editamos el archivo interfaces.

Ahí si tenemos lo normal deberíamos de tener algo asi (depende si la eth0 está como dhcp que es mi caso o como estática que es un poco distinto, pero la idea va a ser la misma)

# The loopback network interface

auto lo

iface lo inet loopback

# The primary network interface

auto eth0

iface eth0 inet dhcp

La solución es agregar configuración como que tenemos más tarjetas de red, yo he tenido que llegar a definir hasta eth5, pero para ahorrarse el problema definan hasta la 9.

Entonces lo que tenemos que agregar es lo siguiente:

auto eth*

iface eth* inet dhcp

donde está el asterisco (*) cambiar por 1, 2, etc. (si van a agregar 3 tarjetas, debería quedar una eth0, eth1, eth2 y eth3, es decir van a tener que agregar 3 veces estos 2 renglones)

luego, guardan y cierran el archivo, y reinician ya sea el servidor o el servicio de red (/etc/init.d/networking restart)

Cuando reinician, ven las tarjetas que tienen configuradas (ifconfig) y esto les va a decir que tienen la 127.0.0.1 (es decir la de “lo” de la configuración), y tantas tarjetas de red como tengan configurada en la vmware, lo normal es 1 sola, pero esta red, puede ser la eth0 o la eth3, entonces si detecto la eth3, lo que hacen para dejar limpio el archivo borran la configuración de las otras tarjetas (eth0, eth1, eth2), nunca borren la de “lo” esa es intocable.

Si solo con esto no se soluciona, va el Paso2.

Paso2:

En la configuración de la VMWare, deben de agregar una tarjeta de red, luego reiniciar el equipo Linux, ver con ifconfig si quedaron las 2 tarjetas de red o solo 1, y luego (depende de que es lo que quieren yo estoy suponiendo que quieren 1 sola tarjeta de red), apagar el equipo, y a la VMWare sacarle la primer tarjeta de red. Estos son los pasos que a mí me funcionaron, ya sé que alguien puede decir porque no sacamos directamente de entrada la primer tarjeta, quedamos con 0 tarjetas, agregamos una tarjeta, ahora estamos con 1, y recién ah iniciamos el Linux, bueno de esta forma a mí no me funciono, yo tuve que iniciar el Linux con 2 tarjetas y luego quitar la primera.

Esto mismo que explique por consola, si el equipo es Suse, se puede hacer por Yast, pero eso lo dejo para que lo investiguen ustedes, ya que Yast es un poco fácil de entender (si sabemos lo que estamos haciendo y si leemos bien lo que él nos dice).

Bueno espero solucionar el tema.

martes, 25 de enero de 2011

Siguiendo con el tema de Store procedure de MySql, ahora lo que vamos a crear es un procedimiento para actualizar las estadísticas de MySql.

He leído un poco sobre las estadísticas sobre MySql, y el resumen seria que se debe de ejecutar cuando se borran o agregan muchos datos de una tabla (sobre todo si esta tiene muchos registros).

La teoría la tengo clara pero no les puedo confirmar si el actualizar las estadísticas realmente mejora la performance de la aplicación, es decir teóricamente lo debería de hacer, pero no he podido detectar fehacientemente que esto sea asi, las bases que yo trabajo de desarrollo son de muy pocos datos, y las bases de producción que lo he corrido los usuarios no me dijeron si anda mas rápido o no (tampoco se los pregunte para no obtener una respuesta negativa por el solo hecho de preguntarlo).

Bueno ahora con lo interesante, abajo pongo el procedimiento.

DELIMITER $$

DROP PROCEDURE IF EXISTS `estadisicas` $$

CREATE DEFINER=`root`@`%` PROCEDURE `estadisicas`(in base varchar(50))

BEGIN

DECLARE done INT DEFAULT 0;

DECLARE tabla VARCHAR (50);

DECLARE cursor1 CURSOR FOR SELECT TABLE_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=base;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

OPEN cursor1;

REPEAT

FETCH cursor1 INTO tabla;

IF NOT done THEN

SET @ddl = CONCAT('ANALYZE TABLE ', tabla, ';');

PREPARE STMT FROM @ddl;

EXECUTE STMT;

END IF;

UNTIL done END REPEAT;

CLOSE cursor1;

OPEN cursor1;

REPEAT

FETCH cursor1 INTO tabla;

IF NOT done THEN

SET @ddl = CONCAT('OPTIMIZE TABLE ', tabla, ';');

PREPARE STMT FROM @ddl;

EXECUTE STMT;

END IF;

UNTIL done END REPEAT;

CLOSE cursor1;

END $$

DELIMITER ;

* El parámetros que recibe es: nombre de la base. Para ejecutarlo simplemente hay que correr desde el browser lo siguiente:

CALL estadisticas('mibase');


Lo que estamos utilizando son 2 sentencias MySql, que son ANALYZE y OPTIMIZE .

viernes, 14 de enero de 2011

Cambiar masivamente los collate de MySql

Esto que voy a postear antes tengo que hacer 2 aclaraciones, primero es un plagio J, segundo gracias Diego Giusso (el creador). pero tenía que tenerlo accesible desde cualquier lugar y no solo desde la empresa.

La situación es la siguiente, tengo una base MySql que tienen algunos campos o tablas con un collate y otros con otro, entonces necesito de alguna forma unificarlos. Para esto utilizaremos un procedimiento almacenado, que se puede generar y ejecutar, directamente del browser de MySql.

Bueno acá abajo, copio lo que les decía que “robe”.

Solución masiva con procedimiento almacenado

* Podemos crear el siguiente procedimiento almacenado que nos permite automatizar la conversión de codificación de campos de una base:

DELIMITER ;;

DROP PROCEDURE IF EXISTS actCOLLATE;;

CREATE PROCEDURE actCOLLATE(in base varchar(50), in characterSet varchar(32), in collateNew varchar(32))

BEGIN

DECLARE done INT DEFAULT 0;

DECLARE tabla VARCHAR (50);

DECLARE campo VARCHAR (50);

DECLARE tipo TEXT (50);

DECLARE cursor1 CURSOR FOR SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=base AND NOT CHARACTER_SET_NAME IS NULL AND COLLATION_NAME<>collateNew;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

OPEN cursor1;

REPEAT

FETCH cursor1 INTO tabla, campo, tipo;

IF NOT done THEN

SET @ddl = CONCAT('ALTER TABLE ', base,'.', tabla, ' MODIFY COLUMN ', campo, ' ', tipo, ' CHARACTER SET ', characterSet, ' COLLATE ', collateNew);

PREPARE STMT FROM @ddl;

EXECUTE STMT;

END IF;

UNTIL done END REPEAT;

CLOSE cursor1;

END;;

* Los parámetros que recibe son: nombre de la base, carácter set (por lo general ‘latin1’), collate (por lo general ‘latin1_general_cs’). Para ejecutarlo simplemente hay que correr desde el browser lo siguiente:

CALL actCOLLATE('mibase','latin1','latin1_general_cs');

* Una vez ejecutado, si se quiere eliminar el procedimiento lo pueden hacer ejecutando:

DROP PROCEDURE actCOLLATE;