<?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>miguelcarmona.name &#187; Blog</title>
	<atom:link href="http://miguelcarmona.name/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://miguelcarmona.name</link>
	<description>Blog/Portfolio profesional de Miguel Carmona</description>
	<lastBuildDate>Tue, 21 Feb 2012 09:37:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Instalación de openSuse por red mediante tftp-pxe</title>
		<link>http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe</link>
		<comments>http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe#comments</comments>
		<pubDate>Fri, 28 May 2010 17:10:50 +0000</pubDate>
		<dc:creator>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.name/?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 [...]]]></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.name/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="p57717"><td class="code" id="p577code17"><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="p57718"><td class="code" id="p577code18"><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="p57719"><td class="code" id="p577code19"><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="p57720"><td class="code" id="p577code20"><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="p57721"><td class="code" id="p577code21"><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="p57722"><td class="code" id="p577code22"><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="p57723"><td class="code" id="p577code23"><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="p57724"><td class="code" id="p577code24"><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="p57725"><td class="code" id="p577code25"><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="p57726"><td class="code" id="p577code26"><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="p57727"><td class="code" id="p577code27"><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="p57728"><td class="code" id="p577code28"><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="p57729"><td class="code" id="p577code29"><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="p57730"><td class="code" id="p577code30"><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="p57731"><td class="code" id="p577code31"><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="p57732"><td class="code" id="p577code32"><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>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/vmware-server-1-x-en-opensuse-11-2" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2009/11/captura_vmware_1.x_openSuse_11.2-540x386.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/vmware-server-1-x-en-opensuse-11-2" target="_top">Vmware server 1.x en opensuse 11.2</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/freenx-algo-mas-que-un-terminal-server-mejorado-alternativa-a-vnc-server-en-linux" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2009/01/freenx-pantallazo-de-ejecucion-540x367.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/freenx-algo-mas-que-un-terminal-server-mejorado-alternativa-a-vnc-server-en-linux" target="_top">FreeNX - Algo más que un 'Términal Server' mejorado (alternativa a vnc server en Linux)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/dns_ico.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql" target="_top">MyDNS: Servidor DNS alternativo a bind con datos en mysql</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/servidor-lamp-en-opensuse" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/lamp.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/servidor-lamp-en-opensuse" target="_top">Servidor LAMP en openSuse</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/windows-como-cliente-nfs" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/windows_services_nfs_1.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/windows-como-cliente-nfs" target="_top">Windows como cliente NFS</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>usbip &#8211; Comparte tus dispositivos usb en red</title>
		<link>http://miguelcarmona.name/blog/usbip-comparte-tus-dispositivos-usb-en-red</link>
		<comments>http://miguelcarmona.name/blog/usbip-comparte-tus-dispositivos-usb-en-red#comments</comments>
		<pubDate>Fri, 19 Feb 2010 04:51:48 +0000</pubDate>
		<dc:creator>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.name/?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 [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-medium wp-image-439  aligncenter" title="Cable extensor USB" src="http://miguelcarmona.name/wp-content/uploads/2010/02/CABLE-USB-MACHO-HEMBRA-540x405.jpg" alt="" width="540" height="405" /></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="p43554"><td class="code" id="p435code54"><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="p43555"><td class="code" id="p435code55"><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="p43556"><td class="code" id="p435code56"><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="p43557"><td class="code" id="p435code57"><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="p43558"><td class="code" id="p435code58"><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="p43559"><td class="code" id="p435code59"><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="p43560"><td class="code" id="p435code60"><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="p43561"><td class="code" id="p435code61"><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="p43562"><td class="code" id="p435code62"><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="p43563"><td class="code" id="p435code63"><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="p43564"><td class="code" id="p435code64"><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="p43565"><td class="code" id="p435code65"><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="p43566"><td class="code" id="p435code66"><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="p43567"><td class="code" id="p435code67"><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="p43568"><td class="code" id="p435code68"><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="p43569"><td class="code" id="p435code69"><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="p43570"><td class="code" id="p435code70"><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="p43571"><td class="code" id="p435code71"><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="p43572"><td class="code" id="p435code72"><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="p43573"><td class="code" id="p435code73"><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="p43574"><td class="code" id="p435code74"><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>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/umount-device-is-busy" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/bash.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/umount-device-is-busy" target="_top">umount: device is busy</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/05/pxe-suse10.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe" target="_top">Instalación de openSuse por red mediante tftp-pxe</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/vmware-server-1-x-en-opensuse-11-2" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2009/11/captura_vmware_1.x_openSuse_11.2-540x386.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/vmware-server-1-x-en-opensuse-11-2" target="_top">Vmware server 1.x en opensuse 11.2</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/freenx-algo-mas-que-un-terminal-server-mejorado-alternativa-a-vnc-server-en-linux" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2009/01/freenx-pantallazo-de-ejecucion-540x367.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/freenx-algo-mas-que-un-terminal-server-mejorado-alternativa-a-vnc-server-en-linux" target="_top">FreeNX - Algo más que un 'Términal Server' mejorado (alternativa a vnc server en Linux)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/configurar-servidor-y-cliente-nfs-en-opensuse-o-en-cualquier-gnulinux" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/yast_nfs_server_principal-540x346.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/configurar-servidor-y-cliente-nfs-en-opensuse-o-en-cualquier-gnulinux" target="_top">Configurar servidor y cliente NFS en openSuse o en cualquier GNU/linux</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/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.name/blog/clearos-introduccion-y-primeras-impresiones</link>
		<comments>http://miguelcarmona.name/blog/clearos-introduccion-y-primeras-impresiones#comments</comments>
		<pubDate>Mon, 25 Jan 2010 02:45:13 +0000</pubDate>
		<dc:creator>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.name/?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, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://miguelcarmona.name/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.name/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.name/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>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/clearos-enterprise-5-1" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/clearos-enterprise-5-1" target="_top">ClearOS Enterprise 5.1</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/router-firewall-proxy-bajo-una-maquina-potente-o-poco-potente" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/ipcop.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/router-firewall-proxy-bajo-una-maquina-potente-o-poco-potente" target="_top">Router, firewall, proxy... bajo una máquina potente o poco potente</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/dns_ico.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql" target="_top">MyDNS: Servidor DNS alternativo a bind con datos en mysql</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/servidor-lamp-en-opensuse" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/lamp.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/servidor-lamp-en-opensuse" target="_top">Servidor LAMP en openSuse</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/windows-como-cliente-nfs" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/windows_services_nfs_1.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/windows-como-cliente-nfs" target="_top">Windows como cliente NFS</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/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.name/blog/escanear-recursos-de-red-nmap</link>
		<comments>http://miguelcarmona.name/blog/escanear-recursos-de-red-nmap#comments</comments>
		<pubDate>Sat, 23 Jan 2010 03:14:03 +0000</pubDate>
		<dc:creator>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.name/?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 [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://miguelcarmona.name/wp-content/uploads/2010/01/nmapsi4-alpha3-1.jpg"><img class="aligncenter size-medium wp-image-406" title="nmapsi4" src="http://miguelcarmona.name/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="p39679"><td class="code" id="p396code79"><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="p39680"><td class="code" id="p396code80"><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="p39681"><td class="code" id="p396code81"><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="p39682"><td class="code" id="p396code82"><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>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/freenx-algo-mas-que-un-terminal-server-mejorado-alternativa-a-vnc-server-en-linux" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2009/01/freenx-pantallazo-de-ejecucion-540x367.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/freenx-algo-mas-que-un-terminal-server-mejorado-alternativa-a-vnc-server-en-linux" target="_top">FreeNX - Algo más que un 'Términal Server' mejorado (alternativa a vnc server en Linux)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/router-firewall-proxy-bajo-una-maquina-potente-o-poco-potente" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/ipcop.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/router-firewall-proxy-bajo-una-maquina-potente-o-poco-potente" target="_top">Router, firewall, proxy... bajo una máquina potente o poco potente</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/configurar-escaner-en-red-opensuse-11" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/escaner1.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/configurar-escaner-en-red-opensuse-11" target="_top">Configurar escáner en red - openSuse 11</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/vpn-con-openssh" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/11/ssh_vpn.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/vpn-con-openssh" target="_top">VPN con OpenSSH</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/05/pxe-suse10.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe" target="_top">Instalación de openSuse por red mediante tftp-pxe</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/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.name/blog/servidor-lamp-en-opensuse</link>
		<comments>http://miguelcarmona.name/blog/servidor-lamp-en-opensuse#comments</comments>
		<pubDate>Sun, 17 Jan 2010 23:22:17 +0000</pubDate>
		<dc:creator>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.name/?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é [...]]]></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.name/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="p36898"><td class="code" id="p368code98"><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="p36899"><td class="code" id="p368code99"><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="p368100"><td class="code" id="p368code100"><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="p368101"><td class="code" id="p368code101"><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="p368102"><td class="code" id="p368code102"><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="p368103"><td class="code" id="p368code103"><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="p368104"><td class="code" id="p368code104"><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="p368105"><td class="code" id="p368code105"><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="p368106"><td class="code" id="p368code106"><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="p368107"><td class="code" id="p368code107"><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="p368108"><td class="code" id="p368code108"><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="p368109"><td class="code" id="p368code109"><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.name/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="p368110"><td class="code" id="p368code110"><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="p368111"><td class="code" id="p368code111"><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.name/blog/configurar-servidor-y-cliente-nfs-en-opensuse-o-en-cualquier-gnulinux/">NFS</a> o Samba y un <a href="http://miguelcarmona.name/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="p368112"><td class="code" id="p368code112"><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>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/dns_ico.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql" target="_top">MyDNS: Servidor DNS alternativo a bind con datos en mysql</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/depuracion-y-rendimiento-de-una-aplicacion-en-php-y-por-supuesto-codeigniter" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/php-quick-profiler-540x332.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/depuracion-y-rendimiento-de-una-aplicacion-en-php-y-por-supuesto-codeigniter" target="_top">Depuración y rendimiento de una aplicación en php (y por supuesto codeIgniter)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/hmvc-sistema-modular-en-codeigniter" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/codeigniter_logo-e1262900174656.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/hmvc-sistema-modular-en-codeigniter" target="_top">HMVC - Sistema modular en codeIgniter</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/05/pxe-suse10.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe" target="_top">Instalación de openSuse por red mediante tftp-pxe</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/crear-copias-de-seguridad-en-servidor-web-de-hosting-mediante-php" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/02/php.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/crear-copias-de-seguridad-en-servidor-web-de-hosting-mediante-php" target="_top">Crear copias de seguridad en servidor web de hosting mediante php</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/blog/servidor-lamp-en-opensuse/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>MyDNS: Servidor DNS alternativo a bind con datos en mysql</title>
		<link>http://miguelcarmona.name/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql</link>
		<comments>http://miguelcarmona.name/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>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.name/?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. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-358  aligncenter" title="Gráfica DNS" src="http://miguelcarmona.name/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.name/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.name/blog/lamp-en-opensuse">http://miguelcarmona.name/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="p357122"><td class="code" id="p357code122"><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="p357123"><td class="code" id="p357code123"><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="p357124"><td class="code" id="p357code124"><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="p357125"><td class="code" id="p357code125"><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="p357126"><td class="code" id="p357code126"><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="p357127"><td class="code" id="p357code127"><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="p357128"><td class="code" id="p357code128"><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="p357129"><td class="code" id="p357code129"><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="p357130"><td class="code" id="p357code130"><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>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/servidor-lamp-en-opensuse" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/lamp.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/servidor-lamp-en-opensuse" target="_top">Servidor LAMP en openSuse</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/freenx-algo-mas-que-un-terminal-server-mejorado-alternativa-a-vnc-server-en-linux" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2009/01/freenx-pantallazo-de-ejecucion-540x367.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/freenx-algo-mas-que-un-terminal-server-mejorado-alternativa-a-vnc-server-en-linux" target="_top">FreeNX - Algo más que un 'Términal Server' mejorado (alternativa a vnc server en Linux)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/05/pxe-suse10.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe" target="_top">Instalación de openSuse por red mediante tftp-pxe</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/triggers-disparadores-en-mysql" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/triggers-disparadores-en-mysql" target="_top">Triggers (disparadores) en mySQL</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/clearos-introduccion-y-primeras-impresiones" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/clearOS-pantalla_inicial_administracion-540x376.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/clearos-introduccion-y-primeras-impresiones" target="_top">ClearOS - Introducción y primeras impresiones</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/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.name/blog/depuracion-y-rendimiento-de-una-aplicacion-en-php-y-por-supuesto-codeigniter</link>
		<comments>http://miguelcarmona.name/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>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.name/?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 [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">
<p style="text-align: center;">
<div id="attachment_324" class="wp-caption aligncenter" style="width: 550px"><img class="size-medium wp-image-324" title="PHP quick profiler" src="http://miguelcarmona.name/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.name/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.name/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.name/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.name/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.name/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.name/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.name/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.name/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.name/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.name/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="p323136"><td class="code" id="p323code136"><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="p323137"><td class="code" id="p323code137"><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="p323138"><td class="code" id="p323code138"><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="p323139"><td class="code" id="p323code139"><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['php-quick-profiler'] en application/config/config.php y en los constructores:</p>

<div class="wp_codebox"><table><tr id="p323140"><td class="code" id="p323code140"><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>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/hmvc-sistema-modular-en-codeigniter" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/codeigniter_logo-e1262900174656.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/hmvc-sistema-modular-en-codeigniter" target="_top">HMVC - Sistema modular en codeIgniter</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/retornar-una-vista-en-vez-de-mostrarla-codeigniter" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/codeigniter_logo-e1262900174656.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/retornar-una-vista-en-vez-de-mostrarla-codeigniter" target="_top">retornar una vista en vez de mostrarla - codeIgniter</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/servidor-lamp-en-opensuse" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/lamp.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/servidor-lamp-en-opensuse" target="_top">Servidor LAMP en openSuse</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/hibernando-con-intel-wireless-3945abg-opensuse" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/hibernando-con-intel-wireless-3945abg-opensuse" target="_top">Hibernando con Intel Wireless 3945ABG - openSuse</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/windows-como-cliente-nfs" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/windows_services_nfs_1.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/windows-como-cliente-nfs" target="_top">Windows como cliente NFS</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/blog/depuracion-y-rendimiento-de-una-aplicacion-en-php-y-por-supuesto-codeigniter/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>HMVC &#8211; Sistema modular en codeIgniter</title>
		<link>http://miguelcarmona.name/blog/hmvc-sistema-modular-en-codeigniter</link>
		<comments>http://miguelcarmona.name/blog/hmvc-sistema-modular-en-codeigniter#comments</comments>
		<pubDate>Fri, 08 Jan 2010 06:38:43 +0000</pubDate>
		<dc:creator>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.name/?p=293</guid>
		<description><![CDATA[HMVC es un &#8220;plugin&#8221; que nos permite pogramar módulos bajo el framework codeigniter. En un principio, la librería nos permite tener para cada módulo los controladores, modelos, vistas y librerías que necesitemos. Es una librería realmente potente ya que incluso nos permite cargar la salida de una función de un controlador en otro controlador. Página [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-294" title="codeIgniter" src="http://miguelcarmona.name/wp-content/uploads/2010/01/codeigniter_logo-e1262900174656.png" alt="codeIgniter" width="325" height="301" /></p>
<p><a href="http://codeigniter.com/wiki/Modular_Extensions_-_HMVC/">HMVC</a> es un &#8220;plugin&#8221; que nos permite pogramar módulos bajo el framework <a href="http://codeigniter.com">codeigniter</a>.</p>
<p>En un principio, la librería nos permite tener para cada módulo los controladores, modelos, vistas y librerías que necesitemos. Es una librería realmente potente ya que incluso nos permite cargar la salida de una función de un controlador en otro controlador.<br />
<span id="more-293"></span><br />
<span style="text-decoration: underline;">Página y archivo de descarga:</span><br />
<a href="http://codeigniter.com/wiki/Modular_Extensions_-_HMVC/">http://codeigniter.com/wiki/Modular_Extensions_-_HMVC/</a></p>
<p><span style="text-decoration: underline;">Instalación:</span></p>
<p>Copiamos todos los archivos (Controller.php, Modules.php y MY_Router.php) en la ruta application/libraries.</p>
<p>Una vez copiados dichos archivos, creamos una carpeta llamada modules dentro de application y en su interior crearemos los módulos necesarios. Cada módulo deberá tener varias carpetas: config, controllers, models, libraries y views.</p>
<p>Lógicamente, dentro de controllers, meteremos los controladores, así como en las respectivas carpetas.</p>
<p><span style="text-decoration: underline;">Funcionamiento básico:</span></p>
<p>Si el nombre y clase del controlador tiene el mismo nombre que la carpeta del módulo, este se llamará automáticamente cuando accedamos sólo especificando el nombre del módulo (ej: http://miaplicacion/modulo ó http://miaplicacion/modulo/funcion). En caso contrario, para acceder a dicho controlador lo haríamos así: http://miaplicacion/modulo/clase/funcion</p>
<p>La carpeta config sólo nos servirá (de momento) para:</p>
<ul>
<li> autoload.php: funcionamiento como el de codeigniter. Nos servirá para cargar automáticamente las librerías, modelos&#8230; necesarios para el módulo.</li>
<li>routes.php: funcionamiento como el de codeigniter. Nos servirá para hacer la configuración de rutas y redirecciones para dicho módulo.</li>
</ul>
<p>Cuando llamamos a una librería, modelo o vista, por defecto se busca dentro de la carpeta del módulo y si no se encuentra las busca en application y si tampoco las encuenta busca ya en último lugar en system.</p>
<p><span style="text-decoration: underline;">Métodos básicos de funcionamiento:</span></p>
<p>El funcionamiento de cada módulo es como si fuese una aplicación diferente para cada uno.</p>
<p>Podemos recojer la salida del controlador/vista de otro módulo y guardarla o mostrarla según nos convenga (sólo para la versión php5). Sería como llamar a una vista pasándole como tercer parámetro TRUE.</p>

<div class="wp_codebox"><table><tr id="p293144"><td class="code" id="p293code144"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$retorno</span> <span style="color: #339933;">=</span> modules<span style="color: #339933;">::</span><span style="color: #004000;">run</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'modulo/controlador/funcion/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$parametro1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$parametro2</span><span style="color: #339933;">,</span> <span style="color: #000088;">$parametro</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Podemos cargar también un controlador como si fuese una librería:</p>

<div class="wp_codebox"><table><tr id="p293145"><td class="code" id="p293code145"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">module</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'modulo/controlador'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$parametro1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$parametro2</span><span style="color: #339933;">,</span> <span style="color: #000088;">$parametro</span><span style="color: #339933;">...</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$retorno</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">controlador</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">funcion</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Aunque lo carguemos como una librería, el controlador cargado seguirá llamando a sus modelos, vistas y demás como si fuese independiente.</p>
<p>Para modelos, vistas y librerías, el funcionamiento es tal cual a codeigniter y podemos acceder a otros módulos anteponiendo el nombre del módulo al archivo:</p>

<div class="wp_codebox"><table><tr id="p293146"><td class="code" id="p293code146"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">model</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'modulo/modelo_model'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>En la página de la librería podemos encontrar algunos módulos ya desarrollados como una galería fotográfica, captcha, etc&#8230;</p>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/retornar-una-vista-en-vez-de-mostrarla-codeigniter" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/codeigniter_logo-e1262900174656.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/retornar-una-vista-en-vez-de-mostrarla-codeigniter" target="_top">retornar una vista en vez de mostrarla - codeIgniter</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/depuracion-y-rendimiento-de-una-aplicacion-en-php-y-por-supuesto-codeigniter" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/php-quick-profiler-540x332.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/depuracion-y-rendimiento-de-una-aplicacion-en-php-y-por-supuesto-codeigniter" target="_top">Depuración y rendimiento de una aplicación en php (y por supuesto codeIgniter)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/acceso-a-consola-de-nuestro-servidor-web" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/02/php.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/acceso-a-consola-de-nuestro-servidor-web" target="_top">Acceso a consola de nuestro servidor web</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/tutorial-rapido-de-jquery" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2011/06/jquery.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/tutorial-rapido-de-jquery" target="_top">Tutorial rápido de jQuery</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/crear-copias-de-seguridad-en-servidor-web-de-hosting-mediante-php" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/02/php.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/crear-copias-de-seguridad-en-servidor-web-de-hosting-mediante-php" target="_top">Crear copias de seguridad en servidor web de hosting mediante php</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/blog/hmvc-sistema-modular-en-codeigniter/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Triggers (disparadores) en mySQL</title>
		<link>http://miguelcarmona.name/blog/triggers-disparadores-en-mysql</link>
		<comments>http://miguelcarmona.name/blog/triggers-disparadores-en-mysql#comments</comments>
		<pubDate>Fri, 18 Dec 2009 19:01:29 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=274</guid>
		<description><![CDATA[Hoy en día, prácticamente todos los motores de bases de datos populares y en mantenimiento incorporan una gran utilidad llamada triggers. Esta utilidad viene a ser como una acción a realizar automáticamente cuando hagamos una manual. Básicamente un trigger realiza una acción cuando hacemos un insert, update o delete sobre una tabla determinada (a la [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy en día, prácticamente todos los motores de bases de datos populares y en mantenimiento incorporan una gran utilidad llamada triggers. Esta utilidad viene a ser como una acción a realizar automáticamente cuando hagamos una manual.</p>
<p>Básicamente un trigger realiza una acción cuando hacemos un insert, update o delete sobre una tabla determinada (a la que le hemos asignado dicho trigger).</p>
<p>Partamos de un ejemplo y lo explico:<br />
<span id="more-274"></span></p>

<div class="wp_codebox"><table><tr id="p274150"><td class="code" id="p274code150"><pre class="sql" style="font-family:monospace;">DELIMITER <span style="color: #66cc66;">|</span>
&nbsp;
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TRIGGER</span> mailtransport_insert AFTER <span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">ON</span> mail_domain
	<span style="color: #993333; font-weight: bold;">FOR</span> EACH ROW BEGIN
		<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> mail_transport
			<span style="color: #66cc66;">&#40;</span>sys_userid<span style="color: #66cc66;">,</span> sys_groupid<span style="color: #66cc66;">,</span> sys_perm_user<span style="color: #66cc66;">,</span> sys_perm_group<span style="color: #66cc66;">,</span> server_id<span style="color: #66cc66;">,</span> domain_id<span style="color: #66cc66;">,</span> domain<span style="color: #66cc66;">,</span>
			transport<span style="color: #66cc66;">,</span> sort_order<span style="color: #66cc66;">,</span> active<span style="color: #66cc66;">&#41;</span>
		<span style="color: #993333; font-weight: bold;">VALUES</span>
			<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'ruid'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'ruid'</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">100</span><span style="color: #66cc66;">,</span> NEW<span style="color: #66cc66;">.</span>domain_id<span style="color: #66cc66;">,</span> NEW<span style="color: #66cc66;">.</span>domain<span style="color: #66cc66;">,</span> concat<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'smtp:mail.'</span><span style="color: #66cc66;">,</span> NEW<span style="color: #66cc66;">.</span>domain<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'y'</span><span style="color: #66cc66;">&#41;</span>;
	END
<span style="color: #66cc66;">|</span>
&nbsp;
DELIMITER ;</pre></td></tr></table></div>

<ul>
<li>Empezamos definiendo que el delimitador de fin de línea sql es &#8216;|&#8217;.</li>
<li>Creamos un trigger en la tabla mailtransport_insert de forma que se &#8216;lance&#8217; posteriormente a la inserción de algún dato en dicha tabla.</li>
<li>Indicamos que para cada inserción que se realice (FOR EACH ROW BEGIN), debe realizar lo que haya en el interior del bucle (hasta END).</li>
</ul>
<p>Como veis, es realmente sencillo e intuitivo. Si os fijáis en los valores a insertar dentro del bucle, veréis que hay unos campos con &#8216;NEW.&#8217; delante. Esto quiere decir que debe recoger el nuevo valor para ese campo (osease, el que hemos insertado).</p>
<p>Para terminar, deberemos volver a definir el delimitador de fin de sentencia sql a &#8216;;&#8217; (que suele ser el valor por defecto). Si no hubiésemos cambiado el delimitador al principio, justo al llegar a la línea de VALUES antes de END se hubiese ejecutado la consulta, y al estar sin terminar, nos hubiese retornado un estrepitoso error de sentencia mysql.</p>
<p>Como indiqué al principio, este <em>&#8220;lanzador&#8221;</em> podemos utilizarlo también para actualizaciones (UPDATE) y eliminaciones (DELETE). Os dejo un ejemplo de cada:</p>

<div class="wp_codebox"><table><tr id="p274151"><td class="code" id="p274code151"><pre class="sql" style="font-family:monospace;">DELIMITER <span style="color: #66cc66;">|</span>
&nbsp;
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TRIGGER</span> mailtransport_update AFTER <span style="color: #993333; font-weight: bold;">UPDATE</span> <span style="color: #993333; font-weight: bold;">ON</span> mail_domain
	<span style="color: #993333; font-weight: bold;">FOR</span> EACH ROW BEGIN
		<span style="color: #993333; font-weight: bold;">UPDATE</span> mail_transport
		<span style="color: #993333; font-weight: bold;">SET</span>
			domain <span style="color: #66cc66;">=</span> NEW<span style="color: #66cc66;">.</span>domain<span style="color: #66cc66;">,</span>
			transport <span style="color: #66cc66;">=</span> concat<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'smtp:mail.'</span><span style="color: #66cc66;">,</span> NEW<span style="color: #66cc66;">.</span>domain<span style="color: #66cc66;">&#41;</span>
		<span style="color: #993333; font-weight: bold;">WHERE</span>
			domain_id <span style="color: #66cc66;">=</span> NEW<span style="color: #66cc66;">.</span>domain_id;
	END
<span style="color: #66cc66;">|</span>
&nbsp;
DELIMITER ;</pre></td></tr></table></div>


<div class="wp_codebox"><table><tr id="p274152"><td class="code" id="p274code152"><pre class="sql" style="font-family:monospace;">DELIMITER <span style="color: #66cc66;">|</span>
&nbsp;
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TRIGGER</span> mailtransport_delete BEFORE <span style="color: #993333; font-weight: bold;">DELETE</span> <span style="color: #993333; font-weight: bold;">ON</span> mail_domain
	<span style="color: #993333; font-weight: bold;">FOR</span> EACH ROW BEGIN
		<span style="color: #993333; font-weight: bold;">DELETE</span> <span style="color: #993333; font-weight: bold;">FROM</span> mail_transport <span style="color: #993333; font-weight: bold;">WHERE</span> domain <span style="color: #66cc66;">=</span> OLD<span style="color: #66cc66;">.</span>domain;
	END
<span style="color: #66cc66;">|</span>
&nbsp;
DELIMITER ;</pre></td></tr></table></div>

<p>Para aquellos a los que le pique la curiosidad de el porqué de esos nombres de tablas, diré en mi defensa que es para que cada vez que se de de alta un nuevo correo electrónico (en el panel de control de ispconfig versión 3), lo añada en la tabla de transportes con un id de servidor 100.</p>
<p>Básicamente es porque me vi en la necesidad de poner un servidor de reserva de correo, de forma que si el principal caía, el servidor de reserva recogía el correo y lo almacenaba hasta que el principal estuviese de nuevo &#8220;online&#8221;.</p>
<p>Así pues, gracias a openVPN y a la replicación de tablas de mysql, en cuestión de un par de horas tenía el sistema funcionando correctamente, sin tener que hacer ningún cambio en el servidor principal, y teniendo el servidor de reserva &#8220;auto actualizado&#8221; fácilmente sin tener que hacer cambios en el código de dicho panel.</p>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/insertar-valores-retornados-desde-un-select-en-ms-sql" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/insertar-valores-retornados-desde-un-select-en-ms-sql" target="_top">Insertar valores retornados desde un select en MS SQL</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/dns_ico.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/mydns-servidor-dns-alternativo-a-bind-con-datos-en-mysql" target="_top">MyDNS: Servidor DNS alternativo a bind con datos en mysql</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/funciones-para-mssql-microsft-sql-server" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/funciones-para-mssql-microsft-sql-server" target="_top">Funciones para mssql (Microsft SQL Server)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/05/pxe-suse10.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/instalacion-de-opensuse-por-red-mediante-tftp-pxe" target="_top">Instalación de openSuse por red mediante tftp-pxe</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/servidor-lamp-en-opensuse" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/01/lamp.gif&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/servidor-lamp-en-opensuse" target="_top">Servidor LAMP en openSuse</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/blog/triggers-disparadores-en-mysql/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Previsualización de datos de un formulario &#8220;en vivo&#8221;</title>
		<link>http://miguelcarmona.name/blog/previsualizacion-de-datos-de-un-formulario-en-vivo</link>
		<comments>http://miguelcarmona.name/blog/previsualizacion-de-datos-de-un-formulario-en-vivo#comments</comments>
		<pubDate>Mon, 23 Nov 2009 22:02:55 +0000</pubDate>
		<dc:creator>miguelcarmona</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[webDesign]]></category>

		<guid isPermaLink="false">http://miguelcarmona.name/?p=249</guid>
		<description><![CDATA[He recibido alguna que otra pregunta sobre qué plugin utilizo para la previsualización de los comentarios antes de enviarlos. La respuesta es bien sencilla, ninguno. Para realizar esta hazaña, utilizamos javascript, mediante el cual, le indicamos que cada vez que se presione una tecla, coja el contenido de lo que estemos escribiendo y lo inserte [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_250" class="wp-caption aligncenter" style="width: 550px"><a title="previsualización de comentario en &quot;vivo&quot;" href="http://miguelcarmona.name/wp-content/uploads/2009/11/previsualizacion-de-comentario-en-vivo.jpg"><img class="size-medium wp-image-250 " title="previsualización de comentario en &quot;vivo&quot;" src="http://miguelcarmona.name/wp-content/uploads/2009/11/previsualizacion-de-comentario-en-vivo-540x337.jpg" alt="previsualización de comentario en &quot;vivo&quot;" width="540" height="337" /></a><p class="wp-caption-text">previsualización de comentario en &quot;vivo&quot;</p></div>
<p>He recibido alguna que otra pregunta sobre qué plugin utilizo para la previsualización de los comentarios antes de enviarlos. La respuesta es bien sencilla, ninguno.</p>
<p>Para realizar esta hazaña, utilizamos javascript, mediante el cual, le indicamos que cada vez que se presione una tecla, coja el contenido de lo que estemos escribiendo y lo inserte en el área de previsualización. Algo que parece complejo, pero que no lo es.<br />
<span id="more-249"></span><br />
Bueno, comencemos:</p>
<p>Necesitamos un formulario (voy a imitar un típico formulario de contacto) y un área de previsualización (la voy a poner justo a la derecha del formulario).</p>
<p><code></p>

<div class="wp_codebox"><table><tr id="p249156"><td class="code" id="p249code156"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Previsualización de formulario en &quot;vivo&quot;&lt;/title&gt;
		&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
		&lt;style type=&quot;text/css&quot;&gt;
			body { margin: 10px; text-align: center; width: 100%; }
			#contenedor { margin: 0 auto; width: 900px; text-align: left; }
			.flotando { float: left; width: 445px;	}
			p{ margin: 2px 0 10px 0; }
			.margen-derecho { margin-right: 10px; }
			input, textarea { width: 99%; margin-bottom: 10px; float: none; clear: both; }
			textarea { height: 300px; }
			label { float: none; clear: both; display: inline; }
			.titulo { font-size: 14pt; }
			.negrita { font-weight: bold; }
		&lt;/style&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;div id=&quot;contenedor&quot;&gt;
			&lt;div id=&quot;formulario&quot; class=&quot;flotando margen-derecho&quot;&gt;
				&lt;form action=&quot;#&quot; enctype=&quot;multipart/form-data&quot;&gt;
					&lt;label for=&quot;nombre&quot;&gt;Su nombre&lt;/label&gt;
					&lt;input type=&quot;text&quot; name=&quot;nombre&quot; id=&quot;nombre&quot; /&gt;
&nbsp;
					&lt;label for=&quot;email&quot;&gt;Su correo electrónico&lt;/label&gt;
					&lt;input type=&quot;text&quot; name=&quot;email&quot; id=&quot;email&quot; /&gt;
&nbsp;
					&lt;label for=&quot;mensaje&quot;&gt;Su mensaje&lt;/label&gt;
					&lt;textarea id=&quot;mensaje&quot;&gt;&lt;/textarea&gt;
				&lt;/form&gt;
			&lt;/div&gt;
			&lt;div id=&quot;previsualizacion&quot; class=&quot;flotando&quot;&gt;
				&lt;fieldset&gt;
					&lt;legend&gt;Previsualización de mensaje:&lt;/legend&gt;
					&lt;p class=&quot;titulo&quot;&gt;Mensaje de &lt;span id=&quot;preview_name&quot; class=&quot;negrita&quot;&gt;Anónimo&lt;/span&gt; (&lt;span id=&quot;preview_email&quot;&gt;&lt;/span&gt;)&lt;/p&gt;
					&lt;span id=&quot;preview_text&quot;&gt;&lt;/span&gt;
				&lt;/fieldset&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p></code></p>
<p>Ahora necesitamos crear un script en javascript que coja el contenido de cada campo y lo inserte en la previsualización. Para ello vamos a usar algunas funciones de javascript:</p>
<ul>
<li>document.getElementById</li>
</ul>
<p>Esta &#8220;función&#8221; nos permite serializar como objeto una etiqueta html a la cual le hemos puesto un identificador (id).<br />
Podemos aplicar varias acciones a este objeto como obtener su valor (document.getElementById(&#8216;id&#8217;).value). En nuestro caso vamos a utilizar innerhtml que básicamente sirve para establecer el contenido de dicho objeto (osease, el contenido de esta etiqueta)</p>
<ul>
<li>replace</li>
</ul>
<p>Esta función nos permite reemplazar un contenido. Es parecida a la función str_replace() de php salvo que sólo reemplaza la primera coincidencia (salvo que se lo indiquemos).</p>
<p>Así pues, procedamos a realizar el script para la previsualización del texto:</p>

<div class="wp_codebox"><table><tr id="p249157"><td class="code" id="p249code157"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> liveComment_text<span style="color: #009900;">&#40;</span>texto<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	texto <span style="color: #339933;">=</span> texto.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/n/gi</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'&lt;br /&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'preview_text'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> texto<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Recibimos el texto y lo primero que hacemos es reemplazar todos los saltos de línea (n) por saltos de línea en html. Al indicarle gi estamos diciéndole que reemplace todos los caracteres encontrados (no sólo el primero que encuentre).<br />
Posteriormente, creamos un objeto con el id de etiqueta &#8216;preview_text&#8217;, de forma que insertamos en su interior el texto (ya reemplazado).</p>
<p>Y básicamente eso. No hay más. Esa es toda la ciencia.<br />
Lógicamente ya jugaremos con las funciones que necesitemos, así como con los campos necesarios.</p>
<p>Aquí el código de cómo quedaría el código final</p>

<div class="wp_codebox"><table><tr id="p249158"><td class="code" id="p249code158"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Previsualización de formulario en &quot;vivo&quot;&lt;/title&gt;
		&lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
		&lt;style type=&quot;text/css&quot;&gt;
			body { margin: 10px; text-align: center; width: 100%; }
			#contenedor { margin: 0 auto; width: 900px; text-align: left; }
			.flotando { float: left; width: 445px;	}
			p{ margin: 2px 0 10px 0; }
			.margen-derecho { margin-right: 10px; }
			input, textarea { width: 99%; margin-bottom: 10px; float: none; clear: both; }
			textarea { height: 300px; }
			label { float: none; clear: both; display: inline; }
			.titulo { font-size: 14pt; }
			.negrita { font-weight: bold; }
		&lt;/style&gt;
&nbsp;
		&lt;script type=&quot;text/javascript&quot;&gt;
			function liveComment_name(texto)
			{
				if( texto == '' ) texto = 'Anónimo';
				document.getElementById('preview_name').innerHTML = texto;
			}
&nbsp;
			function liveComment_email(texto)
			{
				document.getElementById('preview_email').innerHTML = texto;
			}
&nbsp;
			function liveComment_text(texto)
			{
				texto = texto.replace(/n/gi,'&lt;br /&gt;');
				document.getElementById('preview_text').innerHTML = texto;
			}
		&lt;/script&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;div id=&quot;contenedor&quot;&gt;
			&lt;div id=&quot;formulario&quot; class=&quot;flotando margen-derecho&quot;&gt;
				&lt;form action=&quot;#&quot; enctype=&quot;multipart/form-data&quot;&gt;
					&lt;label for=&quot;nombre&quot;&gt;Su nombre&lt;/label&gt;
					&lt;input type=&quot;text&quot; name=&quot;nombre&quot; id=&quot;nombre&quot; onkeyup=&quot;liveComment_name(this.value)&quot; /&gt;
&nbsp;
					&lt;label for=&quot;email&quot;&gt;Su correo electrónico&lt;/label&gt;
					&lt;input type=&quot;text&quot; name=&quot;email&quot; id=&quot;email&quot; onkeyup=&quot;liveComment_email(this.value)&quot; /&gt;
&nbsp;
					&lt;label for=&quot;mensaje&quot;&gt;Su mensaje&lt;/label&gt;
					&lt;textarea id=&quot;mensaje&quot; onkeyup=&quot;liveComment_text(this.value)&quot;&gt;&lt;/textarea&gt;
				&lt;/form&gt;
			&lt;/div&gt;
			&lt;div id=&quot;previsualizacion&quot; class=&quot;flotando&quot;&gt;
				&lt;fieldset&gt;
					&lt;legend&gt;Previsualización de mensaje:&lt;/legend&gt;
					&lt;p class=&quot;titulo&quot;&gt;Mensaje de &lt;span id=&quot;preview_name&quot; class=&quot;negrita&quot;&gt;Anónimo&lt;/span&gt; (&lt;span id=&quot;preview_email&quot;&gt;&lt;/span&gt;)&lt;/p&gt;
					&lt;span id=&quot;preview_text&quot;&gt;&lt;/span&gt;
				&lt;/fieldset&gt;
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>Os dejo la vista previa del ejemplo: <a href="http://miguelcarmona.name/scripts_propios/previsualizacion-de-formulario-en-vivo/">http://miguelcarmona.name/scripts_propios/previsualizacion-de-formulario-en-vivo/</a></p>
<div id="wp_thumbie" style= "border: 0pt none ; margin: 0pt; padding: 0pt; clear: both;"><div id="wp_thumbie_rl1"><h3>Relacionados:</h3></div><ul class="wp_thumbie_ul_list" style="list-style-type: none;"><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/compresor-de-codigo-javascript" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/javascript2.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/compresor-de-codigo-javascript" target="_top">Compresor de código javascript</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/manejo-habitual-de-lvm-volumenes-logicos" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/plugins/wp-thumbie/images/default.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/manejo-habitual-de-lvm-volumenes-logicos" target="_top">Manejo habitual de LVM (volúmenes lógicos)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/tutorial-rapido-de-jquery" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2011/06/jquery.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/tutorial-rapido-de-jquery" target="_top">Tutorial rápido de jQuery</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/blog/despertar-equipo-por-la-red-wake-on-lan-wol" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2008/10/ipcop-wol-gui_wake_on_lan_gui-540x321.jpg&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/blog/despertar-equipo-por-la-red-wake-on-lan-wol" target="_top">Despertar equipo por la red (wake on lan WOL)</a></div><p id="description"></p></li><li id="wp_thumbie_li" style="height:74px;"><div id="wp_thumbie_image"><a href="http://miguelcarmona.name/notas-y-recortes/comandos-basicos-en-postfix-para-manejar-la-cola-de-correo" target="_top"><img id="wp_thumbie_thumb" src="http://miguelcarmona.name/wp-content/plugins/wp-thumbie/timthumb.php?src=/wp-content/uploads/2010/05/postfix-540x490.png&w=70&h=70&zc=1"/></a></div><div id="wp_thumbie_title"><a href="http://miguelcarmona.name/notas-y-recortes/comandos-basicos-en-postfix-para-manejar-la-cola-de-correo" target="_top">Comandos básicos en Postfix para manejar la cola de correo</a></div><p id="description"></p></li></ul><div id="wp_thumbie_rl2"><small>By </small><a href="http://www.blogsdna.com"><small>Blogsdna</small></a></div></div><div class="clear"></div>]]></content:encoded>
			<wfw:commentRss>http://miguelcarmona.name/blog/previsualizacion-de-datos-de-un-formulario-en-vivo/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

