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

<channel>
	<title>Blog &#8211; miguelcarmona.com</title>
	<atom:link href="http://miguelcarmona.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://miguelcarmona.com</link>
	<description>Blog/Portfolio profesional de Miguel Carmona</description>
	<lastBuildDate>Mon, 16 May 2016 16:16:29 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.6.1</generator>
	<item>
		<title>Reenvío de puertos a través de SSH</title>
		<link>http://miguelcarmona.com/blog/reenvio-de-puertos-a-traves-de-ssh</link>
		<comments>http://miguelcarmona.com/blog/reenvio-de-puertos-a-traves-de-ssh#respond</comments>
		<pubDate>Mon, 18 Jan 2016 14:18:06 +0000</pubDate>
		<dc:creator><![CDATA[miguelcarmona]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[sysAdmin]]></category>

		<guid isPermaLink="false">http://miguelcarmona.com/?p=1086</guid>
		<description><![CDATA[Hay veces que nos encontramos con tener que acceder a un puerto específico de equipo de una red remota pero no tenemos acceso directo al mismo. Creo que lo entenderemos mejor con esta ilustración: En este ejemplo tenemos un equipo de una red remota (remoto_lan) que tiene un servicio escuchando en el puerto 88 sólo para [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Hay veces que nos encontramos con tener que acceder a un puerto específico de equipo de una red remota pero no tenemos acceso directo al mismo. Creo que lo entenderemos mejor con esta ilustración:</p>
<p><img class="aligncenter size-full wp-image-1096" src="http://miguelcarmona.com/wp-content/uploads/2016/01/ssh_reenvio_puertos.jpg" alt="ssh_reenvio_puertos" width="544" height="272" srcset="http://miguelcarmona.com/wp-content/uploads/2016/01/ssh_reenvio_puertos.jpg 544w, http://miguelcarmona.com/wp-content/uploads/2016/01/ssh_reenvio_puertos-300x150.jpg 300w" sizes="(max-width: 544px) 100vw, 544px" /></p>
<p>En este ejemplo tenemos un equipo de una red remota (remoto_lan) que tiene un servicio escuchando en el puerto 88 sólo para la red interna. En esta misma red tenemos un equipo al cual sí que podemos acceder externamente a través de ssh (sshd_remoto).</p>
<p>El proceso sería sencillo (en el equipo de trabajo y <strong>siempre como root</strong>):</p>

<div class="wp_codebox"><table><tr id="p10864"><td class="code" id="p1086code4"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #660033;">-4</span> <span style="color: #660033;">-L</span> localhost:<span style="color: #000000;">8888</span>:remoto_lan:<span style="color: #000000;">88</span> root<span style="color: #000000; font-weight: bold;">@</span>sshd_remoto</pre></td></tr></table></div>

<p><span id="more-1086"></span></p>
<p>Explicando la línea anterior:</p>
<ul>
<li>-4 =&gt; Esto obliga a que use IPv4.</li>
<li>-L =&gt; hace la redirección
<ul>
<li>El primer parámetro es la ip de escucha (en este ejemplo localhost que es nuestra máquina desde donde estamos conectando).</li>
<li>El segundo es el puerto de la ip de escucha (el puerto que vamos a utilizar en nuestra máquina).</li>
<li>El tercero la IP de la máquina remoto_lan a la que va a reenviar las conexiones el servidor ssh.</li>
<li>El cuarto el puerto de la máquina remoto_lan a la que reenviar las conexiones (puerto 88 en este ejemplo).</li>
</ul>
</li>
</ul>
<p>Osease y resumiendo, cuando te conectas a localhost:8888, el equipo hace una redirección de toda la información a sshd_remoto que a su vez reenvía dicha información a remoto_lan al puerto 88.</p>
<p>Si le pasamos el parámetro -v (que diga todo lo que hace), después de pedir la contraseña debe decir:</p>

<div class="wp_codebox"><table><tr id="p10865"><td class="code" id="p1086code5"><pre class="bash" style="font-family:monospace;">debug1: Local connections to localhost:<span style="color: #000000;">8888</span> forwarded to remote address 172.26.0.112:<span style="color: #000000;">88</span>
debug1: Local forwarding listening on 127.0.0.1 port <span style="color: #000000;">8888</span>.</pre></td></tr></table></div>

<p>Ya sólo habría que apuntar la aplicación que queramos a localhost:8888 para acceder a remoto_lan:88</p>
<p>Pongamos esta vez un ejemplo más tangible y con ips:</p>
<p><img class="aligncenter size-full wp-image-1093" src="http://miguelcarmona.com/wp-content/uploads/2016/01/ssh_reenvio_puertos-ejemplo2.jpg" alt="ssh_reenvio_puertos-ejemplo2" width="517" height="406" srcset="http://miguelcarmona.com/wp-content/uploads/2016/01/ssh_reenvio_puertos-ejemplo2.jpg 517w, http://miguelcarmona.com/wp-content/uploads/2016/01/ssh_reenvio_puertos-ejemplo2-300x236.jpg 300w" sizes="(max-width: 517px) 100vw, 517px" /></p>
<p>Imaginemos esta configuración de red (una red muy normal en ámbitios domésticos o empresas pequeñas).</p>
<p>En nuestra red interna, tendríamos un equipo (ip 192.168.1.123) el cual es accesible desde internet al servicio ssh en el puerto 222 (hemos configurado una redirección NAT en el router para permitir y reenviar el puerto externo 222 al puerto interno 22 de la ip 192.168.1.123). He puesto otro puerto para hacer más completo el ejemplo pero no hay ningún problema por usar el puerto por defecto de ssh (TCP 22). Indiscutiblemente lo que si es necesario es que podamos acceder a la máquina interna desde internet!</p>
<p>Ahora se nos presenta el caso de que tenemos que modificar cierta configuración en nuestro router desde donde estamos (fuera de nuestra red interna) pero nuestro router no nos permite acceder desde fuera. Pues bien, podemos hacer esto:</p>

<div class="wp_codebox"><table><tr id="p10866"><td class="code" id="p1086code6"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #660033;">-4</span> <span style="color: #660033;">-L</span> localhost:<span style="color: #000000;">8888</span>:192.168.1.1:<span style="color: #000000;">80</span> -p222 root<span style="color: #000000; font-weight: bold;">@</span>80.70.60.50</pre></td></tr></table></div>

<p>Con esto estamos creando una redirección desde nuestro puerto 8888 local al puerto 80 del router (ip interna 192.168.1.1) a través del equipo ssh (192.168.1.123)</p>
<p>Ya sólo nos quedaría abrir un navegador y acceder a: http://localhost:8888</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.com/blog/reenvio-de-puertos-a-traves-de-ssh/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ceder dispositivos a contenedores lxc (passthrough)</title>
		<link>http://miguelcarmona.com/blog/ceder-dispositivos-a-contenedores-lxc-passthrough</link>
		<comments>http://miguelcarmona.com/blog/ceder-dispositivos-a-contenedores-lxc-passthrough#respond</comments>
		<pubDate>Sat, 13 Dec 2014 16:51:56 +0000</pubDate>
		<dc:creator><![CDATA[miguelcarmona]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[lxc]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>
		<category><![CDATA[virtualizacion]]></category>

		<guid isPermaLink="false">http://miguelcarmona.com/?p=1036</guid>
		<description><![CDATA[Para compartir un dispositivo con un contenedor lxc (una tarjeta de tv dvb por ejemplo), haremos: ls -lh /dev/dvb/adapter0/ crw-rw----+ 1 root video 212, 0 dic 13 17:00 demux0 crw-rw----+ 1 root video 212, 1 dic 13 17:00 dvr0 crw-rw----+ 1 root video 212, 3 dic 13 17:00 frontend0 crw-rw----+ 1 root video 212, 2 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><center><img class="wp-image-1037 size-full aligncenter" src="http://miguelcarmona.com/wp-content/uploads/2014/12/containers.png" alt="containers" width="395" height="327" srcset="http://miguelcarmona.com/wp-content/uploads/2014/12/containers.png 395w, http://miguelcarmona.com/wp-content/uploads/2014/12/containers-300x248.png 300w" sizes="(max-width: 395px) 100vw, 395px" /></center><br />
Para compartir un dispositivo con un contenedor lxc (una tarjeta de tv dvb por ejemplo), haremos:</p>

<div class="wp_codebox"><table><tr id="p103611"><td class="code" id="p1036code11"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-lh</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>dvb<span style="color: #000000; font-weight: bold;">/</span>adapter0<span style="color: #000000; font-weight: bold;">/</span>
crw-rw----+ <span style="color: #000000;">1</span> root video <span style="color: #000000;">212</span>, <span style="color: #000000;">0</span> dic <span style="color: #000000;">13</span> <span style="color: #000000;">17</span>:00 demux0
crw-rw----+ <span style="color: #000000;">1</span> root video <span style="color: #000000;">212</span>, <span style="color: #000000;">1</span> dic <span style="color: #000000;">13</span> <span style="color: #000000;">17</span>:00 dvr0
crw-rw----+ <span style="color: #000000;">1</span> root video <span style="color: #000000;">212</span>, <span style="color: #000000;">3</span> dic <span style="color: #000000;">13</span> <span style="color: #000000;">17</span>:00 frontend0
crw-rw----+ <span style="color: #000000;">1</span> root video <span style="color: #000000;">212</span>, <span style="color: #000000;">2</span> dic <span style="color: #000000;">13</span> <span style="color: #000000;">17</span>:00 net0</pre></td></tr></table></div>

<p>Ya tenemos identificador necesario para dicho dispositivo (212 en este caso).</p>
<p>Ahora, con la máquina contenedor en marcha, vamos a indicar desde el host principal que comparta dichos nodos con el contenedor:</p>
<p><span id="more-1036"></span></p>

<div class="wp_codebox"><table><tr id="p103612"><td class="code" id="p1036code12"><pre class="bash" style="font-family:monospace;">lxc-device <span style="color: #660033;">-n</span> nombre_contenedor add <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>dvb<span style="color: #000000; font-weight: bold;">/</span>adapter0<span style="color: #000000; font-weight: bold;">/</span></pre></td></tr></table></div>

<p>Por cada línea debería remitirnos:</p>

<div class="wp_codebox"><table><tr id="p103613"><td class="code" id="p1036code13"><pre class="bash" style="font-family:monospace;">Added <span style="color: #ff0000;">'/dev/dvb/adapter0/demux0'</span> to <span style="color: #ff0000;">'nombre_contenedor'</span> <span style="color: #c20cb9; font-weight: bold;">as</span> <span style="color: #ff0000;">'/dev/dvb/adapter0/demux0'</span>.
Added <span style="color: #ff0000;">'/dev/dvb/adapter0/demux0'</span> to <span style="color: #ff0000;">'nombre_contenedor'</span> <span style="color: #c20cb9; font-weight: bold;">as</span> <span style="color: #ff0000;">'/dev/dvb/adapter0/dvr0'</span>.
Added <span style="color: #ff0000;">'/dev/dvb/adapter0/demux0'</span> to <span style="color: #ff0000;">'nombre_contenedor'</span> <span style="color: #c20cb9; font-weight: bold;">as</span> <span style="color: #ff0000;">'/dev/dvb/adapter0/frontend0'</span>.
Added <span style="color: #ff0000;">'/dev/dvb/adapter0/demux0'</span> to <span style="color: #ff0000;">'nombre_contenedor'</span> <span style="color: #c20cb9; font-weight: bold;">as</span> <span style="color: #ff0000;">'/dev/dvb/adapter0/net0'</span>.</pre></td></tr></table></div>

<p>Esto nos ha permitido tanto ceder los recursos del dispositivo (temporalmente) como crear los nodos necesarios en el contenedor. Y digo temporalmente porque cuando reiniciemos el contenedor, perderemos dicha gestión.</p>
<p>Para que sea permanente y ya que con el paso anterior creamos los nodos para su montaje automático, debemos añadir al archivo de configuración del contenedor lo siguiente:</p>
<p>(Normalmente el archivo se encuentra en /var/lib/lxc/nombre_contenedor/config)</p>

<div class="wp_codebox"><table><tr id="p103614"><td class="code" id="p1036code14"><pre class="bash" style="font-family:monospace;">lxc.cgroup.devices.allow = c <span style="color: #000000;">212</span>:<span style="color: #000000; font-weight: bold;">*</span> rwm</pre></td></tr></table></div>

<p>Recuerda que 212 es en nuestro caso de ejemplo; deberás especificar el tuyo en cuestión.</p>
<p>Con esto ya quedaría todo funcionando en posteriores reinicios.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.com/blog/ceder-dispositivos-a-contenedores-lxc-passthrough/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pausar procesos (aplicaciones)</title>
		<link>http://miguelcarmona.com/blog/pausar-procesos-aplicaciones</link>
		<comments>http://miguelcarmona.com/blog/pausar-procesos-aplicaciones#comments</comments>
		<pubDate>Fri, 22 Jun 2012 10:46:27 +0000</pubDate>
		<dc:creator><![CDATA[miguelcarmona]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>

		<guid isPermaLink="false">http://miguelcarmona.com/?p=823</guid>
		<description><![CDATA[A veces, por algún motivo específico, necesitamos pausar alguna aplicación pero no cerrarla. Puede ser un caso el que hagamos una pausa en nuestra programación con nuestro flamante comedor de recursos como es eclipse o aptana y queramos ver un vídeo flash (otro glotón de recursos) con fluidez. Sería incómodo cerrar todo el IDE para [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-830" title="Matando procesos" src="http://miguelcarmona.com/wp-content/uploads/2012/06/linux-kill.png" alt="" width="256" height="256" srcset="http://miguelcarmona.com/wp-content/uploads/2012/06/linux-kill.png 256w, http://miguelcarmona.com/wp-content/uploads/2012/06/linux-kill-150x150.png 150w" sizes="(max-width: 256px) 100vw, 256px" />A veces, por algún motivo específico, necesitamos pausar alguna aplicación pero no cerrarla. Puede ser un caso el que hagamos una pausa en nuestra programación con nuestro flamante comedor de recursos como es eclipse o aptana y queramos ver un vídeo flash (otro glotón de recursos) con fluidez. Sería incómodo cerrar todo el IDE para luego volver a abrirlo. Pero el kernel Linux pensó en esos pequeños detalles y nos brinda ciertas posibilidades entre las que se encuentra <strong>detener, pausar o matar un proceso</strong> (o aplicación para los menos curtidos).</p>
<p><span id="more-823"></span>El caso es que podemos mandar la señal detener ( -19 ) a un determinado proceso para posteriormente poder iniciarlo de nuevo ( -18 ). Esta señal se puede mandar con el comando kill y el id de proceso o con el comando killall y el nombre de proceso. Como no me gusta dar tantas vueltas, me centraré en killall:</p>
<ul>
<li>Pausar proceso: killall -19 <em>&lt;nombre-proceso&gt;</em></li>
<li>Reanudar proceso pausado: killall -18 <em>&lt;nombre-proceso&gt;</em></li>
<li>Matar proceso: killall -9 <em>&lt;nombre-proceso&gt;</em></li>
</ul>
<p>De forma que si queremos pausar por ejemplo <strong>firefox</strong>, bastaría con un <em><strong>killall -19 firefox</strong></em> y un <em><strong>killall -18 firefox</strong></em> para reanudad este proceso. Hay que tener en cuenta que a partir de la versión 10 (creo recordar) de firefox los plugins (como flash) se ejecutan en un proceso diferente (plugin-container normalmente) de forma que aunque pausemos a firefox, no pausaremos el proceso flash lanzado por el mismo (tendríamos que lanzar  killall -19 plugin-container).</p>
<p>Es muy curioso lo bien que trabaja este sistema con los navegadores al igual que con flash por ejemplo. Se me ha dado más de un caso donde encontraba información realmente buena en una página llena de molestos banners flash lo cual hacía que el hecho de bajar la página se convirtiese en un grandioso reto. Bastaba con pausar dicho proceso (plugin-container), revisar el texto y una vez cerramos la pestaña, reanudarlo de nuevo. De hecho funciona bastante bien con grooveshark o con youtube de forma que puedes pausar flash y al reanudarlo, reanuda perfectamente la reproducción por donde lo teníamos.</p>
<p>Ni que decir queda que para aquellos que no sepan el nombre de proceso, bastaría con el comando ps y grep de forma que para firefox bastaría con:</p>

<div class="wp_codebox"><table><tr id="p82316"><td class="code" id="p823code16"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ps</span> <span style="color: #660033;">-A</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> fire</pre></td></tr></table></div>

<p>donde con ps -A decimos que muestre todos los procesos y con grep fire filtramos en la lista de todos los procesos aquellos que contengan fire.</p>
<p>Los usuarios de KDE tenemos nuestra aplicación de Actividad del sistema desde donde podemos mandar varios tipos de señales a un proceso. Para inicial la aplicación de Actividad del sistema bastaría con pulsar las teclas Crtl + esc</p>
<p><a href="http://miguelcarmona.com/wp-content/uploads/2012/06/kde-actividad-del-sistema.jpg"><img class="size-medium wp-image-828 aligncenter" title="KDE - Actividad del sistema" src="http://miguelcarmona.com/wp-content/uploads/2012/06/kde-actividad-del-sistema-300x107.jpg" alt="" width="300" height="107" srcset="http://miguelcarmona.com/wp-content/uploads/2012/06/kde-actividad-del-sistema-300x107.jpg 300w, http://miguelcarmona.com/wp-content/uploads/2012/06/kde-actividad-del-sistema.jpg 831w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Como vemos en esta aplicación tenemos más que de sobra para manejar dichos procesos. En la parte superior tenemos un campo para filtrar procesos. En este caso filtro por fire (lo cual me saca todo lo coincidente al igual que grep). Vemos que hay 2 procesos, dicho firefox y el proceso para lanzar plugins del mismo.</p>
<p>Al pulsar con botón derecho vemos que podemos mandar entre otras señales:</p>
<ul>
<li>Suspender (STOP) =&gt; pausar el proceso como hacíamos con killall -19 <em>&lt;nombre-proceso&gt;</em></li>
<li>Continuar (CONT) =&gt; reanudad el proceso como hacíamos con killall -18 <em>&lt;nombre-proceso&gt;</em></li>
<li>Matar (KILL) =&gt; matar el proceso como hacíamos con killall -9 <em>&lt;nombre-proceso&gt;</em></li>
</ul>
<p>Esta entrada viene inspirada por esta otra <a href="http://fedoreando.com/2012/06/09/usando-linux-like-a-boss-pausar-aplicaciones">http://fedoreando.com/2012/06/09/usando-linux-like-a-boss-pausar-aplicaciones</a> en la cual se explica el mismo proceso pero con el comando kill en vez de con killall. Viendo dicha entrada me vino a la mente que aunque es algo que use habitualmente desde hace algún tiempo, es muy probable que no se conozca en la mayoría de los casos por lo que al ver que era un tanto compleja para el público mayor, decidí exponerla de forma más sencilla.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.com/blog/pausar-procesos-aplicaciones/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalación de openSuse por red mediante tftp-pxe</title>
		<link>http://miguelcarmona.com/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe</link>
		<comments>http://miguelcarmona.com/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe#comments</comments>
		<pubDate>Fri, 28 May 2010 17:10:50 +0000</pubDate>
		<dc:creator><![CDATA[miguelcarmona]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[openSuse]]></category>
		<category><![CDATA[redes]]></category>

		<guid isPermaLink="false">http://miguelcarmona.com/?p=577</guid>
		<description><![CDATA[Hay varias maneras de instalar un equipo por red: Iniciar con el disco de instalación y escoger la opción de instalación por red. Instalar remótamente mediante vnc o ssh (muy útil para servidores dedicados externos). Iniciar por red el disco de instalación Seguramente se me habrá pasado alguna. En esta guía nos vamos a centrar [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-588  aligncenter" title="Inicio PXE para Suse Linux 10" src="http://miguelcarmona.com/wp-content/uploads/2010/05/pxe-suse10.jpg" alt="Inicio PXE para Suse Linux 10" width="489" height="271" /></p>
<p>Hay varias maneras de instalar un equipo por red:</p>
<ul>
<li>Iniciar con el disco de instalación y escoger la opción de instalación por red.</li>
<li>Instalar remótamente mediante vnc o ssh (muy útil para servidores dedicados externos).</li>
<li>Iniciar por red el disco de instalación</li>
</ul>
<p>Seguramente se me habrá pasado alguna. En esta guía nos vamos a centrar en &#8220;Iniciar por red el disco de instalación&#8221;.</p>
<p>¿Qué ventajas nos reporta?</p>
<ul>
<li>No necesitamos ningún dispositivo extra (usb, dvd, cdrom&#8230;). Lógicamente</li>
<li>Una vez configurado, instalamos muy fácilmente los clientes.</li>
<li>Podemos tener todas las versiones/distribuciones que deseemos/configuremos para dicha instalación.</li>
</ul>
<p>Lógicamente tiene contras, como el proceso de elaboración del sistema, o la necesidad de otro equipo funcionando para entregar &#8220;arranques&#8221; por red.</p>
<p><span id="more-577"></span><br />
La parte de servidor de esta guía la basaré sobre openSuse 11.1 (en 32 bits), pero es válida desde la versión 10.1 hasta la fecha del artículo (también para 64 bit). Ya que no es un servicio que vaya a estar demandado a diario, por facilidad en migraciones y comodidad, lo he implantado sobre una máquina virtual (que es lo que os recomiendo).</p>
<p>Para los clientes, sólo es requerido que puedan iniciar desde red.</p>
<p>Para empezar, lógicamente necesitamos ya el equipo servidor instalado (cualquier tipo de instalación). Una vez cumplido este requisito, nos ponemos manos a la obra:</p>
<p>Lo primero será instalar un servidor <a title="DHCP - Dynamic Host Configuration Protocol - es.wikipedia" href="http://es.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol" target="_blank">DHCP</a>. Si ya tenemos un servidor funcionando en algún equipo de la red y podemos cambiar su configuración, recomiendo hagáis las modificaciones sobre el mismo.</p>
<p>La mayoría de servidores DHCP incluidos en los routers que nos entregan las compañías <a title="Proveedor de servicios de Internet - es.wikipedia" href="http://es.wikipedia.org/wiki/Proveedor_de_servicios_de_Internet" target="_blank">ISP</a> no nos permite especificar un archivo para el inicio por red, por lo que no son válidos pero podemos establecer una configuración para que funcione con los mismos.</p>
<p>En todos los casos excepto en el que podemos actualizar la configuración del servidor DHCP y este nos permite establecer el archivo de inicio, deberemos:</p>
<p>Instalar el servidor DHCP:</p>

<div class="wp_codebox"><table><tr id="p57733"><td class="code" id="p577code33"><pre class="bash" style="font-family:monospace;">zypper <span style="color: #c20cb9; font-weight: bold;">install</span> dhcp-server</pre></td></tr></table></div>

<p>El archivo de configuración es /etc/dhcpd.conf. Viene bien comentado cada apartado, pero como es bastante lioso ir explicando que modificar y que nó, recomiendo cambiarle el nombre y establecer uno nuevo con lo básico especificado en cada escenario.</p>

<div class="wp_codebox"><table><tr id="p57734"><td class="code" id="p577code34"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>dhcpd.conf <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>dhcpd.conf.original</pre></td></tr></table></div>

<p>Así pues, separamos este apartado en 2 opciones:</p>
<p><strong>Si no tenemos ningún servidor DHCP funcionando en la red (o no podemos modificar sus parámetros):</strong></p>
<p>El contenido que deberemos insertar en el archivo /﻿etc/dhcpd.conf es:</p>

<div class="wp_codebox"><table><tr id="p57735"><td class="code" id="p577code35"><pre class="bash" style="font-family:monospace;">authoritative;
ddns-update-style none;
allow booting;
subnet 192.168.1.0 netmask 255.255.255.0
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
        option subnet-mask 255.255.255.0;
        option routers 192.168.1.1;
        option domain-name-servers 80.58.61.250, 8.8.8.8;
        range dynamic-bootp 192.168.1.100 192.168.1.199;
        default-lease-time <span style="color: #000000;">3600</span>;
        max-lease-time <span style="color: #000000;">7200</span>;
        filename <span style="color: #ff0000;">&quot;pxelinux.0&quot;</span>;
        next-server 192.168.1.8;
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Explicandolo un poco:</p>
<ul>
<li>subnet =&gt; Indicamos nuestra red para la configuración. Deberemos establecer la ip de nuestra red (el último número debe ser un 0 &#8220;cero&#8221; en la mayoría de los casos -depende de la máscara de red-)</li>
<li>netmask =&gt; Indicamos nuestra máscara de red.</li>
<li>option subnet-mask =&gt; Nuestra máscara de red (la misma que antes).</li>
<li>option routers =&gt; La ip de nuestra puerta de enlace (suele ser la ip del router).</li>
<li>option domain-name-servers =&gt; Las ip de los servidores DNS separadas por comas.</li>
<li>range =&gt; Rango de ips para cuando se soliciten. Osease, cuando un cliente se conecte y solicite una ip, se la concederá dentro de ese rango.</li>
<li>default-lease-time =&gt; Tiempo (en segundos) por defecto que durará la asignación de ip al cliente. Llegados a este tiempo, el cliente deberá renovar dicha dirección.</li>
<li>mas-lease-time =&gt; Tiempo (en segundos) máximo que durará la asignación de ip al cliente. Llegados a este tiempo, si el cliente no renueva, se libera dicha ip para asignarla de nuevo.</li>
<li>filename =&gt; Indica a los clientes el nombre del archivo a obtener si inician mediante red.</li>
<li>next-server =&gt; Indica la dirección del servidor tftp para iniciar el &#8220;arranque&#8221; por red. En este caso, pondremos la dirección del equipo que estamos configurando</li>
</ul>
<p><strong>Si tenemos otro servidor DHCP funcionando en la red el cual no podemos modificar:</strong></p>
<p>El contenido que deberemos insertar en el archivo /﻿etc/dhcpd.conf es:</p>

<div class="wp_codebox"><table><tr id="p57736"><td class="code" id="p577code36"><pre class="bash" style="font-family:monospace;">authoritative;
allow booting;
ddns-update-style none;
subnet 192.168.1.0 netmask 255.255.255.0
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
        option routers 192.168.1.1;
        option domain-name-servers 80.58.61.250, 8.8.8.8;
        broadcast-address 192.168.1.255;
        pool <span style="color: #7a0874; font-weight: bold;">&#123;</span>
              default-lease-time <span style="color: #000000;">180</span>;
              max-lease-time <span style="color: #000000;">360</span>;
              next-server 192.168.1.8;
              filename <span style="color: #ff0000;">&quot;pxelinux.0&quot;</span>;
              allow members of <span style="color: #ff0000;">&quot;pxe&quot;</span>;
              allow members of <span style="color: #ff0000;">&quot;etherboot&quot;</span>;
              filename <span style="color: #ff0000;">&quot;pxelinux.0&quot;</span>;
              range 192.168.1.100 192.168.1.199;
     <span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
class <span style="color: #ff0000;">&quot;pxe&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
    match <span style="color: #000000; font-weight: bold;">if</span> substring <span style="color: #7a0874; font-weight: bold;">&#40;</span>option vendor-class-identifier, <span style="color: #000000;">0</span>, <span style="color: #000000;">9</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> = <span style="color: #ff0000;">&quot;PXEClient&quot;</span>;
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
class <span style="color: #ff0000;">&quot;etherboot&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
    match <span style="color: #000000; font-weight: bold;">if</span> substring <span style="color: #7a0874; font-weight: bold;">&#40;</span>option vendor-class-identifier, <span style="color: #000000;">0</span>, <span style="color: #000000;">9</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> = <span style="color: #ff0000;">&quot;Etherboot&quot;</span>;
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>En el apartado anterior se explica cada sección, por lo que no lo repetiremos. Es importante actualizar los datos de ip a los vuestros.</p>
<p>En openSuse, también deberemos editar el archivo /etc/sysconfig/dhcpd y establecer en DHCPD_INTERFACE la interface de red conectada normalmente eth0). Podemos comprobrarla con un simple ifconfig.</p>
<p>Reciniciamos el demonio dhcpd con:</p>

<div class="wp_codebox"><table><tr id="p57737"><td class="code" id="p577code37"><pre class="bash" style="font-family:monospace;">rcdhcpd restart</pre></td></tr></table></div>

<p>Con esto ya tenemos el servidor dhcp funcionando. Este demonio simplemente lo que hace es asignar una ip a una determinada máquina para evitar el tener que configurarla manualmente.</p>
<p>El siguiente paso será instalar y configurar el servidor tftp. Recomiendo utilizar atftp por ser libre y estar en los repositorios:</p>

<div class="wp_codebox"><table><tr id="p57738"><td class="code" id="p577code38"><pre class="bash" style="font-family:monospace;">zypper <span style="color: #c20cb9; font-weight: bold;">install</span> atftp</pre></td></tr></table></div>

<p>Editamso /etc/sysconfig/atftpd y establecemos la ruta que vamos a utilizar de forma que quede así:</p>

<div class="wp_codebox"><table><tr id="p57739"><td class="code" id="p577code39"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">ATFTPD_OPTIONS</span>=<span style="color: #ff0000;">&quot;--daemon --user tftp -v&quot;</span>
<span style="color: #007800;">ATFTPD_USE_INETD</span>=<span style="color: #ff0000;">&quot;no&quot;</span>
<span style="color: #007800;">ATFTPD_DIRECTORY</span>=<span style="color: #ff0000;">&quot;/srv/tftp/tftpboot&quot;</span></pre></td></tr></table></div>

<p>Comprobamos si existe el usuario tftp</p>

<div class="wp_codebox"><table><tr id="p57740"><td class="code" id="p577code40"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> tftp</pre></td></tr></table></div>

<p>Si no existe, lo creamos</p>

<div class="wp_codebox"><table><tr id="p57741"><td class="code" id="p577code41"><pre class="bash" style="font-family:monospace;">useradd <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">/</span>srv<span style="color: #000000; font-weight: bold;">/</span>tftp<span style="color: #000000; font-weight: bold;">/</span> tftp</pre></td></tr></table></div>

<p>Reiniciamos el servicio:</p>

<div class="wp_codebox"><table><tr id="p57742"><td class="code" id="p577code42"><pre class="bash" style="font-family:monospace;">rcatftpd restart</pre></td></tr></table></div>

<p>Si deseamos que inicie automáticamente, haremos:</p>

<div class="wp_codebox"><table><tr id="p57743"><td class="code" id="p577code43"><pre class="bash" style="font-family:monospace;">chkconfig tftp on</pre></td></tr></table></div>

<p>Ya por último, nos queda crear el entorno de inicio PXE.</p>
<p>Creamos la estructura en el sistema de ficheros:</p>

<div class="wp_codebox"><table><tr id="p57744"><td class="code" id="p577code44"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> <span style="color: #000000; font-weight: bold;">/</span>srv<span style="color: #000000; font-weight: bold;">/</span>tftp<span style="color: #000000; font-weight: bold;">/</span>tftpboot<span style="color: #000000; font-weight: bold;">/</span>pxelinux.cfg</pre></td></tr></table></div>

<p>Necesitamos el archivo pxelinux.0 el cual se encuentra en el paquete syslinux:</p>

<div class="wp_codebox"><table><tr id="p57745"><td class="code" id="p577code45"><pre class="bash" style="font-family:monospace;">zypper <span style="color: #c20cb9; font-weight: bold;">install</span> syslinux
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>syslinux<span style="color: #000000; font-weight: bold;">/</span>pxelinux.0 <span style="color: #000000; font-weight: bold;">/</span>srv<span style="color: #000000; font-weight: bold;">/</span>tftp<span style="color: #000000; font-weight: bold;">/</span>tftpboot</pre></td></tr></table></div>

<p>Creamos el archivo de configuración de PXE en /srv/tftp/tftpboot/pxelinux.cfg/default con el contenido:</p>

<div class="wp_codebox"><table><tr id="p57746"><td class="code" id="p577code46"><pre class="bash" style="font-family:monospace;">DISPLAY f1.txt
F1 f1.txt
&nbsp;
default OS11.2
prompt   <span style="color: #000000;">1</span>
timeout  <span style="color: #000000;">30</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># openSuse 11.2 32bits</span>
label OS11.2
  kernel openSuse_11.2_32
  append <span style="color: #007800;">initrd</span>=initrd_openSuse_11.2_32 <span style="color: #007800;">splash</span>=silent <span style="color: #007800;">vga</span>=0x314 showopts <span style="color: #007800;">install</span>=http:<span style="color: #000000; font-weight: bold;">//</span>download.opensuse.org<span style="color: #000000; font-weight: bold;">/</span>distribution<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">11.2</span><span style="color: #000000; font-weight: bold;">/</span>repo<span style="color: #000000; font-weight: bold;">/</span>oss<span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># openSuse 11.2 32bits</span>
label OS11.264
  kernel openSuse_11.2_64
  append <span style="color: #007800;">initrd</span>=initrd_openSuse_11.2_64 <span style="color: #007800;">splash</span>=silent <span style="color: #007800;">vga</span>=0x314 showopts <span style="color: #007800;">install</span>=http:<span style="color: #000000; font-weight: bold;">//</span>download.opensuse.org<span style="color: #000000; font-weight: bold;">/</span>distribution<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">11.2</span><span style="color: #000000; font-weight: bold;">/</span>repo<span style="color: #000000; font-weight: bold;">/</span>oss<span style="color: #000000; font-weight: bold;">/</span></pre></td></tr></table></div>

<p>Descargamos los archivos kernel e initrd para openSuse 11.2:</p>

<div class="wp_codebox"><table><tr id="p57747"><td class="code" id="p577code47"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>srv<span style="color: #000000; font-weight: bold;">/</span>tftp<span style="color: #000000; font-weight: bold;">/</span>tftpboot
<span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-O</span> openSuse_11.2_32 http:<span style="color: #000000; font-weight: bold;">//</span>download.opensuse.org<span style="color: #000000; font-weight: bold;">/</span>distribution<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">11.2</span><span style="color: #000000; font-weight: bold;">/</span>repo<span style="color: #000000; font-weight: bold;">/</span>oss<span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>i386<span style="color: #000000; font-weight: bold;">/</span>loader<span style="color: #000000; font-weight: bold;">/</span>linux
<span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-O</span> initrd_openSuse_11.2_32 http:<span style="color: #000000; font-weight: bold;">//</span>download.opensuse.org<span style="color: #000000; font-weight: bold;">/</span>distribution<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">11.2</span><span style="color: #000000; font-weight: bold;">/</span>repo<span style="color: #000000; font-weight: bold;">/</span>oss<span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>i386<span style="color: #000000; font-weight: bold;">/</span>loader<span style="color: #000000; font-weight: bold;">/</span>initrd
<span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-O</span> openSuse_11.2_64 http:<span style="color: #000000; font-weight: bold;">//</span>download.opensuse.org<span style="color: #000000; font-weight: bold;">/</span>distribution<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">11.2</span><span style="color: #000000; font-weight: bold;">/</span>repo<span style="color: #000000; font-weight: bold;">/</span>oss<span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>x86_64<span style="color: #000000; font-weight: bold;">/</span>loader<span style="color: #000000; font-weight: bold;">/</span>linux
<span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-O</span> initrd_openSuse_11.2_64 http:<span style="color: #000000; font-weight: bold;">//</span>download.opensuse.org<span style="color: #000000; font-weight: bold;">/</span>distribution<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">11.2</span><span style="color: #000000; font-weight: bold;">/</span>repo<span style="color: #000000; font-weight: bold;">/</span>oss<span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>x86_64<span style="color: #000000; font-weight: bold;">/</span>loader<span style="color: #000000; font-weight: bold;">/</span>initrd</pre></td></tr></table></div>

<p>Creamos el archivo de configuración para mostrar en el inicio a los clientes. Este archivo será /srv/tftp/tftpboot/f1.txt y contendrá:</p>

<div class="wp_codebox"><table><tr id="p57748"><td class="code" id="p577code48"><pre class="bash" style="font-family:monospace;">boot options:
  OS11.2      - Instalación en <span style="color: #000000;">32</span> bit para openSuse <span style="color: #000000;">11.2</span>
  OS11.264   - Instalación en <span style="color: #000000;">64</span> bit para openSuse <span style="color: #000000;">11.2</span></pre></td></tr></table></div>

<p>Y esto es todo. En verdad, aunque sea largo el artículo, el proceso es bastante rápido.</p>
<p>Si tenemos descargado el dvd o alguna copia del repositorio en nuestra red, podemos cambiar las rutas del archivo /srv/tftp/tftpboot/pxelinux.cfg/default</p>
]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.com/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>usbip &#8211; Comparte tus dispositivos usb en red</title>
		<link>http://miguelcarmona.com/blog/usbip-comparte-tus-dispositivos-usb-en-red</link>
		<comments>http://miguelcarmona.com/blog/usbip-comparte-tus-dispositivos-usb-en-red#comments</comments>
		<pubDate>Fri, 19 Feb 2010 04:51:48 +0000</pubDate>
		<dc:creator><![CDATA[miguelcarmona]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>
		<category><![CDATA[virtualizacion]]></category>

		<guid isPermaLink="false">http://miguelcarmona.com/?p=435</guid>
		<description><![CDATA[usbip es un proyecto bastante interesante. Nos permite compartir cualquier dispositivo usb conectado en un equipo para que lo pueda gestionar otro. Puede ser bastante útil para compartir cierto hardware con máquinas virtuales. Su instalación y configuración en openSuse viene a ser bastante sencilla: El servidor Instalación: zypper install usbip El software usbip lee la [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-1025" alt="usbrj45" src="http://miguelcarmona.com/wp-content/uploads/2010/02/usbrj45.jpg" width="369" height="224" srcset="http://miguelcarmona.com/wp-content/uploads/2010/02/usbrj45.jpg 369w, http://miguelcarmona.com/wp-content/uploads/2010/02/usbrj45-300x182.jpg 300w" sizes="(max-width: 369px) 100vw, 369px" /></p>
<p><a href="http://usbip.sourceforge.net/">usbip</a> es un proyecto bastante interesante. Nos permite compartir cualquier dispositivo usb conectado en un equipo para que lo pueda gestionar otro. Puede ser bastante útil para compartir cierto hardware con máquinas virtuales.</p>
<p>Su instalación y configuración en openSuse viene a ser bastante sencilla:</p>
<p><span id="more-435"></span></p>
<p><strong>El servidor</strong></p>
<p>Instalación:</p>

<div class="wp_codebox"><table><tr id="p43570"><td class="code" id="p435code70"><pre class="bash" style="font-family:monospace;">zypper <span style="color: #c20cb9; font-weight: bold;">install</span> usbip</pre></td></tr></table></div>

<p>El software usbip lee la lista de dispositivos conocidos en la ruta /usr/share/hwdata pero en realidad está /usr/share/usbip/ así que con hacer un enlace a dicho archivo bastaría</p>

<div class="wp_codebox"><table><tr id="p43571"><td class="code" id="p435code71"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>hwdata
<span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-sf</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>usbip<span style="color: #000000; font-weight: bold;">/</span>usb.ids <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>hwdata<span style="color: #000000; font-weight: bold;">/</span></pre></td></tr></table></div>

<p>Cargamos los módulos necesarios en el kernel:</p>

<div class="wp_codebox"><table><tr id="p43572"><td class="code" id="p435code72"><pre class="bash" style="font-family:monospace;">modprobe usbip
modprobe usbip_common_mod</pre></td></tr></table></div>

<p>Podemos verificar si todo está correcto:</p>

<div class="wp_codebox"><table><tr id="p43573"><td class="code" id="p435code73"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">lsmod</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> usbip</pre></td></tr></table></div>

<p>Nos saldría algo como:</p>

<div class="wp_codebox"><table><tr id="p43574"><td class="code" id="p435code74"><pre class="bash" style="font-family:monospace;">server:~ <span style="color: #666666; font-style: italic;"># lsmod | grep usbip</span>
usbip                  <span style="color: #000000;">21540</span>  <span style="color: #000000;">0</span>
usbip_common_mod       <span style="color: #000000;">25232</span>  <span style="color: #000000;">1</span> usbip
server:~ <span style="color: #666666; font-style: italic;">#</span></pre></td></tr></table></div>

<p>Para hacer automática la carga del módulo al iniciar el sistema podemos añadirlo a la línea MODULES_LOADED_ON_BOOT=&#8221;usbip usbip_common_mod&#8221; del archivo /etc/sysconfig/kernel</p>
<p>Si hemos añadido la &#8220;auto-carga&#8221; de dicho módulo, es recomendable ejecutar un:</p>

<div class="wp_codebox"><table><tr id="p43575"><td class="code" id="p435code75"><pre class="bash" style="font-family:monospace;">SuSEconfig</pre></td></tr></table></div>

<p>Para iniciar el demonio de usbip, ejecutaremos:</p>

<div class="wp_codebox"><table><tr id="p43576"><td class="code" id="p435code76"><pre class="bash" style="font-family:monospace;">usbipd <span style="color: #660033;">-D</span></pre></td></tr></table></div>

<p>Nos reportará algo así:</p>

<div class="wp_codebox"><table><tr id="p43577"><td class="code" id="p435code77"><pre class="bash" style="font-family:monospace;">Bind usbip.ko to a usb device to be exportable<span style="color: #000000; font-weight: bold;">!</span></pre></td></tr></table></div>

<p>A partir de este momento, ya tenemos el demonio funcionando para compartir el dispositivo.<br />
Sólo nos queda indicarle el dispositivo que deseamos compartir. Para saber el dispositivo a compartir, podemos usar lsusb:</p>

<div class="wp_codebox"><table><tr id="p43578"><td class="code" id="p435code78"><pre class="bash" style="font-family:monospace;">server:~ <span style="color: #666666; font-style: italic;"># lsusb</span>
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation <span style="color: #000000;">2.0</span> root hub
Bus 001 Device 003: ID 05ac:<span style="color: #000000;">9130</span> Apple, Inc.
Bus 001 Device 004: ID 058f:<span style="color: #000000;">6362</span> Alcor Micro Corp. Hi-Speed <span style="color: #000000;">21</span>-in-<span style="color: #000000;">1</span> Flash Card Reader<span style="color: #000000; font-weight: bold;">/</span>Writer <span style="color: #7a0874; font-weight: bold;">&#40;</span>Internal<span style="color: #000000; font-weight: bold;">/</span>External<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Bus 001 Device 005: ID 05e3:0718 Genesys Logic, Inc.
Bus 001 Device 006: ID 05ac:<span style="color: #000000;">9222</span> Apple, Inc.
Bus 001 Device 007: ID 04d9:0499 Holtek Semiconductor, Inc.
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation <span style="color: #000000;">1.1</span> root hub
Bus 002 Device 002: ID 046d:08f0 Logitech, Inc. QuickCam Messenger
server:~ <span style="color: #666666; font-style: italic;">#</span></pre></td></tr></table></div>

<p>En principio, compartiré un disco duro usb (05e3:0718 Genesys Logic, Inc.) y la webcam logitech (046d:08f0 Logitech, Inc. QuickCam Messenger).<br />
Con el comando bind_driver &#8211;list, listaremos los dispositivos que se permiten compartir:</p>

<div class="wp_codebox"><table><tr id="p43579"><td class="code" id="p435code79"><pre class="bash" style="font-family:monospace;">server:~ <span style="color: #666666; font-style: italic;"># bind_driver --list</span>
List USB devices
 - busid <span style="color: #000000;">1</span>-<span style="color: #000000;">2</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>05ac:<span style="color: #000000;">9130</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
         <span style="color: #000000;">1</span>-<span style="color: #000000;">2</span>:<span style="color: #000000;">1.0</span> -<span style="color: #000000; font-weight: bold;">&amp;</span>gt; hub                                                                                                                                                                                              
&nbsp;
 - busid <span style="color: #000000;">1</span>-<span style="color: #000000;">3</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>058f:<span style="color: #000000;">6362</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
         <span style="color: #000000;">1</span>-<span style="color: #000000;">3</span>:<span style="color: #000000;">1.0</span> -<span style="color: #000000; font-weight: bold;">&amp;</span>gt; usb-storage                                                                                                                                                                                      
&nbsp;
 - busid <span style="color: #000000;">1</span>-<span style="color: #000000;">5</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>05e3:0718<span style="color: #7a0874; font-weight: bold;">&#41;</span>
         <span style="color: #000000;">1</span>-<span style="color: #000000;">5</span>:<span style="color: #000000;">1.0</span> -<span style="color: #000000; font-weight: bold;">&amp;</span>gt; usb-storage                                                                                                                                                                                      
&nbsp;
 - busid <span style="color: #000000;">2</span>-<span style="color: #000000;">1</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>046d:08f0<span style="color: #7a0874; font-weight: bold;">&#41;</span>
         <span style="color: #000000;">2</span>-<span style="color: #000000;">1</span>:<span style="color: #000000;">1.0</span> -<span style="color: #000000; font-weight: bold;">&amp;</span>gt; STV06xx
         <span style="color: #000000;">2</span>-<span style="color: #000000;">1</span>:<span style="color: #000000;">1.1</span> -<span style="color: #000000; font-weight: bold;">&amp;</span>gt; snd-usb-audio
         <span style="color: #000000;">2</span>-<span style="color: #000000;">1</span>:<span style="color: #000000;">1.2</span> -<span style="color: #000000; font-weight: bold;">&amp;</span>gt; snd-usb-audio                                                                                                                                                                                    
&nbsp;
 - busid <span style="color: #000000;">1</span>-<span style="color: #000000;">2.2</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>05ac:<span style="color: #000000;">9222</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
         <span style="color: #000000;">1</span>-<span style="color: #000000;">2.2</span>:<span style="color: #000000;">1.0</span> -<span style="color: #000000; font-weight: bold;">&amp;</span>gt; usbhid
&nbsp;
 - busid <span style="color: #000000;">1</span>-<span style="color: #000000;">2.3</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>04d9:0499<span style="color: #7a0874; font-weight: bold;">&#41;</span>
         <span style="color: #000000;">1</span>-<span style="color: #000000;">2.3</span>:<span style="color: #000000;">1.0</span> -<span style="color: #000000; font-weight: bold;">&amp;</span>gt; usbhid
&nbsp;
server:~ <span style="color: #666666; font-style: italic;">#</span></pre></td></tr></table></div>

<p>Para enlazar dichos dispositivos:</p>

<div class="wp_codebox"><table><tr id="p43580"><td class="code" id="p435code80"><pre class="bash" style="font-family:monospace;">bind_driver <span style="color: #660033;">--usbip</span> <span style="color: #000000;">1</span>-<span style="color: #000000;">5</span>
bind_driver <span style="color: #660033;">--usbip</span> <span style="color: #000000;">2</span>-<span style="color: #000000;">1</span></pre></td></tr></table></div>

<p>De momento, si tenemos el cortafuegos funcionando, recomiendo detenerlo para comprobar su funcionamiento y después configurarlo para permitir acceso al puerto 3240 en TCP:</p>

<div class="wp_codebox"><table><tr id="p43581"><td class="code" id="p435code81"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">netstat</span> <span style="color: #660033;">-putan</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> usbipd</pre></td></tr></table></div>

<p><strong>El cliente</strong></p>
<p>Instalación:</p>

<div class="wp_codebox"><table><tr id="p43582"><td class="code" id="p435code82"><pre class="bash" style="font-family:monospace;">zypper <span style="color: #c20cb9; font-weight: bold;">install</span> usbip</pre></td></tr></table></div>

<p>Volvemos a enlazar bien el archivo usb.ids en la ruta correcta:</p>

<div class="wp_codebox"><table><tr id="p43583"><td class="code" id="p435code83"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>hwdata
<span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-sf</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>usbip<span style="color: #000000; font-weight: bold;">/</span>usb.ids <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span>hwdata<span style="color: #000000; font-weight: bold;">/</span></pre></td></tr></table></div>

<p>Cargamos los módulos necesarios:</p>

<div class="wp_codebox"><table><tr id="p43584"><td class="code" id="p435code84"><pre class="bash" style="font-family:monospace;">modprobe vhci-hcd</pre></td></tr></table></div>

<p>Comprobando&#8230;</p>

<div class="wp_codebox"><table><tr id="p43585"><td class="code" id="p435code85"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">lsmod</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> vhci_hcd</pre></td></tr></table></div>


<div class="wp_codebox"><table><tr id="p43586"><td class="code" id="p435code86"><pre class="bash" style="font-family:monospace;">client:~ <span style="color: #666666; font-style: italic;"># lsmod | grep vhci_hcd</span>
vhci_hcd               <span style="color: #000000;">26576</span>  <span style="color: #000000;">0</span>
usbip_common_mod       <span style="color: #000000;">25232</span>  <span style="color: #000000;">1</span> vhci_hcd
client:~ <span style="color: #666666; font-style: italic;">#</span></pre></td></tr></table></div>

<p>Para establecerlo como auto-inicio editaremos el archivo /etc/sysconfig/kernel y actualizar MODULES_LOADED_ON_BOOT=&#8221;vhci-hcd&#8221;</p>
<p>Si hemos establecido el auto-inicio</p>

<div class="wp_codebox"><table><tr id="p43587"><td class="code" id="p435code87"><pre class="bash" style="font-family:monospace;">SuSEconfig</pre></td></tr></table></div>

<p>Ahora listamos los dispositivos compartidos del equipo servidor:</p>

<div class="wp_codebox"><table><tr id="p43588"><td class="code" id="p435code88"><pre class="bash" style="font-family:monospace;">client:~ <span style="color: #666666; font-style: italic;">#usbip -l 192.168.10.5</span>
- 192.168.10.5
     <span style="color: #000000;">1</span>-<span style="color: #000000;">5</span>: Genesys Logic, Inc. : unknown product <span style="color: #7a0874; font-weight: bold;">&#40;</span>05e3:0718<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        : <span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>devices<span style="color: #000000; font-weight: bold;">/</span>pci0000:00<span style="color: #000000; font-weight: bold;">/</span>0000:00:<span style="color: #000000;">02.1</span><span style="color: #000000; font-weight: bold;">/</span>usb1<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1</span>-<span style="color: #000000;">5</span>
        : <span style="color: #7a0874; font-weight: bold;">&#40;</span>Defined at Interface level<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>00<span style="color: #000000; font-weight: bold;">/</span>00<span style="color: #000000; font-weight: bold;">/</span>00<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        :  <span style="color: #000000;">0</span> - Mass Storage <span style="color: #000000; font-weight: bold;">/</span> SCSI <span style="color: #000000; font-weight: bold;">/</span> Bulk <span style="color: #7a0874; font-weight: bold;">&#40;</span>Zip<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>08<span style="color: #000000; font-weight: bold;">/</span>06<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">50</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
     <span style="color: #000000;">2</span>-<span style="color: #000000;">1</span>: Logitech, Inc. : QuickCam Messenger <span style="color: #7a0874; font-weight: bold;">&#40;</span>046d:08f0<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        : <span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>devices<span style="color: #000000; font-weight: bold;">/</span>pci0000:00<span style="color: #000000; font-weight: bold;">/</span>0000:00:<span style="color: #000000;">02.0</span><span style="color: #000000; font-weight: bold;">/</span>usb2<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2</span>-<span style="color: #000000;">1</span>
        : Vendor Specific Class <span style="color: #000000; font-weight: bold;">/</span> Vendor Specific Subclass <span style="color: #000000; font-weight: bold;">/</span> Vendor Specific Protocol <span style="color: #7a0874; font-weight: bold;">&#40;</span>ff<span style="color: #000000; font-weight: bold;">/</span>ff<span style="color: #000000; font-weight: bold;">/</span>ff<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        :  <span style="color: #000000;">0</span> - Vendor Specific Class <span style="color: #000000; font-weight: bold;">/</span> Vendor Specific Subclass <span style="color: #000000; font-weight: bold;">/</span> Vendor Specific Protocol <span style="color: #7a0874; font-weight: bold;">&#40;</span>ff<span style="color: #000000; font-weight: bold;">/</span>ff<span style="color: #000000; font-weight: bold;">/</span>ff<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        :  <span style="color: #000000;">1</span> - Audio <span style="color: #000000; font-weight: bold;">/</span> Control Device <span style="color: #000000; font-weight: bold;">/</span> unknown protocol <span style="color: #7a0874; font-weight: bold;">&#40;</span>01<span style="color: #000000; font-weight: bold;">/</span>01<span style="color: #000000; font-weight: bold;">/</span>00<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        :  <span style="color: #000000;">2</span> - Audio <span style="color: #000000; font-weight: bold;">/</span> Streaming <span style="color: #000000; font-weight: bold;">/</span> unknown protocol <span style="color: #7a0874; font-weight: bold;">&#40;</span>01<span style="color: #000000; font-weight: bold;">/</span>02<span style="color: #000000; font-weight: bold;">/</span>00<span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
client:~ <span style="color: #666666; font-style: italic;">#</span></pre></td></tr></table></div>

<p>Lógicamente, sustituiremos con la ip del equipo servidor.</p>
<p>Para conectar los dispositivos:</p>

<div class="wp_codebox"><table><tr id="p43589"><td class="code" id="p435code89"><pre class="bash" style="font-family:monospace;">client:~ <span style="color: #666666; font-style: italic;">#usbip -a 192.168.10.5 1-5</span>
<span style="color: #000000;">8</span> ports available
&nbsp;
port <span style="color: #000000;">0</span> attached
client:~ <span style="color: #666666; font-style: italic;"># usbip -a 192.168.10.5 2-1</span>
<span style="color: #000000;">8</span> ports available
&nbsp;
port <span style="color: #000000;">1</span> attached
linux-gqss:~ <span style="color: #666666; font-style: italic;">#</span></pre></td></tr></table></div>

<p>Comprobamos&#8230;</p>

<div class="wp_codebox"><table><tr id="p43590"><td class="code" id="p435code90"><pre class="bash" style="font-family:monospace;">linux-gqss:~ <span style="color: #666666; font-style: italic;"># lsusb</span>
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation <span style="color: #000000;">2.0</span> root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation <span style="color: #000000;">1.1</span> root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation <span style="color: #000000;">1.1</span> root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation <span style="color: #000000;">1.1</span> root hub
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation <span style="color: #000000;">2.0</span> root hub
Bus 005 Device 004: ID 05e3:0718 Genesys Logic, Inc.
Bus 005 Device 005: ID 046d:08f0 Logitech, Inc. QuickCam Messenger
linux-gqss:~ <span style="color: #666666; font-style: italic;">#</span></pre></td></tr></table></div>

<p><strong>Pruebas y conclusiones</strong></p>
<p>Las pruebas, sinceramente, son bastante escasas. Tras intentar varias veces la configuración de la webcam, no pude hacerla funcionar correctamente. Sólo se mostraba una imagen verde (aunque puede ser debido a los problemas que tengo en el equipo cliente con el driver nvidia).</p>
<p>Sobre el disco duro usb, en una hora aproximada de pruebas, funcionó perfectamente.<br />
Calculé la transferencia media y resultó en 7.143 Mb/s. No es mala transferencia para unas tarjetas de red a 100 Mbits, pero he de decir que las pruebas de transferencia por nfs superan el rendimiento (alrededor de 9.5 Mb/s de media).</p>
<p>El proyecto usbip, ha liberado una etapa bastante temprana del cliente para windows, por lo levanté una máquina virtual y me puse a &#8220;trastear&#8221;. A pesar de listar los dispositivos, reiteró varios errores al hacer la conexión.</p>
<p>Fuentes:<br />
<a href="http://www.howtoforge.com/how-to-set-up-a-usb-over-ip-server-and-client-with-opensuse-11.2">http://www.howtoforge.com/how-to-set-up-a-usb-over-ip-server-and-client-with-opensuse-11.2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.com/blog/usbip-comparte-tus-dispositivos-usb-en-red/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ClearOS &#8211; Introducción y primeras impresiones</title>
		<link>http://miguelcarmona.com/blog/clearos-introduccion-y-primeras-impresiones</link>
		<comments>http://miguelcarmona.com/blog/clearos-introduccion-y-primeras-impresiones#comments</comments>
		<pubDate>Mon, 25 Jan 2010 02:45:13 +0000</pubDate>
		<dc:creator><![CDATA[miguelcarmona]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[samba]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>

		<guid isPermaLink="false">http://miguelcarmona.com/?p=414</guid>
		<description><![CDATA[ClearOS es una distribución GNU/Linux derivada de ClarkConnect (la cual deriva de Red Hat) que a diferencia de esta, presume de ser &#8220;más libre&#8221; y poseer algunas características no disponibles en la versión libre de ClarkConnect. En cierto modo, ClearOS parte de ClarkConnect pero en vez de mantener el hilo principal derivado de Red Hat, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://miguelcarmona.com/wp-content/uploads/2010/01/clearOS-pantalla_inicial_administracion.jpeg"><img class="aligncenter size-medium wp-image-416" title="ClearOS - pantalla inicial de administracion" src="http://miguelcarmona.com/wp-content/uploads/2010/01/clearOS-pantalla_inicial_administracion-540x376.jpg" alt="ClearOS - pantalla inicial de administracion" width="540" height="376" /></a></p>
<p><a href="http://www.clearfoundation.com/">ClearOS</a> es una distribución GNU/Linux derivada de ClarkConnect (la cual deriva de Red Hat) que a diferencia de esta, presume de ser &#8220;más libre&#8221; y poseer algunas características no disponibles en la versión libre de ClarkConnect. En cierto modo, ClearOS parte de ClarkConnect pero en vez de mantener el hilo principal derivado de Red Hat, lo hace de CentOS.</p>
<p>ClearOS está muy enfocada en su utilización como router gateway (puerta de enlace), servidor proxy, dns, firewall&#8230; muy al estilo de ipcop o cualquiera de las distribuciones que repasamos en el artículo <a href="http://miguelcarmona.com/blog/router-firewall-proxy-bajo-una-maquina-potente-o-poco-potente/">Router, firewall, proxy… bajo una máquina potente o poco potente</a>.</p>
<p>Pero al igual que eBox Plataform, está mucho más orientada a ofrecer muchos más servicios muy adecuados para PYMES (pequeñas y medianas empresas).</p>
<p><span id="more-414"></span></p>
<p>Entre los servicios más destacados de ClearOS (aparte de los ya nombrados) encontramos:</p>
<ul>
<li>Escaneo de virus y spam a través de la pasarela de paso para tráfico http así como imap, pop y smtp (parecido al plugin <a href="http://www.copfilter.org/">copfilter</a> de ipcop).</li>
<li>Filtrado de contenidos/protocolos a través de proxy de una manera realmente fácil y rápida.</li>
<li>Firewall sencillo con detección de intrusiones.</li>
<li>Servidor LDAP con autenficación de SAMBA como PDT (muy fácilmente configurable).</li>
<li>Sistema de impresión (CUPS) y recursos compartidos (sistema de ficheros e impresoras) a través de SAMBA.</li>
<li>Servidor FTP (ProFTPD), WEB (apache 2 con módulo de php) y MySQL con administración a través del proyecto phpMyAdmin.</li>
<li>Servidor de correo electrónico (postfix) con soporte de captura de correo de otras cuentas (maildrop), SMTP, POP y WebMail.</li>
<li>Sistema de backup de configuración del servidor (tanto local como remotamente en el servidor del proyecto).</li>
<li>Informes de logs sobre cada uno de los servicios.</li>
</ul>
<p>Para activar ciertos servicios, necesitamos crear una cuenta en <a href="http://www.clearcenter.com/">www.clearcenter.com</a>. Si optamos por crear una cuenta con suscripción, tendremos algunas características más (como la vpn con ip dinámica o un espacio de almacenamiento para backups).</p>
<p>El sistema se nota bastante robusto aunque algo pesado. Las traducciones a español son incompletas y aunque presume de ser estable, he encontrado algunos errores en la interface.</p>
<p>¿Críticas e impresiones? Allá vamos:</p>
<p>Integrar de una forma bastante notable y consistente todas las autentificaciones de servicios bajo LDAP es algo bastante cómodo y con cierta fiabilidad y escalabilidad.</p>
<p>El sistema de correo parece que funciona correctamente, pero creo que deberían haber hecho más incapié en integrar un <a href="http://es.wikipedia.org/wiki/Software_colaborativo">groupware</a>. Es una verdadera lástima que no venga integrado de serie ya que es la mejor manera de centralizar notas, contactos, calendarios&#8230;</p>
<p>A pesar de ser una distribución orientada totalmente a servidor, no he encontrado ninguna versión de 64 bits, algo que la verdad no comprendo.</p>
<p>Se hecha en falta algunas características bastante buenas para el servidor proxy (squid) como un cacheador para las actualizaciones de los sistemas operativos (como el módulo <a href="http://update-accelerator.advproxy.net/">Update Accelerator</a> para IpCop).</p>
<p>Un sistema de centralización de backups para los equipos de la red de forma que se instale un ligero demonio o servicio en cada equipo y el servidor sea el encargado de realizar dichos backups.</p>
<p>Básicamente, son los detalles que he echado en falta para implantar una &#8220;solución completa&#8221; para PYMES.</p>
<p>Por cierto, respecto a la instalación, un asistente con pocos y sencillos pasos. Nada donde perderse la verdad. Para acceder a la administración, https en el puerto 81.</p>
]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.com/blog/clearos-introduccion-y-primeras-impresiones/feed</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>Escanear recursos de red :: nMap</title>
		<link>http://miguelcarmona.com/blog/escanear-recursos-de-red-nmap</link>
		<comments>http://miguelcarmona.com/blog/escanear-recursos-de-red-nmap#respond</comments>
		<pubDate>Sat, 23 Jan 2010 03:14:03 +0000</pubDate>
		<dc:creator><![CDATA[miguelcarmona]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[sysAdmin]]></category>

		<guid isPermaLink="false">http://miguelcarmona.com/?p=396</guid>
		<description><![CDATA[nMap es una muy buena herramienta para escaneo de recursos en la red. Entre muchas utilidades para auditorias incluye un par de características muy interesantes; la posibilidad de escanear equipos en un rango de red y escanar los puertos de dichos equipos (o uno sólo). Su instalación en openSuse viene a ser bien sencilla: zypper install nmap [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://miguelcarmona.com/wp-content/uploads/2010/01/nmapsi4-alpha3-1.jpg"><img class="aligncenter size-medium wp-image-406" title="nmapsi4" src="http://miguelcarmona.com/wp-content/uploads/2010/01/nmapsi4-alpha3-1-540x427.jpg" alt="nmapsi4" width="540" height="427" /></a></p>
<p><a href="http://nmap.org/">nMap</a> es una muy buena herramienta para escaneo de recursos en la red. Entre muchas utilidades para auditorias incluye un par de características muy interesantes; la posibilidad de escanear equipos en un rango de red y escanar los puertos de dichos equipos (o uno sólo).</p>
<p><span id="more-396"></span></p>
<p>Su instalación en openSuse viene a ser bien sencilla:</p>

<div class="wp_codebox"><table><tr id="p39695"><td class="code" id="p396code95"><pre class="bash" style="font-family:monospace;">zypper <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">nmap</span></pre></td></tr></table></div>

<p>A pesar de ser una herramienta de consola, bastaría con hacerse una &#8220;chuletilla&#8221; con los parámetros más habituales:</p>
<ul>
<li>-sS =&gt;Básicamente, un escaneo de puertos TCP.</li>
<li>-sU =&gt; Escaneo de puertos UDP.</li>
<li>-sP =&gt; Comprobación de ping a los hosts (opción por defecto).</li>
<li>-p [1-65535] =&gt; rango de puertos a escanear.</li>
<li>-A =&gt; Detección del software utilizado en el puerto de escucha (opción por defecto).</li>
<li>-F =&gt; Escaneo rápido.</li>
<li>-NP =&gt; Omite la comprobación de ping.</li>
</ul>
<p>Hay bastantes más parámetros y opciones pero para una comprobación rápida son más que suficientes.</p>
<p>El formato de uso es:</p>
<p>nmap [parámetros] ip_del_host =&gt; para un sólo host.</p>
<p>nmap [parámetros] rango_ip/máscara_octal =&gt; para un rango de ip.</p>
<p>Si no se especifica un rango de puertos, se utilizan los &#8220;más típicos&#8221; (denominados &#8216;well know&#8217;).</p>
<p>Los estados de puerto que notifica:</p>
<ul>
<li>open =&gt; El puerto es accesible y hay un servicio escuchando tras el.</li>
<li>closed =&gt; El puerto es accesible pero no hay un servicio escuchando tras el.</li>
<li>filtered =&gt; El puerto no es accesible normalmente debido a que un cortafuegos lo está filtrando.</li>
</ul>
<p>Bueno, pasemos a los ejemplos:</p>
<ul>
<li>Escanear los puertos &#8220;típicos&#8221; rápidamente de un host (192.168.1.10):</li>
</ul>

<div class="wp_codebox"><table><tr id="p39696"><td class="code" id="p396code96"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">nmap</span> <span style="color: #660033;">-F</span> 192.168.1.10</pre></td></tr></table></div>

<ul>
<li>Escanear el rango de red 192.168.1.x para los puertos TCP  del 2000 al 3000:</li>
</ul>

<div class="wp_codebox"><table><tr id="p39697"><td class="code" id="p396code97"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">nmap</span> <span style="color: #660033;">-sS</span> <span style="color: #660033;">-p</span> <span style="color: #000000;">2000</span>-<span style="color: #000000;">3000</span> 192.168.1.0<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">24</span></pre></td></tr></table></div>

<p>Creo que con estos dos ejemplos queda más que demostrada la facilidad de uso de la herramienta, pero no todos nos sentimos igual de bien frente a la consola. No hay problema si es el caso ya que también posee algunas interfaces gráficas. En concreto, destaco <a href="http://www.nmapsi4.org/">NmapSI4</a>.</p>
<p>Esta interface gráfica nos facilita en la medida de lo posible la mayoría de opciones típicas de uso. Su instalación en openSuse viene de parte del repositorio packman y dado que es un repositorio bastante común, sólo nos quedaría realizar un:</p>

<div class="wp_codebox"><table><tr id="p39698"><td class="code" id="p396code98"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">su</span> <span style="color: #660033;">-c</span> zypper <span style="color: #c20cb9; font-weight: bold;">install</span> nmapsi4</pre></td></tr></table></div>

<p>En caso de no tener añadido dicho repositorio, lo encontrarán en la opción de repositorios de la comunidad al añadir uno mediante el gran YaST.</p>
<p>Recomiendo que lancemos la GUI como root ( kdesu nmapsi4  por ejemplo). La inteface es bien sencilla y creo que no necesita mucha más explicación.</p>
]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.com/blog/escanear-recursos-de-red-nmap/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Servidor LAMP en openSuse</title>
		<link>http://miguelcarmona.com/blog/servidor-lamp-en-opensuse</link>
		<comments>http://miguelcarmona.com/blog/servidor-lamp-en-opensuse#comments</comments>
		<pubDate>Sun, 17 Jan 2010 23:22:17 +0000</pubDate>
		<dc:creator><![CDATA[miguelcarmona]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>

		<guid isPermaLink="false">http://miguelcarmona.com/?p=368</guid>
		<description><![CDATA[Para sistemas Windows existen aplicaciones todo en uno que te instalan apache, mysql y php de una forma muy fácil y sencilla; para GNU/Linux y mac, tambien existen dichos paquetes, pero para el caso de GNU/Linux, es más sencillo, práctico y útil instalar dichos servicios desde los repositorios de nuestra distribución. En esta ocasión, me centraré [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-369  aligncenter" title="LAMP - Linux Apache Mysql Php" src="http://miguelcarmona.com/wp-content/uploads/2010/01/lamp.gif" alt="LAMP - Linux Apache Mysql Php" width="340" height="172" /></p>
<p>Para sistemas Windows existen aplicaciones todo en uno que te instalan apache, mysql y php de una forma muy fácil y sencilla; para GNU/Linux y mac, tambien existen dichos paquetes, pero para el caso de GNU/Linux, es más sencillo, práctico y útil instalar dichos servicios desde los repositorios de nuestra distribución. En esta ocasión, me centraré en openSuse.</p>
<p><span id="more-368"></span></p>
<p>Bueno, pasemos manos a la obra:</p>
<p>Nos pasamos a administrador:</p>

<div class="wp_codebox"><table><tr id="p368114"><td class="code" id="p368code114"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">su</span></pre></td></tr></table></div>

<p>Instalamos los paquetes:</p>

<div class="wp_codebox"><table><tr id="p368115"><td class="code" id="p368code115"><pre class="bash" style="font-family:monospace;">zypper refresh
zypper <span style="color: #c20cb9; font-weight: bold;">install</span> mysql mysql-client apache2 apache2-mod_fcgid php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-mysql php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-fastcgi php5-pear php5-sysvmsg php5-sysvshm ImageMagick curl apache2-mod_php5</pre></td></tr></table></div>

<p>Activamos los módulos de apache que hemos instalado (por defecto se suelen activar, pero así nos aseguramos):</p>

<div class="wp_codebox"><table><tr id="p368116"><td class="code" id="p368code116"><pre class="bash" style="font-family:monospace;">a2enmod suexec
a2enmod rewrite
a2enmod ssl
a2enmod actions
a2enmod fcgid</pre></td></tr></table></div>

<p>Iniciamos y activamos los servicios para que inicien automáticamente al inicio:</p>

<div class="wp_codebox"><table><tr id="p368117"><td class="code" id="p368code117"><pre class="bash" style="font-family:monospace;">chkconfig <span style="color: #660033;">--add</span> apache2
chkconfig <span style="color: #660033;">--add</span> mysql
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 start
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mysql start</pre></td></tr></table></div>

<p>Elevamos la seguridad de mysql realizando un sismple asistente</p>

<div class="wp_codebox"><table><tr id="p368118"><td class="code" id="p368code118"><pre class="bash" style="font-family:monospace;">mysql_secure_installation</pre></td></tr></table></div>

<p>Con esto y en principio, ya tenemos el servidor funcionando. Realmente fácil y sencillo.</p>
<p>Para afinar un poco más, haremos unas ligeras modificaciones a la configuración de php. Dicha configuración se refleja en el archivo /etc/php5/apache2/php.ini :</p>
<p>Para habilitar el etiquetado corto de la programación de php, lo haremos en la variable:</p>

<div class="wp_codebox"><table><tr id="p368119"><td class="code" id="p368code119"><pre class="bash" style="font-family:monospace;">short_open_tag = on</pre></td></tr></table></div>

<p>Los parámetros de memoria límite para cada script así como el tiempo máximo de ejecución se configuran con las variables:</p>

<div class="wp_codebox"><table><tr id="p368120"><td class="code" id="p368code120"><pre class="bash" style="font-family:monospace;">max_execution_time = <span style="color: #000000;">60</span>     ; Maximum execution <span style="color: #000000; font-weight: bold;">time</span> of each script, <span style="color: #000000; font-weight: bold;">in</span> seconds
memory_limit = 64M      ; Maximum amount of memory a script may consume <span style="color: #7a0874; font-weight: bold;">&#40;</span>128MB<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>Para los reportes de error en aplicaciones php, podemos definir que se debe mostrar en pantalla. En un servidor en producción, se deberá configurar para que no se muestren, pero en un servidor de desarrollo, es muy útil que muestre absolutamente todos los errores/advertencias para correjirlos:</p>

<div class="wp_codebox"><table><tr id="p368121"><td class="code" id="p368code121"><pre class="bash" style="font-family:monospace;">error_reporting = E_ALL
display_errors = On
log_errors = On</pre></td></tr></table></div>

<p>Es muy importante que aunque estemos en un servidor en producción, &#8216;logueemos&#8217; los errores para poder revisarlos.</p>
<p>Estos son los principales cambios que se suelen configurar. De todas formas, siéntase libre de revisar todo el archivo (tan bien documentado). Sería una buena idea que hiciese una copia del mismo por lo que pueda pasar.</p>
<p>Si necesitamos &#8220;hosts virtuales&#8221;, añadir un nuevo &#8220;sitio virtual&#8221; a nuestro Apache es algo realmente sencillo. Para cada sitio, deberemos tener un archivo en /etc/apache2/vhosts.d; Dentro de dicha ruta tenemos un archivo de ejemplo (vhost.template) el cual nos puede guiar. Por ejemplo, voy a definir un &#8220;sitio virtual&#8221; con dominio midominio.com:</p>

<div class="wp_codebox"><table><tr id="p368122"><td class="code" id="p368code122"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>vhosts.d<span style="color: #000000; font-weight: bold;">/</span>vhost.template <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>vhosts.d<span style="color: #000000; font-weight: bold;">/</span>midominio.com.conf
<span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>vhosts.d<span style="color: #000000; font-weight: bold;">/</span>midominio.com.conf</pre></td></tr></table></div>

<p>Es imprescindible que el nombre del archivo que definamos termine en .conf<br />
Deberemos hacer los cambios que necesitemos. En mi caso, he dejado el archivo así:</p>

<div class="wp_codebox"><table><tr id="p368123"><td class="code" id="p368code123"><pre class="bash" style="font-family:monospace;">    ServerAdmin mimail<span style="color: #000000; font-weight: bold;">@</span>mail.com
    ServerName midominio.com
&nbsp;
    DocumentRoot <span style="color: #000000; font-weight: bold;">/</span>srv<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>midominio.com<span style="color: #000000; font-weight: bold;">/</span>web
&nbsp;
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
&nbsp;
    ErrorLog <span style="color: #000000; font-weight: bold;">/</span>srv<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>midominio.com<span style="color: #000000; font-weight: bold;">/</span>logs<span style="color: #000000; font-weight: bold;">/</span>error_log
    CustomLog <span style="color: #000000; font-weight: bold;">/</span>srv<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>midominio.com<span style="color: #000000; font-weight: bold;">/</span>logs<span style="color: #000000; font-weight: bold;">/</span>access_log combined
&nbsp;
    HostnameLookups Off
    UseCanonicalName Off
    ServerSignature On
&nbsp;
    ScriptAlias <span style="color: #000000; font-weight: bold;">/</span>cgi-bin<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #ff0000;">&quot;/srv/www/midominio.com/cgi-bin/&quot;</span>
&nbsp;
        AllowOverride None
        Options +ExecCGI <span style="color: #660033;">-Includes</span>
        Order allow,deny
        Allow from all</pre></td></tr></table></div>

<p>Una vez terminado, y ya que he definido una estructura personalizada, deberemos crear las rutas especificadas:</p>

<div class="wp_codebox"><table><tr id="p368124"><td class="code" id="p368code124"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>srv<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>midominio.com<span style="color: #000000; font-weight: bold;">/</span>web
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>srv<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>midominio.com<span style="color: #000000; font-weight: bold;">/</span>logs
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>srv<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>midominio.com<span style="color: #000000; font-weight: bold;">/</span>cgi-bin</pre></td></tr></table></div>

<p>En la subcarpeta web, guardaremos toda la aplicación. En logs, se guardarán los registros de acceso y errores de este &#8220;sitio virtual&#8221;. Por último los scripts cgi ya no se suelen utilizar, por lo que podríamos omitir el crear esta carpeta siempre y cuando no la definamos en el archivo de configuración anterior.</p>
<p>Así, cada vez que necesitemos un sitio virtual nuevo en nuestro servidor, bastaría con sacar una copia de este archivo y cambiar los datos que necesitemos.</p>
<p>Por supuesto, cada vez que cambiemos alguna configuración de apache, hay que recargarlo para que la adopte. Como no es un sitio en producción, recomiendo reiniciarlo con (como root):</p>

<div class="wp_codebox"><table><tr id="p368125"><td class="code" id="p368code125"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 restart</pre></td></tr></table></div>

<p>Para terminar, &#8220;la guinda&#8221; que nos queda es <strong><a href="http://www.phpmyadmin.net/home_page/index.php">phpMyAdmin</a></strong>. Me decanto por esta aplicación ya que es la más extendida en los servicios de hosting y una gran aplicación.</p>
<p>Para instalarla, lo podemos hacer fácilmente mediante:</p>
<p><a href="http://software.opensuse.org/ymp/server:php:applications/openSUSE_11.2/phpMyAdmin.ymp"><img class="alignnone size-full wp-image-362" title="One Click Install (instalación con un click)" src="http://miguelcarmona.com/wp-content/uploads/2010/01/one-click-install.png" alt="One Click Install (instalación con un click)" width="135" height="36" /></a></p>
<p>Una vez instalado, podemos acceder mediante http://localhost/phpMyAdmin (o la ip/nombre del equipo donde lo hemos instalado).</p>
<p>Es probable que nos reporte: El archivo de configuración ahora necesita salvoconducto (una frase secreta) (blowfish_secret).</p>
<p>Para este caso, deberemos editar el archivo de configuración ﻿﻿﻿/srv/www/htdocs/phpMyAdmin/config.inc.php y actualizar:</p>

<div class="wp_codebox"><table><tr id="p368126"><td class="code" id="p368code126"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$cfg</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'blowfish_secret'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">/* YOU MUST FILL IN THIS FOR COOKIE AUTH! */</span></pre></td></tr></table></div>

<p>Debemos especificar alguna &#8220;frase aleatoria&#8221; para la encriptación. Estaría bien que contuviese letras, números y todo tipo de caracteres (a excepción de las comillas simples). Esto no es ningún tipo de contraseña y no necesitaremos recordarlo, así que siéntase libre de &#8220;chaporrotear las teclas&#8221;.</p>
<p>Si este archivo no existe, deberemos copiar el archivo de ejemplo y hacer las modificaciones pertinentes:</p>

<div class="wp_codebox"><table><tr id="p368127"><td class="code" id="p368code127"><pre class="php" style="font-family:monospace;">cp <span style="color: #339933;">/</span>srv<span style="color: #339933;">/</span>www<span style="color: #339933;">/</span>htdocs<span style="color: #339933;">/</span>phpMyAdmin<span style="color: #339933;">/</span>config<span style="color: #339933;">.</span>sample<span style="color: #339933;">.</span>inc<span style="color: #339933;">.</span>php <span style="color: #339933;">/</span>srv<span style="color: #339933;">/</span>www<span style="color: #339933;">/</span>htdocs<span style="color: #339933;">/</span>phpMyAdmin<span style="color: #339933;">/</span>config<span style="color: #339933;">.</span>inc<span style="color: #339933;">.</span>php</pre></td></tr></table></div>

<p>Con estos pasos, ya tenemos funcionando un servidor perfecto para pre-producción. Ahora sólo nos quedaría combinarlo con alguna solución para compartir el sistema de ficheros mediante <a href="http://miguelcarmona.com/blog/configurar-servidor-y-cliente-nfs-en-opensuse-o-en-cualquier-gnulinux/">NFS</a> o Samba y un <a href="http://miguelcarmona.com/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql/">servidor DNS</a> local y fácil de administrar.</p>
<p>Por cierto, la ruta por defecto es /srv/www/htdocs/. Es lógico que vuestro usuario no tenga permisos en esa carpeta, así que para establecerlos, ejecutaremos (como root):</p>

<div class="wp_codebox"><table><tr id="p368128"><td class="code" id="p368code128"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">chown</span> - R tu_nombre_de_usuario <span style="color: #000000; font-weight: bold;">/</span>srv</pre></td></tr></table></div>

<p>Con esto, hemos establecido todos los permisos de la carpeta www (servidor web) y ftp (servidor ftp) a nuestro usuario.</p>
]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.com/blog/servidor-lamp-en-opensuse/feed</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>MyDNS: Servidor DNS alternativo a bind con datos en mysql</title>
		<link>http://miguelcarmona.com/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql</link>
		<comments>http://miguelcarmona.com/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql#comments</comments>
		<pubDate>Fri, 15 Jan 2010 02:19:20 +0000</pubDate>
		<dc:creator><![CDATA[miguelcarmona]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[openSuse]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[sysAdmin]]></category>

		<guid isPermaLink="false">http://miguelcarmona.com/?p=357</guid>
		<description><![CDATA[De bien es sabido que el rey dns en GNU/Linux es BIND. Pero también existen grandes alternativas como MyDNS. MyDNS es un servidor dns bastante ligero que nos permite almacenar sus datos de registros dentro de una base de datos en MySQL. Esto tiene como ventaja el poder integrarse fácilmente en proyectos que lo requieran. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-358  aligncenter" title="Gráfica DNS" src="http://miguelcarmona.com/wp-content/uploads/2010/01/dns_ico.gif" alt="" width="375" height="402" /></p>
<p>De bien es sabido que el rey dns en GNU/Linux es BIND. Pero también existen grandes alternativas como <a href="http://mydns.bboy.net/">MyDNS</a>.</p>
<p><a href="http://mydns.bboy.net/">MyDNS</a> es un servidor dns bastante ligero que nos permite almacenar sus datos de registros dentro de una base de datos en MySQL. Esto tiene como ventaja el poder integrarse fácilmente en proyectos que lo requieran.</p>
<p>Otra principal ventaja es que podemos replicar esos datos en distintos servidores y así tenerlos completamente sincronizados prescindiendo de las jerarquías de las réplicas en DNS.</p>
<p>Y creo que la mayor ventaja es que cada vez que realicemos un cambio, no hay que recargar el demonio (como ocurre en BIND).</p>
<p><span id="more-357"></span><br />
Su instalación en openSuse sería tan sencillo como hacer click en:</p>
<p><a href="http://software.opensuse.org/ymp/home:bajizs_cnt/openSUSE_11.2/mydns-ng.ymp"><img class="size-full wp-image-362 alignnone" title="One Click Install (instalación con un click)" src="http://miguelcarmona.com/wp-content/uploads/2010/01/one-click-install.png" alt="One Click Install (instalación con un click)" width="135" height="36" /></a></p>
<p>Una vez instalado, tenemos 2 opciones. La primera sería instalar un administrador gráfico para el servidor dns; la segunda sería configurar el servicio manualmente y administrarlo haciendo consultas a mysql directamente. Por comodidad, yo me decanté por un administrador gráfico, por lo que usé MyDNSConfig.</p>
<p>Ya que MyDNSConfig es un gestor escrito en php y que se administra vía web, deberemos tener un servidor web (apache normalmente) con php instalado. No voy a entrar en detalles de cómo instalar Apache y php así como mysql ya que hay muchísima información (y bastante buena) al respecto. De todas formas, tengo un artículo básico sobre esta cuestión (<a href="http://miguelcarmona.com/blog/lamp-en-opensuse">http://miguelcarmona.com/blog/lamp-en-opensuse</a>)</p>
<p>Para realizar la instalación y configuración con mydns, sólo bastará con descargarlo y ejecutar la instalación:</p>

<div class="wp_codebox"><table><tr id="p357138"><td class="code" id="p357code138"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">su</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>tmp
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>downloads.sourceforge.net<span style="color: #000000; font-weight: bold;">/</span>mydnsconfig<span style="color: #000000; font-weight: bold;">/</span>MyDNSConfig-3.0.1.tar.gz?<span style="color: #007800;">use_mirror</span>=
<span style="color: #c20cb9; font-weight: bold;">tar</span> xvfz MyDNSConfig-3.0.1.tar.gz
<span style="color: #7a0874; font-weight: bold;">cd</span> mydnsconfig<span style="color: #000000; font-weight: bold;">/</span>install<span style="color: #000000; font-weight: bold;">/</span>
php <span style="color: #660033;">-q</span> install.php</pre></td></tr></table></div>

<p>Seguimos el asistente de instalación, y una vez terminado, accederemos a la administración desde http://localhost:8080 (cambiar localhost por la ip del equipo si estamos en otro).</p>
<p>Lógicamente, deberemos tener tanto apache como mysql y mydns ejecutándose﻿:</p>

<div class="wp_codebox"><table><tr id="p357139"><td class="code" id="p357code139"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">su</span>
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 restart
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mysql restart
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mydns restart</pre></td></tr></table></div>

<p>MyDNSConfig es parte del proyecto <a href="http://www.ispconfig.org/">ISPConfig</a> (panel de gestión para servidores web y de correo). Es bastante fácil, sencillo e intuitivo como para tener que extender este artículo con una explicación.</p>
<p>Si queremos que el servidor dns y mysql inicien por defecto, haremos:</p>

<div class="wp_codebox"><table><tr id="p357140"><td class="code" id="p357code140"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">su</span>
chkconfig <span style="color: #660033;">--add</span> mysql
chkconfig <span style="color: #660033;">--add</span> mydns</pre></td></tr></table></div>

<p>Así mismo, si queremos que apache también inicie automáticamente (para administrar MyDNS con MyDNSConfig), haremos:</p>

<div class="wp_codebox"><table><tr id="p357141"><td class="code" id="p357code141"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">su</span>
chkconfig <span style="color: #660033;">--add</span> apache2</pre></td></tr></table></div>

<p>Para que nuestros equipos resuelvan correctamente con este servidor DNS, deberemos indicarle que el primer servidor DNS a utilizar es la ip del servidor donde lo hemos instalado (por ejemplo, 192.168.10.80). De forma que editaríamos el archivo /etc/resolvers.conf y añadiríamos al principio la línea:</p>

<div class="wp_codebox"><table><tr id="p357142"><td class="code" id="p357code142"><pre class="bash" style="font-family:monospace;">nameserver 192.168.10.80</pre></td></tr></table></div>

<p>MyDNS no es capaz de resolver nombres de dominio que no administra, así que para obtenerlos se apoya en un servidor DNS externo (podemos usar el de nuestro ISP por ejemplo). Para especificarle dicho servidor externo, deberemos editar el archivo /etc/mydns.conf y especificárselo:</p>

<div class="wp_codebox"><table><tr id="p357143"><td class="code" id="p357code143"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">su</span>
<span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>mydns.conf</pre></td></tr></table></div>

<p>Buscamos la línea:</p>

<div class="wp_codebox"><table><tr id="p357144"><td class="code" id="p357code144"><pre class="bash" style="font-family:monospace;">recursive =                     <span style="color: #666666; font-style: italic;"># Location of recursive resolver</span></pre></td></tr></table></div>

<p>Y especificamos el servidor DNS</p>

<div class="wp_codebox"><table><tr id="p357145"><td class="code" id="p357code145"><pre class="bash" style="font-family:monospace;">recursive =  80.58.61.250                   <span style="color: #666666; font-style: italic;"># Location of recursive resolver</span></pre></td></tr></table></div>

<p>Reiniciamos el servidor:</p>

<div class="wp_codebox"><table><tr id="p357146"><td class="code" id="p357code146"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mydns restart</pre></td></tr></table></div>

<p>Y ya tenemos un servidor dns completamente funcional.</p>
]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.com/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Depuración y rendimiento de una aplicación en php (y por supuesto codeIgniter)</title>
		<link>http://miguelcarmona.com/blog/depuracion-y-rendimiento-de-una-aplicacion-en-php-y-por-supuesto-codeigniter</link>
		<comments>http://miguelcarmona.com/blog/depuracion-y-rendimiento-de-una-aplicacion-en-php-y-por-supuesto-codeigniter#comments</comments>
		<pubDate>Mon, 11 Jan 2010 20:42:18 +0000</pubDate>
		<dc:creator><![CDATA[miguelcarmona]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://miguelcarmona.com/?p=323</guid>
		<description><![CDATA[PHP quick profiler es una librería para php5 que nos permite tener una consola extra donde poder revisar la ejecución de nuestra aplicación. Es una gran librería que nos revela información variada como datos recibidos, clases iniciadas, el lugar donde las mismas se inician, número de consultas a la sql, consultas a la sql, tiempo [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;">
<p style="text-align: center;">
<div id="attachment_324" style="width: 550px" class="wp-caption aligncenter"><img class="size-medium wp-image-324" title="PHP quick profiler" src="http://miguelcarmona.com/wp-content/uploads/2010/01/php-quick-profiler-540x332.png" alt="PHP quick profiler" width="540" height="332" /><p class="wp-caption-text">PHP quick profiler</p></div>
<p><a title="php-quick-profiler" href="http://particletree.com/features/php-quick-profiler/" target="_blank">PHP quick profiler</a> es una librería para php5 que nos permite tener una consola extra donde poder revisar la ejecución de nuestra aplicación.</p>
<p>Es una gran librería que nos revela información variada como datos recibidos, clases iniciadas, el lugar donde las mismas se inician, número de consultas a la sql, consultas a la sql, tiempo de carga, memoria consumida por la aplicación, archivos incluidos y un largo etcétera.</p>
<p><span id="more-323"></span></p>
<p>Podéis hecharle un vistazo en <a href="http://particletree.com/examples/pqp/" target="_blank">http://particletree.com/examples/pqp/</a> aunque os dejo algunas capturas de sus distintos paneles:</p>
<p><a href="http://miguelcarmona.com/wp-content/uploads/2010/01/php-quick-profiler_captura_console.jpeg"><img class="size-thumbnail wp-image-326 alignleft" title="PHP quick profiler :: captura (console)" src="http://miguelcarmona.com/wp-content/uploads/2010/01/php-quick-profiler_captura_console-250x250.jpg" alt="PHP quick profiler :: captura (console)" width="250" height="250" /></a><a href="http://miguelcarmona.com/wp-content/uploads/2010/01/php-quick-profiler_captura_loadTime.jpeg"><img class="size-thumbnail wp-image-328 alignleft" title="PHP quick profiler :: captura (load time)" src="http://miguelcarmona.com/wp-content/uploads/2010/01/php-quick-profiler_captura_loadTime-250x250.jpg" alt="PHP quick profiler :: captura (load time)" width="250" height="250" /></a><a href="http://miguelcarmona.com/wp-content/uploads/2010/01/php-quick-profiler_captura_queries.jpeg"><img class="size-thumbnail wp-image-330 alignleft" title="PHP quick profiler :: captura (queries)" src="http://miguelcarmona.com/wp-content/uploads/2010/01/php-quick-profiler_captura_queries-250x250.jpg" alt="PHP quick profiler :: captura (queries)" width="250" height="250" /></a><a href="http://miguelcarmona.com/wp-content/uploads/2010/01/php-quick-profiler_captura_memoryUsed.jpeg"><img class="alignleft size-thumbnail wp-image-329" title="PHP quick profiler :: captura (memory used)" src="http://miguelcarmona.com/wp-content/uploads/2010/01/php-quick-profiler_captura_memoryUsed-250x250.jpg" alt="PHP quick profiler :: captura (memory used)" width="250" height="250" /></a><a href="http://miguelcarmona.com/wp-content/uploads/2010/01/php-quick-profiler_captura_files.jpeg"><img class="size-thumbnail wp-image-327" title="PHP quick profiler :: captura (files)" src="http://miguelcarmona.com/wp-content/uploads/2010/01/php-quick-profiler_captura_files-250x250.jpg" alt="PHP quick profiler :: captura (files)" width="250" height="250" /></a></p>
<p>La instalación y funcionamiento de dicha librería para una aplicación en php5 está muy explicada en la página del autor, por lo que no entraré en detalles</p>
<p>Hay un proyecto que consiste en integrar esta librería dentro del framework <a href="http://codeigniter.com/" target="_blank">codeIgniter</a> (<a href="http://github.com/danmorin/php-quick-profiler-for-codeigniter" target="_blank">PHP quick profiler for codeigniter</a>).</p>
<p>Para descargar <a href="http://github.com/danmorin/php-quick-profiler-for-codeigniter" target="_blank">dicha librería</a>, por comodidad, haremos uso de git. Para aquellos que no lo tengan instalado en openSuse, bastará con hacer un:</p>

<div class="wp_codebox"><table><tr id="p323152"><td class="code" id="p323code152"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">su</span> <span style="color: #660033;">-c</span> <span style="color: #ff0000;">'zypper install git'</span></pre></td></tr></table></div>

<p>Procedemos a extraer una copia del código del repositorio git:</p>

<div class="wp_codebox"><table><tr id="p323153"><td class="code" id="p323code153"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">git</span> clone <span style="color: #c20cb9; font-weight: bold;">git</span>:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>danmorin<span style="color: #000000; font-weight: bold;">/</span>php-quick-profiler-for-codeigniter.git</pre></td></tr></table></div>

<p>Si accedemos a la carpeta descargada (php-quick-profiler-for-codeigniter), veremos 3 carpetas y un archivo readme. Para instalar la librería en codeIgniter deberemos copiar:</p>
<ul>
<li>Contenido de la carpeta app_config a application/config/ (si no utilizas los hooks de codeIgniter, sobre escribe el archivo sin pensarlo).</li>
<li>Contenido de la carpeta app_libraries a application/libraries/</li>
<li>Contenido de la carpeta app_plugins a application/plugins/ (si no dispone de esta carpeta, créela).</li>
</ul>
<p>Sólo nos queda habilitar los hooks en el archivo application/config/config.php:</p>

<div class="wp_codebox"><table><tr id="p323154"><td class="code" id="p323code154"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'enable_hooks'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>y especificar la línea:</p>

<div class="wp_codebox"><table><tr id="p323155"><td class="code" id="p323code155"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">output</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">enable_profiler</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>en la función/es que deseemos para lanzar dicha consola.</p>
<p>Por comodidad, lo podemos incluir en el constructor de una clase y así se lanzará para todas sus funciones. Pero, ¿y si lo tengo en el constructor de varias clases y quiero que no se lance? En mi caso, he definido la variable $config[&#8216;php-quick-profiler&#8217;] en application/config/config.php y en los constructores:</p>

<div class="wp_codebox"><table><tr id="p323156"><td class="code" id="p323code156"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'php-quick-profiler'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">output</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">enable_profiler</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>De esta forma, sólo bastaría con cambiar esta variable dentro del config para que se muestre la consola en aquellas clases que la especificamos.</p>
<p>Realmente es muy práctico para depurar una aplicación ya que localizamos rápidamente dónde se encuentra el problema.</p>
]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.com/blog/depuracion-y-rendimiento-de-una-aplicacion-en-php-y-por-supuesto-codeigniter/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
