Archive for the 'Guias' Category

Primeros pasos con Subversion (Parte II)

Domingo, Diciembre 17th, 2006

En el artículo anterior, vimos como crear un repositorio y cómo añadir nuestro código al mismo. Hoy vamos a continuar con unos pequeños ajustes que nos facilitarán el día a día con Subversion y además, permitiran el acceso a diferentes usuarios al repositorio.

Básicamente estos ajustes consisten en:

  • Crear un grupo para aquellos usuarios que trabajen con SVN
  • Añadir los usuarios al nuevo grupo
  • Modificar los permisos del repositorio

Vamos manos a la obra, desde una terminal tomamos acceso como root:

sudo -s

Una vez conectados como root, creamos un grupo para subversion:

groupadd svn

Después añadimos a este grupo aquellos usuarios de nuestro sistema que vayan a trabajar con Subversion, por ejemplo:

adduser usuario svn

Ahora, cambiamos los permisos del sistema de archivos del repositorio:

(Suponiendo que /var/svn es la ruta donde almacenamos los diferentes repositorios para cada proyecto )

chgrp -R svn /var/svn

chmod -R 0770 /var/svn

chmod g+t /var/svn/proyecto/db

El último paso hay que repetirlo para cada repositorio, (la ruta a db será diferente según el nombre de cada repositorio).

Bien, con estos simples pasos hemos conseguido que cualquier usuario, que no sea root, pueda trabajar con el repositorio, para ello tan sólo habrá que añadirlo al grupo svn. en un próximo artículo veremos como acceder remotamente a nuestro repositorio utilizando  Eclipse.

Primeros pasos con Subversion

Jueves, Diciembre 7th, 2006

En el artículo anterior, vimos como instalar Subversion en un sistema Ubuntu, hoy vamos a ver como realizar las tareas típicas.

Si hemos instalado con éxito SVN, ya podemos empezar a crear repositorios para guardar nuestro bien más valioso: el código fuente.

Desde un terminal, nos cambiamos a modo root:

sudo -s

Creamos un directorio donde posteriormente crearemos los repositorios para nuestros proyectos, esto es más una cuestión de gustos, hay quien prefiere utilizar un único repositorio para después crear subcarpetas para cada proyecto. Personalmente, prefiero generar un repositorio diferente para cada proyecto, veremos más adelante que esto nos ofrece más flexibilidad en según que situaciones.

mkdir /var/svn

Ahora creamos el repositorio para nuestro proyecto:

svnadmin create /var/svn/proyecto

Cambiar proyecto por el nombre de vuestro proyecto. Sugerencia: evitaremos problemas si escribimos el nombre en minúsculas y sin espacios.

Si vamos al directorio del repositorio y hacemos un ls, veremos la estructura de directorios y de archivos generadas por SVN. Es interesante darle un vistazo al fichero README.txt, éste nos avisa que no debemos crear o modificar directamente los archivos del repositorio, para eso ya están las herramientas de SVN.

Bien, ya tenemos el repositorio creado, ahora habrá que crear una estructura de directorios para mantener nuestro código organizado.

Creamos la estructura básica:

  • un directorio trunk donde se almacena la rama de código principal
  • un directorio tags para guardar “fotos” o estados concretos de nuestro proyecto (ideal para marcar versiones de nuestro proyecto)
  • y finalmente, el directorio branches por si queremos trabajar con ramas diferentes del proyecto

Otra vez desde la terminal (introducir la orden en una sola línea):

svn mkdir -m "layout inicial" file:///var/svn/proyecto/trunk file:///var/svn/proyecto/tags file:///var/svn/proyecto/branches

Con esto tenemos ya preparado nuestro repositorio para empezar a añadir código en él. Supongamos que tenemos un directorio (/home/usuario/proyecto) con los archivos de nuestro proyecto que queremos proteger.

El primer paso es importar todo el arbol del proyecto al repositorio:

cd /home/usuario/proyecto
svn import -m "import inicial" . file:///var/svn/proyecto/trunk
Veremos los mensajes del proceso de importación, cuando el proceso termine la importación veremos un mensaje parecido a este:

Commit de la revisión 1.

Ahora ya tenemos nuestro proyecto “guardado” en el repositorio, a partir de este momento debemos descartar la ubicación original del proyecto, en nuestro ejemplo /home/usuario/proyecto, y empezar a trabajar con una “copia de trabajo” del proyecto.

El proceso típico de trabajo se resume de la siguiente forma:

  • Checkout o creación inicial del directorio de trabajo, esto sólo hay que hacerlo una vez
  • Update, actualización de nuestra copia con los cambios que se hayan producido en el repositorio, esto es básico en entornos con más de un desarrollador. Es la manera de actualizar nuestra copia con los cambios realizados por el resto del equipo
  • Commit, guardar nuestros cambios en el repositorio.

Vemos ahora como crear una copia de trabajo a partir de nuestro flamante repositorio:

Salimos del modo root, con exit, ya que nos interesa que los archivos de trabajo se creen con nuestro usuario habitual:


exit
cd /home/usuario
svn co file:///var/svn/proyecto/trunk/ proyecto/

Nos apareceran los mensajes de importación, cuando finalice el proceso, entramos en el directorio de trabajo y veremos los archivos descargados del repositorio. Con esto damos por finalizado esta primera toma de contacto, en un próximo articulo veremos como acceder a nuestro repositorio desde otros pc.

Instalar Subversion en Ubuntu 6.10

Miércoles, Diciembre 6th, 2006

Esta vez toca una mini-mini-guía para instalar el excelente sistema de control de versiones Subversion (AKA SVN) en la última versión de Ubuntu (Edgy Eft).

SVN nació como alternativa a CVS, tomando lo que ya funcionaba y corrigiendo o añadiendo funcionalidades inexistentes. El caso es que, desde que prácticamente casi todas las herramientas de desarrollo más populares incluyen soporte de SVN, este sistema se está convirtiendo rápidamente en la alternativa open source más utilizada en el campo de los sistemas de control de versiones.

Instalar SVN en Ubuntu es muy sencillo:

Abrimos una sesión en el terminal, y nos ponemos en modo root:

sudo -s

Después de introducir la contraseña, ya podemos introducir las ordenes con privilegios de root

Para instalar SVN, tan sólo tenemos que utilizar apt-get:

apt-get install subversion

El sistema apt nos pedirá confirmación y procederá a la instalación de los paquetes correspondientes. Si todo va bien, entonces podemos verificar la instalación, llamando a la utilidad de administración de SVN:

svnadmin help

Si nos aparece la ayuda de línea de comandos de svnadmin, la cosa ha ido bien. En un próximo artículo aprenderemos a crear un repositorio y a empezar a proteger nuestro código.

Instalar DenyHosts en CentOS

Sábado, Febrero 25th, 2006

DenyHosts es un script escrito en Python que monitoriza las entradas del log de conexiones del SSH, /var/log/secure en CentOS, para detectar clientes maliciosos que realizan ataques de fuerza bruta.

Cuando DenyHosts detecta que una IP se estan realizando repetidos intentos de conexión fallidos, añade esta IP al fichero /etc/hosts.deny y de esta forma cortamos de inmediato los intentos de conexión desde la IP maliciosa.

Esta guía toma como base el excelente Howto de Falko Timme publicado en HowtoForge sobre DenyHosts.

Obtener e instalar DenyHosts

Antes de descargar DenyHosts debemos comprobar la versión de Python disponible en el sistema:

python -V

Obtendremos algo parecido a esto:

Python 2.3.4

Después de conocer la versión de Python instalada en nuestro sistema, vamos a descargar el RPM de DenyHosts, el archivo preparado para la versión 2.3 de Python está disponible aquí.

Para descargar directamente el paquete desde nuestro sistema utilizaremos wget:

wget http://mesh.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.1-python2.3.noarch.rpm

Con el paquete descargado, ya podemos instalarlo:

rpm -i DenyHosts-2.1-python2.3.noarch.rpm

Configuración

DenyHosts se instala en /usr/share/denyhosts en este directorio se encuentran los archivos de configuración. Disponemos de un archivo de ejemplo que tomaremos como base para crear la configuración:

cd /usr/share/denyhosts
cp denyhosts.cfg-dist denyhosts.cfg

Editamos el archivo denyhost.cfg con nuestro editor favorito y ajustamos los parámetros necesarios:

SECURE_LOG = /var/log/secure
HOSTS_DENY = /etc/hosts.deny
#
# Este parametro indica el periodo de tiempo (4 semanas) que mantendremos las IPs maliciosas
# en el fichero hosts.deny
PURGE_DENY = 4w
#
# Bloquear todos los servicios a la IP maliciosa
BLOCK_SERVICE = ALL

El resto de parámetros del archivo se pueden dejar con los valores por defecto, si además queremos recibir un mail cada vez que se detecten ataques, debemos especificar una dirección de correo válida en:

ADMIN_EMAIL =

Lo habitual es que utilicemos DenyHosts como servicio, para ello podemos aprovechar el archivo daemon-control-dist:


cp daemon-control-dist daemon-control

Editamos el archivo y revisamos los valores:

DENYHOSTS_BIN = "/usr/bin/denyhosts.py"
DENYHOSTS_LOCK = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG = "/usr/share/denyhosts/denyhosts.cfg"

Despues, nos aseguramos que el archivo sea ejecutable para el usuario root:

chown root daemon-control
chmod 700 daemon-control

Arranque

Ya tenemos lista la configuración, ya podemos arrancar DenyHost:

./daemon-control start

Aunque lo ideal es configurar DenyHosts para que arranque automáticamente, para ello crearemos los enlaces simbólicos necesarios:

cd /etc/init.d
ln -s /usr/share/denyhosts/daemon-control denyhosts
chkconfig --add denyhosts

De este modo tendremos configurado DenyHosts de la siguiente forma:

chkconfig --list denyhosts
denyhosts 0:desactivado 1:desactivado 2:activo 3:activo 4:activo 5:activo 6:desactivado

Con esta sencilla utilidad haremos la vida un poco más difícil a los pesaos de Internet, espero que os sea de utilidad.

HowtoForge - Guías para linux

Sábado, Febrero 25th, 2006

El otro día fui a parar a HowtoForge, un excelente site donde se recopilan HOWTOs (COMOs) sobre linux. La mayoría de artículos son muy prácticos y tocan temas que pueden ayudar al día a día de un administrador Linux.

Eso si la pega, no para todo el mundo, es que los contenidos están en inglés.

Instalar mysql en CentOS

Domingo, Enero 29th, 2006

Siguiendo en la línea de pequeñas guias para poner a punto nuestro servidor casero, hoy le toca a MySQL.

No entraré en detalle sobre las características de MySQL, para eso lo mejor es visitar la web oficial, simplemente comentar que se trata de unos de los motores de bases de datos open source más populares de la actualidad. Es uno de los componentes principales de la plataforma LAMP, así que si queremos montar alguna aplicación PHP, blog, etc. seguro que nos hará falta, así que, sin más dilaciones…

Tomamos como escenario de partida el descrito en el artículo anterior, servidor Linux con CentOS. La versión “oficial” de MySQL en CentOS 4 es la 4.1.12 , no es la última versión (la 5) pero nos sirve para la mayoría de casos, y al tratarse de un paquete oficial en la distribución es más fácil de configurarlo posteriormente, así que ya nos va bien.

La instalación y posterior configuración la realizaremos en modo comando, por tanto nos conectamos a nuestro servidor vía ssh, o bien si hemos abierto una sesión local abrimos una ventana de terminal.

Instalación

Lo primero es ver como se llaman los paquetes a instalar, para ello usaremos up2date:

up2date --whatprovides=mysql

Que nos devuelve:

mysql-4.1.12-3.RHEL4.1

Este paquete proporciona los programas cliente, y a nosotros nos interesa el servidor así que probamos con:

up2date --whatprovides=mysql-server

Que nos muestra:

mysql-server-4.1.12-3.RHEL4.1

Ya tenemos la información que necesitabamos, vamos a instalar el paquete del servidor, y dejaremos que up2date se encargue de resolver las dependencias:

up2date mysql-server

up2date mysql-server

Como vemos en la captura anterior, up2date ya se encarga de descargar e instalar otros paquetes necesarios, ahora sólo tenemos que preocuparnos de los ajustes finales:

Arrancar el servicio

Tecleamos:

service mysqld start

Para arrancar el servicio. Si todo va bien el sistema nos mostrará un OK.

Establecer la contraseña del usuario root

Por defecto, el usuario root no tiene asignada una contraseña y esto no es nada recomendable, así que vamos a establecer una. Utilizamos el comando:

mysqladmin -u root password 'loquesea'

Cambiar ‘loquesea’ por la contraseña que desemos establecer, pero es importante no olvidarse de teclear las comillas simples.

Comprobamos la nueva contraseña abriendo una sesión en mysql:

mysql -u root -p

Nos pedirá la contraseña, la tecleamos, y si todo es correcto entraremos en la interfaz del cliente de MySQL, podemos teclear algún comando de mysql para interactuar con el servidor, por ejemplo:

mysql> show databases;

Nos mostrará las bases de datos que existan en el servidor, normalmente y si acabamos de instalar, aparecerán las bases de datos mysql y test.

Tecleamos exit para salir del programa cliente.

Configurar el servicio

Lo habitual será que cuando arranque o se pare nuestro servidor tambien se inicie o detenga el MySQL, para ello existe una forma muy fácil:

chkconfig --level 35 mysqld on

Esto activa el demonio mysqld en los runlevel 3 y 5, y lo detiene en el resto. Si queremos comprobar el estado del servicio podemos utilizar lo siguiente:

chkconfig --list mysqld

Y con esto finalizamos la instalación de MySQL en nuestro servidor. Espero que esta guía sea de utilidad.

Montar un servidor web casero (Parte y II)

Domingo, Enero 15th, 2006

Ver la primera parte de este artículo.

Bueno, ya tenemos nuestro servidor instalado, y hemos configurado nuestro router para que el “mundo mundial” pueda llegar a nuestra máquina, hemos hecho la parte más difícil, vamos ahora a por unos detalles que nos facilitan la vida:

Servicio DNS dinámico

Es mucho más cómodo encontrar nuestra máquina usando http://miservidor.dominio.com que tener que memorizar una dirección IP, y que además puede cambiar en cualquier momento. Por esto y por si no eres de los pocos afortunados que tienen una dirección IP fija, necesitas los servicios de un DNS dinámico.

Existen varios servicios de este tipo en Internet, uno de los más populares y el que vamos a utilizar en esta guía es dyndns.com. Además de ofrecer otros productos típicos de cualquier ISP, la gente de DynDNS, nos permite disponer gratuitamente de un servicio de DNS dinámico. Para ello, lo primero que tenemos que hacer es registrarnos y crearnos una cuenta, este primer paso es completamente grátis y suficiente para nuestras necesidades.

En el proceso de registro, nos pedirá un nombre de usuario y dirección de correo, es muy importante que facilitemos una dirección de correo válida, porque será en esta dirección donde nos llegarán los avisos de expiración de registro, veremos más adelante que significa esto.

De momento, si ya tenemos nuestro usuario y nos hemos identificado correctamente, debemos ir a My Services:

My Services

Dentro de esta sección administramos los servicios que nos ofrece DynDNS, vamos a la opción en el menú izquierdo My Hosts > Dynamic DNS. Hacemos clic en el enlace Add Host para crear un nombre para nuestro servidor, en este formulario, hay información importante que debemos comentar:

Formulario Add Host

En el campo hostname, introduciremos el nombre que queramos darle a nuestra máquina, hay que tener en cuenta que nuestro nombre de host irá sobre unos dominios de segundo nivel que DynDNS pone a nuestra disposición, por ejemplo: homeip.org, homelinux.net, etc.

Por tanto, escogeremos el dominio que más nos guste del desplegable y pondremos el nombre para nuestra máquina. En el campo IP address aparecerá informada la dirección IP externa con la que estamos saliendo a Internet, la dejamos informada y pulsamos el botón Add Host. Si tenemos suerte y nuestro nombre + dominio escogido no ha sido registrado por alguien antes, ya tendremos creado un nombre de host que direcciona a nuestro servidor de casita. Si el nombre ya existe, paciencia e ir probando combinaciones con otros dominios u otros nombres.

Bueno, pues ya tenemos un nombre para nuestro servidor, ahora para probarlo debemos intentar navegar desde fuera de nuestra LAN, o pedirle a algún coleguilla que intente acceder via http a nuestro host. Si intentamos acceder a nuestro nombre de servidor desde nuestra red privada no podremos llegar al servidor web con la dirección externa, si queremos ver nuestra web debemos utilizar la dirección interna, según nuestro ejemplo 192.168.1.15

Actualizar automáticamente nuestra IP dinámica

Vale, ya tenemos el nombre de servidor y se supone que podemos acceder, ¿Qué pasa si cambia la dirección con la que salimos a internet?
Pues sencillamente que se nos desmonta el invento, a no ser que vayamos de nuevo a nuestro panel de control del DynDNS y actualicemos la IP en nuestro host. Evidentemente, hacer esto manualmente no es la solución, así que recurrimos a la utilidad ddclient.

ddclient es una utilidad escrita en Perl, que nos permite automatizar los cambios de IP en los registros de DynDNS. Podemos configurar ddclient para que periodicamente compruebe si nuestra IP externa ha cambiado y envíe los cambios al servidor de DynDNS.

Afortunadamente, diría que ddclient está disponible para la mayoría de distribuciones de linux, así que sea cual sea nuestra distro, seguro que no tendremos dificultades en localizarlo. En nuestro ejemplo utilizamos un servidor CentOS 4.2 así que buscaremos un rpm para Red Hat Enterprise Linux 4. Lo bajamos de aquí, concretamente nos bajamos la versión 3.6.7 a nuestro servidor web. Desde una consola como usuario root, instalamos ddclient:

rpm -i ddclient-3.6.7-1.2.el4.rf.noarch.rpm

Ahora vamos a configurarlo, editamos el fichero /etc/ddclient/ddclient.conf. El fichero tiene un montón de posibles opciones comentadas, detallo las imprescindibles para que la cosa funcione:


# Muy importante retocar esta variable,
# si chequeamos muy a menudo
# nuestro servidor, la gente de DynDNS
# nos bloqueará el servicio por abusones
# un buen valor es cada hora 60 * 60 = 3600 segundos
daemon=3600
protocol=dyndns2


# Esta opcion obtiene
# automáticamente nuestra ip externa
use=web, web=checkip.dyndns.org


# Estos son los valores utilizados
# en la autenticación
server=members.dyndns.org
login=ponaquituusuariodedyndns
password=pontupassworddedyndns


# A continuación especificamos el nombre
# de nuestro host que hayamos
# registrado en DynDNS
nombredehost.dominio

Guardamos el archivo con nuestros cambios, y configuramos ddclient como daemon para que automáticamente realice las comprobaciones:

chkconfig --level 345 ddclient on

Y arrancamos el servicio:

service ddclient start

Para saber si la cosa ha ido bien, lo más rápido es consultar el log del sistema, si hacemos un:

tail /var/log/messages

Deberiamos ver algo parecido a esto:

Jan 15 19:15:10 hydra ddclient: Iniciación de ddclient succeeded
Jan 15 19:15:12 hydra ddclient[8034]: SUCCESS: updating hydra.dynalias.org: nochg: No update required; unnecessary attempts to change to the current address are considered abusive

Bueno, y con esto damos por finalizamos nuestro briconsejo de hoy. Espero que esta guía sea de vuestra ayuda.

Montar un servidor web casero (Parte I)

Domingo, Enero 15th, 2006

Hoy en día, practicamente cualquiera puede disponer de un alojamiento web de calidad a unos precios muy asequibles. Sin embargo, los ISP en la mayoría de los casos, no permiten instalar cualquier tipo de software, o por ejemplo, en el caso de Java la oferta de proveedores no es muy amplia que digamos.

Ahí es donde podemos sacar partido a nuestra conexión ADSL para montar un servidor en nuestra casa que pueda ser accesible por cualquiera que esté conectado a Internet. Evidentemente, no podremos tener una disponibilidad de servicio de 24×7, pero seguro que nos permitirá hacer nuestros experimentos caseros sin ninguna limitación.

Esta guía no es muy exhaustiva, pero el escenario de partida es bastante habitual:

Esquema de una típica red local casera

Si tienes una conexión a Internet mediante un router ADSL, tu red se parecerá bastante al esquema anterior, y si no has pagado a tu proveedor para tener una IP pública fija, atento a lo que viene a continuación.
Los pasos a seguir en lineas generales se resumen en:

  • Instalar el servidor
  • Configurar NAT en el router
  • Disponer de un servicio de DNS
  • Actualizar automáticamente nuestra dirección externa

En este primer artículo, trataremos brevemente los dos primeros puntos.

Instalar el servidor

No voy a detallar aquí el proceso de intalación de un servidor linux, hay un montón de material disponible en Internet, simplemente detallaré la configuración escogida en mi caso.
Para nuestro servidor casero, hemos instalado un CentOS 4.2 con una configuración de servidor típica. Y hemos desactivando otros servicios innecesarios, por ejemplo la compartición de archivos Windows (servidor SAMBA).
Una vez finalizada la instalación realizamos los típicos ajustes:

  • Actualizar el sistema con up2date -u, ver este artículo anterior
  • Configuramos el firewall de la máquina con system-config-securitylevel, debemos permitir el tráfico en el puerto 80 (http) como mínimo
  • Asignamos una IP fija del rango de nuestra LAN, por ejemplo: 192.168.1.15

Una vez listo esto, comprobamos que la salida a internet desde nuestro servidor es correcta y todo funciona como si se tratara de un cliente normal y corriente. Ahora vamos a por el router.

Configuración del router

Debemos configurar nuestro router para que reenvie el tráfico entrante de un puerto determinado a la dirección interna que nos interese. En pocas palabras, y tomando como ejemplo el esquema de red anterior, si queremos hacer “visible” nuestro servidor web, debemos configurar el router para que el tráfico entrante sobre el puerto 80 (http) sea redirigido o mapeado hacia la IP interna 192.168.1.15

Los pasos a seguir dependerán del modelo de router que tengamos, en Internet existen varios sitios donde poder obtener información detallada. Un buen sitio con muchísima información es: ADSL Ayuda, aquí hay información detallada para la mayoría de modelos de router que se comercializan en España. Por ejemplo, podeis encontrar una explicación más detallada sobre el mapeo de puertos, o una guía para el router que tengo en casa.

Ver la segunda parte de este artículo.