Hasta la fecha nunca había trabajado con oracle. Solo había tocado mysql, sqlserver (lo justo y necesario para sacar adelante los respectivos proyectos) y apache derby en mi querido fmap. Pero las prácticas de SGBD las haremos en este entorno, por lo que toca instalarlo.
Hace ya unos años que la uoc viene promoviendo el software libre con cd’s de ubuntu y diverso software abierto (cuando es posible) para poder realizar muchas de las prácticas cada semestre. Pero esta asignatura parece ser una excepción. En “sistemas de gestión de bases de datos” envían un cd con Oracle Express v10 y SQL Developer v1, solo para windows XP, 2000 y 2003. Como muchos sabréis Oracle Express es la versión gratuita de oracle y también tenemos versiones para ubuntu y otras distribuciones gnu-linux, ¿que les costaba meter 200MB mas con el .deb para las distribuciones debianeras?.
Por supuesto yo lo he instalado en mi ubuntu. He optado por añadir el repositorio de oracle http://oss.oracle.com/debian a mi sources.list y ejecutar un simple apt-get install oracle-xe-universal, he dejado los pasos de instalación en el wiki, cuya página iré ampliando a medida que valla conociendo este SGBD.
Por supuesto, esta versión gratuita tiene sus limitaciones, en la licencia nos indican que solo para sistemas con 1 procesador, no mas de 1GB de ram y BD limitadas a un tamaño de 4GB, quien quiera mas, que pague.

Después de unos días muy movidos resolviendo marrones varios, desde el análisis y corrección de complejos y absurdos algoritmos hasta ayudas varias a clientes en .net (hace mas de 4 años que no toco este lenguaje!) que mejor para volver a sentirse “vivo” que probar una de las tantas cosas que tengo en mis “tareas pendientes”, el Trac.
Hacía bastante tiempo que le tenía ganas pero la puntilla está siendo uno de los proyectos en los que estoy trabajando y la relación a distancia con los integrantes del mismo. En mi opinión necesitamos mas que subversion y correo, necesitamos por lo menos un wiki y un gestor de tareas en los que poder colaborar todo el equipo, y esto es lo que nos ofrece trac. Además de la interfaz web de subversion que aunque está bien, es perfectamente prescindible en este caso.
La instalación básica en debian/ubuntu es bastante sencilla. La configuración con apache y mod_python también aunque hay que tener en cuenta la necesidad genshi (un motor de plantillas escrito en python). Luego la integración con svn para poder añadir comentarios o cerrar tickets desde commits de svn resulta un poco mas liante, ya que debes instalar el plugin SVNPolicies y configurar un par de scripts, pero cuando finalmente logras hacerla funcionar, ¡es una maravilla!. Además esta ultima tarea me ha permitido eliminar otra de mis “tareas pendientes” los ganchos (hooks) de svn, ahora ya se como funcionan :-).
He dejado unas notas sobre los pasos que he seguido en el wiki. Ahora en cuanto lo tenga un poco mas probado sugeriré su instalación para el proyecto en el que estamos trabajando y a ver que sale.
Otra nota positiva es que casi sin buscarlo ya estoy empezando a ver cosillas en python, aunque espero que la próxima el tiempo me deje y sea mas a fondo, ya os contaré.
Instalación / Configuración Trac
PD: Los macbook van ganando enteros pero todavía no se si macbook a secas (blanquito) o macbook pro.
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:
-
<VirtualHost *:80>
-
ServerAdmin sanroman.javier@gmail.com
-
ServerName midominio.com
-
DocumentRoot /home/javi/php4/miproyecto
-
-
ErrorLog /var/log/apache2/error.log
-
LogLevel warn
-
CustomLog /var/log/apache2/access.log combined
-
-
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
-
<Directory />
-
AddHandler php-script .php
-
Action php-script /cgi-bin/php4
-
Options FollowSymLinks
-
AllowOverride None
-
</Directory>
-
</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.
Pues 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:
-
./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:
-
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.
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:
-
javi@javi-dell:~/.ssh$ ssh-keygen -d
-
Generating public/private dsa key pair.
-
Enter file in which to save the key (/home/javi/.ssh/id_dsa): hola
-
Enter passphrase (empty for no passphrase):
-
Enter same passphrase again:
-
Your identification has been saved in hola.
-
Your public key has been saved in hola.pub.
-
The key fingerprint is:
-
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:
-
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
-
#!/bin/bash
-
-
# ARRAY con los directorios origen a copiar
-
ORG[1]="/home/usuario/_TEMP/org1";
-
ORG[2]="/home/usuario/_TEMP/org2";
-
ORG[3]="/home/usuario/_TEMP/org3";
-
-
# ARRAY con los directorios destino
-
DEST[1]="/home/usuario/_TEMP/dest1";
-
DEST[2]="/home/usuario/_TEMP/dest2";
-
DEST[3]="/home/pepe/";
-
-
# Usuario y host de la conexion, dejar en blanco para copiar al mismo equipo o unidad extraible
-
conn[1]="";
-
conn[2]="";
-
conn[3]="pepe@picaso:";
-
-
# Opciones de rsync
-
opts[1]=" -ah";
-
opts[2]=" -ah";
-
opts[3]=" -avhe";
-
-
# Especificamos el fichero de clave para autentificación, dejar en blanco si no se utiliza
-
key[1]="";
-
key[2]="";
-
key[3]="ssh -i /home/pepe/.ssh/hola";
-
-
fecha=`date`
-
-
-
# Recorremos los arrays con los directorios a copiar
-
i=1;
-
for j in ${ORG[*]}; do
-
-
if (rsync ${opts[i]} "${key[i]}" ${ORG[i]} ${conn[i]}${DEST[i]} --log-file=backup.log ) then
-
echo "$fecha Sincronización terminada con EXITO">> backup.log;
-
else
-
echo "$fecha se ha producido un ERROR durante la sincronización">> backup.log;
-
fi
-
echo "-----------------------------------------------------------">> backup.log;
-
-
i=`expr $i + 1` #Incrementamos contador en 1
-
done
Y finalmente lo añadimos a nuestro cron para que se ejecute periódicamente, por ejemplo:
-
crontab -e
-
-
# m h dom mon dow command
-
00 22 * * * /home/usuario/backup.sh
Le decimos que se ejecute todos los días a las 22h.