8 July, 2008

Nautilus svn, el tortoise linuxero

Cuando me pasé a ubuntu busqué y rebusqué algo parecido a tortoisesvn, estaba muy acostumbrado a trabajar con el. Al final no encontré nada parecido y me quedé con los clientes de eclipse y netbeans (que están muy bien por cierto), con kdesvn y con la línea de comandos claro.

Pero estos días he descubierto nautilussvn. Un cliente subversion que se integra bastante bien con nautilus el explorador de ficheros de gnome. Le faltan muchas opciones, pero para echar un vistazo a los ficheros modificados y no commiteados o para subir ciertos cambios de una forma ágil esta muy pero que muy bien.

Nautilus svn

Su creador Jason Field ha publicado el proyecto en el repositorio de código de google para todo el que quiera participar, ¡ánimo!.

PD: Acabo de recibir 2 sms de la uoc, he aprobado las 2 asignaturas a las que me presenté, esto merece una gran celebración!! :-).

6 May, 2008

Php5 y php4 también conviven en mi ubuntu

En días como hoy es cuando se echa de menos un hombro donde desahogar las penas, un compañero al que preguntar, o simplemente al que decir "¿esta bien verdad?, ¿y pq no funciona entonces?, es que no lo entiendo, ¿enviamos un bug?...y mil cosas mas sin sentido cuando finalmente encuentras los porqués".

Volviendo al proyecto en el que ya estoy sumergido necesito además de una 4 de mysql una 4 de php, y claro en mi ubuntu estoy con la 5. Venga a buscar soluciones.

Para tener 2 versiones de php corriendo en la misma máquina, sin virtualizaciones ni nada que este cacharro no esta para esos trotes, necesitamos tener una instalada como módulo y otra como cgi. Como módulo tengo la 5.2.3 y necesito instalar una 4 como cgi.

Voy a recurrir a los repositorios de http://www.dotdeb.org/mirrors para hacerme con la 4.4.8. Edito mi sources.list y añado los repositorios de dotdeb.

Tras actualizar los repositorios hago un apt-get install php4-cgi y primera en la frente, dependencia libzzip-0.12 incumplida (paso mucho miedo, pero con suerte no es recursiva), es lo que tiene recurrir a estas versiones antiguas empaquetadas. Nos vamos a debian http://packages.debian.org/etch/i386/libzzip-0-12/download descargamos e instalamos el paquete.

Ahora si apt-get install php4-cgi y php4 instalado. Instalamos además otros paquetes que necesitaremos apt-get install php4-curl php4-domxml php4-gd php4-gmp php4-imap php4-ldap php4-mcal php4-mcrypt php4-mysql

Ahora que tenemos php4 instalado y nuestro ejecutable en /usr/lib/cgi-bin/php4, editamos nuestro virtual host de apache:

  1. <VirtualHost *:80>
  2.         ServerAdmin sanroman.javier@gmail.com
  3.         ServerName midominio.com
  4.         DocumentRoot /home/javi/php4/miproyecto
  5.  
  6.         ErrorLog /var/log/apache2/error.log
  7.         LogLevel warn
  8.         CustomLog /var/log/apache2/access.log combined
  9.  
  10.     ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  11.     <Directory />
  12.                 AddHandler php-script .php
  13.                 Action php-script /cgi-bin/php4
  14.         Options FollowSymLinks
  15.         AllowOverride None
  16.     </Directory>
  17. </VirtualHost>

y tenemos que activar el modulo actions (a2enmod actions) o no podremos ejecutar la linea Action php-script /cgi-bin/php4 .
Y con esto ya tenemos este virtual host utilizando la 4. Ala mañana mas que hoy ya es tarde.

Mysql5 y mysql4 conviviendo en ubuntu

Logo MysqlPues si con este inicio de mayo y un año mas encima :-) cambiamos de proyecto y necesariamente hemos de utilizar mysql4.

