<?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>dottoNetto &#187; Sistemas Operativos</title>
	<atom:link href="http://dottonetto.com/home/category/sistemas-operativos/feed/" rel="self" type="application/rss+xml" />
	<link>http://dottonetto.com/home</link>
	<description>Programación, tecnología y un poco de todo</description>
	<lastBuildDate>Thu, 07 Mar 2013 10:40:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Unsecure RAW TCP compressed file transmission using netcat (or nc)</title>
		<link>http://dottonetto.com/home/2013/03/unsecure-raw-tcp-compressed-file-transmission-using-netcat-or-nc/</link>
		<comments>http://dottonetto.com/home/2013/03/unsecure-raw-tcp-compressed-file-transmission-using-netcat-or-nc/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 10:27:08 +0000</pubDate>
		<dc:creator>ajaest</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[gunzip]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nc]]></category>
		<category><![CDATA[netcat]]></category>
		<category><![CDATA[networking]]></category>

		<guid isPermaLink="false">http://dottonetto.com/home/?p=1584</guid>
		<description><![CDATA[Unsecure RAW TCP compressed file transmission using netcat (or nc)]]></description>
			<content:encoded><![CDATA[<p>In the server side:</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>system<span style="color: #000000; font-weight: bold;">@</span>pc<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ nc <span style="color: #660033;">-v</span> <span style="color: #660033;">-l</span> <span style="color: #000000;">10000</span>  <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">gzip</span> <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">&gt;</span> output.file</pre></td></tr></table></div>

</p>
<p>
Some details about the arguments and tools:</p>
<ul>
<li><tt>nc</tt>: the BSD netcat tool implementation. There exists a GNU implementation often refered as <tt>gnu-netcat</tt> or <tt>netcat-traditional</tt> that can be launched either using the <tt>nc</tt> command or the <tt>netcat</tt> one.</li>
<li><tt>-l</tt>: listen to incoming TCP transmissions by default bounded to the default localhost hostname. A bounding hostname can be specified after the port number</li>
<li><tt>-v</tt>: verbose output through <tt>stderr</tt> output stream</li>
<li><tt>10000</tt>: the listening port</li>
<li><tt>gzip -d</tt>: the gunzip compressor, the option <tt>-d</tt> sets it in decompressing mode. Since it has no more arguments, the compressed stream is extracted from the pipe and sink to the <tt>stdout</tt> stream.</li>
<li><tt>&gt; output.file</tt>: redirects <tt>stdout</tt> stream to the file <tt>output.file</tt> in current working directory.
</li>
</ul>
<p>
Then in the client side:</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>system<span style="color: #000000; font-weight: bold;">@</span>pc<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ <span style="color: #c20cb9; font-weight: bold;">cat</span> file.input <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">gzip</span> <span style="color: #000000; font-weight: bold;">|</span> nc <span style="color: #660033;">-v</span> <span style="color: #660033;">-w</span> <span style="color: #000000;">30</span> myserver.domain.net <span style="color: #000000;">10000</span></pre></td></tr></table></div>

</p>
<p>About non previously commented arguments and commands:</p>
<ul>
<li><tt>cat file.input |</tt>: display <tt>file.input</tt> content through the standard output stream and redirect it throug pipe.</li>
<li><tt>gzip |</tt>: without commands, compress data stream received from pipe and displays it through the standard output stream. It then redirects this output through pipe.</li>
<li><tt>| nc -v</tt>: transmits raw TCP packages generated from content received from pipe and display verbosed information.</li>
<li><tt> -w 30</tt>: timeout. If the pipe input stream is idle for more than 30 seconds or no connection can be established in that time the process is terminated. If no value is specified, there&#8217;s no timeout.</li>
<li><tt>myserver.domain.net 10000</tt>: the destination host name or IP address is <tt>myserver.domain.net</tt> and the listening port is <tt>10000</tt>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dottonetto.com/home/2013/03/unsecure-raw-tcp-compressed-file-transmission-using-netcat-or-nc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reparando paquetes de software en una distribución Linux basada en RPM</title>
		<link>http://dottonetto.com/home/2012/05/reparando-paquetes-de-software-en-una-distribucion-linux-basada-en-rpm/</link>
		<comments>http://dottonetto.com/home/2012/05/reparando-paquetes-de-software-en-una-distribucion-linux-basada-en-rpm/#comments</comments>
		<pubDate>Tue, 22 May 2012 19:33:57 +0000</pubDate>
		<dc:creator>ajaest</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[reparar]]></category>
		<category><![CDATA[rpm. linux]]></category>
		<category><![CDATA[yum]]></category>

		<guid isPermaLink="false">http://dottonetto.com/home/?p=1509</guid>
		<description><![CDATA[Ejemplos de como recuperar fácilmente paquetes, archivos o componentes de software en una distribución Linux basada en RPM como Fedora, SUSe, Mandriva o Mageia.]]></description>
			<content:encoded><![CDATA[<p>En Linux en ocasiones las cosas simplemente empiezan a funcionar mal y, a no ser que se alineen los astros, recuperar un archivo o una configuración al estado en el que estaban las cosas antes de romperse se vuelve misión imposible. En estos casos a veces lo más fácil es revertir el componente de software que falla al estado original y volver a reconfigurarlo de nuevo.</p>
<p>El problema que puede aparecer en este punto es que o no sabemos que es exactamente lo que se ha roto o simplemente no sabemos a que paquete pertenece el archivo que se queremos reinstalar. Para ello viene en nuestra ayuda dos opciones de RPM tremendamente útiles.</p>
<h3>¿Qué se ha estropeado?</h3>
<p>Imaginemos que leyendo a través de un log o de cualquier otra manera hemos averiguado que el problema está involucrado de alguna manera con la librería <code>/usr/lib/awt-gen-aas/12345-2345-libAsd.so</code>. El problema es que con un nombre como ese no tenemos manera de saber a que paquete pertenece. Para solucionar esto podemos hacer una query rpm sobre el archivo para conocer a que paquete pertenece de la siguiente manera, pudiéndonos devolver algo parecido a los siguiente:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>machine<span style="color: #000000; font-weight: bold;">@</span>user ~<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rpm <span style="color: #660033;">-qf</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>awt-gen-aas<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">12345</span>-<span style="color: #000000;">2345</span>-libAsd.so
rhythmbox-2.90.1-<span style="color: #000000;">17</span>.git20110927.fc16.x86_64
<span style="color: #7a0874; font-weight: bold;">&#91;</span>machine<span style="color: #000000; font-weight: bold;">@</span>user ~<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ _</pre></div></div>

</p>
<p>Por fin sabemos que el paquete que falla es <code>rhythmbox-2.90.1-17.git20110927.fc16.x86_64</code>, que es Rhythmbox. La opción <code>-q</code> o <code>--query</code> especifica que queremos imprimir información sobre un paquete RPM y la opción <code>-f</code> o <code>--file</code> que queremos que se haga sobre un archivo</p>
<p>El comportamiento por defecto es imprimir el nombre del paquete consultado, pero puede configurarse la cadena de salida en base a muchísimas opciones con la opción <a href="http://www.rpm.org/max-rpm-snapshot/rpm.8.html#AEN19665" title="man rpm" target="_blank"><code>----queryformat</code></a>.</p>
<h3>¿Por qué se ha roto?</h3>
<p>Una vez localizado el paquete conflictivo, estamos un pasito más cerca de solucionar el problema. Quizás antes de reinstalar todo el paquete nos puede interesar comprobar qué es exactamente lo que se ha estropeado por si tuviese fácil solución. En ocasiones, por ejemplo, el error puede deberse a un archivo que cambió de privilegios o que cambio de usuario o grupo, en cuyo caso la solución es bastante sencilla.</p>
<p>
Vamos entonces usar la opción <code>-V</code> de RPM para comprobar si algún elemento del paquete <code>rhythmbox-2.90.1-17.git20110927.fc16.x86_64</code> está fallando. Algo parecido a lo siguiente podría salir:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>machine<span style="color: #000000; font-weight: bold;">@</span>user ~<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rpm <span style="color: #660033;">-V</span> <span style="color: #ff0000;">'rhythmbox-2.90.1-17.git20110927.fc16.x86_64'</span>
S........  c <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>rhythmboc.conf
.M.......  d <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>doc<span style="color: #000000; font-weight: bold;">/</span>rhythmbox-2.90.1<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">help</span>
..<span style="color: #000000;">5</span>......  g <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>rhythmbox.log
...D.....  l <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>doc<span style="color: #000000; font-weight: bold;">/</span>rhythmbox-2.90.1<span style="color: #000000; font-weight: bold;">/</span>LICENSE
....L....  r <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>doc<span style="color: #000000; font-weight: bold;">/</span>rhythmbox-2.90.1<span style="color: #000000; font-weight: bold;">/</span>README
.....UG..    <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>rhythmbox<span style="color: #000000; font-weight: bold;">/</span>library1.so
.......T.    <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>rhythmbox<span style="color: #000000; font-weight: bold;">/</span>library2.so
........P    <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>rhythmbox<span style="color: #000000; font-weight: bold;">/</span>library3.so
SM5DLUGTP    <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>rhythmbox<span style="color: #000000; font-weight: bold;">/</span>library4.so
missing      <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>rhythmbox<span style="color: #000000; font-weight: bold;">/</span>library5.so
<span style="color: #7a0874; font-weight: bold;">&#91;</span>machine<span style="color: #000000; font-weight: bold;">@</span>user ~<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ _</pre></div></div>

</p>
<p>La opción <code>-V</code> o <code>--verify</code> comprueba el paquete comparando los archivos de éste cuando estaba recién instalado con el estado de los archivos actualmente en busca de diferencias. Aquellos archivos con conflictos potenciales son mostrados y el resto ignorados</p>
<p>La información se muestra en tres columas:</p>
<ul>
<li>La primera columna es un conjunto de 0 a 9 caracteres que señalan las divergencias con el archivo original encontradas. Sus significados son:
<ul>
<li><code>S</code>: difiere el tamaño del archivo con respecto al original</li>
<li><code>M</code>: difieren los permisos de acceso al archivo con respecto al original</li>
<li><code>5</code>: difiere la suma de verificación MD5 con respecto al original</li>
<li><code>D</code>: difieren los números mayor y menor del dispositivo/driver con respecto al original</li>
<li><code>L</code>: difiere la ruta del enlace simbólico relacionado al archivo original</li>
<li><code>U</code>: difiere el usuario propietario del archivo con respecto al original</li>
<li><code>G</code>: difiere el grupo propietario del archivo con respecto al original</li>
<li><code>T</code>: la fecha de modificación del archivo con respecto al original</li>
<li><code>P</code>: difiere alguna de las dependencias dependencias del archivo con respecto al original</li>
<li><code>missing</code>: el archivo ha desaparecido del sistema de archivos</li>
</ul>
</li>
<li>La siguiente columna nos informa de qué tipo fue marcado el archivo en el paquete original, las opciones son:
<ul>
<li><i>vacío</i>: el archivo es un fichero regular</li>
<li><code>c</code>: el archivo es un fichero de configuración</li>
<li><code>g</code>: el archivo es in fichero fantasma o ghost, esto es, pertenecen al paquete pero no venían en este o estaban destinado a ser modificados. Un ejemplo de este tipo de archivos son los ficheros de log</li>
<li><code>l</code>: el archivo es un fichero de texto con el contenido de la licencia</li>
<li><code>r</code>: el archivo es un fichero de texto con el README del paquete</li>
</ul>
</li>
</ul>
<p>Existe también una opción muy interesante para extender la acción de la mayoría de los comandos de RPM a todos los paquetes instalados con el modificador <code>-a</code>. Esto nos permite hacer cosas tan molonas como obtener todos los archivos de todos los paquetes que tienen algun problema específico usando <code>grep</code>. Por ejemplo, podemos obtener todos archivos de todos los paquetes del sistema que fallan en la suma md5 con el siguiente comando:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>machine<span style="color: #000000; font-weight: bold;">@</span>user ~<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rpm <span style="color: #660033;">-Va</span><span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">grep</span> ^..<span style="color: #000000;">5</span></pre></div></div>

</p>
<h3>Vale, ¡Pero esto sigue sin funcionar!</h3>
<p>Hemos revisado todos los ficheros a conciencia, nos hemos hartado y hemos decidido reinstalar el paquete entero. Tenemos varias alternativas para borrar los paquetes o reinstalarlos automáticamente dependiendo de la distribución, pero la opción multiplataforma es usando el modificador <code>-e</code> de rpm:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>machine<span style="color: #000000; font-weight: bold;">@</span>user ~<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rpm <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'rhythmbox-2.90.1-17.git20110927.fc16.x86_64'</span></pre></div></div>

</p>
<p>El modificador <code>-e</code> desinstala un paquete de manera segura, hasta aquí nada del otro mundo. Lo interesante del funcionamiento de esta opción es que los archivos de configuración que desde la instalación del paquete fueron modificados no serán borrados, sino que seran renombrados en el mismo directorio con las extensiones <code>.rpmorig</code>, <code>.rpmsave</code> o similar. De esta manera, cuando reinstalemos de nuevo el paquete con nuestro sistema de gestión de repositorios preferido tendremos tanto el archivo antiguo como el nuevo para realizar la instalación.</p>
<p>El último paso es instalar el paquete de nuevo. Si lo hacemos desde un archivo <code>.rpm</code>, sería tan sencillo como lo que sigue:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>machine<span style="color: #000000; font-weight: bold;">@</span>user ~<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ rpm <span style="color: #660033;">-i</span> <span style="color: #ff0000;">'rhythmbox-2.90.1-17.git20110927.fc16.x86_64.rpm'</span></pre></div></div>

</p>
<p>O en Fedora desde repositorios:</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">&#91;</span>machine<span style="color: #000000; font-weight: bold;">@</span>user ~<span style="color: #7a0874; font-weight: bold;">&#93;</span>$ yum <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #ff0000;">'rhythmbox-2.90.1-17.git20110927.fc16.x86_64'</span></pre></div></div>
</p>
]]></content:encoded>
			<wfw:commentRss>http://dottonetto.com/home/2012/05/reparando-paquetes-de-software-en-una-distribucion-linux-basada-en-rpm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
