<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: nervi0s</title>
    <description>The latest articles on DEV Community by nervi0s (@nervi0s).</description>
    <link>https://dev.to/nervi0s</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F240642%2F41573dab-dcc7-4494-8845-1292a782928d.png</url>
      <title>DEV Community: nervi0s</title>
      <link>https://dev.to/nervi0s</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nervi0s"/>
    <language>en</language>
    <item>
      <title>Combinar Wireguard con Pi-hole</title>
      <dc:creator>nervi0s</dc:creator>
      <pubDate>Sat, 16 May 2020 17:26:19 +0000</pubDate>
      <link>https://dev.to/nervi0s/combinar-wireguard-con-pi-hole-fb1</link>
      <guid>https://dev.to/nervi0s/combinar-wireguard-con-pi-hole-fb1</guid>
      <description>&lt;p&gt;Por ahora había explicado cómo crearnos nuestra propia &lt;a href="https://dev.to/nervi0s/wireguard-con-raspberry-pi-3i60"&gt;VPN casera&lt;/a&gt; y cómo implementar &lt;a href="https://dev.to/nervi0s/pi-hole-1flo"&gt;Pi-hole&lt;/a&gt; como nuestro Servidor DNS. Hasta este momento Pi-hole estaba funcionando en nuestra LAN. &lt;/p&gt;

&lt;p&gt;Bien, ahora vamos a cambiar una pequeña configuración para combinar el uso de nuestra VPN con Pi-hole, de esta forma conseguiremos bloquear anuncios incluso estando "fuera" de nuestra LAN haciendo uso de nuestra VPN.&lt;/p&gt;

&lt;p&gt;El cambio que vamos a realizar es en el archivo de configuración del cliente, que habíamos llamado &lt;strong&gt;cliente1.conf&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Lo único que debemos hacer es cambiar la dirección IP del DNS del archivo mencionado antes, por la dirección IP de nuestro servidor DNS Pi-hole, es decir, la dirección de la Raspberry.&lt;/p&gt;

&lt;p&gt;Imaginemos que estaba así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Interface&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;Address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;123.123.123.2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;32&lt;/span&gt;
&lt;span class="n"&gt;PrivateKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Clave&lt;/span&gt; &lt;span class="n"&gt;privada&lt;/span&gt; &lt;span class="n"&gt;del&lt;/span&gt; &lt;span class="n"&gt;cliente&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;DNS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;8.8.8.8&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Peer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;PublicKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Clave&lt;/span&gt; &lt;span class="n"&gt;pública&lt;/span&gt; &lt;span class="n"&gt;del&lt;/span&gt; &lt;span class="n"&gt;servidor&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;AllowedIPs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0.0.0.0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;::/&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;Endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AquíVaLaIpPúblicaDeTuRed&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;51840&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Ahora debe estar así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Interface&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;Address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;123.123.123.2&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;32&lt;/span&gt;
&lt;span class="n"&gt;PrivateKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Clave&lt;/span&gt; &lt;span class="n"&gt;privada&lt;/span&gt; &lt;span class="n"&gt;del&lt;/span&gt; &lt;span class="n"&gt;cliente&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;DNS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AquíVaLaIPPrivadaDeLaRaspberry&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Peer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;PublicKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Clave&lt;/span&gt; &lt;span class="n"&gt;pública&lt;/span&gt; &lt;span class="n"&gt;del&lt;/span&gt; &lt;span class="n"&gt;servidor&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="n"&gt;AllowedIPs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0.0.0.0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;::/&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;Endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AquíVaLaIpPúblicaDeTuRed&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;51840&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;A continuación como expliqué en el &lt;a href="https://dev.to/nervi0s/wireguard-con-raspberry-pi-3i60"&gt;post de Wireguard&lt;/a&gt; nos generaremos un código QR y trasladaremos la nueva configuración al cliente Wireguard de nuestro smartphone.&lt;/p&gt;

&lt;p&gt;Y eso es todo, con este sencillo cambio ahora disponemos de más ventajas a la hora de usar nuestra VPN.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Pi-hole</title>
      <dc:creator>nervi0s</dc:creator>
      <pubDate>Tue, 12 May 2020 18:11:45 +0000</pubDate>
      <link>https://dev.to/nervi0s/pi-hole-1flo</link>
      <guid>https://dev.to/nervi0s/pi-hole-1flo</guid>
      <description>&lt;p&gt;Voy a escribir mi experiencia instalando este &lt;a href="https://es.wikipedia.org/wiki/Sumidero_de_DNS"&gt;sumidero de DNS&lt;/a&gt; llamdo Pi-hole.&lt;/p&gt;

&lt;p&gt;Primero voy a explicar un poco lo que he entendido sobre el funcionamiento de los servidores DNS.&lt;/p&gt;

&lt;p&gt;Un &lt;strong&gt;DNS&lt;/strong&gt; (Domain Name System) o Sistema de Nombres de Dominio, es un complejo sistema de servidores que se encargan de traducir los nombres de dominio, como por ejemplo &lt;strong&gt;&lt;a href="http://www.unawebcualquiera.com"&gt;www.unawebcualquiera.com&lt;/a&gt;&lt;/strong&gt;, a una &lt;strong&gt;dirección IP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Nosotros para comunicarnos con nuestra web favorita y recibir información de ella escribimos en nuestro navegador una URL parecida a la mencionada antes. ¿Qué ocurre entonces? Entonces como nuestro cliente (nuestro ordenador) necesita saber cuál es la dirección IP asociada a la URL que hemos introducido, necesita un medio para resolver esto. Por lo que he entendido el proceso es el siguiente:&lt;/p&gt;

&lt;p&gt;El navegador solicita a nuestro Sistema Operativo cuál es la IP asociada a ese dominio, si el resolutor DNS de nuestro SO no lo sabe entonces este manda una consulta (query) a un &lt;strong&gt;Servidor DNS Upstream&lt;/strong&gt; (un servidor situado en una capa más externa a nuestro SO) como pueden ser los DNS de nuestro proveedor de Internet (&lt;strong&gt;ISP&lt;/strong&gt;) (estos se suelen configurar en el router para que los dispositivos conectados a él, mediante el DHCP del mismo, manden esta configuración a los dispositivos que se conecten a él), luego el proceso es algo más complejo, pero como dicen que una imagen vale más que mil palabras yo os dejo unas cuantas:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mo3lGYxP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tyzzh4w5fnblur5qr82x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mo3lGYxP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tyzzh4w5fnblur5qr82x.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oQONVcy6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/noyi6jugsd4vssa2llu9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oQONVcy6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/noyi6jugsd4vssa2llu9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2t3DCz1H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/398snjzx4rws7n1hu6d9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2t3DCz1H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/398snjzx4rws7n1hu6d9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rD8RfyuE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mklp3ggklzwjw6qjuvtz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rD8RfyuE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mklp3ggklzwjw6qjuvtz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una cosa importante a señalar aquí es que una vez obtengamos la IP del dominio que estamos buscando y nuestro navegador empiece a descargar datos del servidor en donde se aloja esa Web y por tanto a mostrar cosas, en esos datos que nos envía el servidor sin que nosotros hagamos nada, hay nombres de dominio que vuelven a ser necesarios resolver, y por tanto el proceso descrito arriba empieza de nuevo pero ya a "escondidas" o en segundo plano para nosotros.&lt;/p&gt;

&lt;p&gt;¿Por qué menciono esto? Porque aquí es donde Pi-hole actúa. El servidor DNS Pi-hole se pone en medio de tus dispositivos y los Servidor DNS Upstream, con ello bloqueará cualquier consulta (query) de tus dispositivos a nombres de dominio de publicidad conocidos y trackers. Es decir, bloqueará la publicidad que se encuentre en su lista negra.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fjeEEZ_x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nxldauwtgosymqrg4y6l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fjeEEZ_x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nxldauwtgosymqrg4y6l.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nILGa5TY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/83sttlkpitkip24pza7p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nILGa5TY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/83sttlkpitkip24pza7p.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Después de haber comentado esto vamos a instalarlo!&lt;/p&gt;


&lt;h2&gt;
  
  
  Instalación de Pi-hole
&lt;/h2&gt;



&lt;p&gt;Para instalarlo solo debemos ejecutar los siguientes comandos:&lt;/p&gt;

&lt;p&gt;Primero nos situamos en algún directorio deseado desde nuestra consola para descargarnos el siguiente script, el cual contiene el proceso de instalación:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;wget&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;O&lt;/span&gt; &lt;span class="n"&gt;basic&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="c"&gt;//install.pi-hole.net&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Luego ejecutamos dicho script con privilegios de administrador mediante este comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;bash&lt;/span&gt; &lt;span class="n"&gt;basic&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;install&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Esto empezará a descargar los archivos necesarios para el proceso de configuración del Servidor DNS Pi-hole.&lt;/p&gt;

&lt;p&gt;Al cabo de unos segundos nos aparecerá la pantalla de bienvenida para la configuración:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X_R21HMx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ujscahkxjih6f78m68ft.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X_R21HMx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ujscahkxjih6f78m68ft.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Aparecerán otras pantallas además de las que mencionaré, pero solo voy a comentar algunas. En esta pantalla nos permite elegir la interfaz de red donde se encuentra nuestra Raspberry donde estamos instalando Pi-hole. Como la tengo conectada al Wi-Fi usaré la interfaz wlan0.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NjA5Aa8_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qidy4p366r0g6tultkyr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NjA5Aa8_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qidy4p366r0g6tultkyr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
En esta pantalla nos permite elegir qué servidor DNS utilizaremos para resolver los nombres de dominios no bloqueados, puedes elegir el que prefieras.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9Qh2tBSm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d99vpd986t93whz09gfv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9Qh2tBSm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d99vpd986t93whz09gfv.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Aquí nos muestra la lista de proveedores que le dicen a Pi-hole qué nombres de dominio bloquear para que nos bloquee la publicidad. Podemos dejarlo por defecto como viene.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B5HgjeV4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xdejimm5l4cdxekk3snv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B5HgjeV4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xdejimm5l4cdxekk3snv.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
En esta parte nos muestra sobre qué protocolos va a realizar su trabajo, también lo dejamos por defecto.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F8EaszLI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ht0cap0v2gspix3k74ia.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F8EaszLI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ht0cap0v2gspix3k74ia.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Aquí nos muestra la IP de nuestra Raspberry y la dirección de la puerta de enlace predeterminada (la dirección del router), confirmamos que los datos estén bien y continuamos.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OgE9cq_8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wx7gvcsjb4xpyayp9c3c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OgE9cq_8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wx7gvcsjb4xpyayp9c3c.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Nos permite instalar una interfaz web para administrar y controlar Pi-hole, recomiendo instalarla.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rqqEQ45H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sr9r4igq8i279xhbuv0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rqqEQ45H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sr9r4igq8i279xhbuv0a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Aquí nos pide instalar un servidor web para poder usar la interfaz web de antes, también recomiendo instalarlo.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---F2VjunV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7m2g3e67y2jjcj01j4q7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---F2VjunV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7m2g3e67y2jjcj01j4q7.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Esto hace que se muestren las consultas que hacemos para ver si todo está funcionando bien, recomiendo activarla.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2OrWJ-lt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/p8x26didf5xure0sh5z0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2OrWJ-lt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/p8x26didf5xure0sh5z0.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Nos permite ver la información de los nombres de dominio que estamos consultando. Recomiendo dejarla por defecto en 0.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mzh2dF0A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/o0sr9qgrtjyy9sqz21en.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mzh2dF0A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/o0sr9qgrtjyy9sqz21en.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Una vez que la instalación se ha completado, esta pantalla nos informa por un lado, de cuál va a ser la dirección IP que debemos poner como servidor DNS en nuestros dispositivos para que trabajen con Pi-hole y así pueda bloquear los anuncios.&lt;/p&gt;

&lt;p&gt;Por otra parte, nos informa de cómo podemos acceder a la interfaz web para administrar las consultas y los dispositivos que estén usando Pi-hole. Escribiendo &lt;code&gt;&lt;a href="http://pi.hole/admin"&gt;http://pi.hole/admin&lt;/a&gt;&lt;/code&gt; o &lt;code&gt;LaDirecciónIpDeLaRaspberry/admin&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Nos muestra una contraseña generada aleatoriamente para poder acceder a la interfaz web, debemos apuntarla.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qv6fT3lV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l3kgtxrbg7889u0e34ei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qv6fT3lV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l3kgtxrbg7889u0e34ei.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Al finalizar nos mostrará una pantalla como esta donde podemos ver un resumen de cómo ha ido la instalación.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hcl8a5uf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9sfczy5vswgm1ag8ydlt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hcl8a5uf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9sfczy5vswgm1ag8ydlt.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Como se puede ver podemos cambiar la contraseña de acceso a la interfaz web ejecutando en la consola este comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;pihole&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Para comprobar el estado del servidor DNS Pi-hole que ahora tenemos ejecutamos este comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;pihole&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Y si todo está bien nos mostrará algo así:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mf-njYBD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/p7bctb01img49llhy2gi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mf-njYBD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/p7bctb01img49llhy2gi.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con esto hemos acabo la instalación, ahora vamos a pulir unos detalles:&lt;/p&gt;


&lt;h2&gt;
  
  
  Configurar la propia Raspberry Pi para que use a Pi-hole como su resolutor DNS
&lt;/h2&gt;



&lt;p&gt;Para eso vamos a hacer unas pruebas primero. Desde el navegador web de la Raspberry intentemos acceder a la interfaz web de Pi-hole de la siguiente forma primero: &lt;code&gt;&lt;a href="http://pi.hole/admin"&gt;http://pi.hole/admin&lt;/a&gt;&lt;/code&gt; y vemos si accede, si tenemos problemas intentemos acceder con la dirección IP de la propia Raspberry, en mi caso sería &lt;code&gt;192.168.0.133/admin&lt;/code&gt;. Si nos funciona el segundo método, pero el primero no, puede ser que tengamos que configurar manualmente a la propia Raspberry para que haga uso de Pi-hole.&lt;/p&gt;

&lt;p&gt;Antes de hacer esto hice algunas comprobaciones que voy a intentar explicar, he de recordar que estoy usando &lt;strong&gt;Raspbian Buster OS&lt;/strong&gt; ya que algunas cosas pueden varias en otros Sistemas Operativos:&lt;/p&gt;

&lt;p&gt;Veamos qué hay dentro del archivo &lt;strong&gt;resolv.conf&lt;/strong&gt;, este archivo es usado por el SO para determinar a quién consultar primero los nombres de dominio consultados. Podemos ver el contenido del archivo con el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;resolv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;en mi caso muestra lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;nervios&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;raspnervi&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="err"&gt;~&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;resolv&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;Generated&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;resolvconf&lt;/span&gt;
&lt;span class="n"&gt;nameserver&lt;/span&gt; &lt;span class="m"&gt;1.1.1.1&lt;/span&gt;
&lt;span class="n"&gt;nameserver&lt;/span&gt; &lt;span class="m"&gt;1.0.0.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Podemos ver qué se han definido esas direcciones IP para resolver los nombres de dominio consultados.&lt;/p&gt;

&lt;p&gt;Ahora vamos a hacer otra prueba, vamos a hacer una consulta de un nombre de dominio con el comando &lt;strong&gt;nslookup&lt;/strong&gt; desde la terminal. El nombre de dominio a consultar será &lt;strong&gt;pi.hole&lt;/strong&gt;, este es el nombre de dominio usado de nuestro Servidor DNS Pi-hole, por tanto será resuelto sólo si la consulta se hace primero al servidor DNS Pi-hole, por tanto veamos lo que curre:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;nervios&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;raspnervi&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="err"&gt;~&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;nslookup&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hole&lt;/span&gt;
&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;         &lt;span class="m"&gt;1.1.1.1&lt;/span&gt;
&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;        &lt;span class="m"&gt;1.1.1.1&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="m"&gt;53&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="n"&gt;find&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hole&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;NXDOMAIN&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Como vemos en estos apartardos se está usando como resolutor DNS las direcciones IP &lt;code&gt;1.1.1.1&lt;/code&gt; y además se nos muestra el mensaje &lt;code&gt;** server can't find pi.hole: NXDOMAIN&lt;/code&gt; Esto ocurre porque el servidor DNS en uso actualmente (1.1.1.1) no puede resolver el nombre &lt;strong&gt;pi.hole&lt;/strong&gt;, es obvio porque este nombre solo lo conoce el servidor DNS de Pi-hole cuya IP no será 1.1.1.1&lt;/p&gt;

&lt;p&gt;A continuación, vamos a ver qué pasa si hacemos una consulta del nombre de dominio &lt;strong&gt;flurry.com&lt;/strong&gt;, este nombre de dominio corresponte con uno de los nombres que se encuentra en la lista negra de Pi-hole y debería ser bloqueado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;nervios&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;raspnervi&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="err"&gt;~$&lt;/span&gt; &lt;span class="n"&gt;nslookup&lt;/span&gt; &lt;span class="n"&gt;flurry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;
&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;         &lt;span class="m"&gt;1.1.1.1&lt;/span&gt;
&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;        &lt;span class="m"&gt;1.1.1.1&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="m"&gt;53&lt;/span&gt;

&lt;span class="n"&gt;Non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;authoritative&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;flurry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;
&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;98.136.103.26&lt;/span&gt;
&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;flurry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;
&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;212.82.100.153&lt;/span&gt;
&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;flurry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;com&lt;/span&gt;
&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;74.6.136.153&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Como podemos ver sí está resolviendo ese nombre de domonio, pero esto ocurre porque como dijimos antes, el Servidor DNS que está en uso actualmente es 1.1.1.1&lt;/p&gt;

&lt;p&gt;Bien ahora vamos a usar el mismo comando &lt;strong&gt;nslookup&lt;/strong&gt; pero con una variación:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;nervios&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;raspnervi&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="err"&gt;~&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;nslookup&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hole&lt;/span&gt; &lt;span class="m"&gt;192.168.0.133&lt;/span&gt;
&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;         &lt;span class="m"&gt;192.168.0.133&lt;/span&gt;
&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;        &lt;span class="m"&gt;192.168.0.133&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="m"&gt;53&lt;/span&gt;

&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;pi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hole&lt;/span&gt;
&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;192.168.0.133&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;¿Qué ocurre ahora? Estamos haciendo lo mismo, es decir, intentar resolver el nombre de dominio &lt;strong&gt;pi.hole&lt;/strong&gt; pero ahora añadiendo &lt;code&gt;192.168.0.133&lt;/code&gt; estamos obligando a que se resuelva la consulta de ese nombre de dominio usando la dirección del servidor DNS de Pi-hole, es decir, su IP, esa IP es la que tiene la Raspberry.&lt;/p&gt;

&lt;p&gt;Ahora este servidor sí puede resolver ese nombre de dominio, como se nos muestra en las dos últimas líneas:&lt;br&gt;
&lt;code&gt;Name:   pi.hole&lt;/code&gt;&lt;br&gt;
&lt;code&gt;Address: 192.168.0.133&lt;code&gt;&lt;/code&gt;&lt;/code&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ¿Qué podemos hacer para que la Raspberry se use así misma para resolver las consultas DNS?
&lt;/h2&gt;



&lt;p&gt;Bien para realizar esto depende mucho del SO que corramos, como dije antes yo uso actualmente &lt;strong&gt;Raspbian Buster OS&lt;/strong&gt; y voy a mostrar los pasos que hice:&lt;/p&gt;

&lt;p&gt;Voy a editar el archivo &lt;strong&gt;dhcpd.conf&lt;/strong&gt;, ponemos hacerlo con el editor &lt;strong&gt;nano&lt;/strong&gt; por ejemplo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;nano&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dhcpcd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;...&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;interface&lt;/span&gt; &lt;span class="n"&gt;wlan0&lt;/span&gt;
    &lt;span class="n"&gt;static&lt;/span&gt; &lt;span class="n"&gt;ip_address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;192.168.0.133&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24&lt;/span&gt;
    &lt;span class="n"&gt;static&lt;/span&gt; &lt;span class="n"&gt;routers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;192.168.0.1&lt;/span&gt;
    &lt;span class="n"&gt;static&lt;/span&gt; &lt;span class="n"&gt;domain_name_servers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1.1.1.1&lt;/span&gt; &lt;span class="m"&gt;1.0.0.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Veremos algo parecido a esto, los números y la interfaz de red (wlan0) en tu caso puede que sean distintos.&lt;/p&gt;

&lt;p&gt;Vamos a cambiar las direcciones DNS que aparecen y vamos a apuntar a nosotros mismos, es decir, a la dirección IP de la Raspberry, a &lt;code&gt;192.168.0.133&lt;/code&gt; en mi caso.&lt;/p&gt;

&lt;p&gt;Nos quedará algo así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;...&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;interface&lt;/span&gt; &lt;span class="n"&gt;wlan0&lt;/span&gt;
    &lt;span class="n"&gt;static&lt;/span&gt; &lt;span class="n"&gt;ip_address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;192.168.0.133&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24&lt;/span&gt;
    &lt;span class="n"&gt;static&lt;/span&gt; &lt;span class="n"&gt;routers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;192.168.0.1&lt;/span&gt;
    &lt;span class="n"&gt;static&lt;/span&gt; &lt;span class="n"&gt;domain_name_servers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;192.168.0.133&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Bien, realizado esto reiniciamos nuestro equipo y volvemos iniciar sesión. A continuación vamos a probar uno de los comandos con &lt;strong&gt;nslookup&lt;/strong&gt; de antes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;nervios&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;raspnervi&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="err"&gt;~&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;nslookup&lt;/span&gt; &lt;span class="n"&gt;pi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hole&lt;/span&gt;
&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;         &lt;span class="m"&gt;192.168.0.133&lt;/span&gt;
&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;        &lt;span class="m"&gt;192.168.0.133&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="m"&gt;53&lt;/span&gt;

&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;   &lt;span class="n"&gt;pi&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hole&lt;/span&gt;
&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;192.168.0.133&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Como vemos ahora sin obligar a usar la IP de nuestra Raspberry, es capaz de resolver el nombre de dominio &lt;strong&gt;pi.hole&lt;/strong&gt; por sí solo.&lt;/p&gt;

&lt;p&gt;Si repetimos una de las prueba que hicimos arriba, la de intentar resolver el nombre de dominio &lt;strong&gt;flurry.com&lt;/strong&gt;, vemos que ocurre lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nervios@raspnervi:~ $ nslookup flurry.com
Server:         192.168.0.133
Address:        192.168.0.133#53

Name:   flurry.com
Address: 0.0.0.0
Name:   flurry.com
Address: ::
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Ahora ese nombre de dominio, que como dijimos está en la lista negra de Pi-hole, está siendo bloquedo y cuadno recibe una consulta (query) de ese nombre, lo redirecciona a ina IP falsa, la &lt;strong&gt;0.0.0.0&lt;/strong&gt; de IPv4 o la &lt;strong&gt;::&lt;/strong&gt; de IPv6.&lt;/p&gt;

&lt;p&gt;Si probamos a navegar por la web con nuestro navegador y a meternos en nuestro panel de Pi-hole con la interfaz web, y nos dirigimos a los registros de consultas &lt;strong&gt;Query Log&lt;/strong&gt;, veremos que nuestro &lt;strong&gt;cliente&lt;/strong&gt; &lt;strong&gt;localhost&lt;/strong&gt; ha empezado a realizar consultas a determinados dominios y algunos de estos han sido bloqueados.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oF5-s3Lo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3cefingujilx9jbx0518.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oF5-s3Lo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3cefingujilx9jbx0518.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Los de color &lt;strong&gt;verde&lt;/strong&gt; son los nombres de dominio permitidos y los de color &lt;strong&gt;rojo&lt;/strong&gt; son los nombres de dominio bloqueados.&lt;/p&gt;

&lt;p&gt;De eso es lo que se encarga nuestro Servidor DNS Pi-hole :)&lt;/p&gt;


&lt;h2&gt;
  
  
  Configurar las DNS de nuestros dispositivos
&lt;/h2&gt;



&lt;p&gt;Para configurar a otros dispositivos de tu red para que usen a Pi-hole como servidor DNS, ya sea un portátil, una tele, un smarthphone, etc. Simplemente debemos cambiar las direcciones IP de los servidores DNS que usen por la dirección IP de la Raspberry Pi donde está montado el servidor DNS Pi-hole.&lt;/p&gt;

&lt;p&gt;Dejo esta página web de referencia donde creo que explican bien cómo hacer este proceso: &lt;a href="https://www.howtogeek.com/167533/the-ultimate-guide-to-changing-your-dns-server/"&gt;The Ultimate Guide to Changing Your DNS Server&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Por ejemplo, si tu móvil usa como direcciones DNS estas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;DNS1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8.8.8.8&lt;/span&gt;
&lt;span class="n"&gt;DNS2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8.8.4.4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Habría que cambiarlas por esta (en mi caso), que es la de la la Raspberry Pi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;DNS1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;192.168.0.133&lt;/span&gt;
&lt;span class="n"&gt;DNS2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;192.168.0.133&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Y entonces ese móvil empezaría a usar nuestro servidor &lt;strong&gt;DNS Pi-hole&lt;/strong&gt; para resolver los nombres de dominio y bloquear la publicidad.&lt;/p&gt;

&lt;p&gt;Recordar que esto pasaría en nuestra red local (&lt;strong&gt;LAN&lt;/strong&gt;), es decir, si usamos el Wi-Fi o la conexión directa al router por Ethernet.&lt;/p&gt;

&lt;p&gt;Si salimos de la red local, como por ejemplo, usando la red móvil ya no estaríamos bloqueando la publicidad. (Aunque más adelante pondré cómo hacerlo fuera de la red local).&lt;/p&gt;




&lt;h2&gt;
  
  
  Reducir el estrés del dispositivo de memoria
&lt;/h2&gt;




&lt;p&gt;Para llevar un registro de las cosas que ocurren en nuestro sistema operativo, los programas necesitan escribir continuamente en esos archivos, los conocidos como &lt;strong&gt;logs&lt;/strong&gt;. Esto a largo plazo es una esfuerzo continuo para la terjeta SD o el dispositivo de almacenamiento donde se encuentre nuestro sistema, por tanto, represente un desgaste continuo de ellos.&lt;/p&gt;

&lt;p&gt;Para minimizar esto he instalado en mi Raspberry &lt;a href="https://github.com/azlux/log2ram"&gt;Log2Ram&lt;/a&gt;. Se trata de un script que crea un punto de montaje &lt;strong&gt;/var/log&lt;/strong&gt; en la &lt;strong&gt;RAM&lt;/strong&gt;. De esta forma cualquier log no se va a escribir directamente al dispositivo de almacenamiento, sino que será escrito en la RAM, reduciendo el desgaste de de dicho dispositivo.&lt;/p&gt;

&lt;p&gt;Para instalarlo solo hay que seguir los pasos que vienen &lt;a href="https://github.com/azlux/log2ram#install"&gt;aquí&lt;/a&gt;, son muy sencillos, o añades su repositorio o lo instalas manualmente ejecutando un script.&lt;/p&gt;

&lt;p&gt;Una vez instalado, podemos comprobar que está funcionado ejecutando el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Y comprobamos que ahora tenemos un nuevo punto de montaje con &lt;strong&gt;/var/log&lt;/strong&gt; con el sistema de ficheros llamado &lt;strong&gt;log2ram&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m4VSla0S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rjms4sbzx43igp61g89d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m4VSla0S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rjms4sbzx43igp61g89d.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y para acabar, mencionar que si listamos el contenido de la carpeta &lt;strong&gt;/var/&lt;/strong&gt; nos aparecerán, entro otros, los directorios &lt;code&gt;log&lt;/code&gt; y &lt;code&gt;hdd.log&lt;/code&gt;, el primero apunta ahora a la RAM y el segundo apunta a nuestro dispositivo de almacenamiento al que le estamos reduciendo el estrés.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nSTUJnef--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nhqks9dq0faze9afkkm6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nSTUJnef--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nhqks9dq0faze9afkkm6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Posible problema
&lt;/h2&gt;




&lt;p&gt;En caso de que no resuelva en algunos dispositivos las consultas DNS, tuve que activar la opción &lt;strong&gt;Listen on all interfaces&lt;/strong&gt; en los ajustes Pi-hole en la interfaz web.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Settings&amp;gt;DNS&amp;gt;Interface listening behavior&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fnr1B2sZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/eibbq9b9pfnvx6poioi6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fnr1B2sZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/eibbq9b9pfnvx6poioi6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por ahora eso es todo, recordad que cualquier crítica, consulta o mejora serán agradecidas =)&lt;/p&gt;

</description>
      <category>raspberrypi</category>
      <category>j4fun</category>
      <category>linux</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Wireguard con Raspberry Pi</title>
      <dc:creator>nervi0s</dc:creator>
      <pubDate>Fri, 08 May 2020 15:49:01 +0000</pubDate>
      <link>https://dev.to/nervi0s/wireguard-con-raspberry-pi-3i60</link>
      <guid>https://dev.to/nervi0s/wireguard-con-raspberry-pi-3i60</guid>
      <description>&lt;p&gt;Hola a tod@s! vamos a intentar instalar una VPN casera. Lo primero de todo voy a intentar explicar por encima qué es una VPN.&lt;/p&gt;

&lt;p&gt;Una VPN (Virtual Private Network) o en español un Red Privada Virtual es una tecnología que nos permite crear un túnel virtual que emula una conexión directa a nuestro router aunque nos econtremos a kilómetros de distanca. (Obviamente usando una conexión de red primero como puede ser la de la red móvil o una red Wi-Fi. (si fuera un cable directo a nuestro router sería la leche xD)&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BMP6AWd0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/RvbNTKs/cap1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BMP6AWd0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/RvbNTKs/cap1.png" alt="cap1"&gt;&lt;/a&gt;&lt;br&gt;
Creo que &lt;a href="https://www.youtube.com/watch?v=M5TdFKUaNxM"&gt;este vídeo&lt;/a&gt; lo explica bastante bien aunque en el vídeo se muestra otro proceso.&lt;/p&gt;

&lt;p&gt;Una de las muchas utilidades que se le puede dar al uso de una VPN que podemos mencionar, por ejemplo, es el cifrado que llevan los paquetes que pasan por esta misma.&lt;/p&gt;

&lt;p&gt;Imaginemos que estamos en una cafetería que tiene un punto de acceso Wi-Fi y vamos a conectarnos a ella. No sabemos bien quién puede estar capturando los paquetes o interviniendo en esa red, si usamos nuestra VPN estaríamos añadiendo una capa más de seguridad a nuestro datos, claro está que nada es 100% seguro y la información mejor protegida es aquella que está en tu mente y no ha salido de ahí (por ahora). En Internet la seguridad es relativa.&lt;/p&gt;

&lt;p&gt;Bueno dicho esto, vamos al lío!&lt;/p&gt;


&lt;h2&gt;
  
  
  Instalación de Wireguard
&lt;/h2&gt;



&lt;p&gt;Vamos a montar una VPN en nuestra Raspberry Pi con &lt;a href="https://www.wireguard.com/"&gt;Wireguard&lt;/a&gt;, para ello necesitamos añadir algunos repositorios, instalarlo y configurarlo. Para eso vamos a seguir estos pasos:&lt;/p&gt;

&lt;p&gt;Lo primero debemos tener actualizado nuestro sistema, para ello ejecutamos estos comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Ahora vamos a instalar los headers del kernel de GNU/Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;raspberrypi-kernel-headers
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Como &lt;a href="https://arstechnica.com/gadgets/2020/03/wireguard-vpn-makes-it-to-1-0-0-and-into-the-next-linux-kernel/"&gt;aún no se ha incluído Wireguard&lt;/a&gt; como parte del kernel de GNU/Linux hay que instalarlo, pero como no se encuentra en los repositorios de Raspbian, vamos a añadir los repositorios de Debian, además así podemos mantener Wireguard actualizado usando el típico &lt;em&gt;apt update&lt;/em&gt;:&lt;br&gt;
Ahora vamos a instalar los headers del kernel de GNU/Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb http://deb.debian.org/debian/ unstable main"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; &lt;span class="nt"&gt;--append&lt;/span&gt; /etc/apt/sources.list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;A continuación vamos a añadir las keys para la distro de Debian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key adv &lt;span class="nt"&gt;--keyserver&lt;/span&gt;   keyserver.ubuntu.com &lt;span class="nt"&gt;--recv-keys&lt;/span&gt; 04EE7237B7D453EC

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key adv &lt;span class="nt"&gt;--keyserver&lt;/span&gt;   keyserver.ubuntu.com &lt;span class="nt"&gt;--recv-keys&lt;/span&gt; 648ACFD622F3D138
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Bien, ahora lo que vamos a hacer con el siguiente comando es prevenir que nuestra Raspberry use los repositorios de Debian como repositorios normales de Raspbian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'printf "Package: *\nPin: release a=unstable\nPin-Priority: 90\n" &amp;gt; /etc/apt/preferences.d/limit-unstable'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Ahora toca actualizar nuestra lista de paquetes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Con todo esto hecho ahora podemos instalar Wireguard ejecutando lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;wireguard
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Procedemos a comprobar que se ha instalado viendo si existen &lt;strong&gt;/usr/bin/wg&lt;/strong&gt; y &lt;strong&gt;/usr/bin/wg-quick&lt;/strong&gt;, para ello ejecutamos estos comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;which wg
which wg-quick
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;h2&gt;
  
  
  Generando Claves
&lt;/h2&gt;




&lt;p&gt;Por ahora todo ha ido bien, entonces vamos a proceder a generar las claves privadas y públicas que son las claves que se usan para autentificar tanto al servidor que vamos a crear con un cliente y viceversa, es decir, para hacer un &lt;a href="https://es.wikipedia.org/wiki/Establecimiento_de_comunicaci%C3%B3n"&gt;Handshake&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para esto vamos a movernos a un directorio donde vamos a almacenar estas claves, por ejemplo podemos hacerlo en /etc/wireguard y para hacer todo esto vamos a ganar privilegios de administrador:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;su
&lt;span class="nb"&gt;cd&lt;/span&gt; /etc/wireguard
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Vamos a cambiar los permisos de este directorio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;umask &lt;/span&gt;077
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Y ahora vamos a crear la claves:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;wg genkey &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; server_private_key
wg pubkey &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; server_public_key &amp;lt; server_private_key

wg genkey &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; client1_private_key
wg pubkey &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; client1_public_key &amp;lt; client1_private_key
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Si listamos los archivos del directorio actual con &lt;code&gt;ls&lt;/code&gt; veremos que nos ha generado esos 4 archivos, uno con la clave privada del servidor, otro con su clave pública y los mismos pero para el cliente.&lt;/p&gt;

&lt;p&gt;Usaremos el comando &lt;code&gt;cat&lt;/code&gt; para ver el contenido de estos archivos, ya que lo usaremos para configurar el servidor y el cliente (en mi caso solo hay 1 cliente pero podemos tener los que queramos).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;server_private_key
&lt;span class="nb"&gt;cat &lt;/span&gt;server_public_key
&lt;span class="nb"&gt;cat &lt;/span&gt;client_private_key
&lt;span class="nb"&gt;cat &lt;/span&gt;client_public_key
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Supongamos que los ficheros contienen estas claves:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;server_private_key: AAABBBCCC&lt;/code&gt;&lt;br&gt;
&lt;code&gt;server_public_key:XXXYYYJJJ&lt;/code&gt;&lt;br&gt;
&lt;code&gt;client_private_key:RRRPPPKKK&lt;/code&gt;&lt;br&gt;
&lt;code&gt;client_public_key:TTTLLLWWW&lt;/code&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Configurando el servidor (Raspberry)
&lt;/h2&gt;



&lt;p&gt;Ahora vamos a configurar el servidor. Es necesario estar en el directorio &lt;strong&gt;/etc/wireguard&lt;/strong&gt; ya que vamos a crear el archivo de configuración del servidor y editarlo, para eso ejecutamos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;nano wg0.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Se nos abrirá el editor de texto nano y le añadiremos lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;Interface]
Address &lt;span class="o"&gt;=&lt;/span&gt; 123.123.123.1/24
ListenPort &lt;span class="o"&gt;=&lt;/span&gt; 51840
PrivateKey &lt;span class="o"&gt;=&lt;/span&gt; AAABBBCCC

PostUp &lt;span class="o"&gt;=&lt;/span&gt; iptables &lt;span class="nt"&gt;-A&lt;/span&gt; FORWARD &lt;span class="nt"&gt;-i&lt;/span&gt; %i &lt;span class="nt"&gt;-j&lt;/span&gt; ACCEPT&lt;span class="p"&gt;;&lt;/span&gt; iptables &lt;span class="nt"&gt;-A&lt;/span&gt; FORWARD &lt;span class="nt"&gt;-o&lt;/span&gt; %i &lt;span class="nt"&gt;-j&lt;/span&gt; ACCEPT&lt;span class="p"&gt;;&lt;/span&gt; iptables &lt;span class="nt"&gt;-t&lt;/span&gt; nat &lt;span class="nt"&gt;-A&lt;/span&gt; POSTROUTING &lt;span class="nt"&gt;-o&lt;/span&gt; eth0 &lt;span class="nt"&gt;-j&lt;/span&gt; MASQUERADE
PostDown &lt;span class="o"&gt;=&lt;/span&gt; iptables &lt;span class="nt"&gt;-D&lt;/span&gt; FORWARD &lt;span class="nt"&gt;-i&lt;/span&gt; %i &lt;span class="nt"&gt;-j&lt;/span&gt; ACCEPT&lt;span class="p"&gt;;&lt;/span&gt; iptables &lt;span class="nt"&gt;-D&lt;/span&gt; FORWARD &lt;span class="nt"&gt;-o&lt;/span&gt; %i &lt;span class="nt"&gt;-j&lt;/span&gt; ACCEPT&lt;span class="p"&gt;;&lt;/span&gt; iptables &lt;span class="nt"&gt;-t&lt;/span&gt; nat &lt;span class="nt"&gt;-D&lt;/span&gt; POSTROUTING &lt;span class="nt"&gt;-o&lt;/span&gt; eth0 &lt;span class="nt"&gt;-j&lt;/span&gt; MASQUERADE

&lt;span class="o"&gt;[&lt;/span&gt;Peer]
&lt;span class="c"&gt;# Movil que voy a usar como cliente 1&lt;/span&gt;
PublicKey &lt;span class="o"&gt;=&lt;/span&gt; TTTLLLWWW
AllowedIPs &lt;span class="o"&gt;=&lt;/span&gt; 123.123.123.2/32
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Una vez editado guardamos &lt;strong&gt;(Ctrl+X)&lt;/strong&gt; y cerramos nano para volver a la consola. &lt;/p&gt;

&lt;p&gt;Voy a explicar un poco de qué se trata cada cosa de arriba hacia abajo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[Interface]&lt;/strong&gt;: Nos indica donde comienzan datos de nuestra interfaz de red de servidor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Address&lt;/strong&gt;: Esta es la &lt;strong&gt;dirección IP virtual&lt;/strong&gt; que tendrá el servidor VPN,nos la podemos inventar, pero debemos tener clara cuál es y obviamente respetar las normas estructurales de una dirección IP, es decir, 555.777.999.889/98 no es una dirección IP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ListenPort&lt;/strong&gt;: Es el puerto que utilizará el servidor para escuchar, como es lógico debemos abrir este puero en nuestro firewall y router.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PrivateKey&lt;/strong&gt;: es la clave privada del servidor que creamos antes.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PostUp&lt;/strong&gt; y &lt;strong&gt;PostDown&lt;/strong&gt;: son parámetros de iptables. Aquí cabe mencionar algo important: en ambos casos vemos que aparece &lt;strong&gt;eth0&lt;/strong&gt; esto debe ser el nombre de la interfaz de red que estemos usando en la Raspberry, por ejemplo es usual que si usamos la Raspberry mediante Wi-Fi el nombre de esta interfaz sea &lt;strong&gt;wlan0&lt;/strong&gt; De ser el caso debemos cambiar eth0 por wlan0. Para saber el nombre de la interfaz de red que estás usando puedes verlo con el comando &lt;code&gt;ifconfig&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;[Peer]&lt;/strong&gt;: Indica donde comienzan los datos del primer cliente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;#&lt;/strong&gt;: Indica un comentario.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PublicKey&lt;/strong&gt;: Aquí va la clave pública del cliente que hemos generado antes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AllowedIPs&lt;/strong&gt;: Esta es la &lt;strong&gt;dirección IP virtual&lt;/strong&gt; que tendrá el cliente, como dije arriba ha de respetar las normas de las direcciones IP e ir en concordancia con la dirección IP virtual del servidor.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ahora toca habilitar el IP Forwarding,pero ¿para qué es útil esto? Veámoslo:&lt;/p&gt;

&lt;p&gt;Si queremos acceder a nuestros recursos de la LAN (ya sea una cámara IP, otro equipo de la red, etc.) a través de esta VPN que estamos haciendo entonces debemos tener habilitado el IP Forwarding en el equipo host donde se encuentra el servidor VPN Wireguard, en este caso, en la Raspberry. Si no habilitamos el IP Forwarding no estaríamos aprovechando todo el potencial que nos da usar una VPN, dicho esto, omitir el IP Forwarding solo tendría sentido si el único dispositivo al que se quiere llegar desde fuera con la VPN es la máquina host WireGuard (la Raspberry en este caso).&lt;/p&gt;

&lt;p&gt;Para habilitar el IP Forwarding abriremos el fichero de configuración &lt;strong&gt;/etc/sysctl.conf&lt;/strong&gt; y lo editaremos, desmarcaremos la línea donde dice "net.ipv4.ip_forward=1", guardamos el archivo con su mismo nombre y cerramos nano:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;nano /etc/sysctl.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Debe quedar algo así:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q08wiFAy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/7pk6Fkm/cap2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q08wiFAy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/7pk6Fkm/cap2.png" alt="cap2"&gt;&lt;/a&gt;&lt;br&gt;
Una vez hecho esto vamos a reinicar la máquina y nos logueamos con nuestro usuario normal, comprobamos que el IP Forwarding esté activo usando este comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;sysctl net.ipv4.ip_forward
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Este comando nos debe &lt;strong&gt;retornar&lt;/strong&gt; un valor igual a 1, es decir: &lt;strong&gt;net.ipv4.ip_forward = 1&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ahora vamos a iniciar nuestra nueva interfaz de red del servidor con este comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;wg-quick up wg0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;nota&lt;/strong&gt;: Si queremos parar la interfaz en algún momento podemos ejecutar:   &lt;code&gt;sudo wg-quick down wg0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para ver su estado ejecutamos lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;wg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Comprobamos que todo está bien y tenemos conexión a Internet, por ejemplo haciendo un PING a 8.8.8.8 &lt;/p&gt;

&lt;p&gt;Si todo está bien y correcto y nos alegramos podemos hacer que se ejecute automáticamente al iniciar la Raspberry con este comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;wg-quick@wg0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Y procedemos a cambiar de dueño y permisos con estos comandos, siendo root ahora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;su
&lt;span class="nb"&gt;chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; root:root /etc/wireguard/
&lt;span class="nb"&gt;chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; og-rwx /etc/wireguard/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;p&gt;Reiniciamos la máquina y nos logueamos con nuestro usuario normal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configurando el cliente
&lt;/h2&gt;




&lt;p&gt;Ahora toca configurar la parte del cliente, en mi caso es un smartphone con un sistema Android. Para estos dispositivos y para iPhone para instalar Wireguard simplemente debemos descargarnos la APP de su respectiva tienda de APP.&lt;/p&gt;

&lt;p&gt;Para configurar la parte del cliente vamos a hacer esto:&lt;/p&gt;

&lt;p&gt;En nuestra Raspberry Pi abrimos la terminal y nos situamos en el escritorio por ejemplo y vamos a crear una archivo de configuración para nuestro cliente y modificarlo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;nano cliente1.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Se nos abrirá el editor de texto nano y le incluiremos lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;Interface]
Address &lt;span class="o"&gt;=&lt;/span&gt; 123.123.123.2/32
PrivateKey &lt;span class="o"&gt;=&lt;/span&gt; RRRPPPKKK
DNS &lt;span class="o"&gt;=&lt;/span&gt; 8.8.8.8

&lt;span class="o"&gt;[&lt;/span&gt;Peer]
PublicKey &lt;span class="o"&gt;=&lt;/span&gt; XXXYYYJJJ
AllowedIPs &lt;span class="o"&gt;=&lt;/span&gt; 0.0.0.0/0, ::/0
Endpoint &lt;span class="o"&gt;=&lt;/span&gt; AquíVaLaIpPúblicaDeTuRed:51840
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[Interface]&lt;/strong&gt;: Nos indica donde comienza la configuración de la interfaz del cliente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Address&lt;/strong&gt;: Aquí irá la dirección IP del cliente que permitimos en la sección &lt;strong&gt;&lt;em&gt;AllowedIPs&lt;/em&gt;&lt;/strong&gt; del archivo de configuración del servidor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PrivateKey&lt;/strong&gt;: Aquí debe ir la clave privada del cliente que se halla en el archivo (client_private_key).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DNS&lt;/strong&gt;: Aquí ponemos la dirección del servidor DNS que prefiramos usar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[Peer]&lt;/strong&gt;: Se inicia la parte de configuración del cliente referenciando al Servidor Wireguard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PublicKey&lt;/strong&gt;: Aquí ponemos la clave pública del servidor que está en el archivo "server_public_key".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AllowedIPs&lt;/strong&gt;: Podemos las direcciones IP que están ahí para permitir que todo tráfico pueda fluir por nuestro móvil.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Endpoint&lt;/strong&gt;: Aquí debemos poner la IP pública de nuestro router ó la dirección DDNS que tengamos apuntando a ella.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una vez explicado esto, guardamos este archivo (&lt;strong&gt;Cntrl + X&lt;/strong&gt;) aceptamos y cerramos nano volviendo a la terminal y haremos lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;qrencode
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Y luego:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;qrencode &lt;span class="nt"&gt;-t&lt;/span&gt; ANSIUTF8 &amp;lt; cliente1.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Nos habrá generado un código QR. En la APP de Wireguard que tenemos en nuestro móvil hay una opción de cargar la configuración mediante un código QR, apuntamos a la pantalla para escanear ese código, le ponemos un nombre y ya estaría disponible esa configuración en nuestro dispositivo.&lt;/p&gt;

&lt;p&gt;Y bueno si todo ha salido bien ya tendríamos acceso a nuestra VPN desde cualquier parte del mundo con nuestro smartphone.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Raspberry Pi</title>
      <dc:creator>nervi0s</dc:creator>
      <pubDate>Fri, 08 May 2020 14:49:52 +0000</pubDate>
      <link>https://dev.to/nervi0s/raspberri-pi-3ni4</link>
      <guid>https://dev.to/nervi0s/raspberri-pi-3ni4</guid>
      <description>&lt;p&gt;Hoy os voy a mostrar cómo me he iniciado en el mundo de este mini ordenador.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2Sj3DZtO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yjkntnkyrtgh5dusqkg1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2Sj3DZtO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yjkntnkyrtgh5dusqkg1.png" alt="Raspberry"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Primero vamos a ver cómo instalar Raspbian OS en este dispositivo. Este es el SO que he elegido yo, pero hay otros que se pueden usar también.&lt;/p&gt;

&lt;p&gt;Primero debemos hacernos con una imagen de este sistema operativo, podemos encontrarla aquí: &lt;a href="https://www.raspberrypi.org/downloads/raspbian/"&gt;Página oficial de descargas&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Voy a usar &lt;strong&gt;Raspbian Buster Lite&lt;/strong&gt;, se trada de una versión sin escritorio, es decir, solo tendremos la consola en la pantalla. Más adelante os mostraré cómo instalar un escritorio de todos modos.&lt;/p&gt;

&lt;p&gt;Nos descargamos el fichero &lt;strong&gt;ZIP&lt;/strong&gt; de Raspbian Buster Lite y si queremos comprobar su SHA-256 podemos seguir los pasos que os &lt;a href="https://dev.to/nervi0s/funciones-hash-ceo"&gt;mostré en este post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Una vez tengamos el ZIP vamos a descargarnos este programa: &lt;a href="https://www.balena.io/etcher/"&gt;balenaEtcher&lt;/a&gt;. Se trata de un programa que nos ayudará a grabar la imagen del ZIP en un dispositivo de memoria.&lt;/p&gt;

&lt;p&gt;Llegados a este punto voy a mencionar que voy a correr el sistema operativo en una &lt;strong&gt;unidad USB&lt;/strong&gt;, aunque se supone que la raspberry debería correr el SO en una tarjeta de memoria &lt;strong&gt;microSD&lt;/strong&gt;. Para conseguir esto voy a hacer un pequeño "truco".&lt;/p&gt;

&lt;h2&gt;
  
  
  Vamos a ello!
&lt;/h2&gt;

&lt;p&gt;Primero vamos a abrir &lt;strong&gt;balenaEtcher&lt;/strong&gt; y vemos algo así:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yoVcDUA2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/TYNdpjr/captu1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yoVcDUA2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/TYNdpjr/captu1.png" alt="cap1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Select image&lt;/strong&gt;: Aquí seleccionaremos el ZIP de Raspbian Buster Lite.&lt;br&gt;
&lt;strong&gt;Select target&lt;/strong&gt;: Aquí elegiremos la tarjeta microSD.&lt;br&gt;
&lt;strong&gt;Flah!&lt;/strong&gt;: Por útimo le daremos a flashear para que empiece la grabación.&lt;/p&gt;

&lt;p&gt;Como voy a instalarlo en un dispositivo USB, hago exactamente el mismo proceso de arriba nuevamente solo que esta vez seleccionaré mi unidad USB en la sección &lt;strong&gt;Select target&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Una vez hecho esto tendremos una imagen de Rasbian tanto en la memoria USB como en la microSD.&lt;/p&gt;

&lt;p&gt;Ahora vamos a explicar algo, Raspbian en los dispositivos de almacenamiento utiliza dos particiones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La partición del arranque &lt;strong&gt;boot&lt;/strong&gt; con formato de archivos FAT32.&lt;/li&gt;
&lt;li&gt;La partición del sistema &lt;strong&gt;rootfs&lt;/strong&gt; con formato de archivos EXT4.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EdEnZLER--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/yqD2Frm/captu2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EdEnZLER--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/yqD2Frm/captu2.png" alt="cap2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto quiere decir que tanto en mi microSD como en mi unidad USB se han creado ambas particiones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FCpwy1MS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/80YTC2X/captu3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FCpwy1MS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/80YTC2X/captu3.png" alt="cap3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lo que vamos a hacer ahora es borrar la partición donde está el sistema en la tarjeta microSD, es decir, borramos la partición cuyo formato es ext4, pero solamente de la tarjeta microSD, la de la unidad USB no la tocamos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dLjGChJM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/vQ64YYr/captu4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dLjGChJM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/vQ64YYr/captu4.png" alt="cap4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora conseguiremos que arranque la Raspberry Pi con la tarjeda microSD pero usando el sistema de la unidad USB. Este "truco" ocurre porque la Raspberry usa siempre el arranque de la unidad microSD y luego busca la partición del sistema, que en este caso se hallará en la memoria USB. Como pega he de mencionar que para arrancar la Raspberry siempre ha de estar conectada la microSD donde se encuentra la partición del boot.&lt;/p&gt;

&lt;p&gt;Con esto enchufando a la Raspberry, tanto la tarjeta como la memoria USB podemos arrancarla (Conectándola al monitor, a la corriente y a una cable de Ethernet al router).&lt;/p&gt;

&lt;p&gt;Una vez cargue el sistema (recordemos que estamos con la versión de solo terminal y por ahora no hay escritorio) nos pedirá loguearnos, por defecto como usuario y contraseña debemos poner lo siguiente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User&lt;/strong&gt;: pi&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pass&lt;/strong&gt;: raspberry&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como es lógico por seguridad debemos modificar esto. ¿Cómo lo hacemos?, de la siguiente forma:&lt;/p&gt;

&lt;p&gt;Dejo esta imagen para ver unos comandos que pueden ser útiles:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U8E30chd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/2h2YQ7j/captu5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U8E30chd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/2h2YQ7j/captu5.png" alt="cap5"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primero vamos a habilitar el usuario &lt;strong&gt;root&lt;/strong&gt; dándole una contraseña con el siguiente comando:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;passwd root
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Nos pedirá una contraseña e introducimos una segura. A continuación reiniciamos con &lt;code&gt;reeboot&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ahora nos logueamos con el usuario &lt;strong&gt;root&lt;/strong&gt; y la contraseña que hayamos puesto. Nos aseguramos de que no haya ningún proceso ejecutándose con el usuario que vamos cambiar, en este caso &lt;strong&gt;pi&lt;/strong&gt; esto lo vemos con el siguiente comando:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;top &lt;span class="nt"&gt;-U&lt;/span&gt; pi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;En caso de que tengamos procesos corriendo del usuario "pi" ejecutamos esto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;killall &lt;span class="nt"&gt;--user&lt;/span&gt; pi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Vamos a cambiar el nombre del usuario "pi" por el que nosotros queramos usando el siguiente comando:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;usermod &lt;span class="nt"&gt;-l&lt;/span&gt; nuevonombre pi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Con esto hemos cambiado el nombre de usuario pero también debemos cambiar el nombre del directorio &lt;strong&gt;/home&lt;/strong&gt; del usuario pi por el nombre del nuevo usuario, lo hacemos de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;usermod &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; /home/nuevonombre nuevonombre
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Reiniciamos la máquina con reboot y nos logueamos con el nuevo nombre de usuario en lugar del anterior pi.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cambiamos la contraseña por defecto que estábamos usando hasta ahora (raspberry) por una segura que nosotros queramos, esto lo hacemos poniendo lo siguiente: &lt;code&gt;passwd&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Por último vamos a desactivar la cuenta &lt;strong&gt;root&lt;/strong&gt; bloqueando su contraseña, lo hacemos de la siguiente forma:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;passwd &lt;span class="nt"&gt;-l&lt;/span&gt; root
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Hemos acabado con esto, ahora vamos a pasar a solucionar un problema que me surgió:&lt;/p&gt;

&lt;p&gt;Si ponemos en la consola &lt;code&gt;df -h&lt;/code&gt; vemos que no se está usando todo el espacio del disco disponible (en mi caso la unidad USB es de 128GB):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UbKzZIR2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/FwGkBdf/captu6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UbKzZIR2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/FwGkBdf/captu6.png" alt="cap6"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para solucionarlo vamos a usar estos comandos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;sudo parted&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;print&lt;/code&gt;. Nos mostrará las dos particiones que tenemos&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;resizepart&lt;/code&gt;. Nos pedirá la partición que queremos redimensionar, debemos elegir la del sistema de arcivos &lt;strong&gt;ext4&lt;/strong&gt;, que en mi caso es la 2. Después nos pide el tamaño, como mi USB es de 128GB puse 127000. Salimos de parted con el comando &lt;code&gt;quit&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por último ejecutamos el siguiente comando para actualizar las particiones:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;resize2fs /dev/sda2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Si volvemos a ejecuar el comando &lt;code&gt;df -h&lt;/code&gt;, podemos ver que ahora el sistema sí tiene un tamaño mayor como debería:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kBr03Pi9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/FWkJ4x2/captu7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kBr03Pi9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/FWkJ4x2/captu7.png" alt="cap7"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez hecho esto actualizamos el sistema con los comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;






&lt;h2&gt;
  
  
  Instalación de un entorno gráfico de escritorio
&lt;/h2&gt;




&lt;p&gt;Ahora vamos a instalar un escritorio. Podemos elegir diversos entornos de escritorio como &lt;a href="https://raspberrytips.com/upgrade-raspbian-lite-to-desktop/"&gt;se puede ver aquí&lt;/a&gt;, yo voy a elegir el que viene por defecto en Raspbian Desktop, es decir &lt;strong&gt;PIXEL Desktop&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Para instalarlo debemos loguearnos en nuestra Raspberry y ejecutar los siguientes comandos:&lt;/p&gt;

&lt;p&gt;Digamos que Xorg es núcleo de cualquiera entorno de escritorio que usemos en GNU/Linux, para instalarlo ejecutamos esto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;xserver-xorg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Y para instalar PIXEL Desktop ejecutamos lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;raspberrypi-ui-mods
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Por último, comprobamos que se ha instalado &lt;strong&gt;LightDM&lt;/strong&gt; que aunque debería haberlo hecho solo, no pasa nada por comprobarlo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;lightdm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Una vez terminado reiniciamos y ya tendríamos lista la Raspberry Pi con un entorno gráfico para Raspbian y comenzar a trabajar con ella.&lt;/p&gt;

&lt;p&gt;Como siempre, cualquier consejo, ayuda o crítica serán de utilidad y no dudéis en comentarlo =).&lt;/p&gt;

</description>
      <category>linux</category>
      <category>j4fan</category>
      <category>spanish</category>
      <category>raspberrypi</category>
    </item>
    <item>
      <title>Eclipse con SVN </title>
      <dc:creator>nervi0s</dc:creator>
      <pubDate>Wed, 11 Mar 2020 19:08:43 +0000</pubDate>
      <link>https://dev.to/nervi0s/eclipse-con-svn-5gbo</link>
      <guid>https://dev.to/nervi0s/eclipse-con-svn-5gbo</guid>
      <description>&lt;p&gt;Hola a tod@s, en este post voy a intentar explicar cómo usar el sistema de control de versiones Subversion (SVN) con el IDE Eclipse, para ello vamos a usar el plugin Subversive, vamos a ello.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pasos para la inslación
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Inslación del plugin&lt;/li&gt;
&lt;li&gt;Instalación de SVN Connectors&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Inslación del plugin &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Primero vamos a instalar el plugin, para ello vamos a seguir estos pasos:&lt;/p&gt;

&lt;p&gt;Lo primero que debemos hacer es abrir Eclipse, en nuestro caso estamos usando Eclipse Mars.2 Release (4.5.2). &lt;/p&gt;

&lt;p&gt;Una vez abierto, nos dirigiremos a la siguiente ruta: &lt;strong&gt;Help&amp;gt;Install New Software...&lt;/strong&gt; y en el botón &lt;strong&gt;Add...&lt;/strong&gt;. Nos aparecerá una ventana donde se nos pedirá un nombre y una localicación.&lt;/p&gt;

&lt;p&gt;En el cuadro de texto de Nombre pondremos el nombre que queramos, por ejemplo, Subersive Plug. En la Localización debemos poner la siguiente URL:&lt;br&gt;
&lt;code&gt;&lt;a href="http://download.eclipse.org/technology/subversive/4.0/update-site/" rel="noopener noreferrer"&gt;http://download.eclipse.org/technology/subversive/4.0/update-site/&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FHVBHRWp%2FCaptura1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FHVBHRWp%2FCaptura1.png" alt="Captura1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez hecho esto le daremos a &lt;strong&gt;OK&lt;/strong&gt;, empezará a buscar los recursos solicitados y a continuación nos mostrará el software disponible, marcaremos todas las casillas y le daremos a &lt;strong&gt;Next &amp;gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FWpyqzwk%2FCaptura2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FWpyqzwk%2FCaptura2.jpg" alt="Captura2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Empezará a cargar las dependencias del software que hemos solicitado que instale, volveremos a darle a &lt;strong&gt;Next&amp;gt;&lt;/strong&gt; y aceptaremos el acuerdo de licencia y le finalizamos, el proceso empezará a instalar el software que hemos pedido que instale, puede tardar algunos minutos en finalizar.&lt;/p&gt;

&lt;p&gt;Puede que nos salte un mensaje como este:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FPCDqYnR%2FCaptura3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FPCDqYnR%2FCaptura3.jpg" alt="Captura3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Advirdiendonos de que estamos instalando software que no tiene contenido firmado, le daremos a &lt;strong&gt;OK&lt;/strong&gt; para continuar con la instalación. Por último nos pedirá reinicar Eclipse, le daresmo a &lt;strong&gt;Yes&lt;/strong&gt; para que lo haga.&lt;/p&gt;

&lt;p&gt;Si todo ha salido bien después de que se reinicie Eclipse nos aparecerá una pantalla de bienvenida como esta:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FmXd9Hbt%2FCaptura4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FmXd9Hbt%2FCaptura4.jpg" alt="Captura4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simplemente la cerramos y seguimos con el siguiente paso.&lt;/p&gt;

&lt;h3&gt;
  
  
  Instalación de SVN Connectors &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Ahora nos toca instalar los conectores entre Eclipse y SVN, para ello nos dirigimos a &lt;strong&gt;Windows&amp;gt;Preferences&lt;/strong&gt; en la ventana que nos abre, vamos a &lt;strong&gt;Team&amp;gt;SVN&lt;/strong&gt; y luego damos clic en la pestaña que dice &lt;strong&gt;SVN Connector&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FhCQFWRB%2FCaptura5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FhCQFWRB%2FCaptura5.jpg" alt="Captura5"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez estemos en la pestaña le daremos clic en el botón que dice &lt;strong&gt;Get Connectors...&lt;/strong&gt; de las tres opciones que nos permite elegir, yo elegí la primera, &lt;strong&gt;SVN Kit 1.8.14&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F51KCQnW%2FCaptura6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F51KCQnW%2FCaptura6.jpg" alt="Captura6"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Le daremos a &lt;strong&gt;Finish&lt;/strong&gt; y empezara a buscar los recurosos, en el proceso nos mostrará una ventan como la siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FsWgyB60%2FCaptura7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FsWgyB60%2FCaptura7.jpg" alt="Captura7"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Marcamos ambas opciones y continuamos, aceptamos el acuerdo de licencia y si nos aparece una ventana advirtiéndonos de que estamos instalando software no firmado le daremos a OK para que continúe el proceso de instalación. Cuando acabe nos pedirá reiniciar Eclipse, le daremos a Yes y esperamos a que se reinicie. &lt;/p&gt;

&lt;p&gt;Para comprobar que todo ha ido bien, volvemos a la pantalla de la ventana de SVN Connector y comprobamos que ahora nos aparece el que hemos instalado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F71TQvLP%2FCaptura8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F71TQvLP%2FCaptura8.jpg" alt="Captura8"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bien ahora ya estamos listos para crear nuestro repositorio (en este caso de manera local).&lt;/p&gt;

&lt;h2&gt;
  
  
  Creando nuestro primer repositorio
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Crear repositorio&lt;/li&gt;
&lt;li&gt;Vincular proyecto con el repositorio&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Crear repositorio &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Para crear nuestro primer resposirorio nos dirigimos a &lt;strong&gt;Windows&amp;gt;Perspective&amp;gt;Open Perspective&amp;gt;Other...&lt;/strong&gt; se nos mostrará una ventana con las posibles vistas, en este caso vamos a elegir &lt;strong&gt;SVN Repository Exploring&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FbdWkjdr%2FCaptura9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FbdWkjdr%2FCaptura9.jpg" alt="Captura9"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la vista que nos aparece a la izquierda le vamos a dar con el botón derecho del raton para elegir la opción de crear nuevo repositorio:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FqrCCwt7%2FCaptura10.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FqrCCwt7%2FCaptura10.jpg" alt="Captura10"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la siguiente ventana nos pedirá la ruta donde queremos que se cree nuestro repositorio, elegimos la que nos convenga y le daremos a &lt;strong&gt;OK&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FckCwq44%2FCaptura11.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FckCwq44%2FCaptura11.jpg" alt="Captura11"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto nos creará el repositorio en la ruta expecificada, ahora en la perspectiva de explorador de repositorios nos aparecerá lo que hemos creado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FBfcTmVb%2FCaptura12.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FBfcTmVb%2FCaptura12.jpg" alt="Captura12"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Vincular proyecto con el repositorio &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Ahora vamos a vincular un proyecto que tengamos creado con nuestro repositorio, de esta forma podemos hacer uso de sus funcionalidades.&lt;/p&gt;

&lt;p&gt;Para esto nos vamos a la perspectiva de Java donde podamos observar los proyectos que tengamos creados, elegimos alguno que queramos vincular con el repositorio y haremos clicl derecho encima del nombre del proyecto y daremos clic en **Team&amp;gt;Share Project..&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F60fH4yK%2FCaptura13.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F60fH4yK%2FCaptura13.jpg" alt="Captura13"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la ventana que nos abrirá debemos elegir el tipo de repositorio, esta vez vamos a legir SVN.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FzJVv9hJ%2FCaptura14.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FzJVv9hJ%2FCaptura14.jpg" alt="Captura14"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Le damos clicl a Next y en la siguiente ventana nos aparecerán los repositorio que hayamos creado, es este caso me aparece sólo el que hice antes, elegimos nuestro repositorio y le damos a Next.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FLZppx4n%2FCaptura15.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FLZppx4n%2FCaptura15.jpg" alt="Captura15"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Le daremos a siguiente hasta que nos aparezca una ventana como esta:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FYTygKLD%2FCaptura16.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FYTygKLD%2FCaptura16.jpg" alt="Captura16"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En esta ventana enviaremos nuestro primer commit al vincular nuestro proyecto con el repositorio.&lt;/p&gt;

&lt;p&gt;Le daremos a Finish y se mostrará una ventana para instroducir otro commit, pondremos lo que creamos conveniente y le daremos a OK.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FNKf0Wjz%2FCaptura17.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FNKf0Wjz%2FCaptura17.jpg" alt="Captura17"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora podemos ver como en nuestro explorador de proyectos, el proyecto que hemos vinculado aparece de la siguiente forma, indicando que todo ha ido como esperábamos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FjRv1DFW%2FCaptura18.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FjRv1DFW%2FCaptura18.jpg" alt="Captura18"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Probando SVN una vez instalado y configurado
&lt;/h2&gt;

&lt;p&gt;Vamos a realizar unas pruebas para entender un poco del funcionamiento de este sistema de control de versiones.&lt;/p&gt;

&lt;p&gt;En la siguiente imagen podemos ver que hemos hecho una modificación en código fuente de una clase que estaba en el proyecto, como podemos ver en el explorador de proyectos, el proyecto Trimestre3 aparece con el símbolo &amp;gt; a la izquierda del nombre, esto quiere decir que hemos guardado una modificación en el proyecto pero aún no la hemos subido al repositorio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F5Yq5n4Y%2FCaptura19.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F5Yq5n4Y%2FCaptura19.jpg" alt="Captura19"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bueno ahora vamos a darle a con el botón derecho encima del nombre de nuestro proyecto, y a cotinuación a &lt;strong&gt;Team&amp;gt;Synchronize with Repository.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FJjXRqkh%2FCaptura20.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FJjXRqkh%2FCaptura20.jpg" alt="Captura20"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se nos pedirá aceptar que vamos a cambiar de perspectiva y le damos a Yes, en la nueva vista que se nos abrirá le daremos clic en la flecha amarilla donde dice &lt;em&gt;Next Difference&lt;/em&gt; y podremos ver y comparar las modificaciones hemos realizado con el fuente subido previamente al repositorio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FKykHWk2%2FCaptura21.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FKykHWk2%2FCaptura21.jpg" alt="Captura21"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como vemos en la imagen nos resalta las línea de código donde hay diferencias, en este ejemplo sólo hicimos una modificación, que fue añadir un simple comentario en la línea 79.&lt;/p&gt;

&lt;p&gt;Ahora vamos a ver cómo subir los cambios a nuestro repositorio. &lt;/p&gt;

&lt;p&gt;Para ello le daremos clic con el botón derecho a nuestra clase donde hemos realizado un modificación y pulsaremos en &lt;strong&gt;Commit...&lt;/strong&gt; (La opción de Update la usaríamos para el proceso inverso, es decir, para resturar la versión que tengamos en el respositorio), lo vemos en la siguiente imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FLZd0scY%2FCaptura22.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FLZd0scY%2FCaptura22.jpg" alt="Captura22"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la ventana que se nos abre pondremos un comentario al Commit que estemos enviando a guardar en el repositori y le daremos a &lt;strong&gt;OK&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F3zLC9SH%2FCaptura23.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F3zLC9SH%2FCaptura23.jpg" alt="Captura23"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si cerramos la vista actual y nos vamos a la vista de &lt;strong&gt;SVN Repository Exploring&lt;/strong&gt; y el damos clic derecho en el nombre del ropositorio y elegimos la opción &lt;strong&gt;Show History&lt;/strong&gt; tal y como se muestra a continuación:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FTMb23NB%2FCaptura24.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FTMb23NB%2FCaptura24.jpg" alt="Captura24"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos ver el historial de las distintas versiopnes que hayamos subido al repositorio, ordenadas numéricamente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FLpq3KRv%2FCaptura25.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FLpq3KRv%2FCaptura25.jpg" alt="Captura25"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si le damos clic en la versión actual podemos ver abajo los cambios que ha sufrido en esa versión, en este caso la modificación del archivo &lt;em&gt;Arrays_1.java&lt;/em&gt;, si le damos clic derecho a dicho archivo y elegimos la opción &lt;strong&gt;Compare with Previous State&lt;/strong&gt;, como vemos a continuación:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FrcYFRxB%2FCaptura26.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FrcYFRxB%2FCaptura26.jpg" alt="Captura26"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podremos volver a ver las diferencias con respecto a la versión anterior, tal y como vemos en la siguiente imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FpWzxNcJ%2FCaptura27.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FpWzxNcJ%2FCaptura27.jpg" alt="Captura27"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si queremos comparar la última versión con otra, por ejemplo la primera, en el explorador de respositorio, le damos clic derecho en el nombre de nuestro proyecto luego a Compare &lt;strong&gt;With&amp;gt;URL...&lt;/strong&gt; en la ventana que se nos abre elegimos &lt;strong&gt;Revison&lt;/strong&gt; y damos clic en &lt;strong&gt;Browse...&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F2Yvs4pd%2FCaptura28.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F2Yvs4pd%2FCaptura28.jpg" alt="Captura28"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Después en la ventana que se nos abre elegimos la versión con la que queramos comprar, en mi caso la Rev 2 y le damos a &lt;strong&gt;OK&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FSdd8wP3%2FCaptura29.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FSdd8wP3%2FCaptura29.jpg" alt="Captura29"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la siguiente ventana dando doble clic en el nombre del fuente java nos abrirá la vista donde podemos ver la diferencias entre la Rev 4 y la Rev 2 que hemos elegido, como se pude ver en la siguiente imagen son 2 comentarios de prueba.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FjTgfkrv%2FCaptura30.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FjTgfkrv%2FCaptura30.jpg" alt="Captura30"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si queremos volver desde nuestra perspectiva de Java a alguna versión anterior, podemos hacer lo siguiente: &lt;/p&gt;

&lt;p&gt;Damos clicl derecho  en el nombre de la clase que queramos revertir, y elegimos &lt;strong&gt;Team&amp;gt;Update to Revision...&lt;/strong&gt;  como vemos en la siguiente imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F0nNqPYP%2FCaptura31.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2F0nNqPYP%2FCaptura31.jpg" alt="Captura31"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Luego en la ventana que se nos abre elegimos el número de la revesión a la cuál queremos volver y le damos a OK, en mi caso he elegido la Rev 2 donde no existían los comentario que añadí posteriormente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FQJDQQ8w%2FCaptura32.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FQJDQQ8w%2FCaptura32.jpg" alt="Captura32"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por último como vemos en la siguiente imagen hemos vuelto al estado donde no existían esos comentarios:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FxhqFSM9%2FCaptura33.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FxhqFSM9%2FCaptura33.jpg" alt="Captura33"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y eso eso es todo por ahora con respecto a Subersion y Eclipse. Como siempre, sugerencias, correciones serán benvenidas =).&lt;/p&gt;

&lt;p&gt;Pagina de interés: &lt;code&gt;&lt;a href="https://www.eclipse.org/subversive/installation-instructions.php" rel="noopener noreferrer"&gt;https://www.eclipse.org/subversive/installation-instructions.php&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;

</description>
      <category>controldeversiones</category>
      <category>svn</category>
      <category>eclipse</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Funciones Hash</title>
      <dc:creator>nervi0s</dc:creator>
      <pubDate>Fri, 06 Mar 2020 00:32:11 +0000</pubDate>
      <link>https://dev.to/nervi0s/funciones-hash-ceo</link>
      <guid>https://dev.to/nervi0s/funciones-hash-ceo</guid>
      <description>&lt;p&gt;Estoy de vuelta con un nuevo tema que he estado investigando por mi cuenta y quería compartir con vosotros lo que he aprendido, he de mencionar que no soy ningún experto en la materia, asi que si hay algún error que corregir o mejora que añadir, vuestros comentarios serán bienvenidos.&lt;/p&gt;

&lt;p&gt;¿Qué es una función hash?&lt;/p&gt;

&lt;p&gt;Una función o también conocida como función resumen, es una relación entre 2 conjuntos mediante la cual dado un determinado dato de entrada perteneciente al primer conjunto, a este le corresponderá un valor perteneciente al segundo conjunto. Esta transformación de un valor a otro se hace mediente algun algortimo.&lt;/p&gt;

&lt;p&gt;Una función hash pretende ser (matemáticamente hablando) una función biyectiva, es decir, si todos los datos/elementos/valores del conjunto de inicio tiene una imagen distinta del conjunto de llegada, y a cada elemento/dato/valor del conjunto de llegada le corresponde un único valor/elemento/dato del conjunto de llegada. Veamos esto en una imagen para que quede más claro:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FhChR2nT%2FScreenshot-20200228-171712.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FhChR2nT%2FScreenshot-20200228-171712.png" alt="Funcion"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Las funciones hash están diseñadas de modo que sea cual sea la cantidad de información de entrada, a la hora de la salida esta siempre tenga una determinada longitud, por ejemplo, si queremos calcular el hash de un archivo de texto plano cuyo peso sea de 1033 Bytes, este nos dará como resultado una cadena de caracteres de longitud 10. Pues bien ahora queremos calcular la función resumen de un archivo ISO cuyo peso es de 4GB, pues bien quizá tarde algo más en sacarnos la función resumen pero al final como resultado nos dara otra cadena de caracteres de longitud 10.&lt;/p&gt;

&lt;p&gt;Otro dato a tener en cuenta es que las en las funciones hash se busca que a la mínima que varíen los datos de entrada, el resultado final sea completamente distinto (esto se hace para evitar colisiones, que explicaré lo que es más adelante).&lt;/p&gt;

&lt;p&gt;Veamos un ejemplo práctico:&lt;/p&gt;

&lt;p&gt;Vamos a crear una par de archivos de texto con un contenido igual para ambos y después vamos a modificar alguno para ver qué es lo que pasa:&lt;/p&gt;

&lt;p&gt;Vamos a usar el algortirmo MD5 para calcular los hash.&lt;/p&gt;

&lt;p&gt;Usuarios de GNU/Linux:&lt;/p&gt;

&lt;p&gt;Si eres usuario de GNU/Linux vamos a utilizar el comando &lt;strong&gt;md5sum&lt;/strong&gt; su sintaxis es la siguiente: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;md5sum [OPTION]... [FILE]...&lt;code&gt;&lt;/code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;En nuestro caso no vamos usar las opciones, si no que directamente vamos a usar la ruta de nuestros archivos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FGnTTmKK%2Fabc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FGnTTmKK%2Fabc.png" alt="cap1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como se puede ver, tenemos en el escritorio 2 archvios llamados test1 y test2 cuyo contenido en el mismo, la frase: Hola mundo.&lt;/p&gt;

&lt;p&gt;Vamos a utilizar el comando &lt;code&gt;md5sum&lt;/code&gt; para calcular sus funciones resumen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FHHs978Q%2Fabc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FHHs978Q%2Fabc1.png" alt="cap2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como se puede ver en la imagen de arriba tenemos como resultado de la función suma exactamente el mismo, puesto que el contenido de ambos archivos es el mismo, la frase "Hola mundo.".&lt;/p&gt;

&lt;p&gt;Pues bien, ahora vamos a ver qué pasa si variamos un mínimo en contenido de uno de los archivos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FQ6NQZ8p%2Fabc2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FQ6NQZ8p%2Fabc2.png" alt="cap3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como se puede apreciar hemos cambiado el contenido del segundo archivo, simplemente cambiando la letra 'm' minúscula a 'M' mayúscula y como se esperaba el resultado de la función hash es totalmente distinto ahora.&lt;/p&gt;

&lt;p&gt;Al más mínimo cambio en los datos de entrada, el resultado cambia totalmente.&lt;/p&gt;

&lt;p&gt;Vamos ahora cómo haríamos esto en un sistema con Windows 10:&lt;/p&gt;

&lt;p&gt;Para el ejemplo tendremos 2 archivos de texto en el escritorio: test1.txt y test2.txt. Vamos a calcular la función resumen de ambos.&lt;/p&gt;

&lt;p&gt;Para ello abriremos Windows PowerShell y usaremos el siguiente comando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Get-FileHash nombreDeArchivo -Algorithm MD5 |Format-List&lt;code&gt;&lt;/code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Y nos da el siguiente resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FdkFDg8R%2FCaptura.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FdkFDg8R%2FCaptura.png" alt="cap4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos obserbar nos da el mismo resultado para ambos, esto quiere decir que tienen el mismo contenido.&lt;/p&gt;

&lt;p&gt;Colisiones:&lt;/p&gt;

&lt;p&gt;Voy a intentar explicar qué son. Como dijimos al principio intentamos que las funciones hash sean biyectivas, vagamente resumido esto quiere decir que a datos de entrada distintos, les corresponderán datos de salida totalmente diferentes.&lt;/p&gt;

&lt;p&gt;Pero a veces ocurre que a datos de entradas diferentes la función nos devuelve valores iguales, esto es a lo que se le conoce como colisión.&lt;/p&gt;

&lt;p&gt;Vamos un ejemplo (inventado) de esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FDf5kPQ7%2Fabc3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FDf5kPQ7%2Fabc3.png" alt="cap5"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como vemos tenemos un mismo valor de Hash con datos de entrada distintos, esto es un problema que en teoría no debería ocurrir, pues pueden darse difentes problemas, por ejemplo imaginemos que tenemos una aplicación de login que valida un usuario y un contraseña para acceder a un determinado servicio. Imaginemos que la contraseña se almacena no como texto plano (que es un problema de seguridad) sino que se almacenan como su función resumen, esto quiere decir que si nuestra contraseña es 'Zorro', también valdría 'Águila' como contraseña para acceder a nuestro sistema.&lt;/p&gt;

&lt;p&gt;Pero si conseguimos el Hash de la password (pero no la password en sí) ¿Nos vadría para el login? La respuesta a priori es no, ya que ese Hash obtenido generaría otro Hash no coincidente con la base de datos, creo que este GiF lo explica muy bien:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgfckwwv7cs3c47304alo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgfckwwv7cs3c47304alo.gif" alt="GIF"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bueno esto es todo por ahora.&lt;/p&gt;

</description>
      <category>hash</category>
      <category>spanish</category>
      <category>j4fun</category>
      <category>linux</category>
    </item>
    <item>
      <title>Instalar Linux junto a Windows</title>
      <dc:creator>nervi0s</dc:creator>
      <pubDate>Thu, 03 Oct 2019 21:23:30 +0000</pubDate>
      <link>https://dev.to/nervi0s/instalar-linux-junto-a-windows-1hc8</link>
      <guid>https://dev.to/nervi0s/instalar-linux-junto-a-windows-1hc8</guid>
      <description>&lt;p&gt;Hola a tod@s, bienvenidos de nuevo a este pequeño rincón, vamos a intentar explicar con claridad cómo instalar Linux en una máquina que ya corre el S.O. Windows. Veremos el paso a paso de cómo lleve a cabo esta instalación y compartiré mi experiencia y los errores que surgieron y que tuve que dar solución, vamos a ello.&lt;/p&gt;

&lt;h2&gt;
  
  
  Herramientas necesarias
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;PC con Windows donde haremos la instalación.&lt;/li&gt;
&lt;li&gt;ISO de la distribución de Linux que vamos a instalar, yo usé una basada en Debian. &lt;a href="https://es.wikipedia.org/wiki/Anexo:Distribuciones_Linux#Basadas_en_Debian"&gt;Ver una lista.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;USB de 4 GB o más.&lt;/li&gt;
&lt;li&gt;Herramienta para crear USB booteable. Vamos a usar &lt;a href="https://www.balena.io/etcher/"&gt;balenaEtcher&lt;/a&gt; aunque hay muchas más como Rufus, Universal USB Installer, YUMI, etc.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Pasos previos
&lt;/h2&gt;

&lt;p&gt;Antes de comenzar con la instalación debemos hacer un par de cosas antes de ponernos al lío.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hacer hueco para Linux
&lt;/h3&gt;

&lt;p&gt;Necesitamos hacer hueco en nuestro disco duro para poder instalar la distribución de Linux que hayamos elegido. Para ello vamos a abrir el &lt;strong&gt;administrador de discos de Windows&lt;/strong&gt; y vamos a dar clic derecho en la partición donde tengamos instalado Windows en nuestro ordenador (en mi caso es en &lt;strong&gt;C:&lt;/strong&gt;) y a continuación a &lt;strong&gt;Reducir Volumen&lt;/strong&gt;, veremos algo como esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--21zx3F1X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/12d392/reducir-volumen/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--21zx3F1X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/12d392/reducir-volumen/1366_2000.jpg" alt="Administrador de discos"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se abrirá una ventana donde reduciremos en MB la cantidad que queramos asignar a nuestro nuevo S.O. Linux. En este caso voy a asignar 300000 MB o 300 GB.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_UnwXXcL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/65378e/tamano-a-reducir/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_UnwXXcL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/65378e/tamano-a-reducir/1366_2000.jpg" alt="Reducir Volumen"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Le damos al botón reducir y se creará una nueva partición con el nombre de espacio &lt;strong&gt;espacio no asignado&lt;/strong&gt; y tendrá un color negro: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O-C3UZ43--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/84a284/no-asignado/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O-C3UZ43--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/84a284/no-asignado/1366_2000.jpg" alt="Espacio no asignado"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con esto ya tendría hueco para poder instalar Linux en nuestra máquina.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Posible bug 1.&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Crear un USB booteable con la ISO de Linux
&lt;/h3&gt;

&lt;p&gt;Ahora nos toca preparar nuestro USB para poder instalar Linux, es muy sencillo, para ello vamos a usar el software balenaEtcher, que por cierto, es de código abierto. &lt;em&gt;Importante recordar que el USB será formateado y perderemos todos los datos que haya en él, antes de seguir pon los datos en un lugar seguro de otra memoria.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2Vnkl13V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://upload.wikimedia.org/wikipedia/commons/c/c2/Etcher_1.4.9_running_on_Windows_10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2Vnkl13V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://upload.wikimedia.org/wikipedia/commons/c/c2/Etcher_1.4.9_running_on_Windows_10.png" alt="balenaEtcher"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez lo hayamos descargado lo abrimos y lo primero que nos permite hacer es elegir la ISO que vamos a grabar dándole clic en &lt;strong&gt;Select Image&lt;/strong&gt;, el siguiente paso es elegir nuestra memoria USB en &lt;strong&gt;Select Drive&lt;/strong&gt; y por último hacer clic en &lt;strong&gt;Flash!&lt;/strong&gt; le damos en aceptar a los mensajes de advertencia que nos aparezcan y después de unos pocos minutos ya tendremos nuestro USB booteable con la distribución de Linux que hayamos elegido.&lt;/p&gt;

&lt;h3&gt;
  
  
  Arrancando desde nuestro USB booteable
&lt;/h3&gt;

&lt;p&gt;Ahora vamos a configurar la BIOS de nuestro ordenador para que arranque desde nuestro USB, de lo contrario iniciará Windows como siempre. &lt;/p&gt;

&lt;p&gt;Tendremos que apagar nuestro PC, conectar nuestro USB booteable y a continuación encenderlo y justo en ese momento pulsar la tecla F9 de nuestro teclado continuamente hasta que salga la pantalla de elección de sistema de arranque y elegiremos nuestra memoria USB. Será algo parecida a esta:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Xx_xd634--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.amazonaws.com/cdn.freshdesk.com/data/helpdesk/attachments/production/19000908411/original/a.jpg%3F1477068722" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Xx_xd634--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3.amazonaws.com/cdn.freshdesk.com/data/helpdesk/attachments/production/19000908411/original/a.jpg%3F1477068722" alt="Bot menu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para hacer esto dependerá de cada ordenador y fabricante, en mi caso es F9 la tecla para mi modelo de ordenador. Como guía general pueden valer las teclas: F2,F10,Tab, Esc, etc. Deberás informarte de cuál es la que funciona con tu PC.&lt;/p&gt;

&lt;p&gt;Una vez hecho esto, pasaremos al siguiente paso.&lt;/p&gt;

&lt;h3&gt;
  
  
  Instalando Linux desde USB
&lt;/h3&gt;

&lt;p&gt;Una vez hemos arrancado nuestro ordenador dese nuestra memoria USB, nos sadrá una pantalla parecida a esta:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tMsqSQEd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://tutorials.ubuntu.com/es6-bundled/src/codelabs/tutorial-install-ubuntu-desktop/img/699b0968468ce256.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tMsqSQEd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://tutorials.ubuntu.com/es6-bundled/src/codelabs/tutorial-install-ubuntu-desktop/img/699b0968468ce256.png" alt="Menu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En nuestro caso, elegiremos &lt;strong&gt;Install Ubuntu&lt;/strong&gt; y continuación seleccionamos nuestro idioma y la configuración de teclado que tengamos. Recomiendo dar a &lt;strong&gt;Detectar la distribución del teclado&lt;/strong&gt; para evitar posibles errores, nos pedirá que pulsemos algunas teclas antes de seguir.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NVINRjBd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/e621c9/teclado/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NVINRjBd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/e621c9/teclado/1366_2000.jpg" alt="Menu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la siguiente pantalla se nos preguntará si queremos conectarnos a una red de Internet, en mi caso no lo conecté.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I2j-fQwG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/f428d9/wifi/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I2j-fQwG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/f428d9/wifi/1366_2000.jpg" alt="Menu2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Después aparece una ventana donde nos pide qué tipo de instalación queremos hacer, siguiendo la filosofía &lt;em&gt;KISS&lt;/em&gt; en mi caso elegí &lt;strong&gt;Instalación Mínima.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iVwzLS-C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/583335/elige-instalacion/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iVwzLS-C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/583335/elige-instalacion/1366_2000.jpg" alt="Menu3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tras esto, nos saldrá una ventana donde nos da una serie de opciones para instalar el nuevo S.O.&lt;br&gt;
La primera opción (que puede que no nos aparezca) es la de &lt;strong&gt;Instalar Ubuntu junto a Widows 10&lt;/strong&gt;, otra opción es la que dice &lt;strong&gt;Borrar disco e instalar Ubuntu&lt;/strong&gt; que nos borraría el disco entero antes de instalar el S.O. y otra que es la que vamos a usar es la de &lt;strong&gt;Más opciones&lt;/strong&gt; que nos permitirá configurar la partición que habíamos creado en el primer paso de este tutorial.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ROaCBMnB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/b28f62/mas-opciones/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ROaCBMnB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/b28f62/mas-opciones/1366_2000.jpg" alt="Menu4"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez le damos a siguiente nos aparece otra pantalla donde se muestran las particiones que tenemos en nuestro disco duro.&lt;/p&gt;

&lt;p&gt;Elegiremos la que pone &lt;strong&gt;espacio libre&lt;/strong&gt; con la cantidad de MB que habíamos hecho hueco para Linux, y a continuación le datemos al botón &lt;strong&gt;+&lt;/strong&gt;, Y procedemos a crear la primera partición &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nLHRN4Zo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/d426b8/nueva-particion/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nLHRN4Zo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/d426b8/nueva-particion/1366_2000.jpg" alt="Menu5"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la ventana nueva que se nos abre pondremos el &lt;strong&gt;tamaño en MB&lt;/strong&gt; de la nueva partición, en mi caso 300000, seleccionamos &lt;strong&gt;Primaria&lt;/strong&gt; como tipo de partición, &lt;strong&gt;Al principio de este espacio&lt;/strong&gt;, seleccionamos &lt;strong&gt;ext4&lt;/strong&gt; como sistema de archivos y elegimos como punto de montaje &lt;strong&gt;/&lt;/strong&gt; y le damos a OK y nos creará esta partición.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jf7GNRud--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/845bc5/particion-raiz/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jf7GNRud--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/845bc5/particion-raiz/1366_2000.jpg" alt="Menu6"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Después veremos que sigue existiendo la partición &lt;strong&gt;espacio libre&lt;/strong&gt; y la volvemos a seleccionar y le daremos al botón &lt;strong&gt;+&lt;/strong&gt; para crear nuestra segunda partición.&lt;/p&gt;

&lt;p&gt;Esta partición será la conocida como &lt;em&gt;swap&lt;/em&gt; o &lt;em&gt;área de intercambio&lt;/em&gt; esta será usada por el sistema en caso de disponer de poca memoria RAM, emulando una memoria en el disco duro.&lt;/p&gt;

&lt;p&gt;La configuraremos de esta forma: &lt;strong&gt;tamaño en MB&lt;/strong&gt; 8000 (se recomiendo el doble de la RAM de nuestro sistema), tipo de partición &lt;strong&gt;Lógica&lt;/strong&gt;, &lt;strong&gt;Al principio de este espacio&lt;/strong&gt; y seleccionamos &lt;strong&gt;área de intercambio&lt;/strong&gt;, le daremos a OK y procederemos a crear la última partición.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4oOt8Wg5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/961ca0/area-de-intercambio/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4oOt8Wg5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/961ca0/area-de-intercambio/1366_2000.jpg" alt="Menu7"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Para terminar volvemos seleccionar la partición &lt;strong&gt;espacio libre&lt;/strong&gt; y le daremos al botón &lt;strong&gt;+&lt;/strong&gt;. Aquí utilizaremos todo el tamaño que nos deje poner en la opción &lt;strong&gt;Tamaño en MB&lt;/strong&gt; para llenarla por completo con lo que nos sobra. Le datemos en tipo de partición &lt;strong&gt;Lógica&lt;/strong&gt;, &lt;strong&gt;Al principio de este espacio&lt;/strong&gt;, como tipo de sistema de archivos elegimos &lt;strong&gt;ext4&lt;/strong&gt; y como punto de montaje &lt;strong&gt;/home&lt;/strong&gt;. Le damos a OK y nos creará la última partición.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r-YD58aU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/d8b432/particion-home/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r-YD58aU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/d8b432/particion-home/1366_2000.jpg" alt="Menu8"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Al final nos quedará algo parecido a esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H0wck_OW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/e35f5b/particiones-hechas/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H0wck_OW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/e35f5b/particiones-hechas/1366_2000.jpg" alt="Menu9"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y una vez comprobado esto vamos a darle al botón &lt;strong&gt;Instalar ahora&lt;/strong&gt;, nos saldrá un recuadro donde se nos indica las modificaciones que vamos a hacer en nuestro disco duro y le daremos a continuar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XVB67LBv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/c154dd/confirmar/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XVB67LBv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/c154dd/confirmar/1366_2000.jpg" alt="Menu10"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez hecho esto configuraremos una par de ajustes como son la zona horaria y nuestros datos de usuario y procederá a instalar el nuevo S.O.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hir06yrU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/85e6a6/instalando-linux/1366_2000.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hir06yrU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.blogs.es/85e6a6/instalando-linux/1366_2000.jpg" alt="Menu11"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Finalizando la instalación
&lt;/h3&gt;

&lt;p&gt;Una vez termine la instalación si todo ha ido bien se reiniciará nuestro sistema y nos preguntará desde nuestro gestor de arranque &lt;a href="https://es.wikipedia.org/wiki/GNU_GRUB"&gt;GRUB&lt;/a&gt; qué sistema iniciar, ¿Windows o Linux?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Posible bug 2.&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Bichos y su posible solución
&lt;/h3&gt;

&lt;p&gt;Ahora vamos a explicar los errores que me surgieron a la hora de instalar este dual boot y cómo los solucioné.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;Posible bug 1&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Puede ocurrir que cuando vayamos a reducir el volumen de nuestra unidad de disco para poder hacerle hueco a Linux no nos deje reducir casi nada o incluso nada a pesar de tener mucho espacio libre sin usar en nuestro disco duro. &lt;/p&gt;

&lt;p&gt;Esto se puede deber a que Windows esparce archivos por todo el disco duro al ver que lo tiene todo para él, como hay tanto espacio libre ¿qué mas da donde coloque los datos no? pues no da igual Windows ¬¬! por cosas como las que queremos hacer ahora por ejemplo, que es intentar reducir el volumen para poder instalarte un amigo para que conviváis en el mismo PC.&lt;/p&gt;

&lt;p&gt;Bueno para solucionar esto vamos a descargar una herramienta llamada &lt;a href="https://sourceforge.net/projects/ultradefrag/files/stable-release/7.1.3/"&gt;UltraDefrag&lt;/a&gt;, elegí la versión portable para la arquitectura &lt;strong&gt;amd64&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Una vez la abramos, primero seleccionamos la unidad que estamos intentado reducir y le daremos clic derecho y a continuación a &lt;strong&gt;Analizar&lt;/strong&gt;, una vez completado esto, volvemos darle con el clic derecho y esta vez le daremos a &lt;strong&gt;Optimización Completa&lt;/strong&gt;, tardará bastante, no apagues el ordenador y puedes ir a dar una vuelta o ver un par de pelis antes de que acabe. &lt;/p&gt;

&lt;p&gt;Una vez acabe esta acción volvemos a darle clic derecho y esta vez a la opción &lt;strong&gt;Desfragmentar&lt;/strong&gt; y con esto, en teoría debería solucionarse el problema de no poder reducir el volumen de nuestra unidad de disco. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mEo_UMVD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.neow.in/news/images/uploaded/2014/10/ultradefrag_screenshot.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mEo_UMVD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.neow.in/news/images/uploaded/2014/10/ultradefrag_screenshot.jpg" alt="Menu12"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reiniciamos el ordenador y comprobamos que el problema se ha solucionado en el &lt;strong&gt;Administrador de Discos de Windows&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;Posible bug 2&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Este bug puede que se presente una vez iniciamos nuestro nuevo sistema operativo Linux. A mi me pasó que cuando iniciaba Linux la pantalla se ponía en negro y no paraba de salir un mensaje de error que se repetía continuamente como si de Matrix se tratara. He de decir que fue bastante frustrante no saber qué hacer pero buscando un poco de información logré dar con la solución.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w9iBqhrk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/bLgb7bc/20190930-185509.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w9iBqhrk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/bLgb7bc/20190930-185509.jpg" alt="Error"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Antes de nada debemos iniciar nuestro sistema Linux en modo solo terminal, para ello en el menú de arranque para elegir el S.O. que iniciar vamos a ponernos en nuestro sistema por defecto y le damos a la tecla "&lt;strong&gt;e&lt;/strong&gt;" esto nos permite configurar algunos parámetros de arranque previo antes de entrar de lleno en el sistema operativo.&lt;/p&gt;

&lt;p&gt;Una vez estemos en una pantalla como esta:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nIcAeww4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.howtogeek.com/wp-content/uploads/2014/09/edit-linux-boot-parameters-on-ubuntu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nIcAeww4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.howtogeek.com/wp-content/uploads/2014/09/edit-linux-boot-parameters-on-ubuntu.png" alt="boot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tenemos que buscar la línea donde aparezcan las palabras &lt;em&gt;quit splash&lt;/em&gt; y añadir lo siguiente a continuación de estas: &lt;strong&gt;pci=nomsi&lt;/strong&gt; y después dale a F10 para iniciar el sistema&lt;/p&gt;

&lt;p&gt;Veamos un ejemplo:&lt;/p&gt;

&lt;pre&gt;... ro quiet splash pci=nomsi $vt_handoff_ ...&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;Esto me funcionó a mi pero tambien leí que si esto no funciona cambies el parámetro por &lt;strong&gt;pci=noaer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Una vez hecho este paso debemos hacer una comprobación que consiste en ver si nuestra partición raíz donde tenemos instalado Linux no se ha llenado de "basura" generada por los informes continuos de error.&lt;/p&gt;

&lt;p&gt;Para esto escribimos en la consola lo siguiente:&lt;/p&gt;

&lt;pre&gt;df -h&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;y nos saldrá algo parecido a esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7Seuq616--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/mX1Jznc/cap22.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7Seuq616--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/mX1Jznc/cap22.png" alt="df"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;tenemos que fijarnos en la partición raíz &lt;strong&gt;/&lt;/strong&gt; donde he señalado en rojo con la flecha. Tenemos que observar que el tamaño usado no sea el total disponible, en mi caso ocurre eso como se ve en la imagen, pero puede darse el caso de que este todo ese espacio usado,entonces haremos lo siguiente, escribimos en la consola:&lt;/p&gt;

&lt;pre&gt;cd /var/log&lt;br&gt;ls&lt;br&gt;&lt;/pre&gt;

&lt;p&gt;Y nos mostrará algo así:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5cxukL27--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/ygLWL50/pop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5cxukL27--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/ygLWL50/pop.png" alt="terminal1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Los archivos que se llenaron masivamente de informes de errores, llegando a ocupar varios GB hsata comerse el disco, fueron:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;kern.log&lt;/li&gt;
&lt;li&gt;syslog&lt;/li&gt;
&lt;li&gt;messages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Podemos comprobar el tamaño de cada uno de estos archivos del directorio donde estamos haciendo lo siguiente:&lt;/p&gt;

&lt;pre&gt;ls -l -h &lt;/pre&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--skuW5saf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/pKdPJPR/Screenshot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--skuW5saf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/pKdPJPR/Screenshot.png" alt="terminal2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Donde señala la flecha podemos observar el tamaño de cada archivo, debemos asegurarnos de que &lt;strong&gt;kern.log&lt;/strong&gt;, &lt;strong&gt;syslog&lt;/strong&gt; y &lt;strong&gt;messages&lt;/strong&gt; no ocupen demasiado espacio.&lt;/p&gt;

&lt;p&gt;En caso de ocupen espacio excesivo (varios GB) debemos hacer lo siguiente:&lt;/p&gt;

&lt;pre&gt;sudo rm /var/log/kern* &amp;amp;&amp;gt;/dev/null&lt;br&gt;sudo rm /var/log/messages* &amp;amp;&amp;gt;/dev/null&lt;br&gt;sudo rm /var/log/syslog* &amp;amp;&amp;gt;/dev/null&lt;/pre&gt;

&lt;p&gt;Esto removerá los archivos mencionados antes liberando el espacio ocupado de forma excesiva.&lt;/p&gt;

&lt;p&gt;Para acabar vamos modificar el GRUB de forma definitiva, ya que antes al inicio sólo lo hicimos de forma temporal, para esto vamos a escrbir lo siguiente en la terminal:&lt;/p&gt;

&lt;pre&gt;sudo nano /etc/default/grub&lt;/pre&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a2zNDKhg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/FX8hgJm/Screenshot-from-2019-10-03-17-34-56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a2zNDKhg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/FX8hgJm/Screenshot-from-2019-10-03-17-34-56.png" alt="terminal2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y se abrirá el editor nano, donde iremos hasta la línea que pone &lt;strong&gt;LINUX_DEFAULT=&lt;/strong&gt; y añadimos &lt;em&gt;pci=nomsi&lt;/em&gt; dejándola de la siguiente forma:&lt;/p&gt;

&lt;pre&gt;GRUB_CMDLINELINUX_DEFAULT="quit splash pci=nomsi"&lt;/pre&gt;  

&lt;p&gt;Guardamos la modificación que hemos hecho con la combinación de teclas &lt;strong&gt;Ctrl + O&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Y para acabar debemos acutializar el GRUB para que reconozca los cambio que hemos efectuado, usamos el siguiente comando:&lt;/p&gt;

&lt;pre&gt;sudo update-grub&lt;/pre&gt;

&lt;p&gt;Reinicimos el ordenador y se habrá acabado nuestra aventura de instalar Linux junto con Windows.&lt;/p&gt;

&lt;p&gt;Espero haber sido claro en la explicación, si tienes alguna duda o sugerencia no dudes en dejarla en los comentarios ;) 👩‍💻👨‍💻&lt;/p&gt;

</description>
      <category>linux</category>
      <category>boot</category>
      <category>tutorial</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Bienvenid@s </title>
      <dc:creator>nervi0s</dc:creator>
      <pubDate>Tue, 01 Oct 2019 23:23:01 +0000</pubDate>
      <link>https://dev.to/nervi0s/bienvenid-s-4b9</link>
      <guid>https://dev.to/nervi0s/bienvenid-s-4b9</guid>
      <description>&lt;p&gt;Hola a to@s, os doy la bienvenida a este pequeño rincón donde iré compartiendo mis conocimientos a medida que los vaya adquiriendo. Espero que disfruteis y aprendais un montón. Un saludo! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YXyuX4Ue--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/go1qcolu250qdyct11f5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YXyuX4Ue--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/go1qcolu250qdyct11f5.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>welcome</category>
      <category>blog</category>
    </item>
  </channel>
</rss>