En mi ubuntu gutsy (todavía no me he atrevido a actualizar) tengo instalada mediante apt la versión 5, así que no me quedaba otra que buscar la forma de tener las 2 funcionando en mi portatil ya que la opción de servidor de desarrollo en casa a día de hoy es inviable. Yo he compilado los fuentes de mysql4 para conseguirlo aunque tenemos otras opciones. En este provechoso articulo tenemos información sobre esto.

Lo primero es descargar los fuentes.
Descomprimimos y preparamos la compilación para indicar el puerto, socket y directorio de instalación, todos diferentes a la versión 5 actual claro:

  1. ./configure --prefix=/home/javi/mysql4.1 --sysconfdir=/home/javi/mysql4.1 --with-tcp-port=3309 --with-mysqld-user=javi --with-unix-socket-path=/home/javi/mysql4.1/mysql4.1.sock

Compilamos "make" e instalamos "make install".

Copiamos el fichero de configuración a la nueva instalación:

  1. cp support-files/my-large.cnf /home/javi/servers/mysql4/my.cnf

Creamos las BD (test, mysql, information_schema) necesarias para mysql ejecutando ./bin/mysql_install_db.

Iniciamos ./bin/mysqld_safe --defaults-extra-file=my.cnf indicando el fichero de configuración a utilizar.

Y listo, probamos si ha iniciado correctamente realizando una conexión: ./bin/mysql -h 127.0.0.1 -P 3308 -u root, especial atención a la ip y no "localhost" para que la conexión se realice mediante TCP/IP.

Y a currar en 5 y 4.

21 April, 2008

Cambio de fecha/hora permanente en gnu-linux

Gnu linux

Logos GNU LinuxUn apunte rápido a esta utilidad, hwclock, que nos permite cambiar la fecha/hora del reloj del sistema hardware. Por ejemplo:

  1. // Cambiamos la fecha/hora del sistema
  2. date –set "2008-04-21 10:30"

  1. // Cambiamos la fecha/hora de nuestro Reloj del Hardware (RTC)
  2. hwclock –set –date="2008-04-21 10:30"

Con esto la próxima vez que reiniciemos también tendremos nuestra fecha/hora actualizada.

4 February, 2008

Modelado de BD en ubuntu

DbDesignerDe toda la documentación que podemos generar durante el desarrollo de un proyecto de gestión, uno de los documentos que mas me ayuda son los diagramas entidad-relación. Gracias a ellos puedo observar de un golpe de vista todo el modelo de datos con el que trabajo y con ello gran parte del modelo de negocio a tratar.

De siempre hemos tenido programas para generar estos diagramas, Oracle Designer, IBM Rational Rose, ERwin, Microsoft Visio, DataArquitect, y seguro que muchos otros que no conozco. Pero no fué hasta la aparición de DbDesigner cuando tuvimos un programa de este tipo para mysql, liberado bajo GPL y disponible también para escritorios linux.

Hace ya unos años que mysql se hizo con fabforce, empresa que desarrolló DbDesigner, gracias a esta compra tenemos productos como Mysql Administrator, Mysql Query Browser o Mysql Migration Toolkit, pero nos faltaba la continuación de DbDesigner que parecía haber quedado estancada. En Diciembre 2007 por fín mysql liberó MySQL Workbench 5.0.11 (beta) el sucesor de nuestro querido DbDesigner, no sin llevarnos una buena sorpresa, solo se ha liberado para windows, todas las demás plataformas deberán esperar un poco, no deja de ser curioso viniendo de mysql, en fin...

Todo este rollo viene al caso porque la semana pasada he comenzado a hacerme con un nuevo proyecto dentro de mi nuevo trabajo, y claro, como suele ser habitual no tenemos ni rastro de documentación. Por lo que me decidido a comenzar documentando la BD que se utiliza y así poder entender algo de lo que se cuece ahí. Y ya que como os contaba todavía no tenemos Mysql Workbench para nuestros linux, he vuelto a instalar en mi portatil-ubuntu la última versión de DbDesigner, os cuento como lo hice:

Antes de nada necesitaremos tener instalado el paquete xkeyboard-config, si todavía no lo tenemos en ubuntu nos bastará con un simple apt-get install xkeyboard-config.

DbDesigner esta desarrollado en kylix por lo que debemos bajarnos sus librerias si es que no las tenemos instaladas ya. Para ello visitamos http://kylixlibs.sourceforge.net/down.html y nos las bajamos en el formato que mas nos convenga, yo me las bajé en .deb y las instalé con un simple dpkg -i libreria.deb por cada una, en total son estos 5 paquetes:

kylixlibs3-borqt_3.0-1_i386.deb

kylixlibs3-runtime_3.0-1_i386.deb

kylixlibs3-borstlcrtl_3.0-1_i386.deb

kylixlibs3-unwind_3.0-1_i386.deb

kylixlibs3-qt_3.0-1_i386.deb

Por lo general se instalarán en el directorio /usr/lib/kylix3 y es posible que debamos crear 2 enlaces simbolicos para que DbDesigner sepa donde encontrarlas.

  1. ln -s /usr/lib/kylix3/libborqt-6.9.0-qt2.3.so /usr/lib/kylix3/libborqt-6.9-qt2.3.so

Posiblemente necesitemos crear también un enlace a /usr/lib/:

  1. ln -s /usr/lib/kylix3/libborqt-6.9.0-qt2.3.so /usr/lib/libborqt-6.9-qt2.3.so

para que este último enlace tenga efecto editamos el fichero /etc/ld.so.conf o /etc/ld.conf y si no está añadimos la linea /usr/lib, guardamos y ejecutamos el comando ldconfig para actualizar los links de nuestro directorio /usr/lib.
Ahora ya solo nos queda descargarnos el DbDesigner y ejecutarlo.

12 November, 2007

Aportación española a OpenMoko

Neo1973
Vía barrapunto me entero de que ya tenemos españolitos colaborando con openmoko. Los sujetos en cuestión, kernel-labs, disponen en su web de información técnica muy interesante sobre la plataforma.

Open Moko es un una comunidad cuyo objetivo es crear el primer sistema operativo open source para teléfonos móviles. En un principio OpenMoko está diseñado para Neo1973 de FIC, el teléfono mas parecido al ya por todos conocido iphone que he visto hasta la fecha, tan parecido que a veces a uno le entran dudas acerca de la autenticidad de cada cual.

Para quien le entre el gusanillo y se lo pueda permitir ya podemos encargarlo desde https://direct.openmoko.com/ su precio ronda entre 300$ y 450$. Quien sabe, quizás dentro de no mucho tiempo podamos hacer algo como apt-get install gnome-mobile en nuestro teléfono sin tener que firmar un contrato de 3 años con la respectiva compañía telefónica.

En el wiki y el repositorio de proyectos oficial de openmoko tienen toda la información disponible sobre esta plataforma.

7 November, 2007

Automatizar copias de seguridad con rsync

Esta semana me he decidido por fin y he terminado de automatizar las copias de seguridad de mi escritorio ubuntu "Gutsy Gibbon" a un servidor debian "etch".

He utilizado rsync para transmitir todos mis ficheros, herramienta muy versátil con la que realizo mis copias de seguridad de forma incremental en un único sentido, para mantener sincronizados 2 directorios en ambos sentidos podemos utilizar unison.

Partimos de que los scripts los ejecutaremos desde la máquina cliente hacia el servidor. Lo primero que debemos conseguir para transferir los ficheros de forma programada es tener acceso al servidor sin que sea necesaria nuestra intervención. Para ello debemos generar un par de claves publica/privada sin palabra de paso en la máquina cliente y autorizar nuestra clave pública en el servidor. Ejecutamos la utilidad ssh-keygen y generamos las claves:

  1. javi@javi-dell:~/.ssh$ ssh-keygen -d
  2. Generating public/private dsa key pair.
  3. Enter file in which to save the key (/home/javi/.ssh/id_dsa): hola
  4. Enter passphrase (empty for no passphrase):
  5. Enter same passphrase again:
  6. Your identification has been saved in hola.
  7. Your public key has been saved in hola.pub.
  8. The key fingerprint is:
  9. cf:f5:d1:58:52:20:1a:4d:17:70:4c:fa:fc:e0:fc:f5 javi@javi-dell

Hemos generado 2 ficheros: hola (clave privada) y hola.pub (clave pública). Con la opción -d indicamos que utilice el algoritmo dsa (ssh v1 utiliza claves rsa, mientras que ssh v2 utiliza claves dsa), a la primera pregunta respondemos con "hola" que será el nombre de nuestra clave, a continuación nos pedirá la palabra de paso, pulsaremos enter ya que no la necesitamos.

Ahora le mostraremos a nuestro servidor cual es la clave pública con la que nos vamos a conectar. Para ello copiamos el contenido del fichero hola.pub (nuestra clave pública) a una nueva linea del fichero /home/usuario/.ssh/authorized_keys de nuestro servidor, si no existe lo creamos.
Y probamos a conectar utilizando la clave creada:

  1. ssh -i /home/usuario/.ssh/hola host

Podemos utilizar la opción -v para imprimir los pasos que se realizan para conectar y la opción -2 para forzar a que conecte mediante ssh2 si este no es nuestro protocolo por defecto.

Con esto ya deberíamos tener nuestros equipos autentificados mediante claves dsa.

Procedemos a crear el script que ejecutará los backups backup.sh

  1. #!/bin/bash
  2.  
  3. # ARRAY con los directorios origen a copiar
  4. ORG[1]="/home/usuario/_TEMP/org1";
  5. ORG[2]="/home/usuario/_TEMP/org2";
  6. ORG[3]="/home/usuario/_TEMP/org3";
  7.  
  8. # ARRAY con los directorios destino
  9. DEST[1]="/home/usuario/_TEMP/dest1";
  10. DEST[2]="/home/usuario/_TEMP/dest2";
  11. DEST[3]="/home/pepe/";
  12.  
  13. # Usuario y host de la conexion, dejar en blanco para copiar al mismo equipo o unidad extraible
  14. conn[1]="";
  15. conn[2]="";
  16. conn[3]="pepe@picaso:";
  17.  
  18. # Opciones de rsync
  19. opts[1]=" -ah";
  20. opts[2]=" -ah";
  21. opts[3]=" -avhe";
  22.  
  23. # Especificamos el fichero de clave para autentificación, dejar en blanco si no se utiliza
  24. key[1]="";
  25. key[2]="";
  26. key[3]="ssh -i /home/pepe/.ssh/hola";
  27.  
  28. fecha=`date`
  29.  
  30.  
  31. # Recorremos los arrays con los directorios a copiar
  32. i=1;
  33. for j in ${ORG[*]}; do
  34.  
  35.     if (rsync ${opts[i]} "${key[i]}" ${ORG[i]} ${conn[i]}${DEST[i]} --log-file=backup.log ) then
  36.         echo "$fecha Sincronización terminada con EXITO">> backup.log;
  37.     else
  38.         echo "$fecha se ha producido un ERROR durante la sincronización">> backup.log;
  39.     fi
  40.     echo "-----------------------------------------------------------">> backup.log;
  41.  
  42.     i=`expr $i + 1`  #Incrementamos contador en 1
  43. done

Y finalmente lo añadimos a nuestro cron para que se ejecute periódicamente, por ejemplo:

  1. crontab -e
  2.  
  3. # m h  dom mon dow   command
  4. 00 22 * * * /home/usuario/backup.sh

Le decimos que se ejecute todos los días a las 22h.

Powered by WordPress
Bajo licencia Creative Commons
Contacto sanroman.javier at gmail.com