<?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>IPCorp Blog &#187; Sistemas Operativos</title>
	<atom:link href="http://www.ipcorp.com.ar/blog/category/sistemas-operativos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ipcorp.com.ar/blog</link>
	<description>#pg_dump ideas &#62; blog.log</description>
	<lastBuildDate>Fri, 11 Nov 2011 20:18:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Script para recorrer archivos html y encontrar las clases</title>
		<link>http://www.ipcorp.com.ar/blog/2011/06/17/script-para-recorrer-archivos-html-y-encontrar-las-clases/</link>
		<comments>http://www.ipcorp.com.ar/blog/2011/06/17/script-para-recorrer-archivos-html-y-encontrar-las-clases/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 15:56:59 +0000</pubDate>
		<dc:creator>Carlos Mathiasen</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Lenguajes de Programación]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>

		<guid isPermaLink="false">http://www.ipcorp.com.ar/blog/?p=1060</guid>
		<description><![CDATA[Me vinieron con un problema bastante bueno ayer: &#8220;Necesito que elimines las clases que no se usan en el archivo .css&#8221;, la verdad parece no complicarse mucho, el problema se agrava un poco cuando ten&#233;s unos cuantos archivos html. Por curiosidad se me ocurri&#243; contar los archivos:

  find /proyectos/app/ -name *.erb -exec ls -l [...]]]></description>
			<content:encoded><![CDATA[<p>Me vinieron con un problema bastante bueno ayer: &#8220;Necesito que elimines las clases que no se usan en el archivo .css&#8221;, la verdad parece no complicarse mucho, el problema se agrava un poco cuando ten&eacute;s unos cuantos archivos html. Por curiosidad se me ocurri&oacute; contar los archivos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  <span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #000000; font-weight: bold;">/</span>proyectos<span style="color: #000000; font-weight: bold;">/</span>app<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #660033;">-name</span> <span style="color: #000000; font-weight: bold;">*</span>.erb <span style="color: #660033;">-exec</span> <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #7a0874; font-weight: bold;">&#125;</span> \; <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">wc</span> <span style="color: #660033;">-l</span>
  <span style="color: #666666; font-style: italic;">#busco todos los que terminan en .erb, porque es un proyecto en Rails</span></pre></div></div>

<p>Me di&oacute; la m&oacute;dica suma de 444 archivos. Ahora si se complicaba demasiado hacerlo a mano.<br />
Me puse a incursionar un poco en bash y sali&oacute; esto:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">a</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">find</span> $<span style="color: #000000;">1</span> <span style="color: #660033;">-name</span> <span style="color: #ff0000;">&quot;*.erb&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>; <span style="color: #666666; font-style: italic;">#busco los archivos y guardo los paths en una lista</span>
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #007800;">$a</span>; <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #666666; font-style: italic;">#recorro la lista</span>
   <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #007800;">$i</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">egrep</span> <span style="color: #ff0000;">'class=&quot;'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-F</span> <span style="color: #ff0000;">'class='</span> <span style="color: #ff0000;">'{print $2}'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-F</span> <span style="color: #ff0000;">'&quot;'</span> <span style="color: #ff0000;">'{print $2}'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-F</span> <span style="color: #ff0000;">' '</span> <span style="color: #ff0000;">'{for (j=1; j&lt;=NF; j++)  print $j; print &quot;\n&quot;}'</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> clases.txt
<span style="color: #000000; font-weight: bold;">done</span>  
&nbsp;
<span style="color: #c20cb9; font-weight: bold;">sort</span> clases.txt <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> clases2.txt <span style="color: #666666; font-style: italic;">#ordeno el archivo y lo guardo en otro</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> clases.txt <span style="color: #666666; font-style: italic;">#elimino el primer archivo</span>
<span style="color: #c20cb9; font-weight: bold;">uniq</span> <span style="color: #660033;">-u</span> clases2.txt <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> clases.txt <span style="color: #666666; font-style: italic;">#borro las l&amp;iacute;neas duplicadas (ya que las clases no son &amp;uacute;nicas)</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> clases2.txt <span style="color: #666666; font-style: italic;">#elimino el archivo auxiliar</span></pre></div></div>

<p>La tercer linea del script la explico aca abajo, sino no se iba a entender nada</p>
<p><strong>cat $i:</strong> muestra el contenido del path que le estamos pasando.<br />
<strong> egrep &#8216;class=&#8221;&#8216;:</strong> Me muestra solo las l&iacute;neas que contienen &#8216;class=&#8221;&#8216;, que es como definimos una clase en html.<br />
<strong> awk -F &#8216;class=&#8217; &#8216;{print $2}&#8217;:</strong>Hago como un split a un string separando por &#8216;class=&#8217; y mostrando solo el segundo valor, es decir todas las clases que tenga ese tag.<br />
<strong>awk -F &#8216;  &#8216;  &#8216;{for (j=1; j<=NF; j++)  print $j; print "\n"}':</strong> Como ya tenemos en una sola l&iacute;nea todas las clases de un tag, y sabemos que las clases se separan con un espacio, hacemos nuestro split por espacios y recorremos todas las variables y las vamos imprimiendo con un salto de linea al final. Esto nos har&iacute;a una lista con todas las clases que existan en los archivos html.<br />
Despu&eacute;s habriendo el archivo clases.txt, vemos las clases ordenadas y &uacute;nicas <img src='http://www.ipcorp.com.ar/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Quiz&aacute; se pueda costumizar más, no usar 2 archivos sino solo uno. Tambi&eacute;n se podria recorrer el archivo .css y compararlo con nuestro archivo, eliminando las l&iacute;neas que necesitamos. Pero para salir del apuro anda perfecto. Y si queremos encontrar los id, es cuesti&oacute;n de reemplazar la b&uacute;squeda nom&aacute;, aunque me tira algunos datos sucios, ya que también se usa en javascript y en ruby, entonces por ahi se complicaba un poco m&aacute;s, pero les dejo como tarea para la casa jeje<br />
Bueno espero les pueda servir y cualquier consulta no duden en comentar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ipcorp.com.ar/blog/2011/06/17/script-para-recorrer-archivos-html-y-encontrar-las-clases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Detectando una dirección IP en conflicto a través de Linux.</title>
		<link>http://www.ipcorp.com.ar/blog/2010/05/11/detectando-una-ip-en-conflicto-con-linux/</link>
		<comments>http://www.ipcorp.com.ar/blog/2010/05/11/detectando-una-ip-en-conflicto-con-linux/#comments</comments>
		<pubDate>Tue, 11 May 2010 14:05:40 +0000</pubDate>
		<dc:creator>marcelo</dc:creator>
				<category><![CDATA[Sistemas Operativos]]></category>

		<guid isPermaLink="false">http://www.ipcorp.com.ar/blog/?p=703</guid>
		<description><![CDATA[En redes grandes y sin control es muy común encontrarse con IP duplicadas, si bien es un problema sencillo de resolver &#8220;Cuando lo encontramos&#8221;; suele causar dolores de cabeza hasta los mas experimentados administradores  que muchas veces recurren a soluciones tales como:

Cortar segmentos de la red.
Comprar software costosos.
Incorporar Hardware tipo cazafantasmas con luces psicodélicas.
Enviar memos [...]]]></description>
			<content:encoded><![CDATA[<p>En redes grandes y sin control es muy común encontrarse con IP duplicadas, si bien es un problema sencillo de resolver <em>&#8220;Cuando lo encontramos&#8221;</em>; suele causar dolores de cabeza hasta los mas experimentados administradores  que muchas veces recurren a soluciones tales como:</p>
<ul>
<li>Cortar segmentos de la red.</li>
<li>Comprar software costosos.</li>
<li>Incorporar Hardware tipo cazafantasmas con luces psicodélicas.</li>
<li>Enviar memos y reprimir a los empleados que no son de sistemas, que no tienen la mas mínima idea de lo que es una dirección de IP.</li>
</ul>
<p>Si en nuestra red tenemos una pc con linux esto es muy sencillo de resolver, el paquete se llama: <a href="http://en.wikipedia.org/wiki/Arping" target="_blank"><strong>arping</strong></a>.</p>
<p>Pasos para utilizarlo:</p>
<p>1) Instalación</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> arping</pre></div></div>

<p>2) Uso</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> arping <span style="color: #660033;">-I</span> eth0  192.168.0.1
&nbsp;
ARPING 192.168.0.1
<span style="color: #000000;">60</span> bytes from 00:<span style="color: #000000;">26</span>:<span style="color: #000000;">55</span>:<span style="color: #000000;">36</span>:ec:a1 <span style="color: #7a0874; font-weight: bold;">&#40;</span>192.168.0.1<span style="color: #7a0874; font-weight: bold;">&#41;</span>: <span style="color: #007800;">index</span>=<span style="color: #000000;">0</span> <span style="color: #007800;"><span style="color: #000000; font-weight: bold;">time</span></span>=<span style="color: #000000;">74.863</span> usec
<span style="color: #000000;">60</span> bytes from 00:1a:<span style="color: #000000;">92</span>:4e:4c:9e <span style="color: #7a0874; font-weight: bold;">&#40;</span>192.168.0.1<span style="color: #7a0874; font-weight: bold;">&#41;</span>: <span style="color: #007800;">index</span>=<span style="color: #000000;">1</span> <span style="color: #007800;"><span style="color: #000000; font-weight: bold;">time</span></span>=<span style="color: #000000;">160.933</span> usec</pre></div></div>

<p>Como se puede observar  el problema aquí es una IP duplicada asociada a dispositivos de red diferentes (placa de red, switch, router).</p>
<p>Su utilidad principal es hacer ping a direcciones mac, por ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> arping <span style="color: #660033;">-I</span> eth0  00:<span style="color: #000000;">26</span>:<span style="color: #000000;">55</span>:2e:<span style="color: #000000;">95</span>:EE
&nbsp;
ARPING 00:<span style="color: #000000;">26</span>:<span style="color: #000000;">55</span>:2e:<span style="color: #000000;">95</span>:EE
<span style="color: #000000;">98</span> bytes from 192.168.0.1 <span style="color: #7a0874; font-weight: bold;">&#40;</span>00:<span style="color: #000000;">26</span>:<span style="color: #000000;">55</span>:2e:<span style="color: #000000;">95</span>:EE<span style="color: #7a0874; font-weight: bold;">&#41;</span>: <span style="color: #007800;">icmp_seq</span>=<span style="color: #000000;">2738</span> <span style="color: #007800;"><span style="color: #000000; font-weight: bold;">time</span></span>=<span style="color: #000000;">771.392</span> msec
<span style="color: #000000;">98</span> bytes from 192.168.0.1 <span style="color: #7a0874; font-weight: bold;">&#40;</span>00:<span style="color: #000000;">26</span>:<span style="color: #000000;">55</span>:2e:<span style="color: #000000;">95</span>:EE<span style="color: #7a0874; font-weight: bold;">&#41;</span>: <span style="color: #007800;">icmp_seq</span>=<span style="color: #000000;">2740</span> <span style="color: #007800;"><span style="color: #000000; font-weight: bold;">time</span></span>=<span style="color: #000000;">770.830</span> msec</pre></div></div>

<p>Esto ultimo resulta interesante de utilizarlo en redes WIFI. Entonces, de manera muy sencilla y sin costos adicionales resolvimos un problema  con Linux, espero les sea útil esta información.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ipcorp.com.ar/blog/2010/05/11/detectando-una-ip-en-conflicto-con-linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Salvando sistemas con SystemRescue y VirtualBox</title>
		<link>http://www.ipcorp.com.ar/blog/2010/02/01/salvando-sistemas-con-systemrescue-y-virtualbox/</link>
		<comments>http://www.ipcorp.com.ar/blog/2010/02/01/salvando-sistemas-con-systemrescue-y-virtualbox/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 05:50:21 +0000</pubDate>
		<dc:creator>marcelo</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[system rescue]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://www.ipcorp.com.ar/blog/?p=614</guid>
		<description><![CDATA[
Los héroes de esta historia son  dos:

SystemRescue
VirtualBox

El primero es una LiveDistro es decir una distribución de Linux que se ejecuta en el arranque sin instalarse en un disco duro. Un comentario al margen respecto de esto es que en nuestro país Argentina se encuentra una de las primeras LiveDistro del Planeta y lleva el [...]]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;">Los héroes de esta historia son  dos:</p>
<ul>
<li><a href=" http://www.sysresccd.org" target="_blank">SystemRescue</a></li>
<li><a href=" http://www.virtualbox.org" target="_blank">VirtualBox</a></li>
</ul>
<p style="margin-bottom: 0cm;">El primero es una LiveDistro es decir una distribución de Linux que se ejecuta en el arranque sin instalarse en un disco duro. Un comentario al margen respecto de esto es que en nuestro país Argentina se encuentra una de las primeras LiveDistro del Planeta y lleva el nombre de UTUTO, además de ser la primer Distribución reconocida totalmente libre por el proyecto GNU.</p>
<p style="margin-bottom: 0cm;"><span id="more-614"></span></p>
<p style="margin-bottom: 0cm;">Volviendo a SystemRescue en particular la uso por el Kit de herramientas necesarias para cuando ocurre lo peor, una de estas herramientas que me agrada mucho utilizar es Partimage http://www.partimage.org, por medio de esta podemos crear imágenes comprimidas en Bzip2 o Gzip de particiones (ext2/3, ntfs, fat32,etc) y luego restaurarlas.Entonces si tengo una imagen de mi sistema esto me permitira clonarlo en otra maquina sin mayores problemas y si es una maquina virtual con VirtualBox mucho mejor.</p>
<p style="margin-bottom: 0cm;">Aqui nos detendremos a darle su mencion a VirtualBox que si bien hoy por hoy es parte del imperio Oracle, no deja de ser una herramienta útil, simple y actualizada. Entre las importantes cualidades que tiene para mi son: Multiplataforma y exportación Appliance.</p>
<p style="margin-bottom: 0cm;">Por lo tanto la idea es salvar sistemas de la siguiente manera:</p>
<ol>
<li>Booteo la maquina que quiero salvar con SystemRescue</li>
<li>Una vez SystemRescue termino de levantar y me dio una Consola, ejecuto Partimage</li>
<li>Con Partimage voy a crear imágenes del Sistema que estará en algunos de los discos presentes (Generalmente suele ser /dev/hda o /dev/sda).</li>
<li>La imagen resultante la copiare en otro medio, por ejemplo un disco extraíble de buena capacidad.</li>
<li>Instalo en otra maquina VirtualBox y creo una maquina Virtual.</li>
<li>En esa maquina virtual hago que arranque SystemRescue.</li>
<li>En la maquina virtual que contendrá un disco virtual restauro en el por medio de partimage la imagen del sistema creada en el punto 3.</li>
<li>Se necesitara también restaurar el masterboot récord de la imagen a la maquina virtual.</li>
<li>Reiniciamos nuestra maquina virtual y tendremos nuestro sistema clonado y listo para sincronizarlo o ponerlo en producción directamente.</li>
</ol>
<p style="margin-bottom: 0cm;">Espero les sea útil este Post y dejen sus comentarios de las experiencias que tengan.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ipcorp.com.ar/blog/2010/02/01/salvando-sistemas-con-systemrescue-y-virtualbox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ubuntu 9.10: bug en Palimpsest, herramienta de análisis de disco</title>
		<link>http://www.ipcorp.com.ar/blog/2009/11/11/ubuntu-9-10-bug-en-palimpsest-herramienta-de-analisis-de-disco/</link>
		<comments>http://www.ipcorp.com.ar/blog/2009/11/11/ubuntu-9-10-bug-en-palimpsest-herramienta-de-analisis-de-disco/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 13:32:04 +0000</pubDate>
		<dc:creator>cecilia</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>

		<guid isPermaLink="false">http://ipcorp.com.ar/blog/?p=556</guid>
		<description><![CDATA[Hace unos días actualicé a Ubuntu 9.10, y al finalizar apareció un mensaje que indicaba que mi disco tenía muchos sectores erróneos.
Uno de mis compañeros intentó detectar los sectores erróneos con System Rescue, y reportó que estaba todo bien.
Buscando encontré un foro en ubuntu-es que planteaba el mismo problema (http://www.ubuntu-es.org/?q=node/120405).
Resultó ser un bug, pueden verlo [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unos días actualicé a Ubuntu 9.10, y al finalizar apareció un mensaje que indicaba que mi disco tenía muchos sectores erróneos.</p>
<p>Uno de mis compañeros intentó detectar los sectores erróneos con System Rescue, y reportó que estaba todo bien.</p>
<p>Buscando encontré un foro en ubuntu-es que planteaba el mismo problema (<a href="http://www.ubuntu-es.org/?q=node/120405" target="_blank">http://www.ubuntu-es.org/?q=node/120405</a>).</p>
<p>Resultó ser un bug, pueden verlo reportado en <a href="https://bugs.launchpad.net/ubuntu/+source/libatasmart/+bug/438136" target="_blank">https://bugs.launchpad.net/ubuntu/+source/libatasmart/+bug/438136</a>.</p>
<p>Afortunadamente, no tuve que cambiar el disco.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ipcorp.com.ar/blog/2009/11/11/ubuntu-9-10-bug-en-palimpsest-herramienta-de-analisis-de-disco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exportando archivos de texto a PDF de forma masiva con Linux</title>
		<link>http://www.ipcorp.com.ar/blog/2009/09/02/exportando-archivos-de-texto-a-pdf-de-forma-masiva-con-linux/</link>
		<comments>http://www.ipcorp.com.ar/blog/2009/09/02/exportando-archivos-de-texto-a-pdf-de-forma-masiva-con-linux/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 03:29:23 +0000</pubDate>
		<dc:creator>alfredo</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>

		<guid isPermaLink="false">http://ipcorp.com.ar/blog/?p=160</guid>
		<description><![CDATA[Si bien pasar archivos de texto plano a PDF en Linux no requiere mayor esfuerzo que la simple acción de mandar a imprimir de cualquier editor de texto como Gedit o KWrite , se vuelve un poco más complicado si tenemos una cierta cantidad de ellos.
Para evitarme el trabajo de hacerlo manualmente me puse a [...]]]></description>
			<content:encoded><![CDATA[<p>Si bien pasar archivos de texto plano a PDF en Linux no requiere mayor esfuerzo que la simple acción de mandar a imprimir de cualquier editor de texto como <a href="http://es.wikipedia.org/wiki/Gedit" target="_blank">Gedit</a> o <a href="http://es.wikipedia.org/wiki/KWrite" target="_blank">KWrite</a> , se vuelve un poco más complicado si tenemos una cierta cantidad de ellos.</p>
<p>Para evitarme el trabajo de hacerlo manualmente me puse a buscar una herramienta para automatizar la tarea, ya que tenía que pasar a PDF el padrón la provincia de Corrientes con electores agrupados y separados por sexo, municipios y circuitos en casi 300 archivos de texto. Haciendo un poco de investigación me topé con <a href="http://www.eprg.org/pdfcorner/text2pdf/" target="_blank">Text2PDF</a> una sencilla aplicación que permite la exportación de archivos de texto plano a PDF, esta herramienta tiene una desventaja ya que no tiene un paquete precompilado para Linux, así que tenemos que bajar el código fuente desde <a href="http://www.eprg.org/pdfcorner/text2pdf/text2pdf.c" target="_blank">acá</a> y compilarlo.</p>
<p>Para realizar la compilación necesitamos tener instalados los paquetes de desarrollo, en Ubuntu podemos hacerlo mediante aptitude</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">aptitude</span> <span style="color: #c20cb9; font-weight: bold;">install</span> build-essentials</pre></div></div>

<p>luego creamos una carpeta y bajamos el código fuente de la aplicación</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> text2pdf
<span style="color: #7a0874; font-weight: bold;">cd</span> text2pdf
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.eprg.org<span style="color: #000000; font-weight: bold;">/</span>pdfcorner<span style="color: #000000; font-weight: bold;">/</span>text2pdf<span style="color: #000000; font-weight: bold;">/</span>text2pdf.c
<span style="color: #c20cb9; font-weight: bold;">gcc</span> text2pdf.c <span style="color: #660033;">-o</span> text2pdf</pre></div></div>

<p>para mayor comodidad podemos agregar la ruta al ejecutable dentro en el PATH, ahora podemos hacer una pequeña prueba al estilo UNIX</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">text2pdf <span style="color: #660033;">-h</span> <span style="color: #000000; font-weight: bold;">|</span> text2pdf <span style="color: #000000; font-weight: bold;">&gt;</span> help.pdf</pre></div></div>

<p>Listo, resta hacer un script que recorra todos los archivos de texto dentro del directorio y que los pase a PDF, sencillo no?.</p>
<p>Vamos a ver dos maneras, una mediante uno de mis lenguajes favoritos: <a href="www.ruby-lang.org/es/" target="_blank">ruby</a> y la otra mediante BASH por si no quieren instalar ruby.</p>
<p>Primero vamos con Ruby, en un archivo llamado <em>text2pdfmasivo.rb</em> escribimos lo siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC00FF; font-weight:bold;">Dir</span>.<span style="color:#9900CC;">glob</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;*.txt&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">each</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>file<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#CC0066; font-weight:bold;">system</span> <span style="color:#996600;">&quot;text2pdf &quot;</span><span style="color:#008000; font-style:italic;">#{file} &gt; #{file}.pdf&quot; }</span></pre></div></div>

<p>con <em>Dir.glob(&#8221;*.txt&#8221;)</em> filtramos y obtenemos un array con todos los archivos txt y luego lo recorremos, con el comando <em>system</em> hacemos podemos ejecutar programas externos y para poder ejecutarlo usamos el intérprete de ruby</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ruby text2pdfmasivo.rb</pre></div></div>

<p>Ahora vamos a hacerlo con BASH, en un archivo llamado <em>text2pdfmasivo.sh</em> agregamos</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #ff0000;">&quot;ls -a -A *.txt $1&quot;</span>
<span style="color: #000000; font-weight: bold;">do</span>
text2pdf <span style="color: #007800;">$i</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$i</span>.pdf&quot;</span>
<span style="color: #000000; font-weight: bold;">done</span>;</pre></div></div>

<p>La lógica es exactamente la misma que en el ejemplo anterior, le damos los permisos de ejecución necesarios y listo ya lo podemos correr.</p>
<p>Nota: no soy experto en BASH por lo que cualquier comentario para mejorar el script es bienvenido <img src='http://www.ipcorp.com.ar/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Una desventaja importante de Text2PDF es que arroja errores de segmentación para archivos grandes de aproximadamente 500 páginas o más, pero exportar ese tipo de volumen suele ser muy raro .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ipcorp.com.ar/blog/2009/09/02/exportando-archivos-de-texto-a-pdf-de-forma-masiva-con-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Averiguar memoria de video en linux</title>
		<link>http://www.ipcorp.com.ar/blog/2009/08/28/averiguar-memoria-de-video-en-linux/</link>
		<comments>http://www.ipcorp.com.ar/blog/2009/08/28/averiguar-memoria-de-video-en-linux/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 23:10:31 +0000</pubDate>
		<dc:creator>Carlos Barbiero</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[video card]]></category>

		<guid isPermaLink="false">http://ipcorp.com.ar/blog/?p=152</guid>
		<description><![CDATA[Para poder ver cuanta memoria tenemos en nuestra tarjeta gráfica en linux, utilizamos el comando &#8220;lspci&#8221; de la siguiente manera:
$ lspci
Luego nos aparece un listado del siguiente tipo:

00:00.0 Host bridge: Intel Corporation Mobile PM965/GM965/GL960 Memory Controller Hub (rev 0c)
00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)
00:02.1 Display controller: Intel Corporation [...]]]></description>
			<content:encoded><![CDATA[<p>Para poder ver cuanta memoria tenemos en nuestra tarjeta gráfica en linux, utilizamos el comando &#8220;lspci&#8221; de la siguiente manera:</p>
<pre>$ lspci</pre>
<p>Luego nos aparece un listado del siguiente tipo:<br />
<code><br />
00:00.0 Host bridge: Intel Corporation Mobile PM965/GM965/GL960 Memory Controller Hub (rev 0c)<br />
<span style="color:#FF0000">00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)</span><br />
00:02.1 Display controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)<br />
00:1a.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #4 (rev 02)<br />
00:1a.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5 (rev 02)<br />
00:1a.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2 (rev 02)<br />
00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 02)<br />
00:1c.0 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 (rev 02)<br />
00:1c.1 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 2 (rev 02)<br />
00:1c.4 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 5 (rev 02)<br />
00:1d.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 (rev 02)<br />
00:1d.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2 (rev 02)<br />
00:1d.2 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3 (rev 02)<br />
00:1d.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 02)<br />
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev f2)<br />
00:1f.0 ISA bridge: Intel Corporation 82801HEM (ICH8M) LPC Interface Controller (rev 02)<br />
00:1f.1 IDE interface: Intel Corporation 82801HBM/HEM (ICH8M/ICH8M-E) IDE Controller (rev 02)<br />
00:1f.2 SATA controller: Intel Corporation 82801HBM/HEM (ICH8M/ICH8M-E) SATA AHCI Controller (rev 02)<br />
00:1f.3 SMBus: Intel Corporation 82801H (ICH8 Family) SMBus Controller (rev 02)<br />
02:09.0 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 05)<br />
02:09.1 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 22)<br />
02:09.2 System peripheral: Ricoh Co Ltd R5C843 MMC Host Controller (rev 12)<br />
02:09.3 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 12)<br />
02:09.4 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev ff)<br />
09:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8040 PCI-E Fast Ethernet Controller (rev 12)<br />
0b:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG [Golan] Network Connection (rev 02)<br />
</code></p>
<p>Luego nos fijamos en la linea que dice <strong>VGA compatible controller</strong>, resaltada en rojo en el listado de arriba y prestamos atención a la cadena del dispositivo (00:02:0), luego simplemente ejecutamos:</p>
<p><code><br />
$ lspci -v -s 00:02.0<br />
</code></p>
<p>lo que nos da el siguiente resultado:</p>
<p><code><br />
00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)<br />
Subsystem: Dell Device 022f<br />
Flags: bus master, fast devsel, latency 0, IRQ 2297<br />
Memory at fea00000 (64-bit, non-prefetchable) [size=1M]<br />
<span style="color:green">Memory at e0000000 (64-bit, prefetchable)</span> <span style="color:#FF0000">[size=256M]</span><br />
I/O ports at eff8 [size=8]<br />
Capabilities:<br />
Kernel modules: intelfb<br />
</code></p>
<p>Para más información sobre este comando, simplemente vean el manual, tiene muchas funciones interesantes</p>
<p><code><br />
$ man lspci<br />
</code></p>
<p>Gracias a nixCraft (<a href="http://www.cyberciti.biz/faq/howto-find-linux-vga-video-card-ram/" target="_blank">http://www.cyberciti.biz/faq/howto-find-linux-vga-video-card-ram/</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ipcorp.com.ar/blog/2009/08/28/averiguar-memoria-de-video-en-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux OpenWrt en Mikrotik Routerboard 433</title>
		<link>http://www.ipcorp.com.ar/blog/2009/08/26/linux-openwrt-en-mikrotik-routerboard-433/</link>
		<comments>http://www.ipcorp.com.ar/blog/2009/08/26/linux-openwrt-en-mikrotik-routerboard-433/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 14:55:30 +0000</pubDate>
		<dc:creator>gerardo</dc:creator>
				<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Openwrt]]></category>
		<category><![CDATA[rb433u]]></category>
		<category><![CDATA[rb433uah]]></category>
		<category><![CDATA[Routerboard]]></category>

		<guid isPermaLink="false">http://ipcorp.com.ar/blog/?p=103</guid>
		<description><![CDATA[RouterBoard es una plataforma de hardware fabircada por Mikrotik, los productos RouterBoard en general vienen equipados con el sistema operativo RouterOS y existen modelos muy variados adaptados para cada situación particular. En este caso puntual tenemos un modelo RB433uah bastante nuevo con características que lo hacen interesantes para un uso bastante variado.
Tratándose de hardware no [...]]]></description>
			<content:encoded><![CDATA[<p>RouterBoard es una plataforma de hardware fabircada por Mikrotik, los productos RouterBoard en general vienen equipados con el sistema operativo RouterOS y existen modelos muy variados adaptados para cada situación particular. En este caso puntual tenemos un modelo RB433uah bastante nuevo con características que lo hacen interesantes para un uso bastante variado.<br />
Tratándose de hardware no convencional y con características un tanto particulares donde la instalación no se hace de la manera que conocemos habitualmente llevada a cabo en una Pc, lo cual no significa que no haya una distribución de Linux que pueda correr en dicho hardware, al contrario, muchos modelos comerciales, no esta marca, ya lo traen instalado y soportado oficialmente. En este caso instalamos la distribución Openwrt especialmente preparada para routers y trae entre sus profiles la posibilidad de elegir compilaciones para arquitectura Mips, que es nuestro caso.<br />
Habiendo documentación suficiente acerca de los  pormenores de la instalación de Openwrt, a propósito bastante atípica por su oprientación específica hacia routers y hardware embedded, vamos a fijarnos sólo en lo que a las particularidades que la placa Mikrotik Rb433uah  nos presenta y no será suficiente para realizar una instalación sin experiencia previa. No obstante puede tomarse la guía del link mencionado mas adelante, por ejemplo, para complementar y adaptarla a este modelo.<br />
Tomando como punto de partida este <a href="http://blog.vodkamelone.de/archives/148-Installing-OpenWrt-on-a-Microtik-Routerboard-RB433.html">post</a> y esta serie de consejos y experiencias para instalar Linux OpenWrt en la placa Mikrotik RB433UAH. Aunque aparentemente similares, internamente la rb433uah está mas emparentada con el modelo RB450 que con las 433 anteriores. Y a pesar de no estar en la lista oficial de Harware soportado, aplicando una serie de parches, se puede hacer funcionar y darle una utilidad, sobre todo para aquellos que no simpatizan con RouterOs preinstalado y licenciado por defecto al comprarla.</p>
<p>Como se puede ver el Router RB433uah es una poderosísima placa con procesador Mips de 680Mhz con overlock hasta 800Mhz, 128Mb de RAM y almacenamiento NAND Flash de 512 Mb. Con un plus de 2 puertos USB lo cual expande enormemente sus posbilidades de uso. Además equipada claro de 3 slots minipci y 3 ethernets.</p>
<p>Para este momento en particular se usa el development branch de openwrt:</p>
<pre> svn co svn://svn.openwrt.org/openwrt/packages/</pre>
<p>actualmente con kernel 2.6.30</p>
<p>Como primera medida habrá que agregar el modelo a la lista de placas soportadas, lo cual nos permitirá bootear de la misma via tftpboot y reconocer el almacenamiento NAND Flash de 512Mb donde alojar permanentemente la instalación.</p>
<p>Primero parchar los archivos mach-rb-4xx.c, prom.c y ar71xx.h:</p>
<pre>Index: target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h
===================================================================
--- target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h (revision 16741)
+++ target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h (working copy)
@@ -124,7 +124,9 @@
AR71XX_MACH_AW_NR580, /* AzureWave AW-NR580 */
AR71XX_MACH_RB_411, /* MikroTik RouterBOARD 411/411A/411AH */
AR71XX_MACH_RB_433, /* MikroTik RouterBOARD 433/433AH */
+ AR71XX_MACH_RB_433U, /* MikroTik RouterBOARD 433/433UAH */
AR71XX_MACH_RB_450, /* MikroTik RouterBOARD 450 */
+ AR71XX_MACH_RB_450G, /* MikroTik RouterBOARD 450G */
AR71XX_MACH_RB_493, /* Mikrotik RouterBOARD 493/493AH */
AR71XX_MACH_PB42, /* Atheros PB42 */
AR71XX_MACH_PB44, /* Atheros PB44 */
Index: target/linux/ar71xx/files/arch/mips/ar71xx/prom.c
===================================================================
--- target/linux/ar71xx/files/arch/mips/ar71xx/prom.c (revision 16741)
+++ target/linux/ar71xx/files/arch/mips/ar71xx/prom.c (working copy)
@@ -39,10 +39,16 @@
.name = "433",
.mach_type = AR71XX_MACH_RB_433,
}, {
- .name = "450",
+ .name = "433U",
+ .mach_type = AR71XX_MACH_RB_433U,
+ }, {
+ .name = "450",
.mach_type = AR71XX_MACH_RB_450,
}, {
- .name = "493",
+ .+ .mach_type = AR71XX_MACH_RB_450G,
+ }, {
+ .name = "493",
.mach_type = AR71XX_MACH_RB_493,
}, {
.name = "AP81",
Index: target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb-4xx.c
===================================================================
--- target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb-4xx.c (revision 16741)
+++ target/linux/ar71xx/files/arch/mips/ar71xx/mach-rb-4xx.c (working copy)
@@ -72,7 +72,7 @@
}
};

-#if 0
+#if 0
/*
* SPI device support is experimental
*/
@@ -84,7 +84,8 @@
{
.bus_num = 0,
.chip_select = 0,
- .max_speed_hz = 25000000,
+ .max_speed_hz = 33000000,
+ .mode = SPI_MODE_0,
.modalias = "m25p80",
.platform_data = &amp;rb4xx_flash_data,
}
@@ -98,13 +99,15 @@
{
.bus_num = 0,
= "450G",
.chip_select = 0,
- .max_speed_hz = 25000000,
+ .max_speed_hz = 33000000,
+ .mode = SPI_MODE_0,
.modalias = "m25p80",
- .platform_data = &amp;rb433_flash_data,
+ .platform_data = &amp;rb4xx_flash_data,
}, {
.bus_num = 0,
.chip_select = 2,
- .max_speed_hz = 25000000,
+ .max_speed_hz = 10000000,
+ .mode = SPI_MODE_0,
.modalias = "mmc_spi",
.platform_data = &amp;rb433_mmc_data,
}
@@ -113,7 +116,6 @@
static u32 rb433_spi_get_ioc_base(u8 chip_select, int cs_high, int is_on)
{
u32 ret;
-
if (is_on == AR71XX_SPI_CS_INACTIVE) {
ret = SPI_IOC_CS0 | SPI_IOC_CS1;
} else {
@@ -205,7 +207,31 @@
}

MIPS_MACHINE(AR71XX_MACH_RB_433, "MikroTik RouterBOARD 433/AH", rb433_setup);
+static void __init rb433u_setup(void)
+{
+ rb4xx_generic_setup();
+ rb433_add_device_spi();

+ ar71xx_add_device_mdio(0xffffffe9);
+
+ ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
+ ar71xx_eth0_data.phy_mask = 0x00000006;
+ ar71xx_eth0_data.speed = SPEED_100;
+ ar71xx_eth0_data.duplex = DUPLEX_FULL;
+
+ ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
+ ar71xx_eth1_data.phy_mask = 0x00000010;
+
+ ar71xx_add_device_eth(1);
+ ar71xx_add_device_eth(0);
+
+ ar71xx_add_device_usb();
+
+ ar71xx_pci_init(ARRAY_SIZE(rb4xx_pci_irqs), rb4xx_pci_irqs);
+}
+
+MIPS_MACHINE(AR71XX_MACH_RB_433U, "MikroTik RouterBOARD 433UAH", rb433u_setup);
+
static void __init rb450_setup(void)
{
rb4xx_generic_setup();
@@ -226,7 +252,27 @@
}

MIPS_MACHINE(AR71XX_MACH_RB_450, "MikroTik RouterBOARD 450", rb450_setup);
+static void __init rb450g_setup(void)
+{
+ rb4xx_generic_setup();
+ rb4xx_add_device_spi();

+ ar71xx_add_device_mdio(0xffffffe0);
+
+ ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
+ ar71xx_eth0_data.phy_mask = 0x0000000f;
+ ar71xx_eth0_data.speed = SPEED_1000;
+ ar71xx_eth0_data.duplex = DUPLEX_FULL;
+
+ ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
+ ar71xx_eth1_data.phy_mask = 0x00000010;
+
+ ar71xx_add_device_eth(1);
+ ar71xx_add_device_eth(0);
+}
+
+MIPS_MACHINE(AR71XX_MACH_RB_450G, "MikroTik RouterBOARD 450G", rb450g_setup);
+
static void __init rb493_setup(void)
{
rb4xx_generic_setup();</pre>
<p>Una vez aplicado arrancamos via tftpboot, previamente formateamos la memoria flash NAND desde la Bios:</p>
<p>comprobamos si la memoria fue detectada correctamente:</p>
<pre>
$ cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00040000 "booter"
mtd1: 003c0000 00040000 "kernel"
mtd2: 1fc00000 00040000 "rootfs"
</pre>
<p>mtd0 partición booter no nos interesa, mtd1 partición donde se guarda el kernel y finalmente partición mtd2 para filesystem raiz.</p>
<p>montamos la partición para el kernel:</p>
<pre>
root@OpenWrt:/# mount /dev/mtdblock1 /mnt/
yaffs: dev is 32505857 name is "mtdblock1"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.1, "mtdblock1"
yaffs: auto selecting yaffs2
yaffs_read_super: isCheckpointed 0

root@OpenWrt:/# ls /mnt/
lost+found

root@OpenWrt:/# df -h
Filesystem Size Used Available Use% Mounted on
tmpfs 62.1M 52.0K 62.1M 0% /tmp
tmpfs 512.0K 0 512.0K 0% /dev
/dev/mtdblock1 3.8M 2.3M 1.5M 60% /mnt

root@OpenWrt:/# find /mnt/
/mnt/
/mnt/lost+found
</pre>
<p>Aparentemente por un problema con el driver del soporte mtd la partición de 4mb aparece con 60% de espacio ocupado a pesar de estar literalmente vacía.<br />
Nuestra imagen elf del kernel generalmente tendrá 2,5 Mb o más y no habrá manera de copiarla aquí.</p>
<p>la partición raiz se ve similar:</p>
<pre>
root@OpenWrt:/# df -h
Filesystem Size Used Available Use% Mounted on
tmpfs 62.1M 40.0K 62.1M 0% /tmp
tmpfs 512.0K 0 512.0K 0% /dev
/dev/mtdblock1 3.8M 2.3M 1.5M 60% /mnt
/dev/mtdblock2 508.0M 2.3M 505.8M 0% /tmp/rootfs
</pre>
<p>Se necesitará extender mientras tanto la partición kernel de tal forma que sea posible ubicar nuestra imagen elf creada para tal fin.<br />
En la mayoría de los sistemas embebidos (<a href="http://www.ssiembedded.com/embedded_linux_managing_memory.html">http://www.ssiembedded.com/embedded_linux_managing_memory.html</a>), los dispositivos flash se usan directamente sin tabla de particiones, como otras memorias tales como las CF, que emulan discos duros. El driver de mapeo MTD  provee funciones para leer/escribir en la memoria flash y aquí es donde se especifica una estructura de partición harcodeada. Vemos a continuación una porción del archivo rb4xx_nand.c que nos interesa:</p>
<p>Archivo trunk/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c:</p>
<pre>
static struct mtd_partition rb4xx_nand_partitions[] = {
{
.name   = "booter",
.offset = 0,
.size   = (256 * 1024),
.mask_flags = MTD_WRITEABLE,
},
{
.name   = "kernel",
.offset = (256 * 1024),
.size   = (4 * 1024 * 1024) - (256 * 1024),
},
{
.name   = "rootfs",
.offset = MTDPART_OFS_NXTBLK,
.size   = MTDPART_SIZ_FULL,
},
};
</pre>
<p>incrementamos el tamaño de la partición kernel a 8mb con el siguiente parche:</p>
<pre>
Index: trunk/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c
===================================================================
--- trunk/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c (revision 16778)
+++ trunk/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c (working copy)
@@ -92,7 +92,7 @@
{
.name = "kernel",
.offset = (256 * 1024),
- .size = (4 * 1024 * 1024) - (256 * 1024),
+ .size = (8 * 1024 * 1024) - (256 * 1024),
},
{
.name = "rootfs",
</pre>
<p>Recompilamos y booteamos Openwrt. Ahora la tabla de particiones se ve un poco diferente:</p>
<pre>
root@OpenWrt:~# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00040000 "booter"
mtd1: 007c0000 00040000 "kernel"
mtd2: 1f800000 00040000 "rootfs"

root@OpenWrt:/# df -h
Filesystem                Size      Used Available Use% Mounted on
tmpfs                    62.1M     40.0K     62.0M   0% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/mtdblock1            7.8M      2.3M      5.5M  29% /mnt
</pre>
<p>Con espacio suficiente para ubicar la imagen elf del kernel openwrt.</p>
<p>Siguiente paso montamos las particiones:</p>
<pre>
root@OpenWrt:/# mkdir /tmp/kernel
root@OpenWrt:/# mkdir /tmp/rootfs
root@OpenWrt:/# mount /dev/mtdblock1 /tmp/kernel/
root@OpenWrt:/# mount /dev/mtdblock2 /tmp/rootfs
</pre>
<p>debería verse asi:</p>
<pre>
root@OpenWrt:/# df -h
Filesystem                Size      Used Available Use% Mounted on
tmpfs                    62.1M     40.0K     62.0M   0% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/mtdblock1            7.8M      2.3M      5.5M  29% /tmp/kernel
/dev/mtdblock2          504.0M      2.3M    501.8M   0% /tmp/rootfs
</pre>
<p>Finalmente compiamos la imagen openwrt-ar71xx-vmlinux.elf del kernel con el nombre &#8220;kernel&#8221; y desempaquetamos openwrt-ar71xx-rootfs.tgz en rootfs por ej con:</p>
<pre>
root@OpenWrt:/# tar -xzvf openwrt-ar71xx-rootfs.tgz -C /tmp/rootfs
root@OpenWrt:/# umount /tmp/kernel
root@OpenWrt:/# umount /tmp/rootfs
root@OpenWrt:/# reboot
</pre>
<p>Tenemos Openwrt completamente funcional.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ipcorp.com.ar/blog/2009/08/26/linux-openwrt-en-mikrotik-routerboard-433/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>¿Quién está detrás del Kernel?</title>
		<link>http://www.ipcorp.com.ar/blog/2009/08/20/%c2%bfquien-esta-detras-del-kernel/</link>
		<comments>http://www.ipcorp.com.ar/blog/2009/08/20/%c2%bfquien-esta-detras-del-kernel/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 15:07:23 +0000</pubDate>
		<dc:creator>marcelo</dc:creator>
				<category><![CDATA[Sistemas Operativos]]></category>

		<guid isPermaLink="false">http://ipcorp.com.ar/blog/?p=75</guid>
		<description><![CDATA[En abril de 2008 La Fundación Linux publicó un pequeño informe estadístico sobre el desarrollo del kernel. En el mismo se puso de manifiesto una serie de consideraciones acerca del sagrado core usado diariamente por millones  de ordenadores en el mundo, tales como : ¿Cuántas líneas de código tiene el kernel?, ¿Cuántas líneas se [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">En abril de 2008 La Fundación Linux publicó un pequeño informe estadístico sobre el desarrollo del kernel. En el mismo se puso de manifiesto una serie de consideraciones acerca del sagrado core usado diariamente por millones  de ordenadores en el mundo, tales como : ¿Cuántas líneas de código tiene el kernel?, ¿Cuántas líneas se borraron o cuántas nuevas hay respecto del año anterior?, ¿Quiénes son los sponsors? y otros datos significativos.</p>
<p style="text-align: left;">Los números entonces eran los siguientes:</p>
<p style="text-align: left;">- 8.859.683 líneas de código, con un 10% de crecimiento por año    3621 líneas se añaden por día, provocando esto que se anuncie un nuevo release cada 2.7 meses.</p>
<p style="text-align: left;">- Cada día aproximadamente 1000 desarrolladores de más de 100 corporaciones trabajan en el desarrollo, de estos el 70 por ciento trabajan en empresas reconocidas tales como:IBM, Intel, The Linux Foundation, MIPS Technology, MontaVista, Movial, NetApp, Novell y Red Hat.</p>
<p style="text-align: left;">Lamentablemente este informe ya está obsoleto, y es por esto que la Fundación Linux publicó un informe en el día de ayer, 19 de agosto del 2009, con nuevos datos en base al kernel 2.6.30, los números son:</p>
<table border="0">
<tbody>
<tr>
<td>- 11.560.971 líneas de código, con un aumento de 2.701.288 líneas en el último año y medio. 10.923 líneas se añaden diariamente, en contraposición a esto 5.547 líneas son removidas, garantizando con esto un código de alta calidad.</p>
<p>- Un promedio de 5.45 patches son aceptados por hora lo cual incrementa 42 por ciento más desde el estudio pasado. Este paso acelerado se atribuye a la nueva demanda de Linux en mercados emergentes tales como netbooks.</td>
<td>
<p style="text-align: left;"><img class="size-thumbnail wp-image-91 alignright" title="kernel-core" src="http://ipcorp.com.ar/blog/wp-content/uploads/2009/08/kernel-core3-150x150.jpg" alt="kernel-core" width="150" height="150" /></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: left;">- Aproximadamente 1000 desarrolladores de 200 compañías diferentes trabajan en el núcleo, lo que representa un incremento del 10% respecto del 2008. El 70% de las contribuciones viene de desarrolladores Red Hat, IBM, Novell, Intel, Oracle, Fujitsu y otras muchas empresas de menor talla.</p>
<p style="text-align: left;">- El principal contribuyente individual es David Miller, y la nota particular es que Linus Torvalds ya no se encuentra dentro de los mayores aportantes,  pero esto no tiene que sorprender dado el rol administrativo que lleva.</p>
<p style="text-align: left;">Nunca antes en la historia de la computación ha habido tantas empresas, usuarios y desarrolladores unidos detrás de un mismo proyecto.</p>
<p style="text-align: left;">El texto completo de ambos informes se encuentra disponible en los siguientes links:</p>
<p style="text-align: left;"><a href="http://linux-foundation.org/weblogs/press/2008/03/31/linux-foundation-publishes-study-on-linux-development-statistics-who-writes-linux-and-who-supports-it/">Informe Linux Foundation Marzo 2008<br />
</a></p>
<p style="text-align: left;"><a href="http://linux-foundation.org/weblogs/press/2009/08/19/linux-foundation-updates-study-on-linux-development-statistics-who-writes-linux-and-who-supports-it/">Informe Linux Foundation Agosto 2009 </a></p>
<p style="text-align: left;">Correcciones: @mariana_cecilia</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ipcorp.com.ar/blog/2009/08/20/%c2%bfquien-esta-detras-del-kernel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Montar particiones a través de la red con SSH</title>
		<link>http://www.ipcorp.com.ar/blog/2009/07/20/montar-particiones-a-traves-red-con-ssh/</link>
		<comments>http://www.ipcorp.com.ar/blog/2009/07/20/montar-particiones-a-traves-red-con-ssh/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 21:06:11 +0000</pubDate>
		<dc:creator>alfredo</dc:creator>
				<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>

		<guid isPermaLink="false">http://ipcorp.com.ar/blog/?p=51</guid>
		<description><![CDATA[SSHFS es un desarrollo independente al del paquete openssh que nos permite montar particiones a través de la red de manera segura a través de SSH y se instala como una aplicación separada. En sistemas derivados de Debian podemos instalarlo con apt-get.

sudo apt-get install sshfs

Ahora podemos montar cualquier disco remoto utilizando el siguiente comando:

sshfs nombreusuario@servidor:/ruta/del/directorio [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.k4ch0.net/blog/wp-content/uploads/2009/07/26openssh.png" align="right" width="194" height="191" />SSHFS es un desarrollo independente al del paquete <em>openssh</em> que nos permite montar particiones a través de la red de manera segura a través de <em>SSH</em> y se instala como una aplicación separada. En sistemas derivados de Debian podemos instalarlo con apt-get.</p>
<pre>
sudo apt-get install sshfs
</pre>
<p>Ahora podemos montar cualquier disco remoto utilizando el siguiente comando:</p>
<pre>
sshfs nombreusuario@servidor:/ruta/del/directorio /directorio/destino
</pre>
<p>Un aclaración importante es que si montamos una partición a través de Internet, tenemos que tener en cuenta el proceso extra que requiere el encriptamiento de la comunicación, SSHFS puede ser <strong>LENTO</strong> si tenemos que trabajar con muchos archivos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ipcorp.com.ar/blog/2009/07/20/montar-particiones-a-traves-red-con-ssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter desde el  Bash</title>
		<link>http://www.ipcorp.com.ar/blog/2009/07/20/twitter-desde-el-bash/</link>
		<comments>http://www.ipcorp.com.ar/blog/2009/07/20/twitter-desde-el-bash/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 04:48:37 +0000</pubDate>
		<dc:creator>marcelo</dc:creator>
				<category><![CDATA[Sistemas Operativos]]></category>

		<guid isPermaLink="false">http://ipcorp.com.ar/blog/?p=49</guid>
		<description><![CDATA[Investigando un poco la API de twitter (http://apiwiki.twitter.com), me di cuenta que es muy sencillo utilizarla desde mi consola con curl (http://curl.haxx.se). Se me ocurren muchas cosas que se pueden realizar  a partir de esto, desde un monitor de procesos hasta un aviso de que prendiste tu linux. 


Aca van los ejemplos:
curl --basic --user username:password [...]]]></description>
			<content:encoded><![CDATA[<p align="left">Investigando un poco la API de twitter (http://apiwiki.twitter.com), me di cuenta que es muy sencillo utilizarla desde mi consola con curl (http://curl.haxx.se). Se me ocurren muchas cosas que se pueden realizar  a partir de esto, desde un monitor de procesos hasta un aviso de que prendiste tu linux.<a href="http://ipcorp.com.ar/blog/wp-content/uploads/2009/07/twitter.jpg" title="twitter-Bash"> </a></p>
<p><a href="http://ipcorp.com.ar/blog/wp-content/uploads/2009/07/twitter.jpg" title="twitter-Bash"></a></p>
<p style="text-align: center"><a href="http://ipcorp.com.ar/blog/wp-content/uploads/2009/07/twitter.jpg" title="twitter-Bash"><img src="http://ipcorp.com.ar/blog/wp-content/uploads/2009/07/twitter.thumbnail.jpg" alt="twitter-Bash" /></a></p>
<p align="left">Aca van los ejemplos:</p>
<p><code>curl --basic --user username:password --data status="Twitter desde mi consola <img src='http://www.ipcorp.com.ar/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> " http://twitter.com/statuses/update.xml</code></p>
<p>Explicacion de los parametros</p>
<ol>
<li><code>--basic --user username:password . Usuario y password que usas para twitter<br />
</code></li>
<li><code>--data status="</code><code>Twitter desde mi consola:D</code><code>" . Actualizacion de tu estado en twitter.</code></li>
<li><code>http://twitter.com/statuses/update.xml . Ah no olvidar esto, URL de la API.<br />
</code></li>
</ol>
<p>Otra opcion puede ser  con Wget  (http://www.gnu.org/software/wget.</p>
<p>Ejemplo</p>
<p><code>wget --keep-session-cookies --http-user=miusuario --http-password=mipassword --post-data="status=Actualizo con Wget:D" http://twitter.com:80/statuses/update.xml</code></p>
<p><a href="http://ipcorp.com.ar/blog/wp-content/uploads/2009/07/twitter.jpg" title="twitter-Bash"><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ipcorp.com.ar/blog/2009/07/20/twitter-desde-el-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

