<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>igayoso's life</title>
	<atom:link href="http://blog.igayoso.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.igayoso.net</link>
	<description>Mi vida plasmada en un blog</description>
	<lastBuildDate>Fri, 25 Sep 2009 15:08:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Presentación y primer producto en venta en BidoBido.com: compra, venta y envío seguro</title>
		<link>http://blog.igayoso.net/presentacion-y-primer-producto-en-venta-en-bidobido-com-compra-venta-y-envio-seguro/</link>
		<comments>http://blog.igayoso.net/presentacion-y-primer-producto-en-venta-en-bidobido-com-compra-venta-y-envio-seguro/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 15:08:30 +0000</pubDate>
		<dc:creator>igayoso</dc:creator>
				<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[BidoBido.com]]></category>
		<category><![CDATA[bitacoras.com]]></category>
		<category><![CDATA[compra]]></category>
		<category><![CDATA[discoazul]]></category>
		<category><![CDATA[envío-seguro]]></category>
		<category><![CDATA[jacobo-lazare]]></category>
		<category><![CDATA[r0sk]]></category>
		<category><![CDATA[sorteo]]></category>
		<category><![CDATA[venta]]></category>

		<guid isPermaLink="false">http://blog.igayoso.net/?p=177</guid>
		<description><![CDATA[
Aunque llevaba una temporada siguiendo las andanzas de este nuevo proyecto español venido desde Galicia, el otro día me decidí a probarlo un poco más y poner un artículo en venta, que tenía por aquí en un cajón y que nunca llegué a usar, ni usaré. BidoBido.com fue fundado por Jacobo Lazare, creador de discoazul [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://blog.igayoso.net/wp-content/uploads/2009/09/bidobido.com-logo.png" rel="lightbox[177]"><img class="size-medium wp-image-180 aligncenter" title="bidobido.com-logo" src="http://blog.igayoso.net/wp-content/uploads/2009/09/bidobido.com-logo-300x75.png" alt="bidobido.com-logo" width="300" height="75" /></a></p>
<p>Aunque llevaba una temporada siguiendo las andanzas de este nuevo proyecto español venido desde Galicia, el otro día me decidí a probarlo un poco más y poner un artículo en venta, que tenía por aquí en un cajón y que nunca llegué a usar, ni usaré. <a title="BidoBido.com WEB" href="http://www.bidobido.com">BidoBido.com</a> fue fundado por <a title="Lazare's WEB" href="http://www.lazare.es" target="_blank">Jacobo Lazare</a>, creador de <a title="DiscoAzul WEB" href="http://discoazul.com" target="_blank">discoazul</a> y también conozco a unos de los programadores (<a title="r0sk's WEB" href="http://www.userlinux.net" target="_blank">r0sk</a>) así que seguro que le espera un futuro muy bueno.</p>
<p>Explicando a groso modo, <a title="BidoBido.com WEB" href="http://www.bidobido.com/">BidoBido.com</a> es una página de compra-venta y que también por otra parte se dedica al mundo de los envíos. El mayor factor de éxito y a mi parecer, es por una parte el precio tan competitivo que tienen a la hora de hacer envíos, ya que si el paquete no es muy grande, nos puede salir por unos 5 € envíos a toda la península y en menos de 48 h. Luego otro caso de éxito es que por una parte facilita al vendedor, ya que no tendrá que pagar gastos a parte como de envío, ya que esto irá directamente al comprador, que la ventaja de éste será que su dinero estará a salvo hasta que se compruebe que el vendedor es seguro, que el pago y la recepción se hicieron correctamente, de este modo nunca habrá pérdidas de dinero o estafas como en otros sitios.</p>
<p>También tienen implantado un sistema de pagos, que no hace falta hacer ningún tipo de tarjeta de crédito, para esa gente que aún le da miedo meter sus datos en Internet. Para ello usan un sistema de recargas, como si fuera un móvil que directamente se carga en tu monedero, dentro de tu cuenta de <a title="BidoBido.com WEB" href="http://www.bidobido.com/">BidoBido.com</a>.</p>
<p>De momento, aunque como según ellos dicen tienen pocos artículos (más de 50 000), creo que como siga creciendo exponencialmente y con la gran ayuda tanto a compradores como a vendedores, puede llegar a ser un gran proyecto.</p>
<p>Registrarse y poner un artículo es infinitamente fácil, ya que lo haces en nada de tiempo y si tienes algún problema tienes la <a title="BidoBido.com Atención al cliente" href="http://www.bidobido.com/_img/tlf-bidobido.png" target="_blank" rel="lightbox[177]">atención al cliente</a>, los<a title="BidoBido.com FAQs" href="http://www.bidobido.com/preguntas-frecuentes_mefq.html" target="_blank"> FAQs</a> o los <a title="BidoBido.com vídeo tutoriales" href="http://www.bidobido.com/como-funciona_mecf.html" target="_blank">vídeo tutoriales</a> con <a title="Rudy Fernández Wikipedia" href="http://es.wikipedia.org/wiki/Rudy_Fernández" target="_blank">Rudy Fernández</a>, para que veáis que artículo puse, aquí tenéis el link:</p>
<p><a title="Mi artículo en BidoBido.com" href="http://www.bidobido.com/_prdt51761.html" target="_blank">PS Smart Notebook &#8211; PowerSafer</a></p>
<p>A parte, al registrarte te dan 5 € de crédito y por cada referido que traigas y se registre y haga alguna compra o venta, ganarás 1 €. Aquí tenéis mi link para registraros como referidos mío:</p>
<p><a title="Mis referidos en BidoBido.com" href="http://www.bidobido.com/_cuaf71d4fbd6e3ed1fc22f46f0527f42d24d.html" target="_blank">Regístrate en BidoBido.com</a></p>
<p><a title="Promoción Bitacoras.com y BidoBido.com" href="http://bitacoras.com/concurso/bidobido" target="_blank">Y también podéis entrar en el sorteo que han hecho entre Bitacoras.com y BidoBido.com de unas consolas.</a></p>
<p>¡Mucha suerte con el proyecto!</p>
<div id="crp_related"><h3>Post relacionados:</h3><ul><li><a href="http://blog.igayoso.net/espichatweet-asturias/" rel="bookmark">#espicha&tweet, Asturias</a></li><li><a href="http://blog.igayoso.net/abre-la-puerta-al-gato-y-ponlo-en-twitter/" rel="bookmark">Abre la puerta al gato y ponlo en twitter</a></li><li><a href="http://blog.igayoso.net/he-vuelto/" rel="bookmark">He vuelto</a></li><li><a href="http://blog.igayoso.net/un-water-twitteador/" rel="bookmark">Un water twitteador</a></li><li><a href="http://blog.igayoso.net/bebe-que-twittea-antes-de-nacer-kickbee/" rel="bookmark">Bebe que twittea antes de nacer - kickbee</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.igayoso.net/presentacion-y-primer-producto-en-venta-en-bidobido-com-compra-venta-y-envio-seguro/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Compilar, empaquetar e instalar un kernel en debian</title>
		<link>http://blog.igayoso.net/compilar-empaquetar-e-instalar-un-kernel-en-debian/</link>
		<comments>http://blog.igayoso.net/compilar-empaquetar-e-instalar-un-kernel-en-debian/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 09:08:21 +0000</pubDate>
		<dc:creator>igayoso</dc:creator>
				<category><![CDATA[Técnico]]></category>
		<category><![CDATA[.deb]]></category>
		<category><![CDATA[compilación]]></category>
		<category><![CDATA[compile-kernel]]></category>
		<category><![CDATA[empaquetar-kernel]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://blog.igayoso.net/?p=172</guid>
		<description><![CDATA[Este mini-HOW-TO de cosecha propia (aunque de algún sitio sacaría alguna cosa), sirve para compilar un kernel que queramos, crear un paquete .deb para que pueda instalarse desde debian o similares. Estos son los pasos con su explicación:
Instalar paquetes necesarios:
$ apt-get install kernel-package quilt autoconf automake libtool libncurses5-dev pkg-config checkinstall build-essential module-assistant
Bajar el kernel y [...]]]></description>
			<content:encoded><![CDATA[<p>Este mini-HOW-TO de cosecha propia (aunque de algún sitio sacaría alguna cosa), sirve para compilar un kernel que queramos, crear un paquete .deb para que pueda instalarse desde debian o similares. Estos son los pasos con su explicación:</p>
<p>Instalar paquetes necesarios:<br />
$ apt-get install kernel-package quilt autoconf automake libtool libncurses5-dev pkg-config checkinstall build-essential module-assistant</p>
<p>Bajar el kernel y descomprimirlo:<br />
$ cd /usr/src<br />
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.1.tar.bz2<br />
$ tar -jvxf linux-2.6.30.1.tar.bz2</p>
<p>Configurar las opciones del nuevo kernel:<br />
$ mv linux-2.6.30.1 linux<br />
$ make menuconfig</p>
<p>Coger las opciones anteriores del kernel:<br />
$ cp /boot/config-`uname -r` .config</p>
<p>Compilamos el kernel y creamo los .deb:<br />
$ make-kpkg clean<br />
$ make-kpkg &#8211;append-to-version=-compiled_kernel &#8211;initrd kernel-image kernel-headers kernel-source</p>
<p>Instalamos los .deb<br />
$ dpkg -i *.deb</p>
<p>Acordaos de cambiar las cosas que veáis oportunas a vuestro parecer, como el nombre del kernel, la versión, etc&#8230; También tener en cuenta de que si configurais los módulos del kernel a mano, no copies la configuración anterior (a no ser que sea la misma) ya que si no, la sobrescribiría <img src='http://blog.igayoso.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="crp_related"><h3>Post relacionados:</h3><ul><li><a href="http://blog.igayoso.net/porque-no-usaria-centreon/" rel="bookmark">Por que no usaría Centreon</a></li><li><a href="http://blog.igayoso.net/20-sistemas-de-monitorizacion-que-todo-sysadmin-deberia-conocer/" rel="bookmark">20 sistemas de monitorización que todo sysadmin debería conocer</a></li><li><a href="http://blog.igayoso.net/configuracion-y-primeros-pasos-con-subversion-svn/" rel="bookmark">Configuración y primeros pasos con subversion (svn)</a></li><li><a href="http://blog.igayoso.net/he-vuelto/" rel="bookmark">He vuelto</a></li><li><a href="http://blog.igayoso.net/instalar-yo-renovar-certificado-de-ipsca-en-apache2-y-courier/" rel="bookmark">Instalar y/o renovar certificado de ipsCA en Apache2 y courier</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.igayoso.net/compilar-empaquetar-e-instalar-un-kernel-en-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[*nix] Alerta cuando el disco se llene</title>
		<link>http://blog.igayoso.net/nix-alerta-cuando-el-disco-se-llene/</link>
		<comments>http://blog.igayoso.net/nix-alerta-cuando-el-disco-se-llene/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 09:45:03 +0000</pubDate>
		<dc:creator>igayoso</dc:creator>
				<category><![CDATA[Técnico]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[disco-lleno]]></category>
		<category><![CDATA[disk-full]]></category>
		<category><![CDATA[espacio-disco]]></category>
		<category><![CDATA[free-space]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://blog.igayoso.net/?p=168</guid>
		<description><![CDATA[Vía Cyberciti veo este maravilloso script y comando para monitorizar el espacio en disco disponible de una partición en un sistema *nix (Linux, Mac OS X&#8230;). Esto siempre se podría hacer usando un sistema de monitorización como Icinga/Nagios, pero este es un simple script que se podría meter en cualquier máquina sin ningún tipo de [...]]]></description>
			<content:encoded><![CDATA[<p>Vía <a title="Cyberciti's WEB" href="http://www.cyberciti.biz/" target="_blank">Cyberciti</a> veo este maravilloso script y comando para monitorizar el espacio en disco disponible de una partición en un sistema *nix (Linux, Mac OS X&#8230;). Esto siempre se podría hacer usando un sistema de monitorización como <a title="Icinga WEB" href="http://www.icinga.org" target="_blank">Icinga</a>/<a title="Nagios' WEB" href="http://www.nagios.org/" target="_blank">Nagios</a>, pero este es un simple script que se podría meter en cualquier máquina sin ningún tipo de configuración previa o instalación de paquetes adicional.</p>
<p>$ df -P / | grep / | awk &#8216;{ print $5}&#8217; | sed &#8217;s/%//g&#8217;</p>
<p>67</p>
<p>Script que manda un correo cuando supera el 90% de ocupación, lógicamente hay que meterlo en el cron y que haga la comprobación cuando creas necesario:</p>
<p>#!/bin/bash<br />
# Tested Under FreeBSD and OS X</p>
<p>FS=&#8221;/&#8221;<br />
THRESHOLD=90<br />
OUTPUT=($(LC_ALL=C df -P ${FS}))<br />
CURRENT=$(echo ${OUTPUT[11]} | sed &#8217;s/%//&#8217;)<br />
[ $CURRENT -gt $THRESHOLD ] &amp;&amp; echo &#8220;$FS file system usage $CURRENT&#8221; | mail -s &#8220;$FS file system&#8221; you@example.com</p>
<p>Notificación GUI usando zenity y Gnome (también hay que meterlo en cron):</p>
<p>#!/bin/bash<br />
# Tested Under FreeBSD and OS X<br />
FS=&#8221;/&#8221;<br />
THRESHOLD=90<br />
OUTPUT=($(LC_ALL=C df -P ${FS}))<br />
CURRENT=$(echo ${OUTPUT[11]} | sed &#8217;s/%//&#8217;)<br />
[ $CURRENT -gt $THRESHOLD ] &amp;&amp; /usr/bin/zenity  &#8211;warning  &#8211;text=&#8221;The disk $FS ($CURRENT% used) is almost full. Delete some files or add a new disk.&#8221; &#8211;title=&#8221;df Warning&#8221;</p>
<div id="crp_related"><h3>Post relacionados:</h3><ul><li><a href="http://blog.igayoso.net/porque-no-usaria-centreon/" rel="bookmark">Por que no usaría Centreon</a></li><li><a href="http://blog.igayoso.net/20-sistemas-de-monitorizacion-que-todo-sysadmin-deberia-conocer/" rel="bookmark">20 sistemas de monitorización que todo sysadmin debería conocer</a></li><li><a href="http://blog.igayoso.net/imprimir-una-secuencia-de-numeros-o-letras-en-bash/" rel="bookmark">Imprimir una secuencia de números o letras en bash</a></li><li><a href="http://blog.igayoso.net/configuracion-y-primeros-pasos-con-subversion-svn/" rel="bookmark">Configuración y primeros pasos con subversion (svn)</a></li><li><a href="http://blog.igayoso.net/3-alternativas-para-ver-la-ip-externa-desde-consola/" rel="bookmark">3 alternativas para ver la IP externa desde consola</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.igayoso.net/nix-alerta-cuando-el-disco-se-llene/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Imprimir una secuencia de números o letras en bash</title>
		<link>http://blog.igayoso.net/imprimir-una-secuencia-de-numeros-o-letras-en-bash/</link>
		<comments>http://blog.igayoso.net/imprimir-una-secuencia-de-numeros-o-letras-en-bash/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 09:34:21 +0000</pubDate>
		<dc:creator>igayoso</dc:creator>
				<category><![CDATA[Técnico]]></category>
		<category><![CDATA[echo]]></category>
		<category><![CDATA[secuencia-de-letras]]></category>
		<category><![CDATA[secuencia-de-numeros]]></category>
		<category><![CDATA[seq]]></category>

		<guid isPermaLink="false">http://blog.igayoso.net/?p=165</guid>
		<description><![CDATA[Vía MG`s notes vero unas cuantas alternativas para hacer secuencias de números o letras en bash. Yo lo uso mucho para renombrar ficheros de imágenes por ejemplo o cuando tienes los servidores numerados:
$ seq 1 3
1
2
3
$ seq -s : 1 10
1:2:3:4:5:6:7:8:9:10
$ seq -s : 0 2 10
0:2:4:6:8:10
$ echo {1..10}
1 2 3 4 5 6 7 [...]]]></description>
			<content:encoded><![CDATA[<p>Vía <a title="MG`s Notes" href="http://mugurel.sumanariu.ro/" target="_blank">MG`s notes</a> vero unas cuantas alternativas para hacer secuencias de números o letras en bash. Yo lo uso mucho para renombrar ficheros de imágenes por ejemplo o cuando tienes los servidores numerados:</p>
<p>$ seq 1 3</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>$ seq -s : 1 10</p>
<p>1:2:3:4:5:6:7:8:9:10</p>
<p>$ seq -s : 0 2 10</p>
<p>0:2:4:6:8:10</p>
<p>$ echo {1..10}</p>
<p>1 2 3 4 5 6 7 8 9 10</p>
<p>$ echo {a..z}</p>
<p>a b c d e f g h i j k l m n o p q r s t u v w x y z</p>
<p>Ejemplo de uso:</p>
<p>$ mkdir -p test/{1..5}/{1..5}</p>
<div id="crp_related"><h3>Post relacionados:</h3><ul><li><a href="http://blog.igayoso.net/nix-alerta-cuando-el-disco-se-llene/" rel="bookmark">[*nix] Alerta cuando el disco se llene</a></li><li><a href="http://blog.igayoso.net/3-alternativas-para-ver-la-ip-externa-desde-consola/" rel="bookmark">3 alternativas para ver la IP externa desde consola</a></li><li><a href="http://blog.igayoso.net/script-para-bajar-todas-las-canciones-de-ultrastar-es-org/" rel="bookmark">Script para bajar todas las canciones de ultrastar-es.org</a></li><li><a href="http://blog.igayoso.net/porque-no-usaria-centreon/" rel="bookmark">Por que no usaría Centreon</a></li><li><a href="http://blog.igayoso.net/configuracion-y-primeros-pasos-con-subversion-svn/" rel="bookmark">Configuración y primeros pasos con subversion (svn)</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.igayoso.net/imprimir-una-secuencia-de-numeros-o-letras-en-bash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>3 alternativas para ver la IP externa desde consola</title>
		<link>http://blog.igayoso.net/3-alternativas-para-ver-la-ip-externa-desde-consola/</link>
		<comments>http://blog.igayoso.net/3-alternativas-para-ver-la-ip-externa-desde-consola/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 11:28:23 +0000</pubDate>
		<dc:creator>igayoso</dc:creator>
				<category><![CDATA[Técnico]]></category>
		<category><![CDATA[commandlinefu.com]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[ip-externa]]></category>
		<category><![CDATA[return-external-ip]]></category>
		<category><![CDATA[saber-ip]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://blog.igayoso.net/?p=162</guid>
		<description><![CDATA[Vía commandlinefu.com veo estas tres alternativas para ver la IP externa desde consola, que yo siempre acabo instalando linx  
$ curl -s &#8216;http://checkip.dyndns.org&#8217; &#124; sed &#8217;s/.*Current IP Address: \([0-9\.]*\).*/\1/g&#8217;
$ wget -O &#8211; -q icanhazip.com
$ curl icanhazip.com
Espero que os sirva para futuras veces.
Post relacionados:Imprimir una secuencia de números o letras en bashScript para bajar todas [...]]]></description>
			<content:encoded><![CDATA[<p>Vía <a title="commandlinefu WEB" href="http://commandlinefu.com" target="_blank">commandlinefu.com</a> veo estas tres alternativas para ver la IP externa desde consola, que yo siempre acabo instalando linx <img src='http://blog.igayoso.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>$ curl -s &#8216;http://checkip.dyndns.org&#8217; | sed &#8217;s/.*Current IP Address: \([0-9\.]*\).*/\1/g&#8217;</p>
<p>$ wget -O &#8211; -q icanhazip.com</p>
<p>$ curl icanhazip.com</p>
<p>Espero que os sirva para futuras veces.</p>
<div id="crp_related"><h3>Post relacionados:</h3><ul><li><a href="http://blog.igayoso.net/imprimir-una-secuencia-de-numeros-o-letras-en-bash/" rel="bookmark">Imprimir una secuencia de números o letras en bash</a></li><li><a href="http://blog.igayoso.net/script-para-bajar-todas-las-canciones-de-ultrastar-es-org/" rel="bookmark">Script para bajar todas las canciones de ultrastar-es.org</a></li><li><a href="http://blog.igayoso.net/screencast-1-iniciacion-wordpress/" rel="bookmark">Screencast #1: Iniciación Wordpress</a></li><li><a href="http://blog.igayoso.net/nix-alerta-cuando-el-disco-se-llene/" rel="bookmark">[*nix] Alerta cuando el disco se llene</a></li><li><a href="http://blog.igayoso.net/he-vuelto/" rel="bookmark">He vuelto</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.igayoso.net/3-alternativas-para-ver-la-ip-externa-desde-consola/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Script para bajar todas las canciones de ultrastar-es.org</title>
		<link>http://blog.igayoso.net/script-para-bajar-todas-las-canciones-de-ultrastar-es-org/</link>
		<comments>http://blog.igayoso.net/script-para-bajar-todas-las-canciones-de-ultrastar-es-org/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 09:33:29 +0000</pubDate>
		<dc:creator>igayoso</dc:creator>
				<category><![CDATA[Técnico]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[canciones]]></category>
		<category><![CDATA[descargar]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[jdownloader]]></category>
		<category><![CDATA[manual]]></category>
		<category><![CDATA[mediafire]]></category>
		<category><![CDATA[plowshare]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[songs]]></category>
		<category><![CDATA[tucan]]></category>
		<category><![CDATA[ultrastar]]></category>
		<category><![CDATA[ustar]]></category>
		<category><![CDATA[ustar-es]]></category>

		<guid isPermaLink="false">http://blog.igayoso.net/?p=154</guid>
		<description><![CDATA[Debido a la aventura que me ha sido encomendada para la despedida de Coto a.k.a. &#8220;Despedida Legendaria&#8220;, he tenido que bajarme todas las canciones del karaoke libre llamado UltraStar, que hay en la WEB de ustar-es.
Como tenían varias formas de evitar que puedas descargar de forma automática todos estos ficheros, que a su vez están [...]]]></description>
			<content:encoded><![CDATA[<p>Debido a la <strong>aventura</strong> que me ha sido encomendada para la <strong>despedida de Coto </strong>a.k.a. &#8220;<a title="Post legendario" href="http://blog.igayoso.net/legendario/" target="_self">Despedida Legendaria</a>&#8220;, he tenido que <strong>bajarme</strong> todas las <strong>canciones</strong> del <strong>karaoke</strong> libre llamado <a title="WEB de UltraStar" href="http://sourceforge.net/projects/ultrastar/" target="_blank">UltraStar</a>, que hay en la <strong>WEB</strong> de <a title="WEB de UltraStar en Español" href="http://ultrastar-es.org" target="_blank">ustar-es</a>.</p>
<p>Como tenían varias formas de <strong>evitar</strong> que puedas descargar de <strong>forma automática</strong> todos estos ficheros, que a su vez están <em>hosteados</em> en <a title="WEB de MediaFire" href="http://mediafire.com" target="_blank">MediaFire</a>, he tenido que tirar de<em> curl</em> y <em>parsear</em> un montón para llegar a hacer la <strong>lista de descargas</strong>, aquí os dejo el <em>script</em> hecho en <em>bash</em>, también la lista para ejecutarlo y por último la <em>app</em> que he usado para <strong>descargar</strong> de <em>MediaFire</em>.</p>
<p>cookie=&#8221;./cookie&#8221; #Creamos una cookie para que podamos loguearnos en la WEB<br />
useragent=&#8217;Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; es-ES; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2&#8242; #Falseamos un UA y que no de mucho cante en los LOGs de la WEB<br />
sid=`awk &#8216;/sid/ { print $7}&#8217; $cookie` #Necesitamos un id que se crea con la cookie para seguir los enlaces a la descarga<br />
canciones=&#8221;$1&#8243; #Cogemos por parámetro la WEB de las canciones, en este caso será por letra y página<br />
user=&#8221;usuario_de_la_web&#8221; #Tendremos que tener un usuario/contraseña válido para hacer login<br />
passwd=&#8221;passwd_del_user&#8221;</p>
<p>echo &#8220;Haciendo Login&#8230;&#8221;<br />
#Con esta línea, lo que hacemos con curl es loguearnos en la WEB, que en realidad corre un foro phpBB por debajo (si no me equivoco), para ellos curl creará una cookie y cogerá las variables que hemos declarado arriba para el UA, user y password. El redirect da igual, porque en realidad no lo hará, únicamente es para crear la cookie con el login correcto<br />
curl http://ultrastar-es.org/foro/ucp.php?mode=login -d login=Identificarse -d password=$passwd -d redirect=..//canciones.php?letra=A -d username=$user -A &#8220;$useragent&#8221; -b ${cookie} -c ${cookie} &#8211;silent</p>
<p>echo &#8220;Pillando todas las caciones..&#8221;<br />
#Con el primer bucle, saco los IDs de las canciones, para luego seguir el link y que me lleve al link final de MediaFire. Para ello, uso la cookie creada anteriormente y el UA. Parseo el código de la WEB para únicamente sacar el ID<br />
for ncancion in `curl $canciones -b ${cookie} -c ${cookie} -A &#8220;$useragent&#8221; | awk &#8216;/amp;id/ { print }&#8217; | awk &#8216;{ FS=&#8221;amp;id=&#8221;; RS=&#8221;\&#8221; title=&#8221;;  print $2 }&#8217; | grep -ve ^$`<br />
do<br />
#Por último, sacando los IDs de cada canción, lo que hago es seguir el link de la WEB y que me lleve a la página de descarga de MediaFire para poder parseala. Una vez parseada, saco únicamente el link y lo meto dentro de un fichero llamado listado.txt, con él ya podré descargar todos los ficheros.<br />
`curl -L -A &#8220;$useragent&#8221; -b ${cookie} -c ${cookie} &#8220;http://ultrastar-es.org/canciones.php?op=descargar&amp;id=$ncancion&amp;sid=$sid&#8221; | awk &#8216;FS=&#8221;&amp;quot;&#8221; { print $2 };&#8217; | grep -ve ^$  &gt;&gt; ./listado.txt `<br />
done</p>
<p>Ahora ya tentemos un <strong>fichero</strong> de texto llamado <em>listado.txt</em>, que contendrá todos los <em>links</em> de <strong>descaga</strong> de <em>MediaFire</em>. Lo que haremos ahora será usar algún <strong>programa</strong> que <strong>automatice</strong> el proceso de <strong>descarga</strong>, ya que si no tendríamos que hacerlo a mano<strong> uno por uno</strong> y no valdría para nada este <em>script</em>.</p>
<p>Después de <strong>probar</strong> <strong><a title="WEB de JDownloader" href="http://jdownloader.org/" target="_blank">JDownloader</a></strong> y no poder hacer nada porque no funcionaba muy bien el tema del <em>captcha</em>, aunque es un <em>bug</em> conocido y están reparándolo, encontré <strong><a title="WEB de Tucan" href="http://tucaneando.com/" target="_blank">Tucan</a></strong>, un proyecto español y muy <em>alpha</em>, que esta vez el error estaba a la hora de crear carpetas, que en las que incluía <em>&#8216;/&#8217;</em> daba error y cerraba el programa (he creado <a title="WEB del Bug de Tucan" href="http://urlcorta.es/60z" target="_blank">una entrada</a> en su bugtrack). Finalmente encontré <strong><a title="WEB de plowshare" href="http://code.google.com/p/plowshare/" target="_blank">plowshare</a></strong>, otro proyecto libre y español que lo hace todo desde la <strong>consola</strong>, así que finalmente me decanté por él.</p>
<p>Para <strong>instalarlo</strong>, tenéis que seguir la <a title="WEB de instalación y uso de Tucan" href="http://doc.tucaneando.com/readme.html#instalaci-n-y-uso" target="_blank">instrucciones</a> de su <strong>WEB</strong> y con el listado ya creado, ejecutar:</p>
<p>plowdown listado.txt</p>
<p>Tardará lo suyo, porque <em>MediaFire</em> limita mucho el<strong> ancho de banda</strong>, así que paciencia <img src='http://blog.igayoso.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Si tenéis alguna duda, poneros en <a title="Contacta conmigo" href="http://blog.igayoso.net/contacto/" target="_self">contacto</a> conmigo <img src='http://blog.igayoso.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="crp_related"><h3>Post relacionados:</h3><ul><li><a href="http://blog.igayoso.net/bebe-que-twittea-antes-de-nacer-kickbee/" rel="bookmark">Bebe que twittea antes de nacer - kickbee</a></li><li><a href="http://blog.igayoso.net/legendario/" rel="bookmark">Legendario</a></li><li><a href="http://blog.igayoso.net/screencast-1-iniciacion-wordpress/" rel="bookmark">Screencast #1: Iniciación Wordpress</a></li><li><a href="http://blog.igayoso.net/un-water-twitteador/" rel="bookmark">Un water twitteador</a></li><li><a href="http://blog.igayoso.net/servicio-alsa-wifi-en-supra/" rel="bookmark">Servicio Alsa WiFi en Supra</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.igayoso.net/script-para-bajar-todas-las-canciones-de-ultrastar-es-org/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Instalación y configuración de TRAC</title>
		<link>http://blog.igayoso.net/instalacion-y-configuracion-de-trac/</link>
		<comments>http://blog.igayoso.net/instalacion-y-configuracion-de-trac/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 11:25:59 +0000</pubDate>
		<dc:creator>igayoso</dc:creator>
				<category><![CDATA[Técnico]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[manual]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://blog.igayoso.net/?p=144</guid>
		<description><![CDATA[Después del post del otro día sobre SVN, que mejor que unir este maravilloso gestor de tareas para proyectos en SVN. Digo lo mismo que el otro día, si alguien lo quiere en PDF, solo tiene que pedírmelo  
Comenzaremos instalando el trac vía apt-get:
# apt-get install trac
Creamos el entorno para que trabaje trac. Esto [...]]]></description>
			<content:encoded><![CDATA[<p>Después del <a title="HOW-TO SVN" href="http://blog.igayoso.net/configuracion-…subversion-svn/" target="_self">post</a> del otro día sobre SVN, que mejor que unir este maravilloso gestor de tareas para proyectos en SVN. Digo lo mismo que el otro día, si alguien lo quiere en PDF, solo tiene que<a title="Contacta conmigo" href="http://blog.igayoso.net/contacto/" target="_self"> pedírmelo</a> <img src='http://blog.igayoso.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Comenzaremos instalando el trac vía apt-get:</p>
<p># apt-get install trac</p>
<p>Creamos el entorno para que trabaje trac. Esto se compondrá de un directorio donde irá guardando todos los datos:</p>
<p># trac-admin /etc/trac/pruebas initenv</p>
<p>Nos hará varias preguntas para configurar trac, en las que responderemos:</p>
<p>Creating a new Trac environment at /etc/trac/pruebas2</p>
<p>Trac will first ask a few questions about your environment<br />
in order to initalize and prepare the project database.</p>
<p>Please enter the name of your project.<br />
This name will be used in page titles and descriptions.</p>
<p>Project Name [My Project]&gt;carreteras</p>
<p>Aquí le diremos el nombre que tendrá nuestro proyecto en trac, en este caso carreteras.</p>
<p>Please specify the connection string for the database to use.<br />
By default, a local SQLite database is created in the environment<br />
directory. It is also possible to use an already existing<br />
PostgreSQL database (check the Trac documentation for the exact<br />
connection string syntax).</p>
<p>Database connection string [sqlite:db/trac.db]&gt;[Pulsamos enter]</p>
<p>Ahora nos preguntará donde queremos y que motor de base de datos queremos usar, dejamos la opción por defecto, es decir, pulsamos enter sin más.</p>
<p>Please specify the type of version control system,<br />
By default, it will be svn.</p>
<p>If you don&#8217;t want to use Trac with version control integration,<br />
choose the default here and don&#8217;t specify a repository directory.<br />
in the next question.</p>
<p>Repository type [svn]&gt; [Pulsamos enter]</p>
<p>Podremos usar trac con un proyecto de svn ya hecho, si es este el caso y usamos svn pulsaremos enter para que marque la opción por defecto.</p>
<p>Please specify the absolute path to the version control<br />
repository, or leave it blank to use Trac without a repository.<br />
You can also set the repository location later.</p>
<p>Path to repository [/path/to/repos]&gt; /home/sistemas/proyectos</p>
<p>Lo que configuraremos ahora será, solo en el caso de que vayamos a usar trac con un proyecto de svn y será el directorio del repositorio de svn a trabajar, en este caso /home/sistemas/proyectos</p>
<p>Por último nos preguntará el directorio de plantillas, donde ha sido instalado trac, en este caso está en el directorio por defecto, así que daremos al enter para acabar de configurar el entorno:</p>
<p>Please enter location of Trac page templates.<br />
Default is the location of the site-wide templates installed with Trac.</p>
<p>Templates directory [/usr/share/trac/templates]&gt; [Pulsamos enter]</p>
<p><strong>Arrancar el servidor de trac</strong></p>
<p><strong>En modo standalone</strong></p>
<p>Ahora ya tendremos configurado el entorno, ahora vamos a lanzar el servicio de forma “standalone” para ver a tiempo real los accesos, luego lo mandaremos en modo demonio y lo meteremos en el inicio del sistema, para que arranque cuando arrancamos la máquina.</p>
<p># tracd &#8211;port 8000 /etc/trac/pruebas</p>
<p>Si no ha habido ningún problema, arrancará nuestro servidor de trac, con el entorno que hemos configurado en el paso anterior, por lo tanto para ver trac en la WEB, abriremos un navegador e iremos al puerto de trac:</p>
<p>http://localhost:8000/carreteras</p>
<p>Veremos que trac está funcionando en este puerto y para el proyecto y entorno que hemos creado.<br />
<strong><br />
En modo demonio</strong></p>
<p>Ahora vamos a ejecutar trac como demonio, para que no tengamos que tenerlo siempre ejecutado en una consola, por lo tanto meteremos el flag d y lo ejecutaremos:</p>
<p># tracd –d &#8211;port 8000 /etc/trac/pruebas</p>
<p>Por ultimo vamos a meterlo como demonio en el arranque del sistema. Creamos un script que arranque el trac en modo demonio, como hemos hecho a lo último y lo metemos en un fichero dentro de /etc/init.d:</p>
<p># vim /etc/init.d/tracd</p>
<p>Y metemos dentro la línea de ejecución:</p>
<p>tracd –d &#8211;port 8000 /etc/trac/pruebas</p>
<p>Le damos permisos de ejecución:</p>
<p># chmod a+x /etc/init.d/tracd</p>
<p>Y por ultimo lo metemos en los rc:</p>
<p># update-rc.d -f tracd defaults</p>
<p>Como hemos puesto por defecto, lo meterá en todos los arranques del sistema (0-6). Por ultimo probaremos si se arranca bien, ejecutando:</p>
<p># /etc/init.d/tracd start</p>
<p>Si quisiéramos que al hacer stop/restart también funcionara, tendríamos que modificar el script que hay en init.d para que lo hiciera, como no es nuestro caso, lo dejaremos así de momento.</p>
<p><strong>Usando el mod_python</strong></p>
<p>Según la recomendación de trac, una forma de usarlo, de la manera más rápida y/o cómoda es con mod_python, un módulo de apache2 para que funcione python en él, por lo tanto vamos a instalarlo y configurarlo, primero instalamos los paquetes necesarios:</p>
<p># apt-get install libapache2-mod-python libapache2-mod-python-doc</p>
<p>Activamos el módulo en apache2, por si no lo hace él solo a la hora de instalar:</p>
<p># a2enmod mod_python</p>
<p>Creamos dentro de apache2 la localización para entrar a él vía WEB, por lo tanto editamos el fichero por defecto del virtualhost (o el que vayamos a usar) e introducimos las siguientes líneas:</p>
<p># vim /etc/apache2/sites-enable/000-default</p>
<p>&lt;Location /trac&gt;<br />
SetHandler mod_python<br />
PythonInterpreter main_interpreter<br />
PythonHandler trac.web.modpython_frontend<br />
PythonOption TracEnv /etc/trac/carreteras<br />
&lt;/Location&gt;</p>
<p>Hay veces que se arma líos con las rutas y los estilos, por si acaso meteremos este alias en apache2 para que sepa bien dónde está:</p>
<p># vim /etc/apache2/sites-enable/000-default</p>
<p>Alias /trac/css &#8220;/usr/share/trac/htdocs/css&#8221;<br />
&lt;Location /trac/css&gt;<br />
SetHandler None<br />
&lt;/Location&gt;</p>
<p>Para finalizar, tenemos que reiniciar apache2 para que coja estás nuevas localizaciones y rutas, por lo tanto:</p>
<p># /etc/init.d/apache2 restart</p>
<p>Y si ahora vamos a la nueva dirección para entrar en trac, que en este caso no hará falta entrar a través del puerto 8000, ya que no lo hemos configurado así, iremos:</p>
<p>http://localhost/trac</p>
<p><strong>Configurar los permisos en trac por usuario</strong></p>
<p>Dentro de trac podremos crear usuarios para que puedan crear tickets, corregirlos, cerrarlos, etc… para ello usaremos contraseñas de apache2 y en este caso aprovecharemos las que usamos en svn/dav y así tenerlas todas en el mismo sitio. El directorio de login dentro de trac está en:</p>
<p>/trac/login</p>
<p>Por lo tanto vamos a crear una nueva localización y darle permisos con contraseñas de apache2:</p>
<p># vim /etc/apache2/sites-enable/000-default</p>
<p>&lt;Location /trac/login&gt;<br />
AuthType Basic<br />
AuthName &#8220;Trac Login&#8221;<br />
AuthUserFile /etc/apache2/dav_svn.passwd<br />
Require valid-user<br />
&lt;/Location&gt;</p>
<p>Ahora ya podremos hacer autentificarnos, dentro de trac en el apartado login, usando la autentificación de apache2 que también usamos para el svn/dav.</p>
<p>Si quisiéramos usar otro fichero de contraseñas, únicamente tendríamos que crearlo con htpasswd y meterlo en el Location.</p>
<p><strong>Configuración de un plugin: webadmin</strong></p>
<p>En este apartado vamos a matar dos pájaros de un tiro, por una parte vamos a mostrar como configurar e instalar un plugin de trac y para ello, usaremos el webadmin, que es una forma fácil de configurar nuestros proyectos en trac sin usar la consola con el comando trac-admin.</p>
<p>Lo primero que vamos a hacer es instalar un paquete necesario para python:</p>
<p># apt-get install python-setuptools</p>
<p>Una vez instalado, nos bajaremos el código del webadmin y haremos un fichero .egg, que será el plugin comprimido, bajamos el código:</p>
<p># cd /tmp<br />
# svn export http://svn.edgewall.com/repos/trac/sandbox/webadmin/</p>
<p>El código lo tendremos dentro de la carpeta webadmin, ahora vamos a usar python para crear el .egg:</p>
<p># cd webmin<br />
# python setup.py bdist_egg</p>
<p>Ahora que ya lo tenemos, lo metemos dentro de la carpeta plugins de nuestro entorno. El .egg estará en la carpeta dist:</p>
<p># cp dist/* /etc/trac/carreteras/plugins/</p>
<p>Para casi finalizar, meteremos dentro del entorno este plugin, editando el fichero trac.ini y añadiendo unas líneas:</p>
<p># vim /etc/trac/carreteras/conf/trac.ini</p>
<p>[components]<br />
webadmin.* = enabled</p>
<p>Para finalizar daremos permisos a uno o más usuarios para poder usar este plugin, para ello usaremos trac-admin:</p>
<p># trac-admin /etc/trac/carreteras/ permission add sistemas TRAC_ADMIN</p>
<p>En este caso damos permisos en el apartado TRAC_ADMIN al usuario sistemas, que está dentro de los usuarios que pueden acceder a login y hemos configurado previamente.</p>
<p>Reiniciaremos apache2 y estará todo configurado:</p>
<p># /etc/init.d/apache2 restart</p>
<div id="crp_related"><h3>Post relacionados:</h3><ul><li><a href="http://blog.igayoso.net/configuracion-y-primeros-pasos-con-subversion-svn/" rel="bookmark">Configuración y primeros pasos con subversion (svn)</a></li><li><a href="http://blog.igayoso.net/instalar-yo-renovar-certificado-de-ipsca-en-apache2-y-courier/" rel="bookmark">Instalar y/o renovar certificado de ipsCA en Apache2 y courier</a></li><li><a href="http://blog.igayoso.net/script-para-bajar-todas-las-canciones-de-ultrastar-es-org/" rel="bookmark">Script para bajar todas las canciones de ultrastar-es.org</a></li><li><a href="http://blog.igayoso.net/porque-no-usaria-centreon/" rel="bookmark">Por que no usaría Centreon</a></li><li><a href="http://blog.igayoso.net/header_checks-en-postfix/" rel="bookmark">header_checks en Postfix</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.igayoso.net/instalacion-y-configuracion-de-trac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuración y primeros pasos con subversion (svn)</title>
		<link>http://blog.igayoso.net/configuracion-y-primeros-pasos-con-subversion-svn/</link>
		<comments>http://blog.igayoso.net/configuracion-y-primeros-pasos-con-subversion-svn/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 11:13:55 +0000</pubDate>
		<dc:creator>igayoso</dc:creator>
				<category><![CDATA[Técnico]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[manual]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.igayoso.net/?p=134</guid>
		<description><![CDATA[Primer manual grande que posteo, voy a intentar ponerlos aquí directamente, pero creo que cuando tenga ganas los iré subiendo a algún sitio en PDF, pero si alguien le corre prisa que me lo pida y se lo mandaré sin problema  
Configuración servidor subversion
Instalamos el subversion, en este ejemplo ya tenemos el apache2 instalado [...]]]></description>
			<content:encoded><![CDATA[<p>Primer manual grande que posteo, voy a intentar ponerlos aquí directamente, pero creo que cuando tenga ganas los iré subiendo a algún sitio en PDF, pero si alguien le corre prisa que me lo <a title="Contacta conmigo" href="http://blog.igayoso.net/contacto/" target="_self">pida</a> y se lo mandaré sin problema <img src='http://blog.igayoso.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Configuración servidor subversion</strong></p>
<p>Instalamos el subversion, en este ejemplo ya tenemos el apache2 instalado y configurado, así que le meteremos únicamente el paquete de de svn:</p>
<p># apt-get install subversion subversion-tools libapache2-svn</p>
<p>Ahora reiniciamos el servidor de apache2 para que cargue los módulos de svn y dav:</p>
<p># /etc/init.d/apache2 restart</p>
<p>Ahora configuramos un sitio nuevo en apache2.</p>
<p>Abrimos el fichero de configuración del módulo de apache2 de svn:</p>
<p># vim /etc/apache2/mods-enabled/dav_svn.conf</p>
<p>Y lo dejamos algo así como:</p>
<p>DAV svn</p>
<p>SVNPath /var/lib/svn</p>
<p>AuthType Basic<br />
AuthName &#8220;Subversion Repository&#8221;<br />
AuthUserFile /etc/apache2/dav_svn.passwd<br />
Require valid-user</p>
<p>AuthzSVNAccessFile /etc/apache2/dav_svn.authz</p>
<p>SVNPath -&gt; Contendrá la ruta donde hemos configura el sitio para svn<br />
AuthType -&gt; Autentificación básica de apache2<br />
AuthName -&gt; El nombre que saldrá a la hora de autentificarse<br />
AuthUserFile -&gt; El fichero que contiene los usuarios y contraseñas de apache2 para autentificarse<br />
Require valid-user -&gt; Para entrar a este sitio, se pone esta directiva para que requiera autentificación<br />
AuthzSVNAccessFile -&gt; Para que una vez autentificado (o no), podramos controlar lo que puede hacer cada usuario</p>
<p>Creamos el sitio de svn en nuestra máquina. Deberemos crearlo donde hemos especificado anteriormente en la configuración de svn en apache2, en la directiva SVNPath:</p>
<p># svnadmin create /var/lib/svn</p>
<p>Ahora creamos la contraseña de apache2 para un usuario en concreto, en la ruta que hemos especificado antes mediante la directiva AuthUserFile:</p>
<p># htpasswd -mc /etc/apache2/dav_svn.passwd sistemas</p>
<p>Con el flag m forzamos la encriptación en MD5 y con el flag c creamos un fichero nuevo. Si quisiéramos modificar (añadir, cambiar, eliminar…) quitaríamos el flag c para que lo hiciera con un fichero ya creado.</p>
<p>Modificamos el fichero de autentificación de svn, para tener un control sobre cada usuario. Dependiendo de cada usuario, grupo o todos especificaremos unos permisos. También podríamos controlarlo por carpetas. Editamos el fichero que hemos especificado anteriormente mediante la directiva AuthzSVNAccessFile:</p>
<p># vim /etc/apache2/dav_svn.authz</p>
<p>Y lo dejamos así para que el usuario que hemos creado antes pueda leer y escribir. También hemos configurado que todos los usuarios puedan leer:</p>
<p>[/]<br />
* = r<br />
sistemas = rw</p>
<p>Si quisiéramos hacer grupos, los podríamos especificar de la siguiente manera, dejando el fichero con algo parecido a esto:</p>
<p>[groups]<br />
admin = sistemas, igayoso, idiego<br />
[/]<br />
admin = rw</p>
<p>Con este ejemplo, crearíamos un grupo llamado admin., que estarían los usuarios: sistemas, igayoso e idiego, que tendríamos que haber creado previamente. Este grupo tendría permisos de lectura y escritura y nadie más podría ni leer, ni escribir.</p>
<p>Reiniciamos apache2 de nuevo para que coja las últimas configuraciones que hemos metido:</p>
<p># /etc/init.d/apache2 restart</p>
<p>Si ahora vamos a la máquina en cuestión y a la localización que hemos puesto, en este caso:</p>
<p>http://localhost/svn</p>
<p>Sigue leyendo&#8230;.</p>
<p><span id="more-134"></span></p>
<p>Una vez que nos hayamos autentificado con los datos que hemos metido antes, deberíamos de ver lo que tenemos dentro del svn que hemos creado, que de momento es nada, por lo tanto vamos a crear un proyecto con sus respectivas carpetas. Para crear este proyecto vamos a crear la siguiente estructura para luego importarla a svn:</p>
<p>carreteras<br />
trunk<br />
tags<br />
branches</p>
<p>carreteras -&gt; es el nombre del proyecto, podríamos poner el que queramos, incluso ninguno y crear las otras carpetas únicamente, pero lo creamos de esta forma para tenerlo todo un poco mejor organizado<br />
trunk –&gt; es la última versión que hay, sea estable o inestable<br />
tags -&gt; cambios más comunes en módulos, librerías…<br />
branches -&gt; versiones estables que hemos ido haciendo con una o diferentes ramas</p>
<p>Por ejemplo, en este caso vamos a crear la estructura en /tmp para luego borrarla, ya que una vez que esté importada en svn no hará falta, ya que al importar cosas dentro de svn, lo pasa a formato Berkley Database (por defecto), así que no será necesario tenerlo, por lo tanto:</p>
<p># mkdir /tmp/carreteras /tmp/carreteras/trunk /tmp/carreteras/branches /tmp/carreteras/tags</p>
<p>Y para ver que una vez importado lo podremos ver desde la WEB que hemos comprobado y configurado antes, crearemos un fichero:</p>
<p># echo &#8220;Hello world&#8221; &gt; /tmp/carreteras/trunk/index.html</p>
<p>Ahora vamos a importar todas las carpeta y ficheros a svn, esto se hace con el comando:</p>
<p># svn import origen destino –m “Mensaje”</p>
<p>El origen es local, así que lo especificaremos como una ruta en Linux; el destino en este caso es local también, así que lo especificaremos con file:///ruta/donde/esta/svn; y por último con el flag m, especificaremos un mensaje que quedará guardado en el log de svn que podremos ver en un futuro:</p>
<p># svn import /tmp/carreteras/ file:///var/lib/svn/carreteras -m “Primera importación de ficheros y carpetas” (1)</p>
<p>Puede que nos salga una ventana con el nano que nos informará de los cambio que se van a hacer a la hora de hacer el commit, como en este caso no hemos hecho ningún cambio y únicamente vamos a importar unos ficheros y carpetas saldrá vacío. Para salir del nano pulsar CTRL + x y luevo darle a la c para continuar y que haga la importación, debería salir una cosa como esta:</p>
<p>AÃ±adiendo      /tmp/carreteras/trunk<br />
AÃ±adiendo      /tmp/carreteras/trunk/index.html<br />
AÃ±adiendo      /tmp/carreteras/branches<br />
AÃ±adiendo      /tmp/carreteras/tags</p>
<p>Commit de la revisiÃ³n 1.</p>
<p>Con esto pasamos a la revisión 1, ya que cada vez que importemos algo hará un commit por si hubiera algún conflicto del contenido, por que tendría que ser solucionado antes de importar algo. Ahora podremos ver que ha añadido las carpetas y el fichero, en la WEB de antes y que ha cambiado la revisión.</p>
<p>Como esta WEB es dav y por subversion, únicamente podremos ver el contenido y/o descargarlo, ya que no interpreta HTML o PHP, esto lo tendríamos que hacer a través de un cliente svn o con un script a la hora de hacer el commit, que veremos más adelante.</p>
<p>(1)Es posible que a la hora de importar carpetas o ficheros de un problema de permisos como este:</p>
<p>Execute: Import<br />
Error: Error while performing action: Cant create directory /var/lib/svn/db/transactions/1-1.txt: Permission denied</p>
<p>Esto es porque hemos creado el svn como root, por lo tanto le vamos a dar permisos de propiedad a apache2, al usuario www-data, por lo tanto:</p>
<p># chown –R www-data.www-data /var/lib/svn</p>
<p><strong>Configuración y uso de un cliente subversion</strong></p>
<p>Ahora vamos a configurar un cliente para poder trabajar con el servidor de subversion que hemos configurado antes. Primero instalamos los paquetes de subversion en el cliente:</p>
<p># apt-get install subversion subversion-tools</p>
<p>Haremos un checkout, que lo que hacemos es descargarnos todo el proyecto a nuestra máquina local, nos situaremos en un directorio donde queramos guardar la copia local y haremos el checkout:</p>
<p># cd /home/sistemas/proyectos<br />
# svn checkout http://svn/svn</p>
<p>Al haber puesto autentificación en el svn, nos pedirá que nos autentiquemos, al hacerlo correctamente importará a local lo que haya en el svn, que nos saldrá algo así como:</p>
<p>Usuario: sistemas<br />
Clave de &#8217;sistemas&#8217;:<br />
A    svn/carreteras<br />
A    svn/carreteras/trunk<br />
A    svn/carreteras/trunk/index.html<br />
A    svn/carreteras/branches<br />
A    svn/carreteras/tags<br />
RevisiÃ³n obtenida: 1</p>
<p>Ahora en el directorio donde hemos el checkout estará las carpetas y ficheros que hemos creado anteriormente. También veremos la revisión que hemos hecho el checkout, en este caso la revisión 1.</p>
<p><strong>Añadir un fichero/carpeta</strong></p>
<p>Ahora dentro de esta carpeta podremos hacer las modificaciones oportunas para luego hacer un commit, en este caso vamos a crear un fichero y llamarle style.css:</p>
<p># touch /home/sistemas/proyectos/svn/carreteras/trunk/style.css</p>
<p>Como es un fichero nuevo, deberemos indicarle a svn que tenemos que añadirlo, ya que el solito no lo hace. Pasa lo mismo a la hora de eliminarlo o cambiarle el nombre/extensión (es lo mismo que crear y eliminar). Por lo tanto vamos a añadir el fichero de estilos:</p>
<p># svn add /home/sistemas/proyectos/svn/carreteras/trunk/style.css</p>
<p>Y ahora hacemos el commit. Podemos hacer de directorio en concreto o de todo el árbol, todo depende de donde estemos situados, por ejemplo para hacer únicamente de la carpeta trunk nos situaremos en esa carpeta y haremos el commit (recordar que el flag m era para poner un mensaje y comentar que cambios ha habido en esta revisión):</p>
<p># cd /home/sistemas/proyectos/svn/carreteras/trunk/<br />
# svn commit –m “Hemos creado una hoja de estilos llamada style.css”</p>
<p>Y nos diría una cosa como esta:</p>
<p>AÃ±adiendo      trunk/style.css<br />
Transmitiendo contenido de archivos .<br />
Commit de la revisiÃ³n 10.</p>
<p>Hay que hacerlo siempre en la carpeta en la que hemos hecho algún tipo de cambio. Este commit lo hará en sus subcarpetas, pero no en las anteriores, así que por ejemplo si hubiéremos estado en otra carpeta que no incluyera estos cambios no hubiera hecho nada.</p>
<p>Si quisiéramos hacer un simple cambio en un fichero bastaría con hacerlo y ejecutar un commit, abrimos el fichero, introducimos alguna línea y hacemos el commit:</p>
<p># vim /home/sistemas/proyectos/svn/carreteras/trunk/style.css</p>
<p>Configuramos algún estilo dentro del fichero, en este caso únicamente he puesto un comentario:</p>
<p>#######################################<br />
# Esto es la hoja de estilos<br />
#######################################</p>
<p>Lo guardamos y hacemos el commit estando dentro de la carpeta donde está el fichero que hemos modificado o una anterior que lo incluya:</p>
<p># cd /home/sistemas/proyectos/svn/carreteras/trunk/<br />
# svn commit –m “Modificamos la hoja de estilos con un comentario”</p>
<p>Si todo ha salido bien saldría una cosa como esta:</p>
<p>Enviando       trunk/style.css<br />
Transmitiendo contenido de archivos .<br />
Commit de la revisiÃ³n 11.</p>
<p>Como vemos ha aumentado la revisión en un número. Cada vez que hagamos algún tipo de cambio aumentará esta revisión. En cualquier momento podemos volver atrás a alguna de estas revisiones.</p>
<p><strong>Eliminar fichero/carpeta</strong></p>
<p>Ahora vamos a procedes a eliminar un archivo, en este caso la hoja de estilos. Como borrando y haciendo un commit no se podría, ya que no es una modificación en el contenido de algún fichero, debemos eliminar primero de hacer el commit, por lo tanto:</p>
<p># svn rm /home/sistemas/proyectos/svn/carreteras/trunk/style.css<br />
# svn status</p>
<p>Ahora podemos ver el estado de nuestra versión local, en este caso pone una D porque este fichero ha sido eliminado o creado y no forma parte de la revisión aún, por lo tanto debemos indicárselo a svn haciendo un commit:</p>
<p># svn commit –m “Eliminamos la Hoja de estilos”</p>
<p>Y nos saldrá una cosa parecida a esto:</p>
<p>Eliminando     trunk/style.css</p>
<p>Commit de la revisiÃ³n 12.</p>
<p>Como veis también ha aumentado la revisión.</p>
<p><strong>Actualizar revisión local</strong></p>
<p>Habrá veces que habrán hecho nuevas revisiones, pero nuestra revisión local no estará actualizada a la última versión, por lo tanto deberemos actualizarla con el siguiente comando:</p>
<p># svn update</p>
<p>Y nos dirá la revisión actual y los cambios que se han hecho referentes a nuestra revisión local:</p>
<p>A    loquesea.php<br />
Actualizado a la revisiÃ³n 13.</p>
<p>La A significa add, es decir que ha sido añadido y por último nos dice la revisión que se ha descargado a local.</p>
<p><strong>Guardar versiones de trunk a tags/branches</strong></p>
<p>Una vez que hemos hecho los cambios oportunos en nuestra versión de trunk, vamos a hacer una versión para que quede como “estable” en las ramas (branches), también podríamos guardarlo en tags, ya que se hace del mismo modo. Por lo tanto vamos a crear la versión 0.0 de dicha WEB:</p>
<p># svn copy http://svn/svn/carreteras/trunk http://svn/svn/carreteras/branches/0.0</p>
<p>De nuevo nos abrirá nano para mostrarnos los cambios que se irán a realizar, pulsamos CTR + x y luego la c para continuar, entonces hará un commit para comprobar si hay conflictos y hará la rama nueva.</p>
<p>Todo esto se haría de la misma forma, cambiando las rutas para futuras versiones o tags.</p>
<p><strong>Solucionar conflictos entre ficheros/carpetas</strong></p>
<p>Si se produce algún cambio a la vez o si intentas hacer un commit con una revisión vieja, habrá un conflicto que deberemos solucionar a mano. Por lo tanto imaginemos que alguien ha cambiado el fichero loquesea.php que está dentro de trunk. Yo pensaba que tenía la última versión, pero no es así, por lo tanto modifiqué el fichero e intenté hacer un commit con el siguiente resultado:</p>
<p># echo “Hola, modificando fichero” &gt;&gt; /home/sistemas/proyectos/svn/carreteras/trunk/loquesea.php<br />
# cd /home/sistemas/proyectos/svn/carreteras/trunk/<br />
# svn commit –m “Modificando el fichero loquesea.php para probocar un conflicto”</p>
<p>Enviando       trunk/loquesea.php<br />
svn: FallÃ³ el commit (detalles a continuaciÃ³n):<br />
svn: Su archivo o directorio &#8216;loquesea.php&#8217; estÃ¡ probablemente desactualizado<br />
svn: The version resource does not correspond to the resource within the transaction.  Either the requested version resource is out of date (needs to be updated), or the requested version resource is newer than the transaction root (restart the commit).</p>
<p>Por lo tanto ahora deberemos actualizar nuestra versión local con:</p>
<p># cd /home/sistemas/proyectos/svn/carreteras/trunk/<br />
# svn update</p>
<p>Nos saldrá la actualización de la revisión y del fichero:</p>
<p>C    loquesea.php<br />
Actualizado a la revisiÃ³n 16.</p>
<p>Si hacemos un listado del directorio, veremos que ahora hay un montón de ficheros:</p>
<p># ls –la /home/sistemas/proyectos/svn/carreteras/trunk/</p>
<p>total 36<br />
drwxr-xr-x  4 root root 4096 2008-08-26 19:04 .<br />
drwxr-xr-x  6 root root 4096 2008-08-26 18:52 ..<br />
-rw-r&#8211;r&#8211;  1 root root 3297 2008-08-26 18:17 index.php<br />
-rw-r&#8211;r&#8211;  1 root root 2548 2008-08-26 18:52 license.txt<br />
-rw-r&#8211;r&#8211;  1 root root  106 2008-08-26 19:04 loquesea.php<br />
-rw-r&#8211;r&#8211;  1 root root    5 2008-08-26 19:04 loquesea.php.mine<br />
-rw-r&#8211;r&#8211;  1 root root    0 2008-08-26 19:04 loquesea.php.r15<br />
-rw-r&#8211;r&#8211;  1 root root   66 2008-08-26 19:04 loquesea.php.r16<br />
drwxr-xr-x  6 root root 4096 2008-08-26 19:04 .svn<br />
drwxr-xr-x 14 root root 4096 2008-08-26 18:06 system</p>
<p>loquesea.php -&gt; contendrá una mezcla del fichero que has modificado junto a la última revisión<br />
loquesea.php.mine -&gt; la modificación que has hecho tu<br />
loquesea.php.r* -&gt; las versiones en conflicto</p>
<p>Por lo tanto, dependiendo de lo que queramos hacer, deberemos abrir unos u otros ficheros y finalmente poner en el loquesea.php la versión que queremos conservar, por ejemplo queremos mezclar tanto la versión que hemos hecho nosotros como la que hay nueva, por lo tanto abrimos el fichero loquesea.php y quitamos las líneas que nos indican los cambios, tal que:</p>
<p># vim /home/sistemas/proyectos/svn/carreteras/trunk/loquesea.php</p>
<p>Saldria algo así como:</p>
<p>&lt;&lt;&lt;&lt;&lt;&lt;&lt; .mine hola ======= Ã±kdlsjgfaÃ±sljfaÃ±sljfÃ±lasdjfaÃ±skdljf asdf as f asdfsafasdfasdf&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r16</p>
<p>Por lo tanto borramos lo referente a las versiones, quedando:</p>
<p>hola</p>
<p>Ã±kdlsjgfaÃ±sljfaÃ±sljfÃ±lasdjfaÃ±skdljf<br />
asdf<br />
as<br />
f<br />
asdfsafasdfasdf</p>
<p>Guardamos el fichero y resolvemos el conflicto con este fichero:</p>
<p># cd /home/sistemas/proyectos/svn/carreteras/trunk/<br />
# svn resolved loquesea.php</p>
<p>Nos dirá algo así como:</p>
<p>Se resolvió el conflicto de &#8216;loquesea.php&#8217;</p>
<p>Y por ultimo hacemos el commit:<br />
# cd /home/sistemas/proyectos/svn/carreteras/trunk/<br />
# svn commit -m “Resolviendo el conflicto”</p>
<p>Y ahora no debería darnos ningún problema:</p>
<p>Enviando       trunk/loquesea.php<br />
Transmitiendo contenido de archivos .<br />
Commit de la revisión 17.</p>
<p><strong>Ver los logs de las revisiones</strong></p>
<p>Podemos ir viendo información sobre las revisiones que se han hecho. También se puede usar para ver los comentarios que hemos ido haciendo con los commit:</p>
<p># svn log</p>
<p>Y nos saldrá algo como:</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
r15 | sistemas | 2008-08-27 13:20:15 +0200 (miÃ©, 27 ago 2008) | 1 line</p>
<p>Pruebas2<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
r13 | sistemas | 2008-08-27 13:03:34 +0200 (miÃ©, 27 ago 2008) | 1 line</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
r12 | sistemas | 2008-08-27 12:59:28 +0200 (miÃ©, 27 ago 2008) | 1 line</p>
<p>Borramos el css<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
r11 | sistemas | 2008-08-27 12:53:16 +0200 (miÃ©, 27 ago 2008) | 1 line</p>
<p>Modificamos la hoja de estilos<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
r10 | sistemas | 2008-08-27 12:48:23 +0200 (miÃ©, 27 ago 2008) | 1 line</p>
<p>Anadido styles.css<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
r9 | sistemas | 2008-08-27 12:41:15 +0200 (miÃ©, 27 ago 2008) | 1 line</p>
<p>Mas pruebas<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
r8 | sistemas | 2008-08-27 12:38:57 +0200 (miÃ©, 27 ago 2008) | 1 line</p>
<p>Pruebas1<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
r7 | sistemas | 2008-08-27 12:34:03 +0200 (miÃ©, 27 ago 2008) | 1 line</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
r6 | sistemas | 2008-08-27 12:33:03 +0200 (miÃ©, 27 ago 2008) | 1 line</p>
<p>Importacion del codigo base de Code Igniter<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
r1 | root | 2008-08-27 11:57:22 +0200 (miÃ©, 27 ago 2008) | 1 line</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
<strong>Automatizar el proceso de subida a un FTP cuando hacemos commit</strong></p>
<p>Cuando realizamos commit, la tarea más ardua a la hora de trabajar con svn para proyectos WEB es que al tener codificado todo el contenido usando Berkley Database (por defecto), no podremos ver a priori los datos WEB, por lo tanto podremos hacer a mano que exporte los datos y luego subirlos a un FTP, para verlos desde un servidor WEB, el problema es que cuando hacemos mucho commit, la tarea se hace muy pesada, por lo tanto vamos a automatizar este proceso.</p>
<p>Cuando hemos creado el repositorio svn, dentro de la carpeta que hemos creado, existe una carpeta llamada hooks, que contiene plantillas de scripts para realizar tareas, una vez que se hagan otras; me explico, por ejemplo existe una plantilla para cuando se realizan los commit llamada post-commit.tmpl. Para empezar deberemos renombrarla y quitarle la extensión .tmpl:</p>
<p># mv /var/lib/svn/hooks/post-commit.tmpl /var/lib/svn/hooks/post-commit</p>
<p>Editamos el fichero y únicamente dejamos una línea que llame a otro script:</p>
<p># vim /var/lib/svn/hooks/post-commit</p>
<p>Y quedará tal que:</p>
<p>/usr/share/subversion/hook-scripts/svn2ftp</p>
<p>Ahora creamos el siguiente fichero, con el siguiente contenido:</p>
<p># vim /usr/share/subversion/hook-scripts/svn2ftp</p>
<p>Y metemos dentro:</p>
<p>######### INICIO SCRIPT ####################<br />
#!/usr/bin/php5<br />
/**<br />
* SVN FTP synchronization post-commit hook<br />
* @author Moises Macia<br />
* @modificated Israel Gayoso igayoso&lt;!@!&gt;gmail.com<br />
* @license MIT<br />
* @version 0.1.1<br />
*/</p>
<p>$SVN_PRJ = &#8220;carreteras&#8221;;<br />
$SVN_DIR = &#8220;/var/lib/svn&#8221;;<br />
$EXPORT_DIR = &#8220;/tmp/export&#8221;;<br />
$FTP_HOST = &#8220;ftp.algo.es&#8221;;<br />
$FTP_USER = &#8220;ftpuser&#8221;;<br />
$FTP_PWD = &#8220;ftp&#8221;;<br />
$FTP_DIR = &#8220;ejemplos.algo.es&#8221;;<br />
$NSUB = strlen($SVN_PRJ . &#8220;/trunk/&#8221;);</p>
<p>//get changed files from last commit<br />
exec(&#8221;svnlook changed $SVN_DIR&#8221;, $files);</p>
<p>if(count($files) &gt; 0)<br />
{<br />
system(&#8221;svn export &#8211;quiet file:///&#8221; . $SVN_DIR . &#8220;/&#8221; . $SVN_PRJ . &#8220;/trunk/ &#8221; . $EXPORT_DIR);</p>
<p>$ftp_id = ftp_connect($FTP_HOST);<br />
$login_status = @ftp_login($ftp_id, $FTP_USER, $FTP_PWD);</p>
<p>if((!$ftp_id) || (!$login_status))<br />
die(&#8221;Fallo al conectar al FTP $FTP_SERVER\n&#8221;);</p>
<p>ftp_chdir($ftp_id,$FTP_DIR);</p>
<p>foreach ($files as $line)<br />
{<br />
echo &#8220;$line\n&#8221;;<br />
preg_match(&#8221;/^([AUD]{1})(\s+)(&#8221; . $SVN_PRJ . &#8220;\/trunk.*)/&#8221;, $line, $match);<br />
$svn_code = $match[1]; //file state code<br />
$file_path = substr($match[3], $NSUB);<br />
switch($svn_code)<br />
{<br />
case &#8216;U&#8217;: //file updated<br />
if(is_file($EXPORT_DIR . &#8220;/&#8221; . $file_path))<br />
{<br />
$upload_status = ftp_put($ftp_id, $file_path, $EXPORT_DIR . &#8220;/&#8221; . $file_path, FTP_BINARY);<br />
if(!$upload_status)<br />
echo &#8220;Fallo al transmitir fichero $file_path\n&#8221;;<br />
}<br />
break;</p>
<p>case &#8216;A&#8217;: //file added<br />
if(is_file($EXPORT_DIR . &#8220;/&#8221; . $file_path))<br />
{<br />
$upload_status = ftp_put($ftp_id, $file_path, $EXPORT_DIR . &#8220;/&#8221; . $file_path, FTP_BINARY);<br />
if(!$upload_status)<br />
echo &#8220;Fallo al transmitir fichero $file_path\n&#8221;;<br />
}</p>
<p>if(is_dir($EXPORT_DIR . &#8220;/&#8221; . $file_path))<br />
{<br />
$upload_status = ftp_mkdir($ftp_id, $file_path);<br />
if(!$upload_status)<br />
echo &#8220;Fallo al crear el directorio $file_path\n&#8221;;<br />
}<br />
break;</p>
<p>case &#8216;D&#8217;: //file deleted<br />
if(substr($file_path, -1, 1) == &#8220;/&#8221;) //if its a directory<br />
ftp_rmdirr($ftp_id, &#8216;/&#8217; . substr($file_path, 0, strlen($file_path)-1));<br />
else //if its a plain file<br />
ftp_delete($ftp_id, $file_path);<br />
break;<br />
}<br />
}</p>
<p>system(&#8221;rm -rf $EXPORT_DIR&#8221;); //clean exported files<br />
ftp_close($ftp_id);<br />
}</p>
<p>function ftp_rmdirr($ftp_stream, $directory)<br />
{<br />
// Sanity check<br />
if (!is_resource($ftp_stream) || get_resource_type($ftp_stream) !== &#8216;FTP Buffer&#8217;)<br />
return false;</p>
<p>// Init<br />
$i             = 0;<br />
$files         = array();<br />
$folders       = array();<br />
$statusnext    = false;<br />
$currentfolder = $directory;</p>
<p>// Get raw file listing<br />
$list = ftp_rawlist($ftp_stream, $directory, true);</p>
<p>// Iterate listing<br />
foreach ($list as $current)<br />
{<br />
// An empty element means the next element will be the new folder<br />
if (empty($current))<br />
{<br />
$statusnext = true;<br />
continue;<br />
}</p>
<p>// Save the current folder<br />
if ($statusnext === true)<br />
{<br />
$currentfolder = substr($current, 0, -1);<br />
$statusnext = false;<br />
continue;<br />
}</p>
<p>// Split the data into chunks<br />
$split = preg_split(&#8217;[ ]&#8216;, $current, 9, PREG_SPLIT_NO_EMPTY);<br />
$entry = $split[8];<br />
$isdir = (substr($split[0],0,1) === &#8216;d&#8217;) ? true : false;</p>
<p>// Skip pointers<br />
if ($entry === &#8216;.&#8217; || $entry === &#8216;..&#8217;)<br />
continue;</p>
<p>// Build the file and folder list<br />
if ($isdir == true)<br />
$folders[] = $currentfolder . &#8216;/&#8217; . $entry;<br />
else<br />
$files[] = $currentfolder . &#8216;/&#8217; . $entry;<br />
}</p>
<p>// Delete all the files<br />
foreach ($files as $file)<br />
ftp_delete($ftp_stream, $file);</p>
<p>// Delete all the directories<br />
// Reverse sort the folders so the deepest directories are unset first<br />
rsort($folders);<br />
foreach ($folders as $folder)<br />
ftp_rmdirr($ftp_stream, $folder);</p>
<p>// Delete the final folder and return its status<br />
return ftp_rmdir($ftp_stream, $directory);<br />
}</p>
<p>?&gt;<br />
######### FIN SCRIPT ####################</p>
<p>Deberemos configurar las variables de inicio, si alguna de ellas hubiera sido cambiada anteriormente.</p>
<p>Para que funcione este script tendremos que asegurarnos de un par de cosas primero:</p>
<p>Que el fichero tenga permisos de ejecución y propiedad de apache2:</p>
<p># chown www-data.www-data /usr/share/subversion/hook-scripts/svn2ftp<br />
# chmod 744 /usr/share/subversion/hook-scripts/svn2ftp</p>
<p>Tener instalado php en el servidor y su intérprete para bash:</p>
<p># apt-get install php5 php5-cli</p>
<p>Una vez hecho esto, deberemos exportar todo lo que tengamos porque al ser la primera vez no hay ningún fichero en el FTP, por lo tanto esto solo lo haremos la primera vez que metamos esto y solo en el caso de que ya haya ficheros, como ocurre ahora, por lo tanto:</p>
<p># svn export &#8211;quiet file:///var/lib/svn/carreteras/trunk /tmp/svn</p>
<p>Ahora tendremos el contenido de trunk en /tmp/svn, ahora copiaremos de la forma que más nos guste (FTP, scp, etc…) a nuestro servidor WEB y una vez que tengamos los mismos datos, cambiaremos algo en el servidor y haremos un commit para comprobar que se sube bien al FTP. No nos debería dar ningún error a la hora de hacer el commit, si lo diera comprobar que las variables han sido cambiadas correctamente, los permisos y/o propietarios y por último si los paquetes están instalados.</p>
<p><strong>Clientes subversion</strong></p>
<p>Existes mucha variedad de clientes subversiones para todas las plataformas, así que aquí tenéis el enlace de la wikipedia donde hace una comparación de los clientes, muestra la última versión, licencia, etc…</p>
<p><a title="Lista clientes SVN en Wikipedia" href="http://en.wikipedia.org/wiki/Comparison_of_Subversion_clients" target="_blank">Lista en Wikipedia</a></p>
<p><strong>TO-DO</strong></p>
<p>Cosas que se podrían añadir o mejor a este manual:</p>
<p>Usar SSL para conectarse al servidor de svn<br />
Hacer el script un poco más legible y más escalable, a parte de crear otros para subirlos por scp, cp, etc…<br />
Añadir screenshoots o vídeos al manual<br />
Explicar el acceso por ssh a subversion<br />
Explicar muchas más opciones a la hora de actualizar, realizar commit, volver a una revisión, etc…</p>
<p><strong>Creador</strong><br />
El autor de este manual es Israel Gayoso Pérez, para cualquier duda, problema o aclaración no dudes en ponerte en contacto a través del <a title="Contacta conmigo" href="http://blog.igayoso.net/contacto/" target="_self">apartado contacto</a> del blog.</p>
<p><strong>Licencia</strong><br />
Este documento se distribuye bajo una licencia <a title="Licencia CC" href="http://creativecommons.org/licenses/by-nc-sa/2.5/es/" target="_blank">Creative Commons by nc-sa</a>, excepto el script para la sincronización de ficheros entre SVN y FTP que está liberado bajo una licencia <a title="Licencia MIT" href="http://es.wikipedia.org/wiki/MIT_License" target="_blank">MIT</a>.</p>
<div id="crp_related"><h3>Post relacionados:</h3><ul><li><a href="http://blog.igayoso.net/instalacion-y-configuracion-de-trac/" rel="bookmark">Instalación y configuración de TRAC</a></li><li><a href="http://blog.igayoso.net/instalar-yo-renovar-certificado-de-ipsca-en-apache2-y-courier/" rel="bookmark">Instalar y/o renovar certificado de ipsCA en Apache2 y courier</a></li><li><a href="http://blog.igayoso.net/script-para-bajar-todas-las-canciones-de-ultrastar-es-org/" rel="bookmark">Script para bajar todas las canciones de ultrastar-es.org</a></li><li><a href="http://blog.igayoso.net/porque-no-usaria-centreon/" rel="bookmark">Por que no usaría Centreon</a></li><li><a href="http://blog.igayoso.net/header_checks-en-postfix/" rel="bookmark">header_checks en Postfix</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.igayoso.net/configuracion-y-primeros-pasos-con-subversion-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalar y/o renovar certificado de ipsCA en Apache2 y courier</title>
		<link>http://blog.igayoso.net/instalar-yo-renovar-certificado-de-ipsca-en-apache2-y-courier/</link>
		<comments>http://blog.igayoso.net/instalar-yo-renovar-certificado-de-ipsca-en-apache2-y-courier/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 08:44:04 +0000</pubDate>
		<dc:creator>igayoso</dc:creator>
				<category><![CDATA[Técnico]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[certificados]]></category>
		<category><![CDATA[certificados-courier]]></category>
		<category><![CDATA[courier]]></category>
		<category><![CDATA[instalar-certificados]]></category>
		<category><![CDATA[ipsCA]]></category>
		<category><![CDATA[renovar-certificados]]></category>

		<guid isPermaLink="false">http://blog.igayoso.net/?p=129</guid>
		<description><![CDATA[Introducción
Este artículo mostrará como podremos configurar un certificado firmado por ipsCA para que  podamos tener acceso de una forma segura una WEB y al correo. Para ellos usaremos openssl para  las claves, apache2 para el servidor WEB y courier para el correo.
Generación de claves
Lo primero que tenemos que hacer es generar las claves de nuestro [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Introducción</strong><br />
Este artículo mostrará como podremos configurar un certificado firmado por ipsCA para que  podamos tener acceso de una forma segura una WEB y al correo. Para ellos usaremos openssl para  las claves, apache2 para el servidor WEB y courier para el correo.</p>
<p><strong>Generación de claves</strong><br />
Lo primero que tenemos que hacer es generar las claves de nuestro servidor para luego generar el  SCP y poder enviarlo a ipsCA y que puedan firmarlas, para ellos usaremos openssl:</p>
<p>#openssl genrsa -des3 -out server.key 1024</p>
<p>Ahora tendremos que crear el SCR para envía a ipsCA:</p>
<p>#openssl req -new -key server.key -out server.csr</p>
<p>Nos preguntará una serie de cosas que luego aparecerán en la clave cuando estemos en dicho sitio,  así que ponerlas a conciencia, ya que será las que use ipsCA. No admite caracteres “raros”, por lo tanto pensar antes de introducir los datos. Las preguntas son:</p>
<p>• Country name: abreviación del nombre del país en ISO, ej. ES = España<br />
• State or Province name: la provincia, ej. Madrid<br />
• City or Locality: ciudad o localidad, ej. Madrid<br />
• Organization name: el nombre legal de tu empresa, ej. igayoso.net S.L.<br />
• Organization unit: por si es específico para un departamento o no. Este se puede dejar en blanco, ej. Marketing<br />
• Server administration mail: el correo del administrador en caso de tener algún problema, ej.  igayoso@tucorreo.com</p>
<p>Podremos verificar si el SCR que hemos creado ha sido de forma correcta, ya que si hemos introducido caracteres estraños puede que de algún problema:</p>
<p>#openssl req -noout -text -in server.csr</p>
<p>Ahora que ya lo tenemos, debemos enviarlo a ipsCA a través del formulario de su WEB o por mail.</p>
<p><strong>Configuración en el servidor Apache2</strong><br />
Después de hacer el pago, ipsCA nos enviará un mail con la clave firmada, así como el certificado que deberemos instalar en nuestro servidor para que confíe en él, por lo tanto tendremos dos ficheros:</p>
<p>• IPS-IPSCABUNDLE.crt → certificado de ipsCA<br />
• server.crt → el certificado que enviamos a ipsCA pero una vez firmado ya<br />
Por lo tanto, ahora tendremos que especificarle a Apache2 donde están dichos ficheros, para ello<br />
meteros en la configuración de Apache2 correspondiente al dominio/subdomino las siguientes líneas:</p>
<p>SSLEngine<br />
SSLCertificateKeyFile /etc/apache2/ssl/server.key<br />
SSLCertificateFile /etc/apache2/ssl/server.crt<br />
SSLCACertificateFile /etc/apache2/ssl/IPS-IPSCABUNDLE.crt</p>
<p>En primer lugar habilitamos el SSL en Apache2, deberemos comprobar si está el módulo habilitado, aunque por defecto suele estar. Ahora deberemos especificarle tres ficheros; el primero de ellos corresponde a la clave privada que a través de ella nos han firmado la clave; en el segundo fichero tenemos el certificado que nos ha mandado ipsCA ya firmado por ellos; para finalizar tenemos el certificado de ipsCA para que puedan comprobar que nuestra clave es fiable.</p>
<p>Una vez metido esto en Apache2, deberemos reiniciar y una vez que vayamos a la dirección en concreto deberíamos ver como la página es fiable a través de ipsCA.</p>
<p><strong> Configuración de Courier</strong><br />
La configuración en Courier es parecida a la de Apache2, lo único que en lugar de tener esos 3 ficheros por separado, tendremos los 3 ficheros en uno mismo, por lo tanto, después de ya haber generado la clave privada, el SCR y que nos hayan mandado los certificados, tendremos que juntarlo todo en un fichero:</p>
<p>#cat server.crt server.key IPS-IPSCABUNDLE.crt &gt; server.pem</p>
<p>Ahora tendremos que decírselo a Courier, por lo tanto configuramos el fichero imapd-ssl, popd-ssl&#8230; (o el que corresponda) e introducimos la siguiente línea:</p>
<p>TLS_CERTFILE=/etc/courier/server.pem</p>
<p>Reiniciamos Courier y ya podemos conectarnos al servidor de correo por pop o imap usando conexiones seguras.</p>
<p><strong> Renovar certificado</strong><br />
Si se nos ha caducado el certificado y queremos renovarlos con ipsCA, lo que tendremos que hacer es volver a generar el SCR para que lo puedan volver a firmar, ya que el que generamos la primera vez tiene una duración determinada, por lo tanto vamos a volver a generar el SCR:</p>
<p>#openssl req -new -key server.key -out server.csr</p>
<p>No necesitamos volver a generar la clave del servidor, ya que al no haber sido cambiado únicamente nos deberán firmar el nuevo certificado. Con este fichero que hemos creado tendremos que seguir los mismos pasos que hicimos la primera vez, aunque como ya lo tenemos configurado, lo único que tendremos que hacer en sobrescribir el fichero que nos mande ipsCA después de enviárselo y reiniciar los servicios.</p>
<div id="crp_related"><h3>Post relacionados:</h3><ul><li><a href="http://blog.igayoso.net/instalacion-y-configuracion-de-trac/" rel="bookmark">Instalación y configuración de TRAC</a></li><li><a href="http://blog.igayoso.net/porque-no-usaria-centreon/" rel="bookmark">Por que no usaría Centreon</a></li><li><a href="http://blog.igayoso.net/configuracion-y-primeros-pasos-con-subversion-svn/" rel="bookmark">Configuración y primeros pasos con subversion (svn)</a></li><li><a href="http://blog.igayoso.net/header_checks-en-postfix/" rel="bookmark">header_checks en Postfix</a></li><li><a href="http://blog.igayoso.net/servicio-alsa-wifi-en-supra/" rel="bookmark">Servicio Alsa WiFi en Supra</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.igayoso.net/instalar-yo-renovar-certificado-de-ipsca-en-apache2-y-courier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Legendario</title>
		<link>http://blog.igayoso.net/legendario/</link>
		<comments>http://blog.igayoso.net/legendario/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 11:39:07 +0000</pubDate>
		<dc:creator>igayoso</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[despedida]]></category>
		<category><![CDATA[despedida-coto]]></category>
		<category><![CDATA[despedida-legendaria]]></category>
		<category><![CDATA[legendario]]></category>

		<guid isPermaLink="false">http://blog.igayoso.net/?p=150</guid>
		<description><![CDATA[legendario, ria.
 (De legenda).
 1.  adj. Perteneciente o relativo a las leyendas. Narración legendaria. Héroe legendario.
 2.  m. Libro de vidas de santos.
 3.  m. Colección o libro de leyendas de cualquier clase.
 4.  m. Despedida de soltero de Coto.


Post relacionados:Twittea la potencia de electricidad en la red eléctricaBebe que twittea [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-left: 0em; margin-bottom: -0.5em;"><span><strong>legendario</strong></span><span><strong>, ria</strong></span><span><strong>.</strong></span></p>
<p style="margin-left: 2em; margin-bottom: -0.5em;"><span> (<a>De</a> <em>legenda</em>).</span></p>
<p style="margin-left: 2em; margin-bottom: -0.5em;"><a name="0_1"></a><span><strong> 1. </strong></span><span> <span title="adjetivo">adj.</span></span><span> Perteneciente o relativo a las leyendas. <span><em>Narración legendaria.</em></span> <span><em>Héroe legendario.</em></span></span></p>
<p style="margin-left: 2em; margin-bottom: -0.5em;"><a name="0_2"></a><span><strong> 2. </strong></span><span> <span title="nombre masculino">m.</span></span><span> Libro de vidas de santos.</span></p>
<p style="margin-left: 2em; margin-bottom: -0.5em;"><a name="0_3"></a><span><strong> 3. </strong></span><span> <span title="nombre masculino">m.</span></span><span> Colección o libro de leyendas de cualquier clase.</span></p>
<p style="margin-left: 2em; margin-bottom: -0.5em;"><a name="0_3"></a><span><strong> 4. </strong></span><span> <span title="nombre masculino">m.</span></span><span> Despedida de soltero de Coto.</span></p>
<p style="margin-left: 2em; margin-bottom: -0.5em;"><span><br />
</span></p>
<div id="crp_related"><h3>Post relacionados:</h3><ul><li><a href="http://blog.igayoso.net/twittea-la-potencia-de-electricidad-en-la-red-electrica/" rel="bookmark">Twittea la potencia de electricidad en la red eléctrica</a></li><li><a href="http://blog.igayoso.net/bebe-que-twittea-antes-de-nacer-kickbee/" rel="bookmark">Bebe que twittea antes de nacer - kickbee</a></li><li><a href="http://blog.igayoso.net/script-para-bajar-todas-las-canciones-de-ultrastar-es-org/" rel="bookmark">Script para bajar todas las canciones de ultrastar-es.org</a></li><li><a href="http://blog.igayoso.net/un-water-twitteador/" rel="bookmark">Un water twitteador</a></li><li><a href="http://blog.igayoso.net/screencast-1-iniciacion-wordpress/" rel="bookmark">Screencast #1: Iniciación Wordpress</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.igayoso.net/legendario/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
