domingo, noviembre 25, 2007

Una centena de entradas

Post número 100. Puede que no os parezcan demasiados pero, sinceramente, nunca pensé que llegaría tan lejos. Retomé esta aventura desde mi traslado a Madrid hace hoy un año y dos meses exactamente y en ningún momento pensé que fuese capaz de mantener ésto activo durante tanto tiempo pero aquí estamos con la intención de seguir dando guerra el mayor tiempo que me sea posible.

En muchas ocasiones me pregunto a mi mismo por qué escribo en el blog y la primera respuesta que me viene a la cabeza es "porque me apetece", ni más ni menos. Escribo acerca de cosas que me parecen interesantes, anécdotas, las cosas de mi vida que se pueden contar, aspectos técnicos, . . . . . no sé, intento catalogarlo con las etiquetas pero la verdad que tampoco me preocupa demasiado; escribo cuando tengo ganas y tiempo sobre los temas que me resultan interesantes.

Analizándolo más en detalle tampoco es que encuentre otras razones con un peso mucho mayor que la descrita en el párrafo anterior, aunque como dicen en Galicia: "habelas, hailas".

El hecho de haberme venido a Madrid y estar completamente solo fue el el principal motivo de que retomase el blog; mi intención era que la gente que había dejado en Asturias no se olvidase de mi por completo con el paso del tiempo y aunque parezca mentira creo que lo estoy consiguiendo. Y la otra parte del blog, la de artículos técnicos (por llamarlos de algún modo), también está íntimamente relacionada conmigo ya que todo ese mundo también forma parte de mi vida (y no soy un friki como Andre dice :) ). Escribo temas relacionados con programación, informática, patrones de diseño, . . . porque me gusta, porque me distrae ,porque me sirve para aprender cosas nuevas, porque puede que a alguien (lo dudo mucho) le pueda servir de ayuda en un determinado momento, . . . . . Por todo ésto y por muchas cosas más creo que voy a seguir en la misma línea.

Aprovechando que estamos de cumpleaños, puesto que el blog cumple 100 entradas y yo un año y dos meses de vida en la capital, creo que es un buen momento para echar la vista atrás y ver en que situación me encuentro.

Hasta el momento la experiencia creo que no puede ser más positiva; desde mi llegada a la ciudad todo el mundo me ha hechado una mano siempre que la he necesitado, he crecido un montón como persona, he conocido a mucha gente interesante, he viajado, he hecho amigos de verdad, . . . . En lo que al tema profesional se refiere he tenido la suerte de coincidir con gente extraordinaria, gente de la que estoy aprendiendo un montón de cosas nuevas y de las que espero seguir aprendiendo con el paso del tiempo; sólo espero haber aportado mi granito de arena para que toda esta aventura llegue a buen puerto.

Éste año ha sido complicado en lo que a trabajo se refiere aunque,en general, creo que las cosas han ido bastante bien. Todo este duro trabajo me ha servido para aprender miles de cosas nuevas o poner a prueba un montonazo de conocimientos e ideas que jamás pensé tendría oportunidad.

¿Y ahora? Pues en primer lugar espero disfrutar de mis vacaciones (tengo un mes :) ): retomar mi proyecto a ver si de nuevo soy capaz a tomarle el pulso, pasar mucho tiempo con alguien a quien por desgracia no puedo ver todo lo que me gustaría, estar con mis padres y mi hermana que ya tengo muchas ganas e intentar desconectar un poco porque creo que lo necesito. A todo ésto hay que sumarle el volver a ver a todos mis amigos y rememorar viejos tiempos jejejejeje.

¿Y para el próximo año? Tras las últimas noticias recibidas y conversaciones con las personas adecuadas creo que tengo más o menos claro mis intenciones tras el regreso de vacaciones. De todos modos, hasta que no me encuentre totalmente seguro prefiero no decir nada.

Hasta pronto!
Un abrazo!

PD: en widget de la derecha de la página (Almacén) he dejado mi clave pública (migue.asc)

sábado, noviembre 24, 2007

Setting up an SVN server (y II)

En el post anterior configuramos nuestro servidor Subversion a través del servidor standalone svnserve. En esta ocasión habilitaremos nuestro servidor svn a través del protocolo WebDAV (una extensión del protocolo http). Vamos allá:

En primer lugar necesitaremos tener instalado en nuestro sistema un servidor http. De sobra es conocido por todos que Apache es el servidor http más extendido con lo que será el que utilicemos en esta sencilla guía (concretamente utilizaremos Apache 2). También es necesario el módulo mod_dav_svn.so. Ejecutamos la siguiente orden en una terminal:
sudo apt-get install apache2 libapache2-svn

Tras esta sencilla orden tendremos en nuestro sistema un servidor http con el soporte necesario para habilitar nuestro servidor subversion. Configuremos ahora nuestro repositorio:

Editamos con nuestro editor favorito el fichero dav_svn.conf (si habeis instalado apache2 con la orden indicada anteriormente lo encontrareis en la ruta /etc/apache2/mods-enabled/dav_svn.conf)
vim /etc/apache2/mods-enabled/dav_svn.conf
Deberemos descomentar una serie de líneas para habilitar y establecer una configuración básica
: vayamos por partes.

En primera instancia habilitaremos el repositorio con lo que descomentaremos las siguientes líneas:
# habilitamos el repositorio
DAV svn
# indicamos la ruta absoluta al mismo
SVNPath ruta_absoluta_repositorio

Configuremos ahora el control de acceso. Dicho control es realizado a tres niveles diferentes:
  1. Autenticación facilitada por Apache.
  2. Directivas "limit" y "limitexcept".
  3. El módulo mod_authz_svn.
En este mini-tutorial habilitaremos una autenticación básica. Soy consciente de que no es demasiado seguro a no ser que se utilice a través de https pero no quiero complicar demasiado esta entrega; en futuras versiones configuraremos los distintos niveles de acceso.

Para llevar a cabo nuestra tarea necesitaremos descomentar las siguientes líneas en el fichero dav_svn.conf:
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
Creamos el fichero /etc/apache2/dav_svn.passwd con los usuarios a los que deseemos permitir el acceso a nuestro repositorio. Actuamos del siguiente modo:
htpasswd -cm /etc/apache2/dav_svn.passwd nombre_usuario
Se nos pedirá una contraseña para el usuario indicado.

En este momento dispondremos de una configuración básica de nuestro servidor svn a través de http. Si queremos comprobar el correcto funcionamiento podemos irnos a nuestro navegador (Firefox por supuesto ;) e intentar acceder al repositorio:
http://maquina/repositorio/
Nos solicitará nuestro usuario y contraseña, y en caso de que las claves introducidas sean correctas, se nos mostrará un listado con todos los proyectos registrados en el repositorio.

Tal y como os contaba en el post anterior establecer una configuración básico no es demasiado complicada. Espero que pueda serviros de utilidad.

Hasta pronto!

PD: en siguientes post cambiaremos un poquito de tema dejando a un lado la configuración de servidores. Hablaremos un poquito de Hibernate y puede que LINQ si tengo tiempo.


martes, noviembre 20, 2007

Setting up an SVN server (over SSL) (I)

Tenía ganas de retomar la parte técnica del blog y aprovechando que estos días he estado instalando Suvbersion y Artifactory (éste aún no lo tengo completamente configurado) he elaborado este mini artículo con los pasos a seguir. En esta primera entrega configuraremos svnserve (modo standalone) y dejaremos para un segundo artículo la posibilidad de que nuestro sistema controlador de versiones esté disponible a través del protocolo WebDAV (una extensión de http). Manos a la obra:

En primer lugar, y tal y como indica el título del post que nos ocupa, estableceremos un servidor SVN a través de una conexión SSL con lo que necesitaremos tener instalados en nuestro sistema dichos componentes. En el caso de mi Ubuntu Feisty podríamos ejecutar el siguiente comando:
sudo apt-get install subversion openssh-server
Tras la ejecución del comando anterior tendremos en nuestro equipo todos los elementos necesarios para realizar una configuración totalmente operativa de nuestro sistema de control de versiones.

A continuación creamos un nuevo grupo (en mi caso lo he llamado svnusers) para facilitar las labores de administración . Todos los usuarios que deseen tener acceso deberan ser miembros del grupo anterior (más adelante veremos el porqué). Además crearemos un nuevo usuario perteneciente al grupo anterior con nombre svnadm. Para llevar a cabo esta tarea ejecutaremos el siguiente conjunto de órdenes:

# creamos el grupo svnusers
addgroup svnusers

# creamos el usuario "test" perteneciente al grupo svnusers
adduser --ingroup svnusers test
Nota: por motivos de seguridad es una buena práctica que el usuario root no pueda realizar login a través de una conexión de ssh. Asimismo ninguno de los usuarios pertenecientes al grupo svnusers debería ser capaz de "hacer su hacia root".

Llegados a este punto necesitamos que los usuarios del grupo svnusers no inhabiliten, en el momento en que establecen una conexión a través del tunel ssh,los permisos establecidos a nivel de grupo; para ello establecemos la máscara al valor 002. Una manera sencilla de hacer ésto es editar el fichero .bashrc de cada uno de los usuarios pertenecientes al grupo svnsusers y añadir la siguiente línea:

# permitimos lectura/escritura al usuario y al grupo pero no al resto
umask 002
Reptimos los dos últimos pasos descritos anteriormente y creamos el usuario svnadm.

Nos logueamos como usuario root, en caso de que no lo estuviéramos, y creamos una ruta en nuestro sistema de archivos para contener nuestros repositorios. Suponiedo que path_to_repository contiene una ruta válida dentro de nuestro sistema de archivos podríamos ejecutar la siguiente orden:
mkdir -p path_to_repository
Además restringimos el acceso a los repositorios al root y los usuarios pertenecientes al grupo svnusers
chown -R root.svnusers path_to_repository
chmod -R u+wxr,+gwxr,o-wxr path_to_repository
El paso que a continuación se indica (lo encontré en una mini guía buscando cosas relativas a la seguridad) pretende "esconder" la ruta raíz del servidor donde estamos almacenando todos nuestros repositorios. Para ello sustituiremos nuestro ejecutable svnserve del modo que a continuación se indica:

Renombramos el comando svnserve (en mi caso lo tengo disponible en /usr/bin/) con el nombre svnserve.bin
mv /usr/bin/svnserve /usr/bin/svnserve.bin
Creamos un nuevo fichero /usr/bin/svnserve que contendrá el siguiente código:
#!/bin/sh
# wrap in order to put root in by default
# Script implemented by Adrian Robert <arobert@cogsci.ucsd.edu>

exec /usr/bin/svnserve.bin -r /path/to/repository/root "$@"
El fichero recién creado podrá ser ejecutado y leído por todo el mundo
chmod u+wrx,g+rx-w,o+xr-w /usr/bin/svnserve

Un vez llegados a este punto estamos en disposición de crear un nuevo proyecto en nuestro repositorio. Nos logueamos como usuario svnadm e introducimos la siguiente orden en una terminal:
svnadmin create path_to_repository/nombre_proyecto
No permitimos el acceso a ningún usuario no perteneciente al grupo svnusers (a excepción del root claro está)
chmod -R o-rwx path_to_repository/nombre_proyecto
Editamos el fichero de configuración del proyecto recientemente creado para no permitir accesos anónimos (sólo aquellos autenticados a través de ssh) y además permitimos la escritura (una vez autenticados). Esto se consigue editando el fichero svnserve.conf de un modo similar al que a continuación se indica:
# abrimos el fichero de configuración de nuestro nuevo proyecto
vi path_to_repository/nombre_proyecto/conf/svnserve.conf

# no se permite el acceso anónimo y si la escritura para usuarios autenticados
[general]
anon-access = none
auth-access = write

Para testear que todo marcha correctamente ejecutamos al siguiente orden:
svn list svn+ssh://@localhost/nombre_proyecto
Se nos pedirá un nombre y un password y en caso de que los datos introducidos sean correctos seremos devueltos al prompt donde tecleamos la orden (el proyecto que hemos creado unos pasos más arriba no contiene ningún tipo de información). Con ésto nos aseguramos que el servidor ssh está funcionando correctamente así como el tunel hacia el svnserve.

En este mismo instante dispondríamos de un repositorio Subversion totalmente funcional aunque cada vez que realizásemos una operación se nos pediría que introdujésemos nuestro usuario y contraseña correspondientes. Con el objetivo de evitarnos este pequeño incordio generaremos un par de claves públicas/privadas.
A continuación, y de manera rápida, se indica el modo en que llevaríamos a cabo esta tarea:
# generamos nuestro par de claves
ssh-keygen -t dsa

# copiamos nuestra clave pública a las claves autorizadas
cd $HOME/.ssh/
cp id_rsa.pub authorized_keys

# permisos adecuados
chmod 0700
$HOME/.ssh/
chmod 0600
$HOME/.ssh/authorized_keys
Esto ha sido todo. Como veis son un conjunto sencillo de pasos gracias a los cuales establecemos una configuración básica de un repositorio subversion a través de una conexión segura.

En el siguiente capítulo haremos que nuestro repositorio se encuentre accesible a través del protocolo WebDAV; (mucho más sencillo que ésto :) )

Espero que os haya gustado y que os sirva de ayuda.

Hasta pronto!

domingo, noviembre 11, 2007

El trabajo(I)

Últimamente el trabajo, ¿que otra cosa podría ser sino?, me impide actualizar con la frecuencia que me gustaría; además siempre he tenido la intención de continuar con los post acerca de programación que hace un tiempo comenzé pero, sinceramente, paso demasiado tiempo inmerso en el trabajo y apenas me queda tiempo para nada más. El problema es que el proyecto actual parece no tener fin, cada dos por tres aparecen cosas nuevas (supuestamente se habían dicho en el inicio del proyecto con lo que me lo tendré que creer porque yo no estaba). Todo ésto implica que en este último mes y medio las jornadas "largas" (por llamarlas de alguna manera) se hayan convertido en una tónica habitual. Entonces me surge la duda de si es que realmente tengo demasiado trabajo o es que soy un completo inútil (más bien apuesto por lo segundo). Bueno, que tampoco me quiero extender demasiado que tengo que terminar unas cosas que debemos entregar mañana y todavía me quedan bastantes cosas por terminar.

Espero que el proyecto actual no se prolongue demasiado y pueda dedicar mucho más tiempo a mi proyecto, a escribir más por aquí (pretendo retomar con ganas la parte técnica del blog) y dedicar más tiempo a las cosas con las que realmente me entretengo.

Seguireis teniendo noticias mías.

Un abrazo!
Migue!