<?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>Sistemas &#8211; MarcosBL</title>
	<atom:link href="https://blog.marcosbl.com/area/informatica/sistemas/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.marcosbl.com</link>
	<description>Maestro de nada</description>
	<lastBuildDate>Thu, 24 Feb 2022 15:12:04 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blog.marcosbl.com/assets/cropped-avatar-32x32.png</url>
	<title>Sistemas &#8211; MarcosBL</title>
	<link>https://blog.marcosbl.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Tu servicio DynDNS bajo tu propio dominio</title>
		<link>https://blog.marcosbl.com/servicio-dyndns-propio-dominio/2476/</link>
					<comments>https://blog.marcosbl.com/servicio-dyndns-propio-dominio/2476/#comments</comments>
		
		<dc:creator><![CDATA[MarcosBL]]></dc:creator>
		<pubDate>Sun, 27 Nov 2016 00:36:30 +0000</pubDate>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">https://marcosbl.com/blog/?p=2476</guid>

					<description><![CDATA[<p class="lead">Cuando tengo que trabajar con IPs dinámicas, por lo general utilizo los servicios de https://freedns.afraid.org/ para todas mis necesidades de hosts/dominios. Tienen un subdominio muy corto (xxx.us.to) que me resulta agradable, el servicio es gratuito, y lleva un montón de años dando batalla de forma fiable. Sin embargo, puede que te salte la necesidad de hacer esto mismo bajo tu&#8230;</p><p class="more-link-p"><a class="btn btn-danger" href="https://blog.marcosbl.com/servicio-dyndns-propio-dominio/2476/">Leer más &#8594;</a></p>]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" src="https://blog.marcosbl.com/assets/1-6.png" alt="1" width="200" height="200" class="alignright size-full wp-image-2483" srcset="https://blog.marcosbl.com/assets/1-6.png 200w, https://blog.marcosbl.com/assets/1-6-150x150.png 150w" sizes="(max-width: 200px) 100vw, 200px" />Cuando tengo que trabajar con IPs dinámicas, por lo general utilizo los servicios de <a href="https://freedns.afraid.org/" target="_blank">https://freedns.afraid.org/</a> para todas mis necesidades de hosts/dominios. Tienen un subdominio muy corto (xxx.us.to) que me resulta agradable, el servicio es gratuito, y lleva un montón de años dando batalla de forma fiable.</p>
<p>Sin embargo, puede que te salte la necesidad de hacer esto mismo bajo tu propio dominio, aunque solo sea por el detalle de branding de poder ofrecer subdominios del tipo <b>cliente1.tudominio.com</b>, <b>cliente2.tudominio.com</b>, <b>tucasa.tudominio.com</b>, etc&#8230; si esto es así, y <a href="https://www.ovh.es/dominios/" target="_blank"><strong>tienes tu dominio en OVH</strong></a>, estás de suerte, sigue leyendo. Si no es así, conmino a <a href="http://blog.e-shell.org/" target="_blank">Mr. Wu</a> a hacerse un post compartiendo su solución bind-based ;) (o siempre puedes gastarte unos eurillos al año en mantener un dominio en OVH para este menester).</p>
<h2>Creación del subdominio y usuario en el panel de OVH</h2>
<p>Elegimos nuestro dominio desde el panel de control de cliente de OVH, y vamos a la pestaña <b>DynHost</b>, donde creamos un DynHost y un usuario de control para gestionarlo</p>
<p><img fetchpriority="high" decoding="async" src="https://blog.marcosbl.com/assets/1-2.png" alt="1" width="959" height="412" class="aligncenter size-full wp-image-2477" srcset="https://blog.marcosbl.com/assets/1-2.png 959w, https://blog.marcosbl.com/assets/1-2-500x215.png 500w" sizes="(max-width: 959px) 100vw, 959px" /></p>
<p>En el subdominio, introducimos el <b>nombre (subdominio)</b> deseado, en la IP, <b>1.1.1.1</b> (nos permitirá comprobar luego que el actualizador funciona correctamente)</p>
<p><img decoding="async" src="https://blog.marcosbl.com/assets/1-3.png" alt="1" width="582" height="539" class="aligncenter size-full wp-image-2478" srcset="https://blog.marcosbl.com/assets/1-3.png 582w, https://blog.marcosbl.com/assets/1-3-324x300.png 324w" sizes="(max-width: 582px) 100vw, 582px" /></p>
<p>A continuación, creamos un usuario, desde <i>Gestionar los accesos &#8211; Crear un usuario</i>, este tendrá la forma <b>midominio.com-loquequieras</b> y tu <b>contraseña</b>. También podremos asignar si ese usuario puede gestionar un único subdominio concreto, o todos <b>(con *)</b>. Si solo vamos a configurar máquinas propias, elegimos esta última opción. Si no, creamos un usuario por cliente, por ejemplo, para mantener la privacidad de nuestra contraseña.</p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/1-4.png" alt="1" width="583" height="586" class="aligncenter size-full wp-image-2479" srcset="https://blog.marcosbl.com/assets/1-4.png 583w, https://blog.marcosbl.com/assets/1-4-150x150.png 150w, https://blog.marcosbl.com/assets/1-4-298x300.png 298w" sizes="auto, (max-width: 583px) 100vw, 583px" /></p>
<p>Con esto ya tenemos nuestro host configurado, con una IP falsa, como podemos ver en esta imagen:</p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/YRheD73.png" alt="1" width="730" height="132" class="aligncenter size-full wp-image-2481" srcset="https://blog.marcosbl.com/assets/YRheD73.png 730w, https://blog.marcosbl.com/assets/YRheD73-500x90.png 500w" sizes="auto, (max-width: 730px) 100vw, 730px" /></p>
<h2>Actualización programada del host</h2>
<p>Es hora de irnos a nuestra máquina cliente y configurarla para actualizar esta IP a la real. Obviamente el método dependerá mucho de si es una máquina Windows (tarea programada con wget por ejemplo) o Linux (un simple cron con wget).</p>
<p>El protocolo de OVH es compatible con el de <a href="http://Dyndns.org" target="_blank">Dyndns.org</a> , y en su página de <a href="http://guias.ovh.es/DynDns" target="_blank">guías sobre DynHosts</a> ofrecen varios métodos y softwares para actualizar esta IP. Sin embargo, me han parecido anacrónicos y complejos, teniendo en cuenta que el propio OVH te ofrece una URL de actualización genial para realizar esta misma labor con un <b>curl básico</b>:</p>
<pre class='prettyprint lang-default-markup'>curl --user "tudominio.com-usuario:contraseña" "https://www.ovh.com/nic/update?system=dyndns&hostname=micasa.tudominio.com"</pre>
<p><strong>¡Y eso es todo!</strong> Una única petición con tu usuario y contraseña recién creados, y el subdominio/dominio que quieres actualizar. Basta con añadirla al cron cada 10 minutillos, y listo, ya tenemos nuestro propio servicio DynDNS bajo nuestro propio dominio. Podemos comprobar tras lanzar el comando, que en el panel de OVH ya nos figura la nueva IP, y esta es perfectamente funcional:</p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/1-5.png" alt="1" width="709" height="132" class="aligncenter size-full wp-image-2482" srcset="https://blog.marcosbl.com/assets/1-5.png 709w, https://blog.marcosbl.com/assets/1-5-500x93.png 500w" sizes="auto, (max-width: 709px) 100vw, 709px" /></p>
<p>Kudos a mi <i>viciño</i> <a href="https://oscarmlage.com/" target="_blank">Oscar M. Lage</a>, culpable inspirador de este post, y a los amiguetes de <a href="http://ovh_es" target="_blank"><strong>@ovh_es</strong></a></p>
<h2>Have fun!</h2>
<p><img decoding="async" src="https://i.imgur.com/r6aJJxj.gif" alt="" class="aligncenter size-full"/></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.marcosbl.com/servicio-dyndns-propio-dominio/2476/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Allocated</title>
		<link>https://blog.marcosbl.com/allocated/2376/</link>
		
		<dc:creator><![CDATA[MarcosBL]]></dc:creator>
		<pubDate>Thu, 09 Apr 2015 03:43:13 +0000</pubDate>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">http://marcosbl.com/blog/?p=2376</guid>

					<description><![CDATA[<p class="lead">I don&#8217;t know what your PID is. I don&#8217;t know who issued your certificate. If you&#8217;re looking for more RAM, I can tell you I don&#8217;t have any left&#8230; But what I do have are a very particular set of system management tools. Tools I have acquired over a very long career. Tools that make me a nightmare for processes&#8230;</p><p class="more-link-p"><a class="btn btn-danger" href="https://blog.marcosbl.com/allocated/2376/">Leer más &#8594;</a></p>]]></description>
										<content:encoded><![CDATA[<p>I don&#8217;t know what your PID is.<br />
I don&#8217;t know who issued your certificate.<br />
If you&#8217;re looking for more RAM, I can tell you I don&#8217;t have any left&#8230; </p>
<p>But what I do have are a very particular set of system management tools.<br />
Tools I have acquired over a very long career.<br />
Tools that make me a nightmare for processes like you.</p>
<p>If you let me close your window now, that will be the end of it<br />
I will not look you up, I will not un-register you&#8230;<br />
But if you don&#8217;t:</p>
<p>I will look for you<br />
I will terminate you<br />
And I will uninstall you.</p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/kill9.jpg" alt="kill9" width="450" height="190" class="size-full wp-image-2377" srcset="https://blog.marcosbl.com/assets/kill9.jpg 450w, https://blog.marcosbl.com/assets/kill9-300x127.jpg 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>La nube personal: Tu propio Dropbox gratis sin límites de espacio gracias a Bittorrent Sync</title>
		<link>https://blog.marcosbl.com/la-nube-personal-tu-propio-dropbox-gratis-sin-limites-de-espacio-gracias-bittorrent-sync/2315/</link>
					<comments>https://blog.marcosbl.com/la-nube-personal-tu-propio-dropbox-gratis-sin-limites-de-espacio-gracias-bittorrent-sync/2315/#comments</comments>
		
		<dc:creator><![CDATA[MarcosBL]]></dc:creator>
		<pubDate>Mon, 10 Nov 2014 11:44:29 +0000</pubDate>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">http://marcosbl.com/blog/?p=2315</guid>

					<description><![CDATA[<p class="lead">El problema del espacio en la nube Tras asegurarme en el último artículo de disponer de Copias de seguridad incrementales de forma automática, era el momento de enfrentar otro problema recurrente: el de la sincronización de archivos. Desde que nació mi hija pequeña, la cantidad de fotografías y vídeos que hacemos de nuestro retoño no para de crecer de forma&#8230;</p><p class="more-link-p"><a class="btn btn-danger" href="https://blog.marcosbl.com/la-nube-personal-tu-propio-dropbox-gratis-sin-limites-de-espacio-gracias-bittorrent-sync/2315/">Leer más &#8594;</a></p>]]></description>
										<content:encoded><![CDATA[<h2>El problema del espacio en la nube</h2>
<p>Tras asegurarme en el último artículo de disponer de <a href="http://blog.marcosbl.com/copias-seguridad-incrementales-automaticas-amazon-s3-duplicity-duply/2306/" target="_blank">Copias de seguridad incrementales de forma automática</a>, era el momento de enfrentar otro problema recurrente: el de la sincronización de archivos. </p>
<p>Desde que nació mi hija pequeña, la cantidad de fotografías y vídeos que hacemos de nuestro retoño no para de crecer de forma brutal; son datos para mí críticos, al fin y al cabo, no volverá a tener tres meses, ni dar sus primeros pasos, así que el incluir estos datos en la copia de seguridad, era un <strong>sí, o <a href="https://twitter.com/casaucao/status/531786785274482689" target="_blank">sí</a></strong>.</p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/arya-chocolateada.jpg" alt="arya chocolateada" width="300" height="259" class="aligncenter size-full wp-image-2328" /></p>
<p>Pero es que además nos gusta poder ver estos recuerdos en cualquier momento, en casa, en la oficina, estando con el portátil de vacaciones, etc&#8230; algo que primero suplí con <a href="https://db.tt/eugr4pA" target="_blank">Dropbox </a>(12 Gb), luego con <a href="https://www.google.com/drive/" target="_blank">Google Drive</a> (35 Gb gracias a una promo), y últimamente con <a href="https://mega.co.nz/" target="_blank">Mega.co.nz</a> (50 Gb). Pero apenas ha pasado año y medio, y ya no hay nube que baste, así que necesitaba buscar otra solución, o pasar por caja, por ejemplo con el <a href="https://db.tt/eugr4pA" target="_blank">plan de 1 Tb de Dropbox</a>.</p>
<h2>Meet Bittorrent Sync</h2>
<p>Antes de elegir <a href="http://www.getsync.com/intl/es/" target="_blank">BTSync</a> consideré varias opciones:</p>
<ul>
<li>El plan de 1 Tb de Dropbpox no es demasiado caro, 9.99 €/mes, pero no me gusta pagar por lo que no utilizo, y además solo permite compartir una carpeta</li>
<li>Salvo la honrosa excepción de <a href="http://mega.co.nz" target="_blank">http://mega.co.nz</a> todos los demás te obligan a elegir una carpeta de tu PC, y todo debe ir ahí, no te permite sincronizar varias carpetas en diferentes unidades de disco, lo que a mi se me hacía insufrible.</li>
<li>OVH tiene su propia solución de almacenamiento y sincronización, <a href="https://hubic.com/es/" target="_blank">Hubic</a>, com planes muy atractivos, como 25 Gb gratis, 100 Gb por 1€/mes o <strong>10 Tb por 10€/mes</strong>, pero su cliente de sincronización colgaba mi PC hasta límites insufribles.</li>
<li>La posibilidad de tener todo en un FTP privado, lo que hacía complicado su uso desde móvil, o incluso desde escritorio para el resto de componentes de la familia</li>
</ul>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/BitTorrent-Sync.jpg" alt="" width="570" height="375" class="aligncenter size-full wp-image-2327" srcset="https://blog.marcosbl.com/assets/BitTorrent-Sync.jpg 570w, https://blog.marcosbl.com/assets/BitTorrent-Sync-300x197.jpg 300w" sizes="auto, (max-width: 570px) 100vw, 570px" /></p>
<p>Tras analizar todo esto, y ver docenas de alternativas, elegí <a href="http://www.getsync.com/intl/es/" target="_blank">Bittorrent Sync</a>, evaluando sus pros y contras, por estos motivos:</p>
<ul>
<li><strong>PRO</strong>: Espacio ilimitado, hasta donde llegue nuestro disco duro, sin coste adicional</li>
<li><strong>PRO</strong>: Disponibilidad de mis ficheros en cualquier dispositivo, en cualquier momento</li>
<li><strong>PRO</strong>: Velocidad de actualización estupenda, sin límites de velocidad</li>
<li><strong>PRO</strong>: Clientes de escritorio ligeros y con excepcional rendimiento</li>
<li><strong>PRO</strong>: Beta Block-Level diffs, en la mayoría de los casos se sincronizan partes de archivo modificadas, en lugar de todo el archivo</li>
<li><strong>PRO</strong>: Si no usas un servidor centralizado, coste cero</li>
<li><strong>CONTRA</strong>: Si todos los PCs están apagados, no podrás acceder a tus contenidos, mientras que en Dropbox están siempre disponibles en su Interface Web. Para esto basta con añadir a la mezcla, aparte de tus PCs habituales, un servidor dedicado que esté siempre encendido. En mi caso ya lo tengo, ya que me dedico al desarrollo web, pero un simple VPS o dedicado de 5€ al mes (o un NAS siempre encendido en casa) te sirve para esta función, igualando esta ventaja de Dropbox.</li>
<li><strong>CONTRA</strong>: No dispones de interface web para ver tus contenidos. Esto lo solucionamos con un Apache/nginx, apuntado a la carpeta BTSync. Ajustamos que liste directorios y lo protegemos con usuario/contraseña, y dispondremos automáticamente de una interfaz web de la que poder descargar contenidos, o compartir con la familia y amigos.</li>
</ul>
<p>Si te ha convencido la idea, la instalación como cliente es trivial, <a href="http://www.getsync.com/intl/es/download" target="_blank">descargas tu cliente BTSync</a> para Windows, Mac, Linux, FreeBSD&#8230; y te lías a compartir carpetas como si estuvieses loco. Y hasta puedes instalarlo en tu Android, iOS o Windows Phone y lo configuras para que suba todas tus fotos y vídeos.</p>
<p>En el resto del artículo vamos a ver cómo definir un nodo en un servidor, para asegurarnos de tener acceso a nuestros datos aunque todos nuestros PCs habituales estén apagados en un momento dado, lo que sería un <strong>nodo always-on</strong>.</p>
<h2>Instalación de dependencias</h2>
<h3>Instalación desde PPA</h3>
<pre class='prettyprint lang-default-markup'>sudo add-apt-repository ppa:tuxpoldo/btsync
sudo apt-get update</pre>
<p>Para utilizarlo en nuestro PC desde escritorio:</p>
<pre class='prettyprint lang-default-markup'>sudo apt-get install btsync-user</pre>
<p>Para su uso en el servidor que utilizaremos como servidor always-on:</p>
<pre class='prettyprint lang-default-markup'>sudo apt-get install btsync</pre>
<h3>Instalación manual de la última versión para el servidor always-on</h3>
<p>Adaptamos la URL de descarga a 32/64 bits según convenga</p>
<pre class='prettyprint lang-default-markup'>cd /tmp
wget -O /tmp/btsync.tar.gz http://download.getsyncapp.com/endpoint/btsync/os/linux-x64/track/stable
tar -xzvf /tmp/btsync.tar.gz
mv btsync /usr/local/bin/
chmod +x /usr/local/bin/btsync</pre>
<h2>Configuración del sistema</h2>
<p>Creamos una carpeta de configuración y hacemos que el propio ejecutable genere por nosotros una configuración por defecto, que editaremos a continuación</p>
<pre class='prettyprint lang-default-markup'>mkdir /etc/btsync
btsync --dump-sample-config > /etc/btsync/btsync.conf</pre>
<p>Y modificando dicho fichero <strong>/etc/btsync/btsync.conf</strong> , configuraremos el sistema a nuestro gusto. Esta configuración es mínima, muy sencilla; en mi caso, utilizo la carpeta <strong>/home/btsync</strong> como almacén de todo el sistema, y defino el usuario y contraseña de acceso a la interface web.</p>
<pre class='prettyprint lang-default-markup'>mkdir /home/btsync</pre>
<pre class='prettyprint lang-default-markup'>"device_name": "Servidor OVH",
"storage_path" : "/home/btsync/",
"login" : "admin",
"password_hash" : "$1$xyz$EkmDnELo2ZAMjAxWHcsTu2",
"directory_root" : "/home/btsync/"</pre>
<p>El password_hash podemos generarlo desde un servicio online como <a href="http://maord.com/" target="_blank">http://maord.com/</a> o desde consola con algo del estilo</p>
<pre class='prettyprint lang-default-markup'>openssl passwd -1 -salt xyz AQUITUPASSWORD</pre>
<p>Ahora crearemos un fichero de configuración que nos permita iniciar, detener o reiniciar el servicio cuando queramos, en <strong>/etc/init/btsync.conf</strong> copiaremos el siguiente código:</p>
<pre class='prettyprint lang-default-markup'># Bittorrent Sync server.
#
# Sync your files and stuff.

description "BitTorrent Sync"

start on filesystem
stop on shutdown

respawn

expect fork

script
exec start-stop-daemon -S -c root:root -x /usr/local/bin/btsync -- --config /etc/btsync/btsync.conf
end script

pre-stop script
killall btsync
end script
</pre>
<p>Esto nos permitirá utilizar estos comandos para iniciar, detener o reiniciar el servicio</p>
<pre class='prettyprint lang-default-markup'>service btsync start
service btsync stop
service btsync restart</pre>
<h2>Uso de BTSync desde el servidor</h2>
<p>Por defecto, BTSync escucha en el puerto <strong>8888</strong> en todas las IPs de nuestra máquina online, así que accedemos a él, sea por IP o por hostname ( http://aqui.la.ip.servidor:8888 ), y veremos una interface de este estilo:</p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/btsync-server.png" alt="" width="726" height="406" class="aligncenter size-full wp-image-2316" srcset="https://blog.marcosbl.com/assets/btsync-server.png 726w, https://blog.marcosbl.com/assets/btsync-server-300x167.png 300w" sizes="auto, (max-width: 726px) 100vw, 726px" /></p>
<p>Podemos definir qué columnas queremos ver en la interface desde el botón de configuración</p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/btsync-web-conf.png" alt="" width="290" height="110" class="aligncenter size-full wp-image-2321" /></p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/btsync-web-config.png" alt="" width="608" height="704" class="aligncenter size-full wp-image-2320" srcset="https://blog.marcosbl.com/assets/btsync-web-config.png 608w, https://blog.marcosbl.com/assets/btsync-web-config-259x300.png 259w" sizes="auto, (max-width: 608px) 100vw, 608px" /></p>
<p>Es hora de compartir en nuestro PC la primera carpeta, obtendremos el enlace o clave BTSync desde nuestro cliente de escritorio, que por ejemplo en Windows luce así:</p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/btsync-client-win.png" alt="" width="609" height="532" class="aligncenter size-full wp-image-2317" srcset="https://blog.marcosbl.com/assets/btsync-client-win.png 609w, https://blog.marcosbl.com/assets/btsync-client-win-300x262.png 300w" sizes="auto, (max-width: 609px) 100vw, 609px" /></p>
<p>Pulsando el botón <strong>Copiar</strong> obtendremos una clave de carpeta, que pegaremos a continuación en la interface web de nuestro servidor, utilizando el menú superior.</p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/btsync-enter-key.png" alt="" width="282" height="125" class="aligncenter size-full wp-image-2318" /> </p>
<p>El sistema nos preguntará donde queremos sincronizar esta carpeta (por defecto, nos ofrecerá la indicada en btsync.conf como directory_root)</p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/btsync-select-folder.png" alt="" width="723" height="189" class="aligncenter size-full wp-image-2319" srcset="https://blog.marcosbl.com/assets/btsync-select-folder.png 723w, https://blog.marcosbl.com/assets/btsync-select-folder-300x78.png 300w" sizes="auto, (max-width: 723px) 100vw, 723px" /></p>
<p>¡ Listo ! En unos segundos comenzará la sincronización</p>
<h2>Uso y Ventajas de la sincronización Bittorrent</h2>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/8b01ae83e64707f6e936a32e4960f6ef.jpg" alt="" width="233" height="216" class="alignright size-full wp-image-2329" />A partir de ahora bastará con copiar o mover contenidos de nuestro PC a la carpeta compartida mediante BTSync para que estos se propagen automáticamente a toda al red de nodos conectados, de forma muy similar a cómo lo haríamos con Dropbox, Google Drive o cualquier otro sistema de almacenamiento online, con la ventaja de que todos ellos ( salvo la honrosa excepción de <a href="http://mega.co.nz" target="_blank">http://mega.co.nz</a> ) te obligan a centralizar todo en una nueva carpeta que ellos crean, pudiendo únicamente sincronizar dicha carpeta, mientras que BTSync nos permite compartir múltiples carpetas en múltiples unidades de disco diferenciadas, a nuestro gusto.</p>
<p>En esta captura se puede ver cómo sincronizo 84 Gb de fotos y videos familiares, entre 3 dispositivos (PC de casa, PC del trabajo y un servidor en OVH). En el momento de la captura, el PC de casa (fuente original de los ficheros) está apagado, pero esto no supone ningún problema, ya que al estar el servidor de OVH siempre activo, el PC del trabajo comienza la sincronización desde él, mostrando los dos pares conectados.</p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/btsync-sync.png" alt="" width="873" height="200" class="aligncenter size-full wp-image-2322" srcset="https://blog.marcosbl.com/assets/btsync-sync.png 873w, https://blog.marcosbl.com/assets/btsync-sync-300x68.png 300w" sizes="auto, (max-width: 873px) 100vw, 873px" /></p>
<p>Además, si en un momento dado enciendo el PC de casa durante esta sincronización, detectará automáticamente el nuevo peer, y comenzará a subir contenidos por su parte, contribuyendo al upload, y haciendo la propagación de los datos mucho más rápida gracias a la propia naturaleza descentralizada del protocolo bittorrent.</p>
<p>Otro punto a favor de BTSync es que basta apuntar a la carpeta BTSync que queramos un vhost apache con listado de directorios y un usuario/contraseña de acceso mediante un .htaccess, para disponer automáticamente de una interfaz web de la que poder descargar contenidos, o compartir con la familia y amigos.</p>
<p>Y por último, si queremos rizar el rizo, ya no es necesario ni compartir via web las fotos y videos de la peque; instalamos BTSync en el PC de abuelos, tías y primos, compartimos con ellos la carpeta como solo lectura, y basta con que enciendan el ordenador para que puedan acceder, mágicamente, a todas las nuevas fotos de nuestro retoño, en su propio PC, de forma automática.</p>
<h3>Soporte BTSync de dispositivos</h3>
<p>Disponemos de <a href="http://www.getsync.com/intl/es/download" target="_blank">clientes BTSync</a> para Windows, Mac, Linux, FreeBSD y varios dispositivos embebidos, asi como para Android, iOS, Windows Phone y Kindle Fire, asi que la compatibilidad no debería ser un problema. Obviamente, en el móvil no dispondremos de espacio para sincronizar 80 Gb de datos, pero si podemos sincronizar una carpeta de «Documentos» pequeña que queramos tener siempre accesible, disfrutando de similar comodidad a la de Dropbox. </p>
<p>Y para nuestras fotos y vídeos desde el dispositivo móvil, podemos configurar en el mismo una sincronización unidreccional (solo subida) que nos permita disponer de sincronización automática de nuestras fotos y videos en nuestra nube personal.</p>
<h3>Postdata para el escritorio de Ubuntu</h3>
<p>El soporte visual para Ubuntu puede obtenerse además de forma muy lograda, sin necesidad de utilizar la interface web, con un par de PPAs adicionales</p>
<pre class='prettyprint lang-default-markup'>sudo add-apt-repository ppa:tuxpoldo/btsync
sudo apt-get update
sudo apt-get install btsync-gui
</pre>
<p>Si prefieres la versión GTK sin indicador:</p>
<pre class='prettyprint lang-default-markup'>sudo apt-get install btsync-gui-gtk</pre>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/btsync_gui_indicator.png" alt="" width="288" height="269" class="aligncenter size-full wp-image-2323" /></p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/btsync_gui.jpg" alt="" width="580" height="333" class="aligncenter size-full wp-image-2324" srcset="https://blog.marcosbl.com/assets/btsync_gui.jpg 580w, https://blog.marcosbl.com/assets/btsync_gui-300x172.jpg 300w" sizes="auto, (max-width: 580px) 100vw, 580px" /></p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/btsync_gui1.jpg" alt="" width="580" height="403" class="aligncenter size-full wp-image-2325" srcset="https://blog.marcosbl.com/assets/btsync_gui1.jpg 580w, https://blog.marcosbl.com/assets/btsync_gui1-300x208.jpg 300w" sizes="auto, (max-width: 580px) 100vw, 580px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.marcosbl.com/la-nube-personal-tu-propio-dropbox-gratis-sin-limites-de-espacio-gracias-bittorrent-sync/2315/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>Copias de seguridad incrementales de forma automática en Amazon S3 con Duplicity y Duply</title>
		<link>https://blog.marcosbl.com/copias-seguridad-incrementales-automaticas-amazon-s3-duplicity-duply/2306/</link>
					<comments>https://blog.marcosbl.com/copias-seguridad-incrementales-automaticas-amazon-s3-duplicity-duply/2306/#comments</comments>
		
		<dc:creator><![CDATA[MarcosBL]]></dc:creator>
		<pubDate>Wed, 22 Oct 2014 02:26:16 +0000</pubDate>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">http://marcosbl.com/blog/?p=2306</guid>

					<description><![CDATA[<p class="lead">A finales del año pasado perdí gran parte de los datos de mi empresa. Y no porque no tuviese backups, sino por ser poco paranoico. En mi caso, todos los datos de un servidor central se copiaban a otro disco por medio de incrementales. De ahí, se trasladaban a otra máquina por rsync, y esa otra máquina los enviaba a&#8230;</p><p class="more-link-p"><a class="btn btn-danger" href="https://blog.marcosbl.com/copias-seguridad-incrementales-automaticas-amazon-s3-duplicity-duply/2306/">Leer más &#8594;</a></p>]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" class="alignright size-full wp-image-2311" src="https://blog.marcosbl.com/assets/converted-5ac38bed.jpg" alt="" width="237" height="304" srcset="https://blog.marcosbl.com/assets/converted-5ac38bed.jpg 237w, https://blog.marcosbl.com/assets/converted-5ac38bed-233x300.jpg 233w" sizes="auto, (max-width: 237px) 100vw, 237px" /></p>
<p>A finales del año pasado perdí gran parte de los datos de mi empresa. Y no porque no tuviese backups, sino por ser poco paranoico. En mi caso, todos los datos de un servidor central se copiaban a otro disco por medio de incrementales. De ahí, se trasladaban a otra máquina por rsync, y esa otra máquina los enviaba a dos servidores diferentes en nuestro proveedor de hosting. <strong>En total, 4 copias diferentes en tres lugares geográficos diferentes.</strong></p>
<p>Pero bastó un fallo eléctrico en la placa del servidor (que destruyó el disco original y el de copias), combinado con un bug en rsync (tenía una versión «algo» desfasada) que hacía que al no poder leer de origen asumiese que origen estuviese vacío, y eliminase en destino.</p>
<p><strong>En resumen:</strong> casca la placa, se lleva por delante el disco original y el de copias. Esto pasa en un fin de semana, no estando físicamente en la oficina. El sábado salta el rsync automático desde el servidor B, que al no poder leer de A, asume que está vacio, y borra todo en B (bug de rsync). Esa misma noche, lanza los rsync contra los servidores online, al estar B vacío, vacía C y D. Cuando el Lunes llego a la oficina y voy tirando poco a poco del hilo, casi infarto.</p>
<p>Al final pude recuperar gran parte del trabajo gracias a la copia mensual que hago en un disco externo USB y me llevo a casa (aquella en la que menos confiaba!), pero la experiencia me sirvió para aprender que, <strong>en copias de seguridad, nunca hay demasiada paranoia</strong> y que, por supuesto, debía buscar otra opción para mis copias. Lo primero fue un RAID en los discos de ese servidor, y lo segundo un sistema de copias desatendidas en múltiples localizaciones, incrementales, y no dependientes de rsync, a quien desde ese fatídico día odio, desprecio e insulto cada vez que tengo ocasión.</p>
<h2>Meet Amazon S3</h2>
<p>El bajo coste de almacenamiento en la famosa nube S3 (Simple Storage Service) de Amazon, unido a su réplica automática en 3 diferentes localizaciones geográficas, lo hace ideal para el almacenamiento de copias de seguridad. Si además podemos hacer que sean <strong>automáticas</strong>, sin intervención del usuario, e <strong>incrementales</strong>, para poder volver N días al pasado sin problema, tenemos una solución robusta y fiable para poder despreocuparnos de esta tarea.</p>
<p>El coste es, como ya comentaba, ridículo, esta es mi factura por las copias de mis servidores dedicados del mes de Septiembre (unos 38 Gb de datos, 43 Gb contando las incrementales)</p>
<p><a href="http://blog.marcosbl.com/assets/gkaXt9u.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2307" src="https://blog.marcosbl.com/assets/gkaXt9u.png" alt="Factura Amazon S3" width="766" height="401" srcset="https://blog.marcosbl.com/assets/gkaXt9u.png 766w, https://blog.marcosbl.com/assets/gkaXt9u-300x157.png 300w" sizes="auto, (max-width: 766px) 100vw, 766px" /></a></p>
<p>Para Windows disponemos de <strong><a href="http://www.duplicati.com/" target="_blank" rel="noopener">Duplicati</a></strong>, un software con interface de usuario, con lo que no me extenderé más en su uso; para linux y derivados, vamos a ver una implementación con <strong><a href="http://duplicity.nongnu.org/" target="_blank" rel="noopener">Duplicity</a></strong>, un software de backup de sobrada eficiencia, y <strong><a href="http://duply.net/" target="_blank" rel="noopener">Duply</a></strong>, un frontend más «amigable» a Duplicity, que se apoya a su vez en la interface a AWS de Amazon <strong><a href="https://github.com/boto/boto" target="_blank" rel="noopener">python-boto</a></strong></p>
<h2>Ajustes en Amazon S3</h2>
<p>Lo primero es crear un bucket en Amazon, los pasos desde <strong><a href="https://console.aws.amazon.com/s3/home?region=us-east-1" target="_blank" rel="noopener">la consola de Amazon</a></strong> son bastante sencillos, crear el bucket, darle un nombre y elegir región (la más cercana a España es Irlanda) y <strong><a href="https://console.aws.amazon.com/iam/home?#security_credential" target="_blank" rel="noopener">crear un usuario de acceso y contraseña</a></strong>:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2308" src="https://blog.marcosbl.com/assets/createbucket.png" alt="" width="282" height="151" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2309" src="https://blog.marcosbl.com/assets/S3_Region.png" alt="" width="630" height="336" srcset="https://blog.marcosbl.com/assets/S3_Region.png 630w, https://blog.marcosbl.com/assets/S3_Region-300x160.png 300w" sizes="auto, (max-width: 630px) 100vw, 630px" /></p>
<p><a href="http://blog.marcosbl.com/assets/ruby-dg-console-iam-role-policy-template.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2310" src="https://blog.marcosbl.com/assets/ruby-dg-console-iam-role-policy-template.png" alt="" width="774" height="514" srcset="https://blog.marcosbl.com/assets/ruby-dg-console-iam-role-policy-template.png 774w, https://blog.marcosbl.com/assets/ruby-dg-console-iam-role-policy-template-300x199.png 300w" sizes="auto, (max-width: 774px) 100vw, 774px" /></a></p>
<p>¿Estamos? Pues pasamos al servidor.</p>
<h2>Instalación de dependencias</h2>
<p>Empezamos por instalar las dependencias necesarias, en Ubuntu añadiremos el PPA de duplicity para disponer de la última versión, reemplazando «precise» por vuestra versión (lsb_release -c os dará la pista).</p>
<pre class='prettyprint lang-bsh'>
echo deb http://ppa.launchpad.net/duplicity-team/ppa/ubuntu precise main | sudo tee /etc/apt/sources.list.d/duplicity.list
sudo apt-get update
</pre>
<pre class='prettyprint lang-bsh'>
sudo apt-get install duplicity duply python-boto
</pre>
<h2>Configurando nuestra copia de seguridad</h2>
<p>Ahora crearemos nuestra primera tarea de copias (podemos tener ilimitadas, con diferentes configuraciones). La denominaremos con el original nombre «cloud_backup»</p>
<pre class='prettyprint lang-bsh'>
duply cloud_backup create
</pre>
<p>Lo que nos devolverá un mensaje de confirmación similar a este:</p>
<pre class='prettyprint lang-default-markup'>Congratulations. You just created the profile 'cloud_backup'.
The initial config file has been created as
'/root/.duply/cloud_backup/conf'.
You should now adjust this config file to your needs.

IMPORTANT:
Copy the _whole_ profile folder after the first backup to a safe place.
It contains everything needed to restore your backups. You will need
it if you have to restore the backup from another system (e.g. after a
system crash). Keep access to these files restricted as they contain
_all_ informations (gpg data, ftp data) to access and modify your backups.

Repeat this step after _all_ configuration changes. Some configuration
options are crucial for restoration.
</pre>
<p>Básicamente nos dice que ha creado el perfil de copias en &#8216;/root/.duply/cloud_backup/conf&#8217; y que más vale que hagamos una copia de ese fichero por si la máquina «revienta» en el futuro, para ser capaces de restaurar dichas copias. En general esto no es necesario, siempre que tengamos a salvo nuestras credenciales de FTP, o en este caso, de Amazon AWS. Si lo es si además queremos encriptar dichas copias, una opción útil para los más paranoicos, pero que nos saltaremos en este tutorial básico.</p>
<p>Una vez tenemos nuestra primera tarea de copias creada, la configuraremos editando el fichero &#8216;/root/.duply/cloud_backup/conf&#8217;. Indico solo los parámetros más importantes que he modificado para este tutorial:</p>
<pre class='prettyprint lang-default-markup'>
# no vamos a encriptar las copias
GPG_KEY='disabled'
#GPG_PW='_GPG_PASSWORD_'

# Mi bucket, en Irlanda, por ejemplo, se llama "marcosbl-servers"
# y la carpeta es el alias de cada máquina, cada una tiene una carpeta
TARGET='s3://s3-eu-west-1.amazonaws.com/BUCKET/CARPETABUCKET'
# Usuario de acceso al bucket, se gestionan desde <a href="https://console.aws.amazon.com/iam/home?#security_credential" target="_blank" rel="noopener">la consola de Amazon</a>
TARGET_USER='XXXXXXXXXXXXXXXXXXXX'
# Contraseña de acceso al bucket
TARGET_PASS='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

# la carpeta base de donde vamos a realizar nuestras copias
SOURCE='/'

# Mantendremos nuestras copias antiguas un máximo de tres meses
MAX_AGE=3M
# Mantendremos dos copias completas en todo momentos, por si una se corrompiese
MAX_FULL_BACKUPS=2

# Para evitar ralentización a la hora de leer las copias, subiremos el tamaño de paquete a 250Mb
VOLSIZE=250
DUPL_PARAMS="$DUPL_PARAMS --volsize $VOLSIZE "
</pre>
<p>Una vez configurada nuestra tarea, debemos indicarle qué queremos incluir en nuestra copia de seguridad. Para ello podemos utilizar este truco: editaremos &#8216;/root/.duply/cloud_backup/exclude&#8217;indicando las carpetas que queremos incluir, con un «**» al final para indicarle que solo queremos dichas carpetas.</p>
<pre class='prettyprint lang-default-markup'>
+ /root
+ /home/www
+ /home/vmail
+ /home/flashpolicy
+ /home/mysql
+ /home/radicale
+ /etc
**
</pre>
<p>Si preferís un control más granular, podéis ver todas las opciones de include/exclude de Duply en <a href="http://duplicity.nongnu.org/duplicity.1.html" target="_blank" rel="noopener">http://duplicity.nongnu.org/duplicity.1.html</a> en general basta con poner las rutas más profundas primero, tanto para inclusión como exclusión, y las menos profundas al final, o nos encontraremos con resultados extraños.</p>
<h2>Creando nuestra primera copia</h2>
<p>Una vez tenemos nuestra tarea configurada, y hemos indicado qué carpetas queremos salvaguardar, llega el momento de comprobar nuestra configuración:</p>
<pre class='prettyprint lang-bsh'>
duply cloud_backup backup --preview
</pre>
<p>Si nos parece que todo está correcto, es hora de lanzar nuestra primera copia:</p>
<pre class='prettyprint lang-bsh'>
duply cloud_backup backup
</pre>
<p>Tras el tiempo de rigor, nos dará unas estadísticas de resultado. En nuestro caso 90.831 archivos que ocupaban 18.8 GB han quedado salvaguardados de forma segura ocupando 7.07 GB en Amazon S3 (con un mareante coste total de unos 0.21€ al mes)</p>
<pre class='prettyprint lang-bsh'>
--------------[ Backup Statistics ]--------------
StartTime 1413942182.36 (Wed Oct 22 03:43:02 2014)
EndTime 1413944638.15 (Wed Oct 22 04:23:58 2014)
ElapsedTime 2455.79 (40 minutes 55.79 seconds)
SourceFiles 90831
SourceFileSize 15921487361 (14.8 GB)
NewFiles 90831
NewFileSize 15921487361 (14.8 GB)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 90831
RawDeltaSize 15905323958 (14.8 GB)
TotalDestinationSizeChange 7593087053 (7.07 GB)
Errors 0
-------------------------------------------------

--- Finished state OK at 04:25:41.234 - Runtime 00:42:39.534 ---
</pre>
<p>Si ahora lanzamos el comando de nuevo, al existir ya una copia completa, se realizará de forma automática una copia incremental, en este caso se han modificado entre las dos 48 ficheros, hay 17 nuevos y se han eliminado 3, con un incremento de tamaño de 183 Mb, que han sido salvaguardados en 39 segundos.</p>
<pre class='prettyprint lang-bsh'>
duply cloud_backup backup

Last full backup date: Wed Oct 22 03:43:02 2014
--------------[ Backup Statistics ]--------------
StartTime 1413945201.72 (Wed Oct 22 04:33:21 2014)
EndTime 1413945228.27 (Wed Oct 22 04:33:48 2014)
ElapsedTime 26.55 (26.55 seconds)
SourceFiles 90836
SourceFileSize 15785987879 (14.7 GB)
NewFiles 17
NewFileSize 184389850 (176 MB)
DeletedFiles 3
ChangedFiles 48
ChangedFileSize 811334194 (774 MB)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 68
RawDeltaSize 191377039 (183 MB)
TotalDestinationSizeChange 188097319 (179 MB)
Errors 0
-------------------------------------------------

--- Finished state OK at 04:34:00.248 - Runtime 00:00:39.395 ---
</pre>
<p>Podemos ver el historial de copias con el comando <em>status</em>, en nuestro ejemplo veremos la copia completa (con 29 volúmenes de 250 Mb) y la incremental que hemos lanzado a continuación (1 solo volumen es suficiente)</p>
<pre class='prettyprint lang-bsh'>
duply cloud_backup status

Last full backup date: Wed Oct 22 03:43:02 2014
Collection Status
-----------------
Connecting with backend: BotoBackend
Archive dir: /root/.cache/duplicity/duply_cloud_backup

Found 0 secondary backup chains.

Found primary backup chain with matching signature chain:
-------------------------
Chain start time: Wed Oct 22 03:43:02 2014
Chain end time: Wed Oct 22 04:33:21 2014
Number of contained backup sets: 2
Total number of contained volumes: 30
Type of backup set: Time: Num volumes:
Full Wed Oct 22 03:43:02 2014 29
Incremental Wed Oct 22 04:33:21 2014 1
-------------------------
No orphaned or incomplete backup sets found.
--- Finished state OK at 04:36:32.714 - Runtime 00:00:00.574 ---
</pre>
<h2>Lanzando copias incrementales automáticas</h2>
<p>Una vez realizada la primera copia, el sistema se encarga de realizar una incremental cada vez que llamemos a «duply cloud_backup backup». Como hemos indicado que no se guarden copias superiores a tres meses, al llegar esta antigüedad, se eliminaría la vieja copia y se realizaría una nueva completa, siempre que utilicemos este comando sin más. Para ello basta con añadir una linea a nuestro <em>crontab</em>, por ejemplo, cada día a las 2 AM</p>
<pre class='prettyprint lang-bsh'>
# Copias a Amazon S3
0 2 * * * env HOME=/root /usr/bin/duply cloud_backup backup
</pre>
<p>Duply nos permite forzar una completa cuando queramos, con el comando <em>full</em>, incremental con <em>incr</em>, purgar con <em>purge</em> o <em>purge-full</em>, etc&#8230; lo que nos permite ajustar como queramos simplemente creando crons para estos períodos personalizados. Por ejemplo, con 3 crons podríamos tener incrementales diarias, con una completa cada 15 dias, y ejecutando un purge o purge-full una vez al mes, manteniendo asi dos completas y 30 dias de incrementales.</p>
<h2>Listando las copias disponibles</h2>
<p>Para ver en cualquier momento el estado de nuestras copias de seguridad, basta con hacer un</p>
<pre class='prettyprint lang-bsh'>
duply cloud_backup status

Last full backup date: Mon Oct 13 05:12:26 2014
Collection Status
-----------------
Connecting with backend: BotoBackend
Archive dir: /root/.cache/duplicity/duply_cloud_backup

Found 0 secondary backup chains.

Found primary backup chain with matching signature chain:
-------------------------
Chain start time: Mon Oct 13 05:12:26 2014
Chain end time: Wed Oct 22 02:00:03 2014
Number of contained backup sets: 13
Total number of contained volumes: 13
Type of backup set: Time: Num volumes:
Full Mon Oct 13 05:12:26 2014 68
Incremental Mon Oct 13 05:16:22 2014 1
Incremental Mon Oct 13 05:33:06 2014 1
Incremental Mon Oct 13 05:40:33 2014 1
Incremental Tue Oct 14 02:00:02 2014 2
Incremental Wed Oct 15 02:00:02 2014 1
Incremental Thu Oct 16 02:00:02 2014 1
Incremental Sat Oct 18 10:56:06 2014 3
Incremental Sat Oct 18 10:56:21 2014 1
Incremental Sun Oct 19 02:00:02 2014 1
Incremental Mon Oct 20 02:00:02 2014 1
Incremental Tue Oct 21 02:00:01 2014 2
Incremental Wed Oct 22 02:00:03 2014 1
-------------------------
No orphaned or incomplete backup sets found.
--- Finished state OK at 04:05:20.170 - Runtime 00:00:00.859 ---
</pre>
<p>Como podemos ver, nos lista un extracto del estado de nuestras copias, tanto completas, como incrementales.</p>
<h2>Cómo restaurar una copia</h2>
<p><strong>Recuperación completa</strong></p>
<p>Podemos restaurar una copia con el comando <em>restore</em> de Duply. Es importante hacerlo como root o con sudo para que Duplicity pueda restaurar los metadatos originales del sistema de archivos, tales como permisos, propietarios, etc&#8230; este comando de ejemplo restaura la última copia a una carpeta definida, que no es necesario crear primero, ya que Duplicity lo hará por nosotros.</p>
<pre class='prettyprint lang-bsh'>
sudo duply cloud_backup restore /copia_recuperada
</pre>
<p><strong>Recuperación parcial</strong></p>
<p>Podemos usar el comando <em>fetch</em> para recuperar un archivo concreto.</p>
<pre class='prettyprint lang-bsh'>
sudo duply cloud_backup fetch etc/password /tmp/password
</pre>
<p>Podemos hacer lo mismo con una carpeta</p>
<pre class='prettyprint lang-bsh'>
sudo duply cloud_backup fetch etc /tmp/etc
</pre>
<p><strong>Recuperación en una fecha específica</strong></p>
<p>Cada comando de recuperación acepta una fecha, permitiéndonos recuperarnos en un momento concreto del pasado. Primero, utilizamos el comando <em>status</em> para ver qué fechas de copia tenemos disponibles:</p>
<pre class='prettyprint lang-bsh'>
sudo duply cloud_backup status

Number of contained backup sets: 2
Total number of contained volumes: 2
Type of backup set: Time: Num volumes:
Full Sat Oct 8 07:38:30 2014 1
Incremental Sat Oct 9 07:43:17 2014 1
</pre>
<p>En este ejemplo, recuperaremos la copia del dia 8; la única pega es que tendremos que escribir la fecha en formato w3.</p>
<pre class='prettyprint lang-bsh'>
sudo duply cloud_backup restore /copia_recuperada '2014-10-08T07:38:30'
</pre>
<h2>Conclusión</h2>
<p>Este sistema nos permite, con una línea de comandos sencilla gracias a Duply, acceder a toda la potencia de Duplicity y almacenar en los servidores de Amazon S3, con copias incrementales seguras, y obteniendo así una paz de espíritu considerable. Ya solo nos queda decir&#8230;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2313" src="https://blog.marcosbl.com/assets/converted-01c2cb12.jpg" alt="" width="316" height="465" srcset="https://blog.marcosbl.com/assets/converted-01c2cb12.jpg 316w, https://blog.marcosbl.com/assets/converted-01c2cb12-203x300.jpg 203w" sizes="auto, (max-width: 316px) 100vw, 316px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.marcosbl.com/copias-seguridad-incrementales-automaticas-amazon-s3-duplicity-duply/2306/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Activar MONTONES de conexiones concurrentes en el kernel de linux</title>
		<link>https://blog.marcosbl.com/activar-montones-de-conexiones-concurrentes-en-el-kernel-de-linux/2280/</link>
		
		<dc:creator><![CDATA[MarcosBL]]></dc:creator>
		<pubDate>Fri, 04 Jul 2014 10:57:47 +0000</pubDate>
				<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">http://marcosbl.com/blog/?p=2280</guid>

					<description><![CDATA[<p class="lead"></p><p class="more-link-p"><a class="btn btn-danger" href="https://blog.marcosbl.com/activar-montones-de-conexiones-concurrentes-en-el-kernel-de-linux/2280/">Leer más &#8594;</a></p>]]></description>
										<content:encoded><![CDATA[<pre class='prettyprint lang-default-markup'>echo "10152 65535" > /proc/sys/net/ipv4/ip_local_port_range
sysctl -w fs.file-max=128000
sysctl -w net.ipv4.tcp_keepalive_time=300
sysctl -w net.core.somaxconn=250000
sysctl -w net.ipv4.tcp_max_syn_backlog=2500
sysctl -w net.core.netdev_max_backlog=2500
ulimit -n 10240</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Compresión y gestión de JS/CSS con Grunt</title>
		<link>https://blog.marcosbl.com/compresion-y-gestion-de-js-css-con-grunt/2276/</link>
					<comments>https://blog.marcosbl.com/compresion-y-gestion-de-js-css-con-grunt/2276/#comments</comments>
		
		<dc:creator><![CDATA[MarcosBL]]></dc:creator>
		<pubDate>Thu, 26 Jun 2014 02:50:17 +0000</pubDate>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">http://marcosbl.com/blog/?p=2276</guid>

					<description><![CDATA[<p class="lead">A la hora de desarrollar un sitio web, podemos encontrarnos con la necesidad de ir probando de forma rápida diferentes librerías o plugins Javascript/CSS. Una forma habitual suele ser el descargarlas en local, editar el html enlazándolas, y a base de ensayo y error, ir dejándolas como definitivas en nuestro código o eliminándolas según corresponda. Vamos a ver como realizar&#8230;</p><p class="more-link-p"><a class="btn btn-danger" href="https://blog.marcosbl.com/compresion-y-gestion-de-js-css-con-grunt/2276/">Leer más &#8594;</a></p>]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/grunt.png.png" alt="" width="242" height="287" class="alignright size-full wp-image-2277" />A la hora de desarrollar un sitio web, podemos encontrarnos con la necesidad de ir probando de forma rápida diferentes librerías o plugins Javascript/CSS. Una forma habitual suele ser el descargarlas en local, editar el html enlazándolas, y a base de ensayo y error, ir dejándolas como definitivas en nuestro código o eliminándolas según corresponda.</p>
<p>Vamos a ver como realizar esto de forma cómoda y sencilla mediante tareas <a href="http://gruntjs.com/" target="_blank">Grunt</a>, manteniendo al mismo tiempo la limpieza y optimización de nuestros assets CSS/JS. <a href="http://gruntjs.com/" target="_blank">Grunt.js</a> es una librería JavaScript que nos permite configurar tareas automáticas y así ahorrarnos tiempo en nuestro desarrollo y despliegue.</p>
<p>Antes que os asuste la extensión del post, indicar que el código está duplicado, primero completo, y luego explicado paso a paso, y que me ha llevado escribir este post unas 20 veces más que implementar todo el sistema.</p>
<hr />
<h2>1.- Planteamiento</h2>
<p>En nuestro caso de ejemplo vamos a suponer que nos interesa disponer de:</p>
<ul>
<li>Algunos contenidos CSS y Javascript desde <a href="http://es.wikipedia.org/wiki/Red_de_entrega_de_contenidos" target="_blank">CDNs</a>, con una URL genérica de última versión</li>
<li>Cargamos otros con versiones concretas también desde CDNs</li>
<li>Por último, cargamos otros más desde disco, sean propios o de terceros</li>
</ul>
<p>La estructura de carpeta de estos estáticos será tal que:<br />
<pre class='prettyprint lang-default-markup'>
/s
  /vendor
    /librerias.css
    /librerias.js
  /css
    /mi.css
    /todo.css
  /js
    /mi.js
    /todo.js
</pre></p>
<hr />
<h2>2.- Dependencias</h2>
<p>Dando por supuesto que disponemos de <code><a href="http://nodejs.org/" target="_blank">NodeJS</a></code>, y tras instalar grunt utilizando <a href="https://www.npmjs.org/" target="_blank">npm</a> con un simple <code>sudo npm install -g grunt-cli</code>, empezaremos por definir los módulos de NodeJS que nos interesa importar creando en el root de nuestro proyecto un fichero <code>package.json</code> similar a este:</p>
<pre class='prettyprint lang-json'>
{
    "name" : "PuerLugoMin",
    "title" : "PuerLugoMin",
    "version" : "1.0.0",
    "devDependencies": {
        "grunt": "0.4.5",
        "grunt-contrib-concat": "0.4.0",
        "grunt-contrib-cssmin" : "0.10.0",
        "grunt-contrib-watch" : "0.6.1",
        "grunt-contrib-uglify" : "0.5.0",
        "grunt-curl" : "2.0.2"
    }
}
</pre>
<p>Una vez hecho esto, instalaremos estas dependencias con el comando</p>
<pre class='prettyprint lang-bsh'>
npm install
</pre>
<hr />
<h2>3.- La Tarea Grunt</h2>
<p>Solucionadas las dependencias, definiremos una tarea Grunt de ejemplo <code>Gruntfile.js</code> también en el root de nuestro proyecto:</p>
<pre class='prettyprint lang-js'>
module.exports = function(grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        "curl-dir": {
            's/vendor/': [
            "http://cdn.jsdelivr.net/g/jquery,bootstrap",
            "http://cdnjs.cloudflare.com/ajax/libs/bootbox.js/4.2.0/bootbox.min.js",
            "http://cdn.jsdelivr.net/bootstrap/3.1.1/css/bootstrap.min.css",
            "http://cdn.jsdelivr.net/bootstrap/3.1.1/css/bootstrap-theme.min.css",
            ]
        },
        concat: {
            options: {
                separator: '\n',
            },
            css: {
                src: ['s/vendor/bootstrap.min.css', 's/vendor/bootstrap-theme.min.css', 's/css/mi.css'],
                dest: 's/css/todo.css'
            },
            js : {
                src : ['s/vendor/jquery,bootstrap', 's/vendor/bootbox.min.js', 's/js/mi.js'],
                dest : 's/js/todo.js'
            }
        },
        cssmin : {
            css:{
                src: 's/css/todo.css',
                dest: 's/css/todo.css'
            }
        },
        uglify : {
            js: {
                files: { 's/js/todo.js' : [ 's/js/todo.js' ] }
            }
        },
        watch: {
            files: ['s/css/mi.css', 's/js/mi.js'],
            tasks: ['default']
        }
    });
    grunt.loadNpmTasks('grunt-curl');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-cssmin');
    grunt.registerTask('default', ['concat:css', 'cssmin:css', 'concat:js', 'uglify:js']);
    grunt.registerTask('update', ['curl-dir', 'concat:css', 'cssmin:css', 'concat:js', 'uglify:js']);
};
</pre>
<hr />
<h2>4.- La Tarea Grunt paso a paso</h2>
<p>Vamos a ver este fichero por partes; para empezar, <code>curl-dir</code> (entrecomillado debido al -), define una función que descarga archivos de <a href="http://es.wikipedia.org/wiki/Red_de_entrega_de_contenidos" target="_blank">CDN</a> en una carpeta de nuestra elección, en este caso lo configuro para descargar varias librerías populares en la carpeta relativa <code>s/vendor</code>, la primera con las últimas versiones de Javascript de <a href="http://jquery.com/" target="_blank">jQuery</a> y <a href="http://getbootstrap.com/" target="_blank">Twitter Bootstrap</a> en un único archivo gracias a <a href="http://www.jsdelivr.com/" target="_blank">JSDelivr</a>, y las demás con versiones concretas de otras librerías, indicando tanto las dependencias JS como CSS.</p>
<pre class='prettyprint lang-js'>
"curl-dir": {
	's/vendor/': [
	"http://cdn.jsdelivr.net/g/jquery,bootstrap",
	"http://cdnjs.cloudflare.com/ajax/libs/bootbox.js/4.2.0/bootbox.min.js",
	"http://cdn.jsdelivr.net/bootstrap/3.1.1/css/bootstrap.min.css",
	"http://cdn.jsdelivr.net/bootstrap/3.1.1/css/bootstrap-theme.min.css",
	]
},

</pre>
<p>Por su parte, <code>concat</code> define una función que concatena dichos archivos, utilizando el separador «\n» (salto de línea), para evitar conflictos con los finales de linea de cada archivo a unir. Tanto para el CSS como para el JS, definimos los archivos fuente como una colección en <code>src</code>, y el fichero destino en <code>dest</code>.</p>
<p>En mi caso llamo a los archivos finales <code>dest</code>: <code>todo.css</code> y <code>todo.js</code> respectivamente, y le paso a la función los nombres finales que tienen los archivos previamente descargados en disco en <code>src</code>; Aquí es donde viene parte de la gracia de este sistema, ya que no tengo que limitarme a los archivos descargados, si no que puedo indicarle archivos en disco que yo haya creado, o que haya descargado manualmente antes. Basta con indicar el orden de las dependencias de forma correcta para evitar problemas. En mi caso, <code>mi.css</code> y <code>mi.js</code> son los archivos sobre los que trabajo y escribo mi propio código, extendiendo el Javascript y CSS de las librerías previas, con lo que simplemente, lo añado al final de cada lista para que sobreescriban cualquier estilo o función definido por estas.</p>
<p>Una vez llamemos a esta función, los archivos serán concatenados en el orden especificado en el mencionado <code>src</code> y guardados en <code>dest</code>. Como adelanto, estos nombres de archivo <code>todo.css</code> y <code>todo.js</code> serán los que luego enlazaré desde mi HTML.</p>
<pre class='prettyprint lang-js'>
concat: {
    options: {
        separator: '\n',
    },
    css: {
        src: ['s/vendor/bootstrap.min.css', 's/vendor/bootstrap-theme.min.css', 's/css/mi.css'],
        dest: 's/css/todo.css'
    },
    js : {
        src : ['s/vendor/jquery,bootstrap', 's/vendor/bootbox.min.js', 's/js/mi.js'],
        dest : 's/js/todo.js'
    }
},
</pre>
<p>Una vez hemos descargado los archivos que nos interesan, procedemos a su Minificado, reducción de peso por el método de ofuscación o eliminación de elementos innecesarios, tales como saltos de línea, comentarios, etc&#8230; Para ello basta con indicar una función <code>cssmin</code> a la que indicaremos el fichero fuente con <code>src</code> y el destino con <code>dest</code>. En mi caso la elección es obvia, indico la ruta de mi fichero previamente concatenado en ambas variables, para que realice la compresión del mismo y lo sobreescriba.</p>
<pre class='prettyprint lang-js'>
cssmin : {
    css:{
        src: 's/css/todo.css',
        dest: 's/css/todo.css'
    }
},
</pre>
<p><code>Uglify</code> es al Javascript lo que <code>cssmin</code> al CSS, asi que procedemos exactamente de la misma manera, utilizando su propia sintaxis para obtener un resultado más compacto:</p>
<pre class='prettyprint lang-js'>
uglify : {
    js: {
        files: { 's/js/todo.js' : [ 's/js/todo.js' ] }
    }
},
</pre>
<p>El módulo <code>watch</code> merece mención aparte: se encarga de quedarse en espera controlando cambios en disco sobre archivos que le indiquemos, y en caso de detectar alguno, realiza la tarea que a su vez le especifiquemos. Esto es muy cómodo si queremos vigilar, por ejemplo, los fichero <code>mi.css</code> y <code>mi.js</code> (los únicos que modificaré regularmente) y en caso de cambios, lanzar automáticamente la concatenación y minificado de los mismos. De esta forma, nada más guardar cambios en nuestro editor, <code>watch</code> salta de forma automática y actualiza nuestros ficheros finales <code>todo.css</code> y <code>todo.js</code> con los últimos cambios.</p>
<p>Para ello, deberemos definir una tarea, a la que llamaré <code>default</code> y que definiremos más tarde, que es la que le indica qué debe hacer al detectar cambios.</p>
<pre class='prettyprint lang-js'>
watch: {
    files: ['s/css/mi.css', 's/js/mi.js'],
    tasks: ['default']
}
</pre>
<p>Una vez definidas todas las funciones que necesitamos, debemos indicar a Grunt con qué paquete de NodeJS debe ejecutar cada una, así que incluimos los paquetes definidos al principio en <code>packages.json</code></p>
<pre class='prettyprint lang-js'>
grunt.loadNpmTasks('grunt-curl');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-cssmin');
</pre>
<p>Dependencias instaladas, funciones creadas, dependencias cargadas, es el momento de decirle a <code>Grunt</code> qué comandos debe aceptar desde <code>consola</code>, o desde <code>watch</code>, y los definiremos registrando dos tareas, una para que <code>watch</code> regenere los ficheros locales ante cualquier cambio, y otra que refresque versiones de librerías de cuando en cuando, para mantenernos actualizados. Recordemos que a <code>watch</code> le indicamos que cuando hubiese cambios en <code>mi.css</code> o <code>mi.js</code>, llamase a la tarea <code>default</code>, asi que esa será la primera que crearemos:</p>
<pre class='prettyprint lang-js'>
grunt.registerTask('default', [ 'concat:css', 'cssmin:css', 'concat:js', 'uglify:js' ]);
</pre>
<p>Sencillo y eficiente, indicamos el nombre <code>default</code>, e indicamos qué acciones debe realizar según las funciones que creamos previamente:</p>
<ol>
<li>Concatenar los CSS -&gt; Genera un todo.css temporal</li>
<li>Minificar los CSS -&gt; Genera el <code>todo.css final</code></li>
<li>Concatenar los JS -&gt; Genera un todo.js temporal</li>
<li>Minificar los JS -&gt; Genera el <code>todo.js final</code></li>
</ol>
<p>El nombre de función <code>default</code> no ha sido definido al azar: si llamamos a <code>grunt</code> sin parámetros desde la consola, esa será la función que ejecute por defecto, salvo que se le indique otra.</p>
<p>Y ahora veremos como indicar otra tarea diferente, la que llamaremos <code>update</code> y que se encargará de descargar las últimas versiones de las librerías:</p>
<pre class='prettyprint lang-js'>
grunt.registerTask('update', [ 'curl-dir', 'concat:css', 'cssmin:css', 'concat:js', 'uglify:js' ]);
</pre>
<p>Como veis, es exactamente igual a la anterior, solo que antes de todo el proceso de concatenación y minificado, descarga las últimas versiones utilizando la función <code>curl-dir</code> que especificamos al principio.</p>
<hr />
<h2>5.- Utilizando nuestro automatismo Grunt</h2>
<p style="text-align: center;"><strong>¡ Ya estamos listos para empezar a trabajar con Grunt !</strong></p>
<p>Tenemos dos formas de hacerlo, la estrictamente manual, muy flexible, donde podemos invocar a Grunt de múltiples formas desde consola:</p>
<ul>
<li><code>grunt update</code>: ejecutará descarga, concatenación y minificados a través de la función «update»</li>
<li><code>grunt default</code>: lo mismo, pero sin descarga</li>
<li><code>grunt</code>: sin parámetros, ejecutará lo mismo que indicando <code>default</code></li>
<li><code>grunt cssmin:css</code>: si queremos invocar una de las funciones directamente, también podemos</li>
<li><code>grunt curl-dir</code>: otro ejemplo de lo anterior</li>
</ul>
<p style="text-align: center;"><strong>¡ También en modo automático !</strong></p>
<p>Por otra parte, para utilizar la modalidad de actualización directa basada en <code>watch</code>, bastará con ejecutar <code>grunt watch</code> para obtener algo como esto:</p>
<pre class='prettyprint lang-default-markup'>
marcos@nabovalley:~/test$ sudo grunt watch
Running "watch" task
Waiting...
</pre>
<p>En este momento dejamos esa consola abierta, y comenzamos nuestro desarrollo. Cada vez que editemos el fichero <code>mi.css</code> o <code>mi.js</code> de nuestro proyecto, <code>watch</code> lanzará la tarea <code>default</code> especificada, que realizará la concatenación y minificado, entregando los ficheros finales <code>todo.css</code> y <code>todo.js</code>. Como estos ficheros son los que enlazo desde mi HTML, basta con guardar en el editor y recargar la web para apreciar los cambios, con todo el CSS y JS listos para pasar directamente a producción si es necesario.</p>
<p>Además, <code>watch</code> es capaz de hacer <code>livereload</code>, una configuración especial que levanta un servidor propio, y es capaz de recargar el navegador por nosotros en el mismo instante que hagamos cambios a uno de los archivos monitorizados. Para ello, basta con configurarlo:</p>
<pre class='prettyprint lang-json'>
options: {
  livereload: true,
},
</pre>
<p>Y añadir a nuestro HTML la etiqueta <code>&lt;script src="//localhost:35729/livereload.js">&lt;/script></code> que es la que se encargará de recargar cuando sea necesario.</p>
<hr />
<h2>6.- Tips adicionales</h2>
<p>No olvidemos proteger nuestros archivos de dependencias y grunt añadiendo a nuestro <code>.htaccess</code> de Apache o similar las líneas:<br />
<pre class='prettyprint lang-bsh'>
RedirectMatch 404 /Gruntfile\\.js(/|$)
RedirectMatch 404 /package\\.json(/|$)
</pre></p>
<p>Y del mismo modo, si utilizamos un sistema de control de versiones, excluyamos la carpeta <code>node_modules</code> del mismo, por ejemplo mediante <code>.hgignore</code></p>
<pre class='prettyprint lang-bsh'>
node_modules/
</pre>
<hr />
<h2>Conclusión</h2>
<p>Hasta aquí este ladrillo, Grunt es una herramienta de automatización fantástica, con multitud de posibilidades, y de la que apenas hemos arañado la superficie. No dejes de dar un buen vistazo al enorme <a href="http://gruntjs.com/plugins" target="_blank">listado oficial de plugins para Grunt</a>, seguro que se te ocurren nuevas e imaginativas formas de ponerlo a trabajar a tu servicio. No en vano, no hay ser más vago sobre la tierra que un programador.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.marcosbl.com/compresion-y-gestion-de-js-css-con-grunt/2276/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Alternativa a DynDNS</title>
		<link>https://blog.marcosbl.com/alternativa-dyndns/2254/</link>
					<comments>https://blog.marcosbl.com/alternativa-dyndns/2254/#comments</comments>
		
		<dc:creator><![CDATA[MarcosBL]]></dc:creator>
		<pubDate>Thu, 08 May 2014 11:19:59 +0000</pubDate>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">http://marcosbl.com/blog/?p=2254</guid>

					<description><![CDATA[<p class="lead">Tras el paso a modelo de pago exclusivo de DynDNS, podemos suplir su servicio con una compleja configuración de bind utilizando recursos propios, o pasar a otro servicio de terceros, por ejemplo el ofrecido de forma gratuita (por ahora!) por https://www.dnsdynamic.org/ Tras crear una cuenta y añadir el host que deseemos: Instalaremos el cliente de actualización en el PC con IP&#8230;</p><p class="more-link-p"><a class="btn btn-danger" href="https://blog.marcosbl.com/alternativa-dyndns/2254/">Leer más &#8594;</a></p>]]></description>
										<content:encoded><![CDATA[<p>Tras el paso a modelo de pago exclusivo de <a href="http://dyn.com/blog/why-we-decided-to-stop-offering-free-accounts/" target="_blank">DynDNS</a>, podemos suplir su servicio con una compleja configuración de bind utilizando recursos propios, o pasar a otro servicio de terceros, por ejemplo el ofrecido de forma gratuita (por ahora!) por <a href="https://www.dnsdynamic.org/" target="_blank">https://www.dnsdynamic.org/</a></p>
<p>Tras crear una cuenta y añadir el host que deseemos:</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2255" src="https://blog.marcosbl.com/assets/Ahp1BXu.png" alt="" width="719" height="138" srcset="https://blog.marcosbl.com/assets/Ahp1BXu.png 719w, https://blog.marcosbl.com/assets/Ahp1BXu-300x57.png 300w" sizes="auto, (max-width: 719px) 100vw, 719px" /></p>
<p>Instalaremos el cliente de actualización en el PC con IP dinámica. Este ejemplo es para Ubuntu 12.04, añadimos el PPA</p>
<pre class='prettyprint lang-default-markup'>
sudo apt-get install python-software-properties
sudo apt-add-repository ppa:nathan-renniewaldock/ppa
</pre>
<p>Configuramos el PPA para que no nos modifique más que ddclient (el PPA toca otros paquetes si no)</p>
<pre class='prettyprint lang-default-markup'>
vi /etc/apt/preferences.d/nathan-prefs
</pre>
<p>Y lo dejamos tal que asi:</p>
<pre class='prettyprint lang-default-markup'>
Package: *
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 400

Package: ddclient
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 500
</pre>
<p>Actualizamos, e instalamos el cliente</p>
<pre class='prettyprint lang-default-markup'>
sudo apt-get update &amp;&amp; sudo apt-get install ddclient
</pre>
<p>Una vez instalado, solo tenemos que configurarlo a nuestro gusto:</p>
<pre class='prettyprint lang-default-markup'>
vi /etc/ddclient.conf
</pre>
<pre class='prettyprint lang-default-markup'>
daemon=600                              # Segundos entre actualizaciones, no lo pongas demasiado bajo
syslog=yes                              # Añadir log al syslog
mail=tu@email.com                       # Enviar mensajes a este email
mail-failure=tu@email.com               # Enviar fallos a este email
pid=/var/run/ddclient.pid               # Usar este PID
protocol=dyndns2                        # Protocolo
use=web                                 # Especifica de donde leer la IP pública
web=myip.dnsdynamic.com
server=www.dnsdynamic.org               # Especifica a donde enviar actualizaciones
login=tu@usuario.com                    # Tu cuenta en dnsdynamic.org
password='tucontraseña'
xxxxxxxxxxxxxxx.dnsget.org              # Host que deseas actualizar
</pre>
<p>Un reinicio de servicio y listo, en unos segundos deberías ya poder utilizar tu nuevo host</p>
<pre class='prettyprint lang-default-markup'>
sudo /etc/init.d/ddclient restart
</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.marcosbl.com/alternativa-dyndns/2254/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Heartbleed Explanation</title>
		<link>https://blog.marcosbl.com/heartbleed_explanation/2235/</link>
		
		<dc:creator><![CDATA[MarcosBL]]></dc:creator>
		<pubDate>Sun, 13 Apr 2014 13:49:17 +0000</pubDate>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[Tiras Gráficas]]></category>
		<guid isPermaLink="false">http://marcosbl.com/blog/?p=2235</guid>

					<description><![CDATA[<p class="lead"></p><p class="more-link-p"><a class="btn btn-danger" href="https://blog.marcosbl.com/heartbleed_explanation/2235/">Leer más &#8594;</a></p>]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/heartbleed_explanation.png" alt="" width="640" height="1364" class="aligncenter size-full wp-image-2237" srcset="https://blog.marcosbl.com/assets/heartbleed_explanation.png 640w, https://blog.marcosbl.com/assets/heartbleed_explanation-480x1024.png 480w" sizes="auto, (max-width: 640px) 100vw, 640px" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>» Analizar y reparar disco extraible » de Windows</title>
		<link>https://blog.marcosbl.com/analizar-y-reparar-disco-extraible-de-windows/2210/</link>
		
		<dc:creator><![CDATA[MarcosBL]]></dc:creator>
		<pubDate>Fri, 11 Apr 2014 01:57:13 +0000</pubDate>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">http://marcosbl.com/blog/?p=2210</guid>

					<description><![CDATA[<p class="lead">A todos nos ha pasado en alguna ocasión: al insertar un dispositivo de almacenamiento USB, Windows se empeña en que está degradado, y que debería ser analizado y reparado&#8230; Para desactivar esta molesta «funcionalidad», que es un falso positivo en el 99% de los casos: Hacemos doble clic en «Detección de hardware shell» Y marcamos, dentro de «Tipo de Inicio»,&#8230;</p><p class="more-link-p"><a class="btn btn-danger" href="https://blog.marcosbl.com/analizar-y-reparar-disco-extraible-de-windows/2210/">Leer más &#8594;</a></p>]]></description>
										<content:encoded><![CDATA[<p>A todos nos ha pasado en alguna ocasión: al insertar un dispositivo de almacenamiento USB, Windows se empeña en que está <strong>degradado</strong>, y que debería ser analizado y reparado&#8230;</p>
<p><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/eliminar.png" alt="" width="512" height="269" class="aligncenter size-full wp-image-2217" srcset="https://blog.marcosbl.com/assets/eliminar.png 512w, https://blog.marcosbl.com/assets/eliminar-300x157.png 300w" sizes="auto, (max-width: 512px) 100vw, 512px" /></p>
<p>Para desactivar esta molesta «funcionalidad», que es un falso positivo en el 99% de los casos:</p>
<pre class='prettyprint lang-default-markup'>Win+R</pre>
<pre class='prettyprint lang-default-markup'>services.msc [Intro]</pre>
<p>Hacemos doble clic en «Detección de hardware shell»</p>
<p><a href="http://blog.marcosbl.com/assets/hacemos-clic-en-servicio-detencion-de-hardware-shell.jpg"><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/hacemos-clic-en-servicio-detencion-de-hardware-shell.jpg" alt="" width="818" height="601" class="aligncenter size-full wp-image-2218" srcset="https://blog.marcosbl.com/assets/hacemos-clic-en-servicio-detencion-de-hardware-shell.jpg 818w, https://blog.marcosbl.com/assets/hacemos-clic-en-servicio-detencion-de-hardware-shell-300x220.jpg 300w" sizes="auto, (max-width: 818px) 100vw, 818px" /></a></p>
<p>Y marcamos, dentro de «Tipo de Inicio», la opción «Deshabilitado» y «Aceptar»</p>
<p><a href="http://blog.marcosbl.com/assets/deteccion-de-hardware-shell.jpg"><img loading="lazy" decoding="async" src="https://blog.marcosbl.com/assets/deteccion-de-hardware-shell.jpg" alt="" width="668" height="493" class="aligncenter size-full wp-image-2219" srcset="https://blog.marcosbl.com/assets/deteccion-de-hardware-shell.jpg 668w, https://blog.marcosbl.com/assets/deteccion-de-hardware-shell-300x221.jpg 300w" sizes="auto, (max-width: 668px) 100vw, 668px" /></a></p>
<p>Y se acabó el problema.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>XIKI, La consola reinventada, notas, prototipos, programación&#8230;</title>
		<link>https://blog.marcosbl.com/xiki-la-consola-reinventada-notas-prototipos-programacion/2190/</link>
		
		<dc:creator><![CDATA[MarcosBL]]></dc:creator>
		<pubDate>Sat, 05 Apr 2014 07:49:45 +0000</pubDate>
				<category><![CDATA[Sistemas]]></category>
		<guid isPermaLink="false">http://marcosbl.com/blog/?p=2190</guid>

					<description><![CDATA[<p class="lead">Puedes saber más sobre esta joyita en http://xiki.org/</p><p class="more-link-p"><a class="btn btn-danger" href="https://blog.marcosbl.com/xiki-la-consola-reinventada-notas-prototipos-programacion/2190/">Leer más &#8594;</a></p>]]></description>
										<content:encoded><![CDATA[<p>Puedes saber más sobre esta joyita en <a href="http://xiki.org/" target="_blank">http://xiki.org/</a></p>
<p><iframe loading="lazy" width="1170" height="658" src="https://www.youtube.com/embed/bUR_eUVcABg?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
