<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-30957194</id><updated>2012-01-20T01:43:38.804+01:00</updated><title type='text'>Mis recetas favoritas con Linux y Python</title><subtitle type='html'>Recetas prácticas para Linux y Python (en ocasiones podemos utilizar otros ingredientes)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default?start-index=101&amp;max-results=100'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>101</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-30957194.post-4993988524261376601</id><published>2011-07-13T10:39:00.002+02:00</published><updated>2011-07-13T10:41:30.469+02:00</updated><title type='text'>Limitando las conexiones entrantes con IPtables</title><content type='html'>Perfecto para servidores de correo, securizar SSH, etc&lt;br /&gt;&lt;br /&gt;Ejemplo para SSH&lt;br /&gt;&lt;span style="font-style:italic;"&gt;iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set&lt;br /&gt;iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 120 --hitcount 5 -j DROP&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para SMTP&lt;br /&gt;&lt;span style="font-style:italic;"&gt;iptables -I INPUT -p tcp --dport 25 -i eth0 -m state --state NEW -m recent --set&lt;br /&gt;iptables -I INPUT -p tcp --dport 25 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-4993988524261376601?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/4993988524261376601/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=4993988524261376601' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/4993988524261376601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/4993988524261376601'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2011/07/limitando-las-conexiones-entrantes-con.html' title='Limitando las conexiones entrantes con IPtables'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-2086463863203597011</id><published>2010-07-07T12:31:00.002+02:00</published><updated>2010-07-07T12:33:56.231+02:00</updated><title type='text'>Borrando links en linux creados con ln</title><content type='html'>Para borrar un link en linux creado con &lt;span style="font-style:italic;"&gt;ln -s&lt;/span&gt; no siempre sirve un &lt;span style="font-style:italic;"&gt;rm&lt;/span&gt;, ya que puede seguir la ruta del fichero destino.&lt;br /&gt;&lt;br /&gt;La forma segura de eliminar los enlaces simbólicos es con el comando &lt;span style="font-style:italic;"&gt;unlink&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;unlink nombre_enlace&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-2086463863203597011?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/2086463863203597011/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=2086463863203597011' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/2086463863203597011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/2086463863203597011'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2010/07/borrando-links-en-linux-creados-con-ln.html' title='Borrando links en linux creados con ln'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-6927627568618632694</id><published>2009-08-08T22:17:00.003+02:00</published><updated>2009-08-08T22:25:11.149+02:00</updated><title type='text'>Linux: Caché LDAP, autentificación desconectada</title><content type='html'>Cuando hemos configurado la autentificación del sistema contra un servidor LDAP, a priori, si no estamos conectados a la red, no podremos iniciar sesión con el usuario LDAP que corresponda. &lt;br /&gt;Para solucionar esto podemos crear un script que se ejecute el inicio del sistema que volcará el contenido que nos interese del servidor LDAP a modo de caché, permitiéndonos autentificar el equipo cuando no estemos conectados a la red o el servidor LDAP sea inaccesible.&lt;br /&gt;&lt;br /&gt;El contenido el script es el siguiente:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;nss_updatedb ldap passwd&lt;br /&gt;nss_updatedb ldap group&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Si el comando nss_updatedb no existe en el sistema debemos instalar el paquete correspondiente (&lt;span style="font-style:italic;"&gt;nss_updatedb&lt;/span&gt; ó &lt;span style="font-style:italic;"&gt;nss-tools&lt;/span&gt; generalmente).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-6927627568618632694?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/6927627568618632694/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=6927627568618632694' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6927627568618632694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6927627568618632694'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/08/linux-cache-ldap-autentificacion.html' title='Linux: Caché LDAP, autentificación desconectada'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-1566628359090492599</id><published>2009-08-06T10:08:00.004+02:00</published><updated>2009-08-06T10:23:16.155+02:00</updated><title type='text'>Synaptics en Fedora (no funciona el click tab ni el scroll)</title><content type='html'>El demonio HAL que viene con Fedora 11 (con la versión 10 creo que también pasa) no detecta el touchpad de muchos portátiles como tal, sino que lo trata como un periférico convencional. La documentación de Fedora ofrece solución a este problema, pero para los más vagos he aquí la receta:&lt;br /&gt;&lt;br /&gt;Instalamos el paquete synaptics (si es que no lo está ya)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;yum install xorg-x11-drv-synaptics&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Copiamos la configuración del touchpad al directorio etc de HAL&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;cp /usr/share/hal/fdi/policy/20thirdparty/10-synaptics.fdi /etc/hal/fdi/policy/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Editamos el fichero &lt;span style="font-style:italic;"&gt;/etc/hal/fdi/policy/10-synaptics.fdi&lt;/span&gt; y elinimamos los comentarios siguientes:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_NG_JlK-fTWk/SnqRwc6RVXI/AAAAAAAAAGI/5ZR7-iwRH6o/s1600-h/hal.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 150px;" src="http://3.bp.blogspot.com/_NG_JlK-fTWk/SnqRwc6RVXI/AAAAAAAAAGI/5ZR7-iwRH6o/s320/hal.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5366762167545714034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;dejando el fichero de la siguiente forma:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NG_JlK-fTWk/SnqS38vmReI/AAAAAAAAAGQ/eJaYj_PjMMA/s1600-h/hal1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 213px;" src="http://2.bp.blogspot.com/_NG_JlK-fTWk/SnqS38vmReI/AAAAAAAAAGQ/eJaYj_PjMMA/s400/hal1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5366763395861595618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Reiniciamos el sistema y comprobamos que scroll del touchpad funciona así como el pad click.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-1566628359090492599?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/1566628359090492599/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=1566628359090492599' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/1566628359090492599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/1566628359090492599'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/08/synaptics-en-fedora-no-funciona-el.html' title='Synaptics en Fedora (no funciona el click tab ni el scroll)'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_NG_JlK-fTWk/SnqRwc6RVXI/AAAAAAAAAGI/5ZR7-iwRH6o/s72-c/hal.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-2566881042251868893</id><published>2009-06-11T17:18:00.002+02:00</published><updated>2009-06-11T17:33:14.262+02:00</updated><title type='text'>vsftpd en cinco minutos</title><content type='html'>Configurar un servidor FTP en Linux es mucho más rápido que en Bindous, a base de darle clicks a los botones de "Siguiente", desde que existe vsftpd.&lt;br /&gt;La instalación de vsftpd es bien sencilla, &lt;span style="font-style:italic;"&gt;apt-get install vsftpd &lt;/span&gt;(Debian, Ubuntu...) ó &lt;span style="font-style:italic;"&gt;yum install vsftpd &lt;/span&gt;(Red Hat, Fedora..), según convenga.&lt;br /&gt;&lt;br /&gt;Una vez instalado tendremos que toquetear el ficheiro configuración que se ecuentra en &lt;span style="font-style:italic;"&gt;/etc/vsftpd.conf&lt;/span&gt; ó &lt;span style="font-style:italic;"&gt;/etc/vsftpd/vsftpd.conf&lt;/span&gt; según cual sea la distribución. Para configurar que sólo se autentifiquen usuarios locales, en modo activo y los enjaule en sus home, dejaremos el fichero de la siguiente forma:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;anonymous_enable=NO&lt;br /&gt;local_enable=YES&lt;br /&gt;write_enable=YES&lt;br /&gt;local_umask=022&lt;br /&gt;dirmessage_enable=YES&lt;br /&gt;xferlog_enable=YES&lt;br /&gt;connect_from_port_20=YES&lt;br /&gt;xferlog_std_format=YES&lt;br /&gt;ftpd_banner=Bienvenido a mi servidor FTP!&lt;br /&gt;chroot_local_user=YES&lt;br /&gt;listen=YES&lt;br /&gt;pam_service_name=vsftpd&lt;br /&gt;userlist_enable=YES&lt;br /&gt;tcp_wrappers=YES&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si lo queremos en modo pasivo, eliminaremos la entrada &lt;span style="font-style:italic;"&gt;connect_from_port_20&lt;/span&gt; y pondremos lo siguiente:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;pasv_min_port=50000&lt;/span&gt;  # Puerto que inicia el rango&lt;br /&gt;&lt;span style="font-style:italic;"&gt;pasv_max_port=55000&lt;/span&gt;  # Puerto que cierra el rango&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-2566881042251868893?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/2566881042251868893/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=2566881042251868893' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/2566881042251868893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/2566881042251868893'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/06/vsftpd-en-cinco-minutos.html' title='vsftpd en cinco minutos'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-2420253959708819154</id><published>2009-06-10T20:17:00.003+02:00</published><updated>2009-06-10T20:30:48.736+02:00</updated><title type='text'>Gestor de descarga Rapishare para Linux (Usuarios Premium)</title><content type='html'>Siempre se puede instalar el JDownloader y herramientas similares que tiran de Java chupan CPU y no le llegan ni a la suela de los zapatos a wget. Lo que mucha gente desconoce es lo parametrizable que resulta wget, como por ejemplo, para insertar usuario y password de cuentas premium de RapidShare.&lt;br /&gt;Me hecho este pequeño script que me sirve como gestor de ventanas gráfico usando zenity, que descarga todos los enlaces contenidos en un fichero de texto, enlaces de RapidShare por supuesto:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;RAPIDUSR=`zenity --entry --title "RapidShare" --text "Inserte el usuario" 2&amp; `&lt;br /&gt;RAPIDPWD=`zenity --entry --title "RapidShare" --text "Inserte el password" --hide-text 2&amp;`&lt;br /&gt;LISTA=`zenity --file-selection --title "RapidShare" 2&amp;`&lt;br /&gt;&lt;br /&gt;wget --http-user=${RAPIDUSR} --http-password=${RAPIDPWD} -c -i ${LISTA}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Funciona a las mil maravillas y con resumen de descarga, impresionante wget.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;NOTA:&lt;/span&gt; Hay que ejecutarlo en un terminal.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NG_JlK-fTWk/Si_7n7VjT6I/AAAAAAAAAF4/45m4MoCBPy4/s1600-h/term.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 78px;" src="http://4.bp.blogspot.com/_NG_JlK-fTWk/Si_7n7VjT6I/AAAAAAAAAF4/45m4MoCBPy4/s320/term.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5345767946073624482" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NG_JlK-fTWk/Si_7wlKmZTI/AAAAAAAAAGA/71mHkJtL2tM/s1600-h/lista.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 229px;" src="http://2.bp.blogspot.com/_NG_JlK-fTWk/Si_7wlKmZTI/AAAAAAAAAGA/71mHkJtL2tM/s320/lista.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5345768094740931890" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-2420253959708819154?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/2420253959708819154/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=2420253959708819154' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/2420253959708819154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/2420253959708819154'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/06/gestor-de-descarga-rapishare-para-linux.html' title='Gestor de descarga Rapishare para Linux (Usuarios Premium)'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NG_JlK-fTWk/Si_7n7VjT6I/AAAAAAAAAF4/45m4MoCBPy4/s72-c/term.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-7944397323336846977</id><published>2009-04-17T20:41:00.003+02:00</published><updated>2009-04-17T20:59:30.967+02:00</updated><title type='text'>DNIe en Fedora 10 con ACR38</title><content type='html'>En el PC City vendían el mini-lector PCSC USB ACR38 de bit4id a 20 eurillos así que tocó pelearse un poco con él. Ya había instalado este dispositivo (en otros formatos) en Suse 10 pero siempre 32bit, he aquí los pasos para hacerlo correr en Fedora x64.&lt;br /&gt;&lt;br /&gt;Lo primero instalar los paquetes necesarios&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;yum install openct opensc pinentry pcsc-tools&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora descargamos de la web del fabricante el controlador para el lector, lo descomprimos, compilamos e instalamos&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;cd /usr/src/&lt;br /&gt;wget http://www.bit4id.com/espanol/descargas_file/drivers/miniLectorUSB/ACR38_LINUX_100706_P.tar.gz&lt;br /&gt;tar zxf ACR38_LINUX_100706_P.tar.gz&lt;br /&gt;cd ACR38_LINUX_100706_P&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Descargamos e instalamos el paquete del DNIe &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;cd /usr/src&lt;br /&gt;wget http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/opensc-dnie-1.4.5-1.fc9.x86_64_Fedora_9.rpm.tar&lt;br /&gt;tar xf opensc-dni-1.4.5-1.fc9.x86_64_Fedora_9.rpm.tar&lt;br /&gt;rpm -Uvh opensc-dnie-1.4.5-1.fc9.x86_64_Fedora_9.rpm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Iniciamos los servicios correspondientes y los marcamos para que se carguen en el arranque&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;service pcscd restart&lt;br /&gt;service openct restart&lt;br /&gt;chkconfig pcscd on&lt;br /&gt;chkconfig openct on&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nos vamos al lanzador de aplicaciones y picamos sobre el elemento del menú Oficina -&gt; Registrar módulo DNIe PKCS#11. Se abrirá Mozilla Firefox y nos preguntará si queremos instalar el módulo de seguridad, respondemos que si.&lt;br /&gt;&lt;br /&gt;Descargar el certificado raíz de la Policía Nacional&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;cd&lt;br /&gt;wget http://www.dnie.es/certs/ACRaiz.crt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora abrimos Firefox y cargamos el certificado desde los siguientes menús: Editar -&gt; Preferencias -&gt; Avanzado -&gt; Cifrado -&gt; Ver certificados -&gt; Importar y cargamos el archivo ACRaiz.crt que acabamos de descargar.&lt;br /&gt;&lt;br /&gt;Reiniciamos Firefox y comprobamos que todo funciona desde el enlace &lt;a href="http://www.dnielectronico.es/como_utilizar_el_dnie/verificar.html"&gt;http://www.dnielectronico.es/como_utilizar_el_dnie/verificar.html&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-7944397323336846977?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/7944397323336846977/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=7944397323336846977' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7944397323336846977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7944397323336846977'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/04/dnie-en-fedora-10-con-acr38.html' title='DNIe en Fedora 10 con ACR38'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-3533261522637423857</id><published>2009-04-17T14:51:00.002+02:00</published><updated>2009-04-17T14:59:53.499+02:00</updated><title type='text'>Python: Valor de las variables de sistema</title><content type='html'>Las variables de sistema son extremadamente fáciles de recolectar con Python y, como siempre, con un mínimo de cuidade a la hora de programar hacemos que el código se ejecute perfectamente en cualquier sistema operativo. Mediante este simple método podemos ver los valores de las varibles pasando un string con su nombre:&lt;br /&gt;&lt;br /&gt;import os&lt;br /&gt;&lt;br /&gt;def getValorVar(_nombreVar):&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return os.environ[_nombreVar]&lt;br /&gt;&lt;br /&gt;if __name__=='__main__':&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;print 'Valor de $PATH: ' + getValorVar('PATH')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;print 'Valor de $USR: ' + getValorVar('USR')&lt;br /&gt;&lt;br /&gt;Y si, funciona igual en bindous.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-3533261522637423857?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/3533261522637423857/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=3533261522637423857' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3533261522637423857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3533261522637423857'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/04/python-valor-de-las-variables-de.html' title='Python: Valor de las variables de sistema'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-7986186067474996606</id><published>2009-04-14T10:11:00.002+02:00</published><updated>2009-04-14T10:13:43.290+02:00</updated><title type='text'>ZFS (Fuse) para Red Hat Enterprise/Centos 5.3</title><content type='html'>Para no perder tiempo, aquí dejo el paquete compilado para RHEL/Centos 5.3 del sistema de ficheros ZFS.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/221131005/zfs-fuse-0.5.0-7.20081221.i386.rpm"&gt;http://rapidshare.com/files/221131005/zfs-fuse-0.5.0-7.20081221.i386.rpm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lo he compilado a partir de los últimos sources de Fedora 10.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-7986186067474996606?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/7986186067474996606/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=7986186067474996606' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7986186067474996606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7986186067474996606'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/04/zfs-fuse-para-red-hat-enterprisecentos.html' title='ZFS (Fuse) para Red Hat Enterprise/Centos 5.3'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-412789016469279791</id><published>2009-04-02T22:21:00.002+02:00</published><updated>2009-04-02T22:32:54.258+02:00</updated><title type='text'>Webcam Microdia de HP Pavilion (uvcvideo)</title><content type='html'>Desde que he abandonado a Debian por Fedora todo eran ventajas, hasta que me hizo falta usar la webcam del portátil, que en Fedora 10 no va. El problema es que el controlador uvcvideo que viene por defecto en Fedora es demasiado antiguo, así que hay que compilar uno nuevo.&lt;br /&gt;En mi caso la webcam que incorpora mi portátil (HP Pavilion dv2106-eu) es la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;[root@dagobah webcam]# lsusb&lt;br /&gt;Bus 001 Device 002: ID 0c45:62c0 Microdia Sonix USB 2.0 Camera&lt;br /&gt;Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El primer caso es descargar la última versión disponible de &lt;a href="http://linuxtv.org/hg/~pinchartl/uvcvideo/"&gt;http://linuxtv.org/hg/~pinchartl/uvcvideo/&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;cd /usr/src&lt;br /&gt;mkdir webcam&lt;br /&gt;cd webcam&lt;br /&gt;wget http://linuxtv.org/hg/~pinchartl/uvcvideo/archive/tip.tar.bz2&lt;br /&gt;tar xjf tip.tar.bz2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora, si no lo hemos instalado ya, instalamos los kernel headers:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;yum install kernel-devel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Y finalmente compilamos e instalamos los nuevos módulos que sustituirán a los que trae el kernel de stock:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;cd /usr/src/webcam/uvcvideo-e720bad42205&lt;br /&gt;make clean&lt;br /&gt;make all&lt;br /&gt;make install&lt;br /&gt;depmod -a&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Reiniciamos el sistema y veremos que la webcam ya está soportada&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;[root@dagobah webcam]# dmesg | grep uvc&lt;br /&gt;uvcvideo: Found UVC 1.00 device USB 2.0 Camera (0c45:62c0)&lt;br /&gt;usbcore: registered new interface driver uvcvideo&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-412789016469279791?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/412789016469279791/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=412789016469279791' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/412789016469279791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/412789016469279791'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/04/webcam-microdia-de-hp-pavilion-uvcvideo.html' title='Webcam Microdia de HP Pavilion (uvcvideo)'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-6699924670257341993</id><published>2009-04-02T18:35:00.003+02:00</published><updated>2009-04-02T19:01:19.649+02:00</updated><title type='text'>Flash Player 10 para 64 bits</title><content type='html'>Es muy difícil conseguir en link a la descarga (al menos yo tardé bastante en encontrarlo) pero está disponible un flash player alpha para distribuciones Linux x64. La forma de instarlo es la siguiente (como root):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;cd /usr/src&lt;br /&gt;wget http://download.macromedia.com/pub/labs/flashplayer10/libflashplayer-10.0.d20.7.linux-x86_64.so.tar.gz&lt;br /&gt;tar zxf libflashplayer-10.0.d20.7.linux-x86_64.so.tar.gz&lt;br /&gt;cp libflashplayer.so /usr/lib/mozilla/plugins/&lt;br /&gt;chmod a+rx /usr/lib64/mozilla/plugins/libflashplayer.so&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tras reiniciar Firefox podemos comprobar que el plugin se ha cargado accediendo a la url about:plugins&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NG_JlK-fTWk/SdTvUM2h_HI/AAAAAAAAAFw/h6LOsNWiNLM/s1600-h/flash.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_NG_JlK-fTWk/SdTvUM2h_HI/AAAAAAAAAFw/h6LOsNWiNLM/s320/flash.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5320140190157765746" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-6699924670257341993?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/6699924670257341993/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=6699924670257341993' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6699924670257341993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6699924670257341993'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/04/flash-player-10-para-64-bits.html' title='Flash Player 10 para 64 bits'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NG_JlK-fTWk/SdTvUM2h_HI/AAAAAAAAAFw/h6LOsNWiNLM/s72-c/flash.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-7275683855386266091</id><published>2009-04-02T18:06:00.003+02:00</published><updated>2009-04-02T18:24:27.243+02:00</updated><title type='text'>Broadcom BCM4311 Wifi en Fedora 10 (x86 y x64)</title><content type='html'>Este truco no es aplicable a Debian y derivados (Ubuntu, Kubuntu) ya que estas distribuciones proveen su propio método.&lt;br /&gt;&lt;br /&gt;El primer paso es instalar el paquete que extrae el firmware del controlador de Broadcom. Lo más probable es que ya esté en la lista de paquetes instalados pero por si acaso:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;yum install bcm43xx-fwcutter&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Necesitamos obtener la versión 4.150 del controlador disponible en &lt;a href="http://linuxwireless.org/en/users/Drivers/b43#devicefirmware"&gt;http://linuxwireless.org/en/users/Drivers/b43#devicefirmware&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;su -&lt;br /&gt;cd /usr/src&lt;br /&gt;wget http://mirror2.openwrt.org/sources/broadcom-wl-4.150.10.5.tar.bz2&lt;br /&gt;tar xjf broadcom-wl-4.150.10.5.tar.bz2&lt;br /&gt;cd broadcom-wl-4.150.10.5/driver/&lt;br /&gt;b43-fwcutter -w /lib/firmware wl_apsta_mimo.o&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Reiniciar el sistema y ya podremos utilizar la conexión wifi a través del Network Manager&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_NG_JlK-fTWk/SdTmpqJpe-I/AAAAAAAAAFo/w_NrKeWLEo0/s1600-h/broadcom.jpeg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_NG_JlK-fTWk/SdTmpqJpe-I/AAAAAAAAAFo/w_NrKeWLEo0/s320/broadcom.jpeg" border="0" alt=""id="BLOGGER_PHOTO_ID_5320130663195180002" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-7275683855386266091?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/7275683855386266091/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=7275683855386266091' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7275683855386266091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7275683855386266091'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/04/broadcom-bcm4311-wifi-en-fedora-10-x86.html' title='Broadcom BCM4311 Wifi en Fedora 10 (x86 y x64)'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_NG_JlK-fTWk/SdTmpqJpe-I/AAAAAAAAAFo/w_NrKeWLEo0/s72-c/broadcom.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-3394920909742051217</id><published>2009-03-30T18:38:00.002+02:00</published><updated>2009-03-30T18:51:55.701+02:00</updated><title type='text'>Python: Acceso al puerto USB</title><content type='html'>No es la primera vez ni será la última que he necesitado acceder a los puertos USB en busca de algún dispositivo en concreto, generalmente impresoras que no muestran el estado real de la impresión.&lt;br /&gt;&lt;br /&gt;Mediante el uso de las siguientes clases tenemos todas las herramientas necesarias para identificar el tipo de dispositivo, estado, fabricante, puerto, etc, de forma ordenada. La primera clase se corresponde con el acceso a datos y la segunda es el modelo de los mismos.&lt;br /&gt;&lt;br /&gt;El código ha sido subido al siguiente enlace &lt;a href="http://www.nomorepasting.com/getpaste.php?pasteid=25349&amp;seen=true&amp;langoverride=python"&gt;http://www.nomorepasting.com/getpaste.php?pasteid=25349&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-3394920909742051217?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/3394920909742051217/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=3394920909742051217' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3394920909742051217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3394920909742051217'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/03/python-acceso-al-puerto-usb.html' title='Python: Acceso al puerto USB'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-9015470933491940018</id><published>2009-03-30T18:30:00.002+02:00</published><updated>2009-03-30T18:36:40.135+02:00</updated><title type='text'>Python: Un método para el envío de correo electrónico</title><content type='html'>Mediante este método listo para copiar y pegar y usando smtplib podemos enviar correo electrónico desde nuestros programas. La función ha sido pensada para el envío de correo a través de un servidor local que no requiere autentificación, si se necesita, habría que tocar las propiedades del objeto mailserver.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;import smtplib&lt;br /&gt;&lt;br /&gt;def mail(serverURL=None, sender='', to='', subject='', _text=''):&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (sender, to, subject)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message = headers + _text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mailServer = smtplib.SMTP(serverURL)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mailServer.sendmail(sender, to, message)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mailServer.quit() &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-9015470933491940018?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/9015470933491940018/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=9015470933491940018' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/9015470933491940018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/9015470933491940018'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/03/python-un-metodo-para-el-envio-de.html' title='Python: Un método para el envío de correo electrónico'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-6220995579674138829</id><published>2009-02-17T23:59:00.002+01:00</published><updated>2009-02-18T00:05:52.794+01:00</updated><title type='text'>Emerald en KDE4 en Fedora 10</title><content type='html'>Recién instalada Fedora 10 con los paquetes compiz y emerald correspondientes bajo el gestor KDE4, todo funciona correctamente menos Emerald, que se niega a cargarse con compiz. La solución es editar el script de carga de compiz situado en $HOME/.kde/env/kdewm.sh y dejarlo de la siguiente forma:&lt;br /&gt;&lt;br /&gt;USE_EMERALD=yes&lt;br /&gt;KDEWM=compiz-manager&lt;br /&gt;export USE_EMERALD KDEWM&lt;br /&gt;&lt;br /&gt;Reiniciar la sesión y listo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-6220995579674138829?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/6220995579674138829/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=6220995579674138829' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6220995579674138829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6220995579674138829'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/02/emerald-en-kde4-en-fedora-10.html' title='Emerald en KDE4 en Fedora 10'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-8494705907741446096</id><published>2009-01-30T14:12:00.002+01:00</published><updated>2009-01-30T14:17:17.569+01:00</updated><title type='text'>Shell scripts que rompen, activando modo debug</title><content type='html'>No pasa ni una ni dos veces que ejecutamos un shell script y en algún lado rompe, pero la salida es demasiado críptica como para intuír por donde lo hace. Para solucionar este problema activaremos el modo debug de la shell añadiendo la opción -x de la forma:&lt;br /&gt;&lt;br /&gt;/bin/sh -x mi_script.sh&lt;br /&gt;&lt;br /&gt;También podemos editar la primera línea del script y añadir el parámetro:&lt;br /&gt;&lt;br /&gt;#!/bin/sh -x&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Ala! A "debuggear"!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-8494705907741446096?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/8494705907741446096/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=8494705907741446096' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8494705907741446096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8494705907741446096'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/01/shell-scripts-que-rompen-activando-modo.html' title='Shell scripts que rompen, activando modo debug'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-8672457999180416424</id><published>2009-01-02T13:46:00.003+01:00</published><updated>2009-01-02T13:53:09.530+01:00</updated><title type='text'>Internet Explorer 6 bajo Linux (IE4Linux) con Java</title><content type='html'>Puede parecer una falacia pero en ciertos escenarios es útil. Instalarlo es muy simple.&lt;br /&gt;&lt;br /&gt;Para cumplir dependencias debemos instalar wine y cabextract.&lt;br /&gt;&lt;br /&gt;Luego nos situamos en &lt;span style="font-style:italic;"&gt;/usr/src&lt;/span&gt; y realizamos la instalación&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;cd /usr/src/&lt;br /&gt;wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz&lt;br /&gt;tar zxvf ies4linux-latest.tar.gz&lt;br /&gt;cd ies4linux-version-descargada&lt;br /&gt;./ies4linux&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esto hará que nos salga la ventana de instalación de IE, donde podremos cambiar el idioma a ES y picando en Advanced podemos cambiar el directorio de instalación por defecto:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_NG_JlK-fTWk/SV4NrontIqI/AAAAAAAAAFM/JUfNs7ErFuA/s1600-h/ie4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 234px; height: 320px;" src="http://4.bp.blogspot.com/_NG_JlK-fTWk/SV4NrontIqI/AAAAAAAAAFM/JUfNs7ErFuA/s320/ie4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5286678055869031074" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez realizada la instalación de IE, necesitamos Java. Descargamos la versión de Java deseada de &lt;a href="http://java.sun.com"&gt;java.sun.com&lt;/a&gt; y ejecutamos la siguiente sentencia:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;export WINEPREFIX=/opt/ies4linux/ie6&lt;br /&gt;wine /root/Descargas/jre-1_6_0_5-windows-i586.exe&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finalizada la instalación de Java podemos ejecutar IE mediante el comando:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;wine /opt/ies4linux/ie6/drive_c/Program\ Files/iexplore.exe http://joservilas.blogspot.com&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-8672457999180416424?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/8672457999180416424/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=8672457999180416424' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8672457999180416424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8672457999180416424'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2009/01/internet-explorer-6-bajo-linux-ie4linux.html' title='Internet Explorer 6 bajo Linux (IE4Linux) con Java'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_NG_JlK-fTWk/SV4NrontIqI/AAAAAAAAAFM/JUfNs7ErFuA/s72-c/ie4.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-5969896312192996233</id><published>2008-12-26T08:49:00.002+01:00</published><updated>2008-12-26T08:55:37.096+01:00</updated><title type='text'>Cambiar resolución de una SunRay</title><content type='html'>Los terminales SunRay toman la resolución nativa del monitor que tienen pinchado por defecto y eso no suele gustarle a todos los usuarios. Podríamos grabar una configuración personalizada mediante el comando "utresadm" pero generalmente en este tipo de soluciones los usuarios son itinerantes, así que lo más cómodo es asociar una resolución a la Java Card que utiliza ese usuario (perfectamente funciona con el DNIe), mediante el comando:&lt;br /&gt;&lt;br /&gt;/opt/SUNWut/bin/utxconfig -r resolución -t Token_Id&lt;br /&gt;&lt;br /&gt;Ejemplo:&lt;br /&gt;&lt;br /&gt;/opt/SUNWut/bin/utxconfig -r '1024x768' -t Payflex.5122f9db03431123&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-5969896312192996233?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/5969896312192996233/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=5969896312192996233' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/5969896312192996233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/5969896312192996233'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/12/cambiar-resolucin-de-una-sunray.html' title='Cambiar resolución de una SunRay'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-8628154867147151330</id><published>2008-11-18T13:20:00.003+01:00</published><updated>2008-11-18T13:26:44.206+01:00</updated><title type='text'>Auto Login con GDM/XDM</title><content type='html'>Para acceder directamente al entorno gráfico en el inicio del sistema sin facilitar un password, debemos tocar el fichero de configuración del gestor de arranque. &lt;br /&gt;&lt;br /&gt;Para sistemas Debian/Ubuntu... (/etc/gdm/gdm.conf):&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;AutomaticLoginEnable = true&lt;br /&gt;LocalNoPasswordUsers = usuario_que_inicia_por_defecto&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Para sistemas RedHat/Suse... (/etc/sysconfig/displaymanager):&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;DISPLAYMANAGER_AUTOLOGIN = usuario_que_inicia_por_defecto&lt;br /&gt;DISPLAYMANAGER_PASSWORD_LESS_LOGIN = "yes"&lt;br /&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-8628154867147151330?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/8628154867147151330/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=8628154867147151330' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8628154867147151330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8628154867147151330'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/11/auto-login-con-gdmxdm.html' title='Auto Login con GDM/XDM'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-318161805658980868</id><published>2008-11-18T10:41:00.002+01:00</published><updated>2008-11-18T10:45:40.779+01:00</updated><title type='text'>Automount en consola</title><content type='html'>Para que los dispositivos extraíbles se automonten en consola de la misma forma que en los gestores gráficos, sin necesidad de establecer los puntos de montaje manualmente con mount, disponemos de la utilidad ivman.&lt;br /&gt;&lt;br /&gt;apt-get install ivman&lt;br /&gt;&lt;br /&gt;Luego nos aseguraremos de que se cargue el script de inicialización en el rc.d correspondiente y ya estará listo (en la configuración por defecto de ivman ya se automontan los dispositivos extraíbles).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-318161805658980868?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/318161805658980868/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=318161805658980868' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/318161805658980868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/318161805658980868'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/11/automount-en-consola.html' title='Automount en consola'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-3386729394892465503</id><published>2008-11-18T10:36:00.002+01:00</published><updated>2008-11-18T10:41:13.946+01:00</updated><title type='text'>Eliminar Identity Box en Firefox 3</title><content type='html'>Dentro del subdirectorio chrome de la carpeta de configuración de Firefox editamos/creamos el fichero userChrome.css y añadimos la entrada:&lt;br /&gt;&lt;br /&gt;#identity-box {&lt;br /&gt;   display: none;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Otras opciones molestas son la estrella de marcadores o el botón ir, que se pueden eliminar con las entradas:&lt;br /&gt;&lt;br /&gt;#star-button {&lt;br /&gt;   display: none !important;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#go-button {&lt;br /&gt;   display: none !important;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Se pueden consultar más opciones de configuración en la url &lt;a href="http://kb.mozillazine.org/UserChrome.css_Element_Names/IDs"&gt;http://kb.mozillazine.org/UserChrome.css_Element_Names/IDs&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-3386729394892465503?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/3386729394892465503/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=3386729394892465503' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3386729394892465503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3386729394892465503'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/11/eliminar-identity-box-en-firefox-3.html' title='Eliminar Identity Box en Firefox 3'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-8264290848063398780</id><published>2008-07-30T10:45:00.004+02:00</published><updated>2008-07-30T11:20:42.855+02:00</updated><title type='text'>Autentificación SSH mediante pares de claves DSA</title><content type='html'>Como complemento a las recetas publicadas con anterioridad sobre &lt;a href="http://joservilas.blogspot.com/2008/02/ssh-seguridad-bsica.html"&gt;Seguridad Básica de SSH&lt;/a&gt;, nos quedaba pendiente la autentificación mediante certificados.&lt;br /&gt;&lt;br /&gt;Para ello, simplemente debemos crear un juego de claves:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;ssh-keygen -t dsa&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Comando mediante el cual crearemos una clave del tipo DSA de 1024 bits que se guardará en el directorio &lt;span style="font-style:italic;"&gt;~/.ssh/id_dsa&lt;/span&gt;, cuya clave pública estará en &lt;span style="font-style:italic;"&gt;~/.ssh/id_dsa.pub&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Una vez que se ha creado el juego de llaves deberemos cambiar la configuración del sistema para comience a trabajar con ellas en lugar de validar tuplas usuario/password, configuración que realizaremos en el equipo que actúa como servidor SSH (al que nos queremos conectar).Para ello editaremos el fichero de configuración &lt;span style="font-style:italic;"&gt;/etc/ssh/sshd_config&lt;/span&gt; y aplicaremos los cambios en las opciones:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Protocol 2&lt;br /&gt;PermitRootLogin without-password&lt;br /&gt;PasswordAuthentication no&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Antes de reiniciar el servicio en el servidor y poder logearnos con la nueva configuración, tendremos que copiar la clave pública que generemos en el esclavo a &lt;span style="font-style:italic;"&gt;~/.ssh/authorised_keys&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;NOTA: Dependiendo del sistema, de la configuración y los permisos del $HOME, conviene (si no lo está) cambiar los permisos de los ficheros a 700.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-8264290848063398780?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/8264290848063398780/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=8264290848063398780' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8264290848063398780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8264290848063398780'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/07/autentificacin-ssh-mediante-pares-de.html' title='Autentificación SSH mediante pares de claves DSA'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-4554735923798935671</id><published>2008-06-06T12:58:00.002+02:00</published><updated>2008-06-06T13:00:44.267+02:00</updated><title type='text'>Python: Descomprimir ficheros zip</title><content type='html'>Aunque es realmente fácil y probablemente conocido, mucha gente se hace un lío a la hora de descomprimir ficheros. La clase siguiente lista el contenido de todos los ficheros .zip que hay en el directorio de ejecución:&lt;br /&gt;&lt;br /&gt;import sys&lt;br /&gt;import zipfile &lt;br /&gt;&lt;br /&gt;for filename in sys.argv[1:]:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;z = zipfile.ZipFile(file(filename))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;print "%s:" % (filename)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;for f in z.namelist():&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print "\t%s" % (f)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print ""&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-4554735923798935671?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/4554735923798935671/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=4554735923798935671' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/4554735923798935671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/4554735923798935671'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/06/python-descomprimir-ficheros-zip.html' title='Python: Descomprimir ficheros zip'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-7187945118093133470</id><published>2008-05-28T11:20:00.002+02:00</published><updated>2008-05-28T11:31:29.682+02:00</updated><title type='text'>Runit, la alternativa a SysV Init</title><content type='html'>SysV init como tal, puede que no sea conocido por el usuario de escritorio, pero es el gestor de servicios de Unix/Linux por excelencia, todos hemos tenido que configurar en alguna ocasión los scripts de arranque de un servicio contenido en /etc/init.d/.&lt;br /&gt;El problema de SysV init es la respuesta ante la caída de un servicio, ya que el único medio que se dispone es el arranque a mano, mediante el script de iniciación. Para el caso de un servidor web apache:&lt;br /&gt;&lt;br /&gt;/etc/init.d/apache start&lt;br /&gt;&lt;br /&gt;Si el servidor web se cae, o lo levantamos a mano, o lo monitorizamos con una herramienta para que nos avise que se ha caído (Nagios por ejemplo) o creamos nuestro propio demonio que lo levante de nuevo (algo pesado la verdad).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://smarden.sunsite.dk/runit/"&gt;Runit&lt;/a&gt; es el gestor de servicios que resuelve el problema, ya que no sólo los lanza, los supervisa. Si se tiene la necesidad de optar por esta solución, conviene visitar la página del proyecto y hacerse con los scripts de arranque para el nuevo gestor:&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://smarden.sunsite.dk/runit/"&gt;Runit, gestor de arranque&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://smarden.sunsite.dk/runit/runscripts.html"&gt;Scripts para los servicios más comunes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-7187945118093133470?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/7187945118093133470/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=7187945118093133470' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7187945118093133470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7187945118093133470'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/05/runit-la-alternativa-sysv-init.html' title='Runit, la alternativa a SysV Init'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-8163923284845138542</id><published>2008-04-18T14:02:00.001+02:00</published><updated>2008-04-18T14:04:34.023+02:00</updated><title type='text'>Snort: configuración básica para la detección de intrusos</title><content type='html'>Snort es una herramienta muy conocida por el administrador de sistemas y utilizada por defecto en la práctica totalidad de distribuciones Linux orientadas a trabajar como encaminadores (SmoothWall, IpCop, Untangle...)&lt;br /&gt;&lt;br /&gt;Los usos y posibilidades de esta herramienta son realmente variados aunque lo más común es utilizarlo como "packet logger" o sniffer, con volcado a texto plano o bbdd MySQL/PostgreSQL. &lt;br /&gt;&lt;br /&gt;Algunos de sus usos básicos son:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;# snort -v (-vd)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Funciona como un sniffer realizando un volcado por pantalla de todo el tráfico (la opción &lt;span style="font-style:italic;"&gt;-vd&lt;/span&gt; muestra más información).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;# snort -l ruta_fichero_log -d&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ejecuta snort y guardar el log en la ruta indicada en el formato predeterminado (binario). Para visualizar este fichero se utiliza la opción &lt;span style="font-style:italic;"&gt;-r&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;# snort -r ruta_fichero_log&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para una configuración inicial con reglas de detección básicas, se pueden descargar las establecidas por la comunidad desde el site oficial de la aplicación: &lt;a href="http://www.snort.org/pub-bin/downloads.cgi"&gt;http://www.snort.org/pub-bin/downloads.cgi&lt;/a&gt;, en formato comprimido tar.gz.&lt;br /&gt;&lt;br /&gt;Para habilitar estas reglas se copiarán (descomprimidas) al directorio de configuración de snort (&lt;span style="font-style:italic;"&gt;/etc/snort/rules/&lt;/span&gt;) y editaremos el fichero de configuración del programa asegurándonos de que son visibles:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;# vi /etc/snort/snort.conf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;...&lt;br /&gt;var RULE_PATH rules&lt;br /&gt;include $RULE_PATH/sql.rules&lt;br /&gt;include $RULE_PATH/tcp.rules&lt;br /&gt;...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora nos queda cargar la nueva configuración:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;# snort -c /etc/snort/snort.conf&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-8163923284845138542?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/8163923284845138542/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=8163923284845138542' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8163923284845138542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8163923284845138542'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/04/snort-configuracin-bsica-para-la.html' title='Snort: configuración básica para la detección de intrusos'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-6711170888087953001</id><published>2008-03-28T13:40:00.002+01:00</published><updated>2008-03-28T13:48:34.253+01:00</updated><title type='text'>Ahorrando batería con Linux - Pequeños trucos</title><content type='html'>La gestión de energía en Linux es uno de esos aspectos pendientes de resolver, aunque ya hemos visto en posts anteriores &lt;a href="http://joservilas.blogspot.com/2006/07/porttiles-con-intel-speedstep-amd.html"&gt;pequeñas recetas para ahorrar un poco de batería&lt;/a&gt;, que algo ayudan.&lt;br /&gt;Existe un proyecto amparado por la propia &lt;a href="http://www.intel.es"&gt;Intel&lt;/a&gt;, llamado &lt;a href="http://www.lesswatts.org/"&gt;LessWatts&lt;/a&gt;, que provee una serie de trucos y herramientas muy interesantes para desarrolladores (también para usuarios).&lt;br /&gt;Llaman bastante la atención los trucos propuestos, ya que se salen de las soluciones típicas, no por extravagantes, sinó por desconocidos:&lt;br /&gt;&lt;br /&gt;    *  Enable the power aware SMP scheduler&lt;br /&gt;    * Use SATA link power management&lt;br /&gt;    * Enable WiFi* power management&lt;br /&gt;    * Check for unused Bluetooth*&lt;br /&gt;    * Use gigabit ethernet speeds only when needed &lt;br /&gt;&lt;br /&gt;Las herramientas propuestas se pueden descargar desde el site del proyecto:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.lesswatts.org/downloads/"&gt;http://www.lesswatts.org/downloads/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.lesswatts.org/images/lesswatts2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" src="http://www.lesswatts.org/images/lesswatts2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-6711170888087953001?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/6711170888087953001/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=6711170888087953001' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6711170888087953001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6711170888087953001'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/03/ahorrando-batera-con-linux-pequeos.html' title='Ahorrando batería con Linux - Pequeños trucos'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-4355866875588569954</id><published>2008-03-15T00:00:00.005+01:00</published><updated>2008-03-15T00:38:51.365+01:00</updated><title type='text'>Poniendo a punto Kubuntu  7.10 (flash, divx,  mp3, compiz, etc)</title><content type='html'>&lt;span style="font-style:italic;"&gt;Si hay algo que se le puede envidiar a Linux es el soporte no oficial que ofrecen los usuarios del producto. Claro que, ¿quién certifica que el usuario que realiza una receta está en lo cierto?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Digo esto porque, tras haber instalado Kubuntu 7.10 y con muy pocas ganas de romperme los cuernos, le pregunté a Google, la forma de instalar esos paquetes esenciales que no vienen con la distribución. Y claro, como no, entré en los enlaces con mayor popularidad (según Google) pero viendo los gazapos que tenían las recetas, pues va a ser que no, que mejor nos la hacemos a mano y la publicamos (sin que nadie se ofenda).&lt;br /&gt;&lt;br /&gt;Y para que todo lo que vamos a hacer se pueda empezar debemos activar los repositorios que no están disponibles por defecto. Para ello, editaremos el fichero &lt;span style="font-style:italic;"&gt;/etc/apt/sources.list&lt;/span&gt; y añadimos los citados repositorios:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;deb http://security.ubuntu.com/ubuntu gutsy-security main restricted&lt;br /&gt;deb-src http://security.ubuntu.com/ubuntu gutsy-security main restricted&lt;br /&gt;deb http://security.ubuntu.com/ubuntu gutsy-security universe&lt;br /&gt;deb-src http://security.ubuntu.com/ubuntu gutsy-security universe&lt;br /&gt;deb http://security.ubuntu.com/ubuntu gutsy-security multiverse&lt;br /&gt;deb http://archive.ubuntu.com/ubuntu/ gutsy main universe restricted multiverse&lt;br /&gt;deb-src http://security.ubuntu.com/ubuntu gutsy-security multiverse&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Luego recargamos la bbdd de software:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;apt-get update&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;- INSTALAR FIREFOX Y SOPORTE PARA MACROMEDIA FLASH 9&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_NG_JlK-fTWk/R9sKvbJ22GI/AAAAAAAAADY/v7vO0eqBF8k/s1600-h/flash9.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;"  src="http://bp0.blogger.com/_NG_JlK-fTWk/R9sKvbJ22GI/AAAAAAAAADY/v7vO0eqBF8k/s320/flash9.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5177744006451746914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Instalamos firefox con soporte español:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;apt-get install mozilla-firefox-locale-es-es&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Instalamos los paquetes necesarios para flash9:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;apt-get install flashplugin-nonfree&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ATENCIÓN: Esto nos va a dar un error al final, simplemente instalando este paquete nos instala todos los demás que son necesarios.&lt;br /&gt;&lt;br /&gt;Nos vamos a &lt;span style="font-style:italic;"&gt;/usr/src&lt;/span&gt;, descargamos el plugin desde la web de Macromedia y lo cargamos&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;cd /usr/src&lt;br /&gt;wget http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_9_linux.tar.gz&lt;br /&gt;tar zxf install_flash_player_9_linux.tar.gz&lt;br /&gt;cp /usr/sr/install_flash_player_9_linux/libflashplayer.so /usr/lib/flashplugin-nonfree/&lt;br /&gt;/usr/lib/nspluginwrapper/x86_64/linux/npconfig -i /usr/lib/flashplugin-nonfree/libflashplayer.so&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;- INSTALAR SOPORTE MP3, DIVX Y DEMÁS FAMILIA&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cierto es que amarok, kaffeine ... descargan los codecs según los van necesitando al abrir los archivos,  pero para evitar esto y tenerlos todos desde el principio:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;apt-get install libxine1-ffmpeg&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- INSTALAR CONTROLADORES RESTRINGIDOS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tan sólo hay que irse  a las &lt;span style="font-style:italic;"&gt;preferencias del sistema, en la pestaña "Avanzado"&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_NG_JlK-fTWk/R9sLD7J22HI/AAAAAAAAADg/x8Mb0BLr7F4/s1600-h/restricted.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_NG_JlK-fTWk/R9sLD7J22HI/AAAAAAAAADg/x8Mb0BLr7F4/s320/restricted.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5177744358639065202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- INSTALAR COMPIZ FUSION&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Muy fácil, basta con instalar los paquetes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;apt-get install compiz-kde libcompizconfig-backend-kconfig compiz-fusion-plugins-extra compizconfig-settings-manager&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Luego lo iniciaremos por primera vez (con el usuario que está usando el entorno gráfico, no como root)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;compiz --replace&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para cambiar los ajustes de los efectos nos iremos al &lt;span style="font-style:italic;"&gt;menú K -&gt; Preferencias -&gt; Advanced Desktop Effects Settings&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-4355866875588569954?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/4355866875588569954/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=4355866875588569954' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/4355866875588569954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/4355866875588569954'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/03/poniendo-punto-kubuntu-710-flash-divx.html' title='Poniendo a punto Kubuntu  7.10 (flash, divx,  mp3, compiz, etc)'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_NG_JlK-fTWk/R9sKvbJ22GI/AAAAAAAAADY/v7vO0eqBF8k/s72-c/flash9.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-8030934709845915497</id><published>2008-03-11T16:57:00.002+01:00</published><updated>2008-03-11T17:03:30.271+01:00</updated><title type='text'>Más fiabilidad: por si Linux rompe</title><content type='html'>&lt;span style="font-style:italic;"&gt;Que Linux sea un sistema operativo serio y robusto, no quiere decir que no pueda colgarse. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bajo ciertas condiciones especiales (fallo de hardware, corrupción de software) el sistema puede deterse debido al mas que conocido error "Kernel Panic".&lt;br /&gt;&lt;br /&gt;En estaciones de trabajo y servidores que mantienen servicios dedicados, que el sistema de un error es malo, pero que no haga nada por levantarse es peor.&lt;br /&gt;Y como es realmente complicado prever un "Kernel Panic" y la vida del administrador de sistemas no gira físicamente en torno a la máquina, hay que estar siempre preparados para la menos probable de las adversidades. &lt;br /&gt;Es por ello que conviene preparar el sistema para que llegado el momento, tras un error del tipo "Kernel Panic" haga un reboot, reset, restart o como cada uno quiera llamarlo. Y para conseguirlo únicamente se debe añadir la siguiente línea al fichero de configuración &lt;span style="font-style:italic;"&gt;/etc/sysctl.conf&lt;/span&gt; :&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;kernel.panic = n&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;donde &lt;span style="font-weight:bold;"&gt;n&lt;/span&gt; es el número de segundos tras los que queremos que se reinicie la máquina en caso de tal evento ocurra.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_NG_JlK-fTWk/R9atQLJ22FI/AAAAAAAAADQ/WYER6tbNoJQ/s1600-h/kernelpanic.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_NG_JlK-fTWk/R9atQLJ22FI/AAAAAAAAADQ/WYER6tbNoJQ/s320/kernelpanic.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5176515315092609106" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-8030934709845915497?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/8030934709845915497/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=8030934709845915497' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8030934709845915497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8030934709845915497'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/03/ms-fiabilidad-por-si-linux-rompe.html' title='Más fiabilidad: por si Linux rompe'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_NG_JlK-fTWk/R9atQLJ22FI/AAAAAAAAADQ/WYER6tbNoJQ/s72-c/kernelpanic.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-4482728555922743698</id><published>2008-02-15T11:43:00.002+01:00</published><updated>2008-02-15T12:08:05.876+01:00</updated><title type='text'>SSH: seguridad básica</title><content type='html'>OpenSSH es el estándar en lo que a conexión remota se refiere, de ahí que muchos de los ataques se dirijan específicamente a este servicio. En entradas anteriores hemos visto como proteger una máquina contra un ataque basado en diccionario, utilizando el paquete Denyhosts:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://joservilas.blogspot.com/2006/07/denyhosts-no-ms-flood-mi-sshd.html"&gt;http://joservilas.blogspot.com/2006/07/denyhosts-no-ms-flood-mi-sshd.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora veremos como efectuar una configuración muy simple pero a la vez segura para optimizar el acceso al servicio, toqueteando el fichero de configuración &lt;span style="font-style:italic;"&gt;/etc/ssh/sshd_config&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;Lo primero será deshabilitar el acceso del superusuario (root) de forma remota&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;PermitRootLogin no&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;o, si lo queremos, dejar que acceda pero nunca mediante password, obligándolo a utilizar un juego de claves ssh que se deberán almacenar en &lt;span style="font-style:italic;"&gt;/root/.ssh/authorised_keys&lt;/span&gt; o en el propio fichero de configuración&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;PermitRootLogin without-password&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Siguiendo con la misma política, será interesante indicar (si el número no es grande) los usuarios que pueden acceder al sistema, en lugar de permitirlos todos añadiendo la(s) línea(s)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;AllowUsers nombre_de_usuario&lt;br /&gt;AllowUsers jose&lt;br /&gt;AllowUsers pepe&lt;br /&gt;...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;y aunque el valor "&lt;span style="font-style:italic;"&gt;PermitRootLogin&lt;/span&gt;" esté marcado como "&lt;span style="font-style:italic;"&gt;yes&lt;/span&gt;", si no marcamos una línea "&lt;span style="font-style:italic;"&gt;AllowUsers root&lt;/span&gt;", el sistema no validará al superusuario.&lt;br /&gt;&lt;br /&gt;Como complemento a este parámetro, podemos especificar la(s) máquina(s) desde la(s) que podremos acceder, denegando los restantes intentos&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;AllowUsers jose@172.16.0.5&lt;br /&gt;AllowUsers jose@mustafar&lt;br /&gt;AllowUsers jose@mi_isp.mi_host.com&lt;br /&gt;...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;apartado en el que se pueden utilizar comodines&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;AllowUsers jose@192.168.*&lt;br /&gt;...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Por último, es muy probable que no se necesite autentificación PAM, salvo que utilicemos un servidor LDAP o similar, con lo que no está de más deshabilitar esta entrada (ya que OpenSSH sabe de sobra donde validar usuarios)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;UsePam no&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Como complemento, podremos utilizar DenyHosts, TcpWrappers o forzar la validación mediante pares de certificados, pero tal cual, ya se trata de una configuración realmente segura (salvo la predecible posibilidad que se deriva de la "mala praxis" de acceder desde redes no fiables con el riesgo de un ataque spoofing).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-4482728555922743698?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/4482728555922743698/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=4482728555922743698' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/4482728555922743698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/4482728555922743698'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/02/ssh-seguridad-bsica.html' title='SSH: seguridad básica'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-5189266624370054093</id><published>2008-02-01T12:28:00.000+01:00</published><updated>2008-02-01T12:47:22.449+01:00</updated><title type='text'>Python: Crear una clase de properties</title><content type='html'>Si se ha trabajado con otros lenguajes de programación orientados a objetos como Java o .NET, probablemente se estará acostumbrado al uso de clases con properties para, por ejemplo, construir modelos de datos.&lt;br /&gt;Python se comporta exactamente igual, con la salvedad que no existen palabras reservadas para este efecto como el caso de .NET (recomiendo la lectura del artículo de Guido: &lt;a href="http://www.python.org/download/releases/2.2.3/descrintro/"&gt;Unifying types and classes in Python&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Veamos un ejemplo simple sobre como crear un modelo de datos para una persona utilizando Python, que derive de un objeto (por definir):&lt;br /&gt;&lt;br /&gt;class persona(objeto):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;def __init__(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.nombre = ""&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.apellido1 = ""&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.apellido2 = ""&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;def _setNombre(self,valor):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.nombre = valor&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;def _setPrimerApellido(self,valor):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.apellido1 = valor&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;def _setSegundoApellido(self,valor):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.apellido2 = valor&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;def _getNombre(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return self.nombre&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;def _getApellidos(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return self.apellido1 + " " + self.apellido2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;def _getPropiedadSoloLectura(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return "Valor de solo lectura"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-5189266624370054093?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/5189266624370054093/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=5189266624370054093' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/5189266624370054093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/5189266624370054093'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/02/python-crear-una-clase-de-properties.html' title='Python: Crear una clase de properties'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-8659288828248454732</id><published>2008-01-30T16:21:00.000+01:00</published><updated>2008-01-30T16:28:01.128+01:00</updated><title type='text'>Python: Validar un NIF o un CIF</title><content type='html'>He aquí una clase importable muy útil con el algoritmo para validar CIFs y NIFs. Tiene un único método para la validación, en el que devuelve un tipo Boolean:&lt;br /&gt;&lt;a href="http://www.nomorepasting.com/getpaste.php?pasteid=10745"&gt;&lt;br /&gt;http://www.nomorepasting.com/getpaste.php?pasteid=10745&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_NG_JlK-fTWk/R6CWkIg6zWI/AAAAAAAAACs/QhkQsN-1mBg/s1600-h/nifcif.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_NG_JlK-fTWk/R6CWkIg6zWI/AAAAAAAAACs/QhkQsN-1mBg/s320/nifcif.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5161290720471600482" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-8659288828248454732?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/8659288828248454732/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=8659288828248454732' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8659288828248454732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8659288828248454732'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/01/python-validar-un-nif-o-un-cif.html' title='Python: Validar un NIF o un CIF'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_NG_JlK-fTWk/R6CWkIg6zWI/AAAAAAAAACs/QhkQsN-1mBg/s72-c/nifcif.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-3766186089979239230</id><published>2008-01-29T15:53:00.000+01:00</published><updated>2008-01-29T16:08:43.804+01:00</updated><title type='text'>Carpetas compartidas con Windows en 1 minuto</title><content type='html'>En la red hay mil y un tutoriales sobre como instalar un servidor Samba para disponer de recursos compartidos con Windows, pero todos ellos orientados a la gestión de usuarios con o sin PDC. &lt;br /&gt;Este pequeño tutorial nos va a permitir compartir en un minuto o menos un directorio de nuestro Linux con permisos de lectura/escritura para todos los usuarios que estén en nuestra red, sin que se tenga que poner una contraseña.&lt;br /&gt;&lt;br /&gt;1.- Instalar samba&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;apt-get install samba&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2.- OPCIONAL. Crear el directorio que queremos compartir y permitir el acceso a todo el mundo&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;mkdir /home/compartido&lt;br /&gt;chown nobody:nogroup /home/compartido&lt;br /&gt;chmod -R 777 /home/compartido&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3.- Editar el fichero de configuración de Samba /etc/samba/smb.conf y tocar los siguientes parámetros del apartado [GLOBAL] (si no existen, crearlos y si están comentados por un ; o un #, quitar el comentario)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;workgroup = MI_GRUPO_TRABAJO&lt;br /&gt;&lt;br /&gt;netbios name = Mi nombre de servidor&lt;br /&gt;&lt;br /&gt;security = share&lt;br /&gt;&lt;br /&gt;admin users = administrador guest&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;4.- Al final del archivo de configuración /etc/samba/smb.conf añadir el nuevo recurso compartido&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;[compartido]&lt;br /&gt;        comment = Archivos Compartidos&lt;br /&gt;        path = /home/compartido&lt;br /&gt;        browseable = yes&lt;br /&gt;        writable = yes&lt;br /&gt;        public = yes&lt;br /&gt;        guest ok = yes&lt;br /&gt;        create mask = 0777&lt;br /&gt;        directory mask = 0777&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;5.- Reiniciar Samba&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;/etc/init.d/samba restart&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Listo! A disfrutar de nuestro nuevo recurso de red.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-3766186089979239230?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/3766186089979239230/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=3766186089979239230' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3766186089979239230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3766186089979239230'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/01/carpetas-compartidas-con-windows-en-1.html' title='Carpetas compartidas con Windows en 1 minuto'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-143734013231223485</id><published>2008-01-29T11:04:00.000+01:00</published><updated>2008-01-29T11:30:39.475+01:00</updated><title type='text'>MySQL: Seguridad básica</title><content type='html'>Cuando hablamos de asegurar un servicio se suele entender como tal el filtrar el acceso no deseado al mismo mediante reglas de firewall. En general, servidores de uso no corporativo, utilizarán configuraciones de seguridad por defecto que, si van a ser accesibles por un colectivo, pueden no ser las adecuadas.&lt;br /&gt;Veamos un juego de reglas básico para asegurar una instalación por defecto de MySQL Server:&lt;br /&gt;&lt;br /&gt;1) Asociar el servicio al dispositivo(s) de red adecuado bind-address=127.0.0.1, denegando el acceso a otras redes, de haberlas. Establecer las reglas de firewall que se consideren adecuadas para la gestión del mismo.&lt;br /&gt;&lt;br /&gt;2) Eliminar los comodines de las tablas de acceso (GRANT). Jamás permitir contraseñas en blanco o comodines en la creación de permisos de acceso a usuarios y asegurarse de que cada usuario accede únicamente a las tablas necesarias.&lt;br /&gt;&lt;br /&gt;3) Requerir el uso de contraseñas seguras, eliminando la contraseña en blanco por defecto para root. Utilizar la opción --secure-auth para prevenir el uso de passwords crackeables.&lt;br /&gt;&lt;br /&gt;4) Revisar los permisos de los ficheros de configuración. Aunque se acelera el acceso, no conviene guardar las configuraciones en ficheros individuales por usuario, ya que al hacerlo así, se almacenan en texto plano. En este supuesto, deben asegurarse los ficheros con permisos 600.&lt;br /&gt;&lt;br /&gt;5) Prevenir los sniffers con cifrado en el acceso cliente/servidor, habilitando SSL en la configuración de MySQL o con un tunel SSH.&lt;br /&gt;&lt;br /&gt;6) Deshabilitar el acceso remoto, con firewall (punto 1) y arrancando el servicio con la opción --skip-networking&lt;br /&gt;&lt;br /&gt;7) Revisar periódicamente los logs&lt;br /&gt;&lt;br /&gt;Con este juego de medidas básicas podemos disponer de un servidor fiable y robusto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-143734013231223485?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/143734013231223485/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=143734013231223485' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/143734013231223485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/143734013231223485'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2008/01/mysql-seguridad-bsica.html' title='MySQL: Seguridad básica'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-535650021471673557</id><published>2007-12-24T19:12:00.000+01:00</published><updated>2007-12-24T19:37:28.151+01:00</updated><title type='text'>Datos seguros con sistema de ficheros encriptado</title><content type='html'>Para el administrador de sistemas es esencial el uso de un "password ring", tal como ZSafe, MyPassWordSafe o KeyPass, entre otros. Pero desde que la LOPD es ley, mantener a salvo datos sensibles de clientes, buzones de contactos o documentos bancarios es una tarea prioritaria.&lt;br /&gt;Una solución muy elegante para estos casos, en lugar de encriptar el sistema de ficheros al completo, es crear un sistema del tipo loopback, mantenerlo cifrado y montarlo/desmontarlo según sea necesario. &lt;br /&gt;Veamos los pasos a seguir para conseguirlo:&lt;br /&gt;&lt;br /&gt;1) Cargar los módulos de cifrado&lt;br /&gt;&lt;br /&gt;modprobe cryptoloop&lt;br /&gt;modprobe aes&lt;br /&gt;&lt;br /&gt;(si no se dispone de ellos, se bajan precompilados para kernels de stock usando apt-get)&lt;br /&gt;&lt;br /&gt;2) Crear la imagen. En este ejemplo le indicamos que tendrá un tamaño inicial de 100Mb (bs=1MB count=100)&lt;br /&gt;&lt;br /&gt;dd if=/dev/urandom of=cryto_fs.img bs=1M count=100&lt;br /&gt;&lt;br /&gt;3) Asociar la imagen creada al sistema loopback e indicarle que va a estar cifrada con AES 128bit&lt;br /&gt;&lt;br /&gt;losetup -e aes /dev/loop0 crypto_fs.img&lt;br /&gt;Password:&lt;br /&gt;&lt;br /&gt;4) Formatear en el sistema de ficheros preferido&lt;br /&gt;&lt;br /&gt;mkfs -t ext3 /dev/loop0&lt;br /&gt;&lt;br /&gt;5) Montar en el directorio de trabajo seleccionado&lt;br /&gt;&lt;br /&gt;mount /dev/loop0&lt;br /&gt;mount -o loop,encryption=aes crypto_fs.img /home/jose/datos_sensibles/&lt;br /&gt;&lt;br /&gt;En este punto, nos pedirá la contraseña de cifrado y podremos comenzar a trabajar con nuestro sistema de ficheros seguro.&lt;br /&gt;&lt;br /&gt;La única pega es que para este tipo de ficheros, no nos funcionará el montado en arranque mediante fstab (tendremos que facilitar la contraseña igual), lo cual, aunque incordie, es una medida de seguridad de lo más obvio.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-535650021471673557?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/535650021471673557/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=535650021471673557' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/535650021471673557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/535650021471673557'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/12/datos-seguros-con-sistema-de-ficheros.html' title='Datos seguros con sistema de ficheros encriptado'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-5200838823040917924</id><published>2007-12-09T22:24:00.000+01:00</published><updated>2007-12-09T22:30:27.645+01:00</updated><title type='text'>Python: Leer los titulares de un rss de noticias</title><content type='html'>Pongamos por caso que necesitamos extraer los titulares de un xml (rss) de un periódico. Lo más fácil será crear un parseador xml con sax o minidom que extraiga los datos contenidos entre los tags "title". En mi caso, esta función simple que hace uso de minidom, me ha aliviado el proceso más de una vez:&lt;br /&gt;&lt;br /&gt;def buscaXMLTag(xmlFile,xmlTag):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultList = []&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dom = minidom.parse(xmlFile)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elements = dom.getElementsByTagName(xmlTag)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if len(elements) != 0:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for i in range(0,len(elements)):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;resultList.extend([elements[i].childNodes[0].nodeValue])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# O ficheiro non ten tags sobre os que buscamos&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pass&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;except:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# O ficheiro non existe ou non se pode abrir&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pass&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return resultList&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-5200838823040917924?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/5200838823040917924/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=5200838823040917924' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/5200838823040917924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/5200838823040917924'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/12/python-leer-los-titulares-de-un-rss-de.html' title='Python: Leer los titulares de un rss de noticias'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-7597359080385137771</id><published>2007-11-19T11:31:00.000+01:00</published><updated>2007-11-19T11:43:12.792+01:00</updated><title type='text'>Python: Calculando la fecha de ayer y la de mañana</title><content type='html'>&lt;span style="font-style:italic;"&gt;Esta es una pregunta que suelen realizarme muchas veces, así que queda por escrito para futuras consultas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Como es lógico, la fecha de ayer y mañana se calculan restando uno o sumando uno a la fecha de hoy. Pero claro, hay que indicar que lo que se suman son días, no un número entero. Esto se realiza con el módulo datetime:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;#!/usr/bin/python&lt;br /&gt;# -*- coding: iso-8859-15 -*-&lt;br /&gt;&lt;br /&gt;import datetime&lt;br /&gt;&lt;br /&gt;# La fecha de hoy es:&lt;br /&gt;hoy = datetime.datetime.today()&lt;br /&gt;&lt;br /&gt;# Para calcular la de ayer, restamos un día&lt;br /&gt;ayer = hoy + datetime.timedelta(days=-1)&lt;br /&gt;&lt;br /&gt;# Y para mañana, sumamos un día&lt;br /&gt;mañana = hoy + datetime.timedelta(days=1)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-7597359080385137771?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/7597359080385137771/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=7597359080385137771' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7597359080385137771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7597359080385137771'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/11/python-calculando-la-fecha-de-ayer-y-la.html' title='Python: Calculando la fecha de ayer y la de mañana'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-671050765355938415</id><published>2007-11-05T15:26:00.000+01:00</published><updated>2007-11-05T15:27:39.809+01:00</updated><title type='text'>Python: ¿En qué día nos encontramos?</title><content type='html'>En ocasiones puede que necesitemos saber el día de la semana de una fecha en concreto, que podemos realizar con el siguiente código:&lt;br /&gt;&lt;br /&gt;import datetime&lt;br /&gt;dicDays = {'MONDAY':'Lunes','TUESDAY':'Martes','WEDNESDAY':'Miercoles','THURSDAY':'Jueves', \&lt;br /&gt;           'FRIDAY':'Viernes','SATURNDAY':'Sabado','SUNDAY':'Domingo'}&lt;br /&gt;anho = 2007&lt;br /&gt;mes = 11&lt;br /&gt;dia = 05&lt;br /&gt;fecha = datetime.date(anho, mes, dia)&lt;br /&gt;print dicDays[fecha.strftime('%A').upper()]&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_NG_JlK-fTWk/Ry8oPyi_ZGI/AAAAAAAAACk/2emP4r3EXFE/s1600-h/datetime.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_NG_JlK-fTWk/Ry8oPyi_ZGI/AAAAAAAAACk/2emP4r3EXFE/s320/datetime.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5129362752329966690" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-671050765355938415?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/671050765355938415/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=671050765355938415' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/671050765355938415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/671050765355938415'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/11/python-en-qu-da-nos-encontramos.html' title='Python: ¿En qué día nos encontramos?'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_NG_JlK-fTWk/Ry8oPyi_ZGI/AAAAAAAAACk/2emP4r3EXFE/s72-c/datetime.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-909719826975166025</id><published>2007-10-23T19:06:00.000+02:00</published><updated>2007-10-23T20:11:02.506+02:00</updated><title type='text'>Tratando HTML con Python</title><content type='html'>Cada vez que toca lidiar con html pasa lo mismo: ¿nos hacemos un parseador "a palo seco" que nos sirva únicamente para esa web o nos peleamos con los módulos de pyxml?&lt;br /&gt;&lt;br /&gt;El proceso más manual, suele ser útil para nimiedades pero cuando queremos hacer algo más o menos universal es bueno echar mano de PyXml o libxml2dom (véase más sobre libxml2dom y PyXML en el siguiente enlace: &lt;a href="http://www.boddie.org.uk/python/HTML.html"&gt;http://www.boddie.org.uk/python/HTML.html&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;En esta receta vamos a ver como descargar un documento y asegurarnos de que no hay código mal formado.&lt;br /&gt;&lt;br /&gt;1.- Para descargar un documento, el módulo urllib nos facilita mucho el trabajo. La siguiente función descarga un documento pasándole el nombre de dominio, la ruta del fichero a descargar y un fichero temporal donde almacenar los datos:&lt;br /&gt;&lt;br /&gt;def getWebPage(nomeDominio,arquivo,fichTemporal):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'''&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Descarga un documento de un site remoto. El nombre de cominio&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;debe de ser pasado sin http://&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'''&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;import urllib&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;servidor = httplib.HTTP(nomeDominio)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;servidor.putrequest('GET',arquivo)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;servidor.putheader('Accept','text/html')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;servidor.endheaders()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;errcode, errmsh, replyheader = servidor.getreply()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (errcode != 200):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# Significa que no se puede acceder al servicio&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print errcode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;descargado = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;codigoHtml = servidor.getfile()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;datos = codigoHtml.readlines()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;codigoHtml.close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wTmp = open(fichTemporal,'w') # en binario wb si es un zip, jpg, etc&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for line in datos:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wTmp.write(line)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wTmp.close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;descargado = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return descargado&lt;br /&gt;&lt;br /&gt;2.- Recorremos el código para ordenarlo, limpiarlo y asegurarnos de que se quede sin "malformaciones". Podemos hacerlo a mano, pero existe un módulo llamado &lt;a href="http://www.crummy.com/software/BeautifulSoup/"&gt;Beautiful Soup&lt;/a&gt; que lo hace por nosotros. (Beautiful Soup se puede descargar del siguiente enlace &lt;a href="http://www.crummy.com/software/BeautifulSoup/#Download"&gt;http://www.crummy.com/software/BeautifulSoup/#Download&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Una vez instalado podemos hacer uso de sus bondades para limpiar el código:&lt;br /&gt;&lt;br /&gt;from BeautifulSoup import BeautifulSoup&lt;br /&gt;&lt;br /&gt;limpiador = BeautifulSoup(variable_con_codigo_sucio)&lt;br /&gt;codigo_limpio = limpiador.prettify()&lt;br /&gt;&lt;br /&gt;Con esto ya nos queda el código perfecto para pasárselo a PyXML&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-909719826975166025?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/909719826975166025/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=909719826975166025' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/909719826975166025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/909719826975166025'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/10/tratando-html-con-python.html' title='Tratando HTML con Python'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-39591680231973854</id><published>2007-09-13T19:11:00.000+02:00</published><updated>2007-09-13T19:32:02.740+02:00</updated><title type='text'>Broadcom Corporation Dell Wireless 1390 WLAN Mini-PCI fácil con Debian Etch/Lenny</title><content type='html'>&lt;span style="font-style:italic;"&gt;Esta tarjeta inalámbrica siempre ha sido muy puñetera de instalar (en algunos equipos funciona a la primera, en otros te desespera) y cuando se da instalado, luego resulta que el network-manager no la ve o que se valida nada bien con redes encriptadas. Aunque existen multitud de how-to(s) colgados, he aquí los dos métodos de instalación posible:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Instalación para Debian Etch&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1. Deshabilitar el módulo que trae el kernel de stock para esta tarjeta&lt;br /&gt;&lt;br /&gt;echo "blacklist bcm43xx" &gt;&gt; /etc/modprobe.d/blacklist&lt;br /&gt;rmmod bcm43xx&lt;br /&gt;&lt;br /&gt;2. Instalar los paquetes necesarios y compilar ndiswrapper&lt;br /&gt;&lt;br /&gt;apt-get install build-essential module-assistant ndiswrapper-common cabextract&lt;br /&gt;m-a update&lt;br /&gt;m-a prepare&lt;br /&gt;m-a a-i ndiswrapper&lt;br /&gt;&lt;br /&gt;3. Obtener y cargar los controladores de Windows para ndiswrapper&lt;br /&gt;&lt;br /&gt;mkdir /usr/src/drivers-wifi&lt;br /&gt;cd /usr/src/drivers-wifi/&lt;br /&gt;wget ftp://ftp.hp.com/pub/softpaq/sp33001-33500/sp33008.exe &lt;br /&gt;cabextract sp33008.exe&lt;br /&gt;ndiswrapper -i bcmwl5.inf&lt;br /&gt;&lt;br /&gt;4. Configurar y cargar ndiswrapper&lt;br /&gt;&lt;br /&gt;cp /etc/ndiswrapper/bcmwl5/14E4:4324.5.conf /etc/ndiswrapper/bcmwl5/.conf&lt;br /&gt;Editar el archivo /etc/ndiswrapper/bcmwl5/.conf y cambiar el valor Afterburner|1  a Afterburner|0&lt;br /&gt;echo "ndiswrapper" &gt;&gt; /etc/modules&lt;br /&gt;depmod -a&lt;br /&gt;modprobe ndiswrapper&lt;br /&gt;&lt;br /&gt;Con esto la tarjeta estará reconocida y se podrá configurar desde network-manager, consola u otra aplicación&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Instalación para Debian Lenny/Sid&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En Sid todo es más fácil, basta simplemente con instalar&lt;br /&gt;&lt;br /&gt;apt-get install bcm43xx-fwcutter&lt;br /&gt;&lt;br /&gt;y listo, tarjeta funcionando, ya que el kernel 2.6.21 que trae esta distro utiliza este módulo no propietario.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-39591680231973854?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/39591680231973854/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=39591680231973854' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/39591680231973854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/39591680231973854'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/09/broadcom-corporation-dell-wireless-1390.html' title='Broadcom Corporation Dell Wireless 1390 WLAN Mini-PCI fácil con Debian Etch/Lenny'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-6129058490055331541</id><published>2007-07-18T09:21:00.000+02:00</published><updated>2007-07-18T10:08:32.051+02:00</updated><title type='text'>How To: Filtar el tráfico P2P mediante un firewall Linux con iptables</title><content type='html'>Puede que no sea una cuestión que nos quite el sueño el filtrar tráfico P2P, pero cuando en una red empresarial, el personal se anima a descargarse la película del momento, el último disco de Shakira y algún que otro vídeo para añadir a la pornoteca, te dices que si, que ha llegado el momento.&lt;br /&gt;Ya hemos visto en anteriores posts que f&lt;a href="http://joservilas.blogspot.com/2006/07/denegar-acceso-msn-messenger-hotmail.html"&gt;iltrar las conexiones a sistemas de chat como el IRC o el MSN&lt;/a&gt; es realmente fácil utilizando sencillas reglas de iptables, pero con el P2P no pinta tan fácil, por la forma en que P2P funciona:&lt;br /&gt;&lt;br /&gt;Para evitar que un equipo de la red interna pueda ser accesible desde el exterior utilizamos un firewall que nos cierre los puertos y que, al mismo tiempo, permita a los equipos de la LAN acceder libremente a Internet. &lt;br /&gt;Pero el P2P es realmente puñetero ya ha sido programado para saltarse esta limitación. Al abrir un cliente P2P en la LAN se establece una conexión con el exterior que el firewall considera confiable y a partir de este momento los paquetes que vengan de vuelta están marcados como ESTABLISHED,RELATED, con lo que pasan directamente al cliente LAN, saltándose todo tipo de filtro. Otros clientes más avanzados envían los datos directamente en UDP, cuyos datagramas no almacenan tanta información como TCP y marcan los paquetes como RELATED en origen, con lo que el firewall tampoco se entera y deja pasar los datos como perico por su casa.&lt;br /&gt;&lt;br /&gt;Se me ocurren varias soluciones:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;1)&lt;/span&gt; Marcar los paquetes que considero P2P y eliminarlos, pero esto tendrá un coste de CPU que no se si estoy dispuesto a asumir.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;2)&lt;/span&gt; Instalar un proxy y hacer pasar las peticiones web,ftp y correo a través del mismo pero... ¿y si alguien utiliza VoIP por ejemplo?&lt;br /&gt;&lt;span style="font-style:italic;"&gt;3)&lt;/span&gt; Utilizar la librería ipp2p para iptables que provee de métodos de detección de paquetes según protocolos P2P, con lo que podemos hacer filtros más exactos.&lt;br /&gt;&lt;br /&gt;Así que, optamos por utilizar ipp2p. Los pasos para instalarlo son los siguientes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1)&lt;/span&gt; Instalar los paquetes necesarios (obviamos la instalación de los compiladores):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;coruscant:~# apt-get install iptables-dev kernel-headers-`uname-r` &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2)&lt;/span&gt; Descargarse los fuentes de la versión de iptables que tenemos y descomprimirlos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;coruscant:~# iptables --version&lt;br /&gt;iptables v1.3.6&lt;br /&gt;coruscant:/usr/src# wget http://www.netfilter.org/projects/iptables/files/iptables-1.3.6.tar.bz2      &lt;br /&gt;coruscant:/usr/src# bunzip iptables-1.3.6.tar.bz2; tar xf iptables-1.3.6.tar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3)&lt;/span&gt; Descargarse la última versión de ipp2p de la web &lt;a href="http://www.ipp2p.org/downloads_en.html"&gt;http://www.ipp2p.org/downloads_en.html&lt;/a&gt; a día de hoy y descomprimirlos: &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;coruscant:/usr/src# wget http://www.ipp2p.org/downloads/ipp2p-0.8.1_rc1.tar.gz ; tar zxvf ipp2p-0.8.1_rc1.tar.gz&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4)&lt;/span&gt; Entrar en el directorio del ipp2p y editar el Makefile para que apunte a los fuentes del iptables que nos hemos descargado:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;coruscant:/usr/src/ipp2p-0.8.1_rc1# vi Makefile&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;y cambiamos la variable a nuestro valor:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;IPTABLES_SRC = /usr/src/iptables-1.3.6&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5)&lt;/span&gt; Compilamos la librería&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;coruscant:/usr/src/ipp2p-0.8.1_rc1# make&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6)&lt;/span&gt; Copiamos los módulos compilados y los cargamos&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;coruscant:/usr/src/ipp2p-0.8.1_rc1# cp ibipt_ipp2p.so /lib/modules/iptables&lt;br /&gt;coruscant:/usr/src/ipp2p-0.8.1_rc1# cp ipt_ipp2p.ko /lib/modules/`uname -r`/kernel/net/ipv4 &lt;br /&gt;coruscant:/usr/src/ipp2p-0.8.1_rc1# depmod -ae&lt;br /&gt;coruscant:/usr/src/ipp2p-0.8.1_rc1# modprobe ipt_ipp2p&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;7)&lt;/span&gt; Añadir a nuestro script iptables las líneas necesarias para que comience a filtrar, por ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;# Adiós edonkey, emule y demás amigos&lt;br /&gt;iptables -I FORWARD -p tcp -m ipp2p --edk -j DROP&lt;br /&gt;# Adiós bittorrent y amigos&lt;br /&gt;iptables -I FORWARD -p tcp -m ipp2p --bit -j DROP&lt;br /&gt;# Adiños kazza &amp; CO&lt;br /&gt;iptables -I FORWARD -p tcp -m ipp2p --kazaa -j DROP&lt;br /&gt;...&lt;br /&gt;...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Por último recomiendaría hacerse con un buen palo para cuando los usuarios se pongan tontines por haberles cortado las descargas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-6129058490055331541?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/6129058490055331541/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=6129058490055331541' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6129058490055331541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6129058490055331541'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/07/how-to-filtar-el-trfico-p2p-mediante-un.html' title='How To: Filtar el tráfico P2P mediante un firewall Linux con iptables'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-3310391630667307719</id><published>2007-07-16T08:32:00.000+02:00</published><updated>2007-07-16T09:10:13.940+02:00</updated><title type='text'>Espabilando un pelín a Apache2</title><content type='html'>&lt;span style="font-style:italic;"&gt;Nadie discute que Apache2 es ideal para instalar en grandes servidores que atienden miles de peticiones al día, ya que está perfectamente preparado para ello gracias a "elementos" como los threads. Pero puede ser que necesitemos instalar Apache como pequeño servidor de pruebas o corparativo e incluso como servidor público en una máquina con el rendimiento justito. En este caso es recomendable ajustar al detalle los valores del servidor para hacerlo rendir sin que tengamos que pagar un alto precio en cuando a consumo de recursos se refiere. Algunos de los apartados de la configuración que podemos tocar para mejorar la eficiencia son los siguientes:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;MaxClients y Max/MinSpareServers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En este apartado podremos ajustar el número de procesos padres/hijos a unos valores más adecuados al uso que deseamos darle al servidor. Es muy común la tendencia a reducir los "MaxClients" hasta valores ínfimos, pensando en la regla de tres de que menos procesos, menor consumo de memoria. Y si, hasta aquí, esta afirmación es cierta, pero en cuando realizamos peticiones al servidor web, si este valor es bajo el servidor puede hasta bloquearse por momentos, denegar conexiones e incluso permanecer totalmente inoperante. Por la contra, un alto número de "MaxClients" se traduce en un rendimiento positivo del servidor pero en una carga de memoria dependiendo del número de conexiones establecidas. Un número importante de "MaxClients" se va a traducir por tanto en un rendimiento positivo pero debemos ser cuidadosos con este valor cuando el servidor es de acceso externo. &lt;br /&gt;En cuanto a los procesos hijos "Max/MinSpareServers" la situación es similar. No por poner un valor bajo en estas etiquetas vamos a tener un rendimiento mejor, ya que la situación es igual que en el caso anterior. Un valor bajo de estos valores obligará al servidor a abrir más procesos padres para satisfacer la demanda de peticiones. Al igual que en el caso anterior, es una pescadilla que se muerde la cola, ya que reduciendo el número de hijos el consumo de memoria bajará pero la carga del sistema será mayor hemos calculado mal estos números, volviendo al servidor inoperante.&lt;br /&gt;Hay desmitificar por tanto, que el reducir el número de padres/hijos a valores ínfimos no es sinónimo de rendimiento y, al contrario, podemos pagar un alto precio en consumo de recursos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;HostnameLookup&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Con esta directiva Apache intenta resolver los nombres de host en lugar de utilizar las direcciones IP. Esto puede ser útil para log o para aplicaciones CGI pero requiere un esfuerzo que nos podemos ahorrar ya que, por lo general, nos dará igual tratar con la IP que con el nombre. Desactivando esta directiva optimizaremos, por tanto, nuestro servicio.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;AllowOverride&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta función es muy útil y muy conocida. Mediante ficheros .htaccess guardados en cada directorio, podemos controlar el acceso a misma mediante juegos de usuario/pwd. Esto es muy útil pero, ¿vamos a usarlo en nuestro servidor? Porque si no es así, podemos desactivarlo y ahorrarle al servicio que por cada directorio que lea, está buscando el fichero.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;FastCGI&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si vamos a hacer un uso intensivo de CGI, FastCGI es una interesante alternativa al módulo que viene por defecto en Apache2. El rendimiento de este módulo alternativo es sensiblemente mejor que los mod_X que vienen en las distribuciones de Apache2 (mod_cgi,mod_php...). Más información sobre FastCGI puede encontrarse en la web del proyecto &lt;a href="http://www.fastcgi.com/"&gt;http://www.fastcgi.com/&lt;/a&gt;, así como el API para diferentes lenguajes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-3310391630667307719?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/3310391630667307719/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=3310391630667307719' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3310391630667307719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3310391630667307719'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/07/espabilando-un-peln-apache2.html' title='Espabilando un pelín a Apache2'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-8361631444232528168</id><published>2007-07-06T09:31:00.000+02:00</published><updated>2007-07-06T09:44:28.744+02:00</updated><title type='text'>Python: Información meteorológica fácil con pymetar</title><content type='html'>Necesitaba escribir un script que me capturase la información meteorológica para mostrar en pantalla los resultados. Dándole unas vueltas a Google, he visto que con pymetar es una tontería, ya que nos da todo hecho para que podamos atacar a una estación meteorológica de las que hay instaladas en los aereopuertos. Para conseguir el código correspondiente a la estación que nos interesa, debemos mirar en &lt;a href="http://www.nws.noaa.gov/tg/siteloc.shtml"&gt;http://www.nws.noaa.gov/tg/siteloc.shtml&lt;/a&gt; y cambiar el valor de la variable stationId. &lt;br /&gt;&lt;br /&gt;En este ejemplo simple, utilizo dos diccionarios, uno para traducir a español el resultado y otro para cargar un gráfico según el estado del cielo. El módulo pymetar nos prevee de más métodos, que pueden consultarse en la documentación del módulo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;#!/usr/bin/python&lt;br /&gt;# -*- coding: utf-8 -*-&lt;br /&gt;&lt;br /&gt;import pymetar&lt;br /&gt;import sys&lt;br /&gt;&lt;br /&gt;# Global vars&lt;br /&gt;stationId = 'LEPA'  # Codigo de la estacion meteorologica &lt;br /&gt;equivalencias = {'N':'Norte','S':'Sur','E':'Este', \&lt;br /&gt;                 'W':'Oeste','NW':'Noroeste','NE':'Noreste','SSW':'Sur/Suroeste',&lt;br /&gt;                 'SSE':'Sur/Sureste','NNE':'Norte/Noreste','NNW':'Norte/Noroeste','SE':'Sureste', \&lt;br /&gt;                 'SW':'Suroeste','ENE':'Este/Noreste','WNW':'Oeste/Noroeste', \&lt;br /&gt;                 'ESE':'Este/Sureste','WSW':'Oeste/Suroeste'}&lt;br /&gt;&lt;br /&gt;iconos = {'sun':'sol.png','suncloud':'solnube.png','cloud':'nubes.png','rain':'lluvia.png', \&lt;br /&gt;          'snow':'nieve.png','storm':'tormenta.png','fog':'niebla.png'}&lt;br /&gt;&lt;br /&gt;rf=pymetar.ReportFetcher(stationId)&lt;br /&gt;rep=rf.FetchReport()&lt;br /&gt;rp=pymetar.ReportParser()&lt;br /&gt;wData=rp.ParseReport(rep)&lt;br /&gt;&lt;br /&gt;if wData == None:&lt;br /&gt;    print 'Icono: --'&lt;br /&gt;else:&lt;br /&gt;    print 'Icono: ' + iconos[wData.getPixmap()]&lt;br /&gt;    #print wData.getPixmap()&lt;br /&gt;print 'Temperatura: ' + str(int(wData.getTemperatureCelsius())) + 'ºC'&lt;br /&gt;print 'Humedad: ' + str(int(wData.getHumidity())) + '%'&lt;br /&gt;print 'Visibilidad: ' + str(int(wData.getVisibilityKilometers())) + ' Km'&lt;br /&gt;print 'Punto de condensacion: ' + str(int(wData.getDewPointCelsius())) + 'ºC'&lt;br /&gt;print 'Viento: ' + equivalencias[str(wData.getWindCompass())] + ' a ' + str(int(wData.getWindSpeed())) + ' Km/h'&lt;br /&gt;print 'Presion: ' + str(int(wData.getPressure())) + ' ba'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_NG_JlK-fTWk/Ro3yvHvlUII/AAAAAAAAACU/0ufryW9l8-0/s1600-h/pymetar.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_NG_JlK-fTWk/Ro3yvHvlUII/AAAAAAAAACU/0ufryW9l8-0/s320/pymetar.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5083986445717557378" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-8361631444232528168?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/8361631444232528168/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=8361631444232528168' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8361631444232528168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8361631444232528168'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/07/python-informacin-meteorolgica-fcil-con.html' title='Python: Información meteorológica fácil con pymetar'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_NG_JlK-fTWk/Ro3yvHvlUII/AAAAAAAAACU/0ufryW9l8-0/s72-c/pymetar.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-5897935077135061442</id><published>2007-06-19T15:53:00.000+02:00</published><updated>2007-06-19T16:21:46.446+02:00</updated><title type='text'>Herramientas de gestión de energía para portátiles bajo Debian</title><content type='html'>Puesto que &lt;a href="http://joservilas.blogspot.com/2006/07/porttiles-con-intel-speedstep-amd.html"&gt;ya hemos tratado en hilos anteriores el escalado de frecuencia de las CPU&lt;/a&gt;, vamos a ir un poco más lejos y configuraremos el "laptop mode" tan famoso que viene con los kernels 2.6 para aprovechar un poco más la gestión de energía en portátiles modernos (ACPI no APM, aunque podría valer para APM con los cambios pertinentes).&lt;br /&gt;&lt;br /&gt;Utilizando el kernel de stock de Debian Etch podemos optimizar el consumo de batería gracias a las laptop-mode-tools (si hemos compilado un kernel propio, debemos asegurarnos que hemos activado el Linux Laptop Mode en la configuración). Lo que vamos a hacer es definir los estados hibernación del portátil según los porcentajes de batería restantes y evitar el acceso al disco duro de forma continua cuando estamos utilizando las baterías. El efecto a conseguir es cargar en memoria (en la medida de lo posible) los datos que estamos utilizando en lugar de leerlos bajo demanda (video, mp3, pdf...). Esto, combinado con el escalado de frecuencia, dará más minutos a nuestro equipo.&lt;br /&gt;&lt;br /&gt;Los pasos a seguir son los siguientes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1.-&lt;/span&gt; Instalar las aplicaciones necesarias:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;apt-get install sdparm laptop-mode-tools hibernate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2.-&lt;/span&gt; Editar el fichero de configuración de las laptop mode tools y ajustar según nuestras necesidades:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;vi /etc/laptop-mode/laptop-mode.conf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En mi caso he realizado la siguiente configuración:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;# Activamos la herramienta cuando no estamos conectados a la corriente eléctrica&lt;br /&gt;ENABLE_LAPTOP_MODE_ON_BATTERY=1 &lt;br /&gt;# Herramienta desactivada si estamos usando el adaptador de corriente&lt;br /&gt;ENABLE_LAPTOP_MODE_ON_AC=0&lt;br /&gt;# Herramienta activada cuando cerramos la tapa del portátil&lt;br /&gt;ENABLE_LAPTOP_MODE_WHEN_LID_CLOSED=1&lt;br /&gt;# Desabilitamos todas las herramientas sensibles a la pérdida de datos cuando estamos en el 20% de batería restante, para evitarnos sorpresas&lt;br /&gt;MINIMUM_BATTERY_CHARGE_PERCENT=20&lt;br /&gt;# Deshabilito la herramienta ante un nivel crítico que he definido como 10% de batería restante, para evitar perder datos&lt;br /&gt;DISABLE_LAPTOP_MODE_ON_CRITICAL_BATTERY_LEVEL=10&lt;br /&gt;# Activar el escalado de frecuencia cuando usamos baterías&lt;br /&gt;CONTROL_CPU_FREQUENCY=1&lt;br /&gt;# Permito el apagado del entorno gráfico&lt;br /&gt;CONTROL_DPMS_STANDBY=1&lt;br /&gt;# Permito que la herramienta hiberne el equipo&lt;br /&gt;ENABLE_AUTO_HIBERNATION=1&lt;br /&gt;# Defino los porcentajes de batería para hibernación automática&lt;br /&gt;AUTO_HIBERNATION_BATTERY_CHARGE_PERCENT=9&lt;br /&gt;AUTO_HIBERNATION_ON_CRITICAL_BATTERY_LEVEL=5&lt;br /&gt;# Permito que la herramienta inicie las aplicaciones que necesite y monte/desmonte las unidades de datos que necesite&lt;br /&gt;CONTROL_START_STOP=1&lt;br /&gt;CONTROL_MOUNT_OPTIONS=1&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_NG_JlK-fTWk/RnfmXM3XW2I/AAAAAAAAACM/Yv9Za6Ib07c/s1600-h/laptopmode.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_NG_JlK-fTWk/RnfmXM3XW2I/AAAAAAAAACM/Yv9Za6Ib07c/s320/laptopmode.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5077780391148346210" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-5897935077135061442?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/5897935077135061442/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=5897935077135061442' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/5897935077135061442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/5897935077135061442'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/06/herramientas-de-gestin-de-energa-para.html' title='Herramientas de gestión de energía para portátiles bajo Debian'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_NG_JlK-fTWk/RnfmXM3XW2I/AAAAAAAAACM/Yv9Za6Ib07c/s72-c/laptopmode.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-2689660823491782662</id><published>2007-06-12T09:09:00.000+02:00</published><updated>2007-06-12T09:15:10.830+02:00</updated><title type='text'>Actualizado el bot que rastrea urls en el IRC</title><content type='html'>Por fin he podido actualizar el bot (pyHardware) para hacerlo un poco más listo que antes. Entre las nuevas funciones destacan:&lt;br /&gt;&lt;br /&gt;- Lista negra de urls a no capturar&lt;br /&gt;- Solucionado el problema de captura doble de urls&lt;br /&gt;- Extracción del tag "title" de la url obtenida&lt;br /&gt;- Extracción de una imagen de tamaño definido de la url obtenida&lt;br /&gt;- Uploading automático del RSS&lt;br /&gt;- Comando !quit para poder matarlo&lt;br /&gt;- Implementado un auto-connect por si se cae&lt;br /&gt;&lt;br /&gt;El código fuente del bot está disponible en la dirección:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cajondesastre.net/pyHardware.txt"&gt;http://www.cajondesastre.net/pyHardware.txt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_NG_JlK-fTWk/Rm5H283XW1I/AAAAAAAAACE/ZfkzlOHlPQE/s1600-h/pyhardware.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_NG_JlK-fTWk/Rm5H283XW1I/AAAAAAAAACE/ZfkzlOHlPQE/s320/pyhardware.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5075072839469980498" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-2689660823491782662?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/2689660823491782662/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=2689660823491782662' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/2689660823491782662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/2689660823491782662'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/06/actualizado-el-bot-que-rastrea-urls-en.html' title='Actualizado el bot que rastrea urls en el IRC'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_NG_JlK-fTWk/Rm5H283XW1I/AAAAAAAAACE/ZfkzlOHlPQE/s72-c/pyhardware.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-9030794523803771714</id><published>2007-06-08T08:18:00.000+02:00</published><updated>2007-06-08T08:31:20.200+02:00</updated><title type='text'>Reciclando un equipo viejo: una gramola (jukebox) para la oficina</title><content type='html'>Para darle vida a un trasto que teníamos por aquí tirado, se nos ha ocurrido darle vida a una gramola en la que podamos subir nuestra música favorita y que nos permita seleccionar tema desde cualquier equipo sin cortar la reproducción. No confundamos este tipo de servicio con un streamer, ya que lo que no queremos hacer es reproducir en el equipo local, sinó conectar el viejo equipo al hilo musical.&lt;br /&gt;&lt;br /&gt;La primera propuesta fue Python (como no) con un módulo con glob que busque ficheros y se los pase a pymedia pero, si ya existe, ¿para qué hacerlo?&lt;br /&gt;&lt;br /&gt;Lo primero es instalar el sistema base sin X, junto con el alsa y alsa-oss por si las moscas. Aquí os dejo una captura del alsamixer que nos permite controlar el volumen en consola:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_NG_JlK-fTWk/Rmj3Rc3XW0I/AAAAAAAAAB8/I4MCDjIB88g/s1600-h/alsamixer.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_NG_JlK-fTWk/Rmj3Rc3XW0I/AAAAAAAAAB8/I4MCDjIB88g/s320/alsamixer.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5073576859411110722" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Luego instalaremos las librerías de audio (libmad, vorbis y similares) y un estupendo programa llamado moc que lanza un demonio de reproducción de audio y provee de un interface multiusuario que nos permitirá seleccionar tema desde diferentes ubicaciones.&lt;br /&gt;&lt;br /&gt;apt-get install moc moc-ffmpeg-plugin&lt;br /&gt;&lt;br /&gt;Ahora solo queda lanzarlo y darle a play más rápido que el compañero.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_NG_JlK-fTWk/Rmj3GM3XWzI/AAAAAAAAAB0/KWtDqYoZwYA/s1600-h/mocd.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_NG_JlK-fTWk/Rmj3GM3XWzI/AAAAAAAAAB0/KWtDqYoZwYA/s320/mocd.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5073576666137582386" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-9030794523803771714?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/9030794523803771714/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=9030794523803771714' title='21 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/9030794523803771714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/9030794523803771714'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/06/reciclando-un-equipo-viejo-una-gramola.html' title='Reciclando un equipo viejo: una gramola (jukebox) para la oficina'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_NG_JlK-fTWk/Rmj3Rc3XW0I/AAAAAAAAAB8/I4MCDjIB88g/s72-c/alsamixer.jpg' height='72' width='72'/><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-6468477634103684681</id><published>2007-06-07T08:24:00.000+02:00</published><updated>2007-06-07T08:50:44.964+02:00</updated><title type='text'>Imprimiendo en Debian en una Epson Aculaser C1100</title><content type='html'>La Aculaser 1100 es una impresora de gran formato de Epson, Láser Color con soporte para impresión por red. Está soportada por Bindous y Mac y en la página de Epson de pueden bajar rpms con los ppd para Suse/Mandrake/RedHat/Centos y similares. También se dispone de un tgz con el código fuente del driver, supuestamente para Debian compatibles.&lt;br /&gt;&lt;br /&gt;Tras buscar en Google diferentes soluciones he visto que lo que hace la gente es descargarse el .rpm, convertirlo a .deb e instalarlo pero... a mi no me funciona. He probado también a descargarme el ppd, incrustárselo a cups y... tampoco va. Así que vamos a instalarlo desde los fuentes:&lt;br /&gt;&lt;br /&gt;1) Descargarse los fuentes de la web de Epson:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.avasys.jp/english/linux_e/dl_laser.html"&gt;http://www.avasys.jp/english/linux_e/dl_laser.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2) Descomprimir el fichero descargado (Epson-ALC1100-filter-1.2.tar.gz) y compilar:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;tar zxf Epson-ALC1100-1.2.tar.gz&lt;br /&gt;cd Epson-ALC1100-1.2&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;make install&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Es probable que al ejecutar el script ./configure rompa con algo similar a esto:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;./configure: line 2830: test: =: unary operator expected&lt;br /&gt;configure: error: *** 'cups-config' missing, please install CUPS or fix your $PATH ***&lt;br /&gt;atreides:/usr/src/Epson-ALC1100-filter-1.2# &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para solucionarlo, vamos a la línea en cuestión (2830) del script y nos cargamos todo el if:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;vi configure (y nos vamos a la línea :2830 y borramos las siguientes líneas)&lt;br /&gt;&lt;br /&gt;if test $have_cups_config = yes; then&lt;br /&gt;   CUPS_CFLAGS=`cups-config --cflags`&lt;br /&gt;   CUPS_LDFLAGS=`cups-config --ldflags`&lt;br /&gt;   CUPS_LIBS=`cups-config --libs`&lt;br /&gt;   CUPS_IMAGE_LIBS=`cups-config --image --libs`&lt;br /&gt;   CUPS_SERVER_DIR=`cups-config --serverbin`&lt;br /&gt;   CUPS_DATA_DIR=`cups-config --datadir`&lt;br /&gt;else&lt;br /&gt;   { { echo "$as_me:$LINENO: error: *** 'cups-config' missing, please install CUPS or fix your \$PATH ***" &gt;&amp;5&lt;br /&gt;echo "$as_me: error: *** 'cups-config' missing, please install CUPS or fix your \$PATH ***" &gt;&amp;2;}&lt;br /&gt;   { (exit 1); exit 1; }; }&lt;br /&gt;fi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora ya podemos compilar&lt;br /&gt;&lt;br /&gt;3) Añadir la impresora a CUPS utilizando el ppd disponible en la carpeta ppd del tgz que hemos descomprimido:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;atreides:/usr/src/Epson-ALC1100-filter-1.2/ppd# l&lt;br /&gt;total 36&lt;br /&gt;-rw-r--r-- 1 root root 34561 2006-10-12 14:54 Epson-AL-C1100-fm3.ppd&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Los parámetros de configuración de la impresora para imprimir por red son los siguientes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;URI de la conexión: lpd://direccion_ip:515/PASSTHRU&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;center&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_NG_JlK-fTWk/RmeqDM3XWyI/AAAAAAAAABs/A8dEkDHiT9E/s1600-h/cups.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_NG_JlK-fTWk/RmeqDM3XWyI/AAAAAAAAABs/A8dEkDHiT9E/s320/cups.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5073210477225925410" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;4) Reiniciar cups y comenzar a disfrutar de la máquina&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-6468477634103684681?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/6468477634103684681/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=6468477634103684681' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6468477634103684681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6468477634103684681'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/06/imprimiendo-en-debian-en-una-epson.html' title='Imprimiendo en Debian en una Epson Aculaser C1100'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_NG_JlK-fTWk/RmeqDM3XWyI/AAAAAAAAABs/A8dEkDHiT9E/s72-c/cups.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-7390380730679825209</id><published>2007-06-05T08:19:00.000+02:00</published><updated>2007-06-05T08:24:59.006+02:00</updated><title type='text'>Yakuake, consola rápida en KDE</title><content type='html'>Tras haber echado tantas pestes durante tanto tiempo KDE, no me queda otra que reconocer que es más ligero que Gnome y que las utilidades que lo acompañan son realmente fantásticas. De entre ellas, hay una aplicación realmente útil, Yakuake.&lt;br /&gt;&lt;br /&gt;Yakuake nos provee de una consola rápida que se muestra y se esconde pulsando la tecla F12, simplemente fantástico.&lt;br /&gt;&lt;br /&gt;Para instalar sobra decir &lt;span style="font-style:italic;"&gt;apt-get install yakuake&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_NG_JlK-fTWk/RmUBhc3XWxI/AAAAAAAAABk/yagYdcAKrj4/s1600-h/yakuake.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_NG_JlK-fTWk/RmUBhc3XWxI/AAAAAAAAABk/yagYdcAKrj4/s320/yakuake.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5072462229498452754" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-7390380730679825209?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/7390380730679825209/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=7390380730679825209' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7390380730679825209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7390380730679825209'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/06/yakuake-consola-rpida-en-kde.html' title='Yakuake, consola rápida en KDE'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_NG_JlK-fTWk/RmUBhc3XWxI/AAAAAAAAABk/yagYdcAKrj4/s72-c/yakuake.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-1521006943011148401</id><published>2007-06-05T08:05:00.000+02:00</published><updated>2007-06-05T08:11:00.084+02:00</updated><title type='text'>Calculando la diferencia en días entre dos fechas con Python</title><content type='html'>Es probable que esta función exista dentro del módulo time de Python pero, al no haberla encontrado, ha tocado hacerse una más casera. &lt;br /&gt;&lt;br /&gt;El funcionamiento es simple, aportando dos fechas en formato estándar (YYYY-mm-dd) con separadores estándar (/ - .) se realiza el cálculo con una simple función, tal como sigue:&lt;br /&gt;&lt;br /&gt;#!/usr/bin/python&lt;br /&gt;&lt;br /&gt;from datetime import date&lt;br /&gt;&lt;br /&gt;def daysDifference(date1,date2):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;d1 = date(int(date1[0:4]),int(date1[5:7]),int(date1[-2:]))&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;d2 = date(int(date2[0:4]),int(date2[5:7]),int(date2[-2:]))&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;diff = d2 - d1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return diff.days&lt;br /&gt;&lt;br /&gt;if __name__=='__main__':&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;numeroDias = daysDifference('20050203','20070423')&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-1521006943011148401?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/1521006943011148401/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=1521006943011148401' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/1521006943011148401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/1521006943011148401'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/06/calculando-la-diferencia-en-das-entre.html' title='Calculando la diferencia en días entre dos fechas con Python'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-496682511982081827</id><published>2007-06-01T08:41:00.000+02:00</published><updated>2007-06-01T08:46:17.294+02:00</updated><title type='text'>Caracteres jeroglíficos en la consola, resetear el terminal</title><content type='html'>A quien no le pasa que la consola se le queda totalmente pez por haber volcado un binario por pantalla? Algo tal que así:&lt;br /&gt;&lt;br /&gt;q�x��h�ʺ�40�N$���&lt;�#�!�8�M�O#RՀ���\UP�@���%.���&lt;��UXv�Sp���N&gt;��Qɒ�7�7K�X��▒3ʩ�ͻ������7Gk�qK�=�=.*_���0!+�p��&gt;�\� 8�q�a����#@��Gv�k��N���P�u'�W�?�▒����J5�z���r}]&lt;br /&gt;&lt;br /&gt;Resolver este problema es realmente sencillo con el comando reset:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;reset&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_NG_JlK-fTWk/Rl_Aor9uSHI/AAAAAAAAABc/tcK1lJ1gvwY/s1600-h/resetcmd.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_NG_JlK-fTWk/Rl_Aor9uSHI/AAAAAAAAABc/tcK1lJ1gvwY/s320/resetcmd.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5070983510671378546" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-496682511982081827?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/496682511982081827/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=496682511982081827' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/496682511982081827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/496682511982081827'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/06/caracteres-jerogrficos-en-la-consoloa.html' title='Caracteres jeroglíficos en la consola, resetear el terminal'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_NG_JlK-fTWk/Rl_Aor9uSHI/AAAAAAAAABc/tcK1lJ1gvwY/s72-c/resetcmd.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-442043714803040426</id><published>2007-05-30T13:39:00.000+02:00</published><updated>2007-05-30T13:54:16.634+02:00</updated><title type='text'>Debian, tarjetas de red que se detectan pero no funcionan (renombrando interfaces de red)</title><content type='html'>Es un problema muy común instalar Debian y que las tarjetas de red se zurren entre ellas porque todas quieren llamarse eth0 o eth1. En especial, cuando disponemos de un interface firewire y una tarjeta Intel, ambos dispositivos luchan por hacerse con el control del nombre 'eth0', por más que se les diga que no. Lo mismo ocurre en ocasiones que disponemos de varias tarjetas Realtek combinadas con Intel e1000, etc.&lt;br /&gt;&lt;br /&gt;La solución es realmente simple para los que estamos acostumbrados a lidiar con Linux, pero para los primerizos suele ser desesperante. Veamos como solventar estas dificultades:&lt;br /&gt;&lt;br /&gt;1) (opcional) Si disponemos de un interface firewire y no lo vamos a utilizar para conectarnos a otro equipo, podemos deshabilitar el interface de red firewire:&lt;br /&gt;&lt;br /&gt;- Editamos el fichero /etc/modprobe.d/blacklist y añadimos el módulo a los dispositivos que no queremos autocargar, es decir, los módulos que no deseamos que Linux lance. Para ello creamos una línea al final del archivo de la forma:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;blacklist eth1394&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2) Editamos la configuración de udev y renombramos los interfaces de red a nuestro gusto.&lt;br /&gt;&lt;br /&gt;- Alteramos el fichero de configuración de red de udev &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;vi /etc/udev/rules.d/z25_persistent-net.rules&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- Cambiamos los nombres según el nombre del módulo que nos interese. En este ejemplo, yo he cambiado mi tarjeta nvidia integrada al interface eth0 y he puesto el firewire en eth4, la wifi la he dejado como estaba:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;# Firewire device 06e40a00b52d5045 (ohci1394)&lt;br /&gt;SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="06:e4:0a:00:c5:2f:50:45", NAME="eth4"&lt;br /&gt;&lt;br /&gt;# PCI device 0x10de:0x0269 (forcedeth)&lt;br /&gt;SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:16:d3:16:42:ff", NAME="eth0"&lt;br /&gt;&lt;br /&gt;# PCI device 0x14e4:0x4311 (ndiswrapper)&lt;br /&gt;SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:14:f5:d0:a6:87", ATTRS{type}=="1", NAME="wlan0"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3) Reiniciar y cambiar la configuración de red en /etc/network/interfaces o utilizando cualquier herramienta gráfica como NetworkManager.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-442043714803040426?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/442043714803040426/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=442043714803040426' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/442043714803040426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/442043714803040426'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/05/debian-tarjetas-de-red-que-se-detectan.html' title='Debian, tarjetas de red que se detectan pero no funcionan (renombrando interfaces de red)'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-8059810385768976837</id><published>2007-05-20T21:12:00.000+02:00</published><updated>2007-05-20T21:30:51.780+02:00</updated><title type='text'>Configurando redes inalámbricas con dos clicks en Debian</title><content type='html'>De todas las herramientas disponibles para configurar redes de forma fácil en Linux, probablemente la más versátil sea Network Manager. Ámpliamente conocida entre los usuarios de Ubuntu, son muchos los usuarios de Debian que se ven frustrados por no ser capaces de instalar esta aplicación. Esta circunstancia se debe a que los usuarios creados en Debian no forman parte del grupo "netdev", utilizado por esta estupenda aplicación.&lt;br /&gt;Los pasos necesarios para disfrutar de esta herramienta son los siguientes:&lt;br /&gt;&lt;br /&gt;1) Añadir nuestro usuario al grupo netdev&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;adduser mi_nombre_de_usuario netdev&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2) Editar el fichero de configuración de red /etc/network/interfaces para acelerar la carga del sistema, ya que Network Manager no lo usará. Podemos dejarlo de forma similar a esta, adecuándolo a los nombres de interface de cada uno:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;auto lo&lt;br /&gt;iface lo inet loopback&lt;br /&gt;allow-hotplug eth0&lt;br /&gt;allow-hotplug wlan0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3) Instalar los paquetes de Network Manager, escogiendo entre la versión KDE o Gnome según el gestor de ventanas instalado:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;apt-get install network-manager network-manager-kde &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;4) Reiniciar el sistema&lt;br /&gt;&lt;br /&gt;5) Lanzar Network Manager desde nuestro gestor de ventanas y comenzar a disfrutar de la magia&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_NG_JlK-fTWk/RlCh179uSGI/AAAAAAAAABU/Gk8s8emCYDo/s1600-h/knetworkmanager.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_NG_JlK-fTWk/RlCh179uSGI/AAAAAAAAABU/Gk8s8emCYDo/s320/knetworkmanager.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5066727528793524322" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-8059810385768976837?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/8059810385768976837/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=8059810385768976837' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8059810385768976837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/8059810385768976837'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/05/configurando-redes-inalmbricas-con-dos.html' title='Configurando redes inalámbricas con dos clicks en Debian'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_NG_JlK-fTWk/RlCh179uSGI/AAAAAAAAABU/Gk8s8emCYDo/s72-c/knetworkmanager.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-7102694014205907022</id><published>2007-05-17T16:30:00.000+02:00</published><updated>2007-05-17T16:39:55.038+02:00</updated><title type='text'>Python: Como leer tags XML de forma fácil</title><content type='html'>Las posibilidades de Python con XML son muchas pero, generalmente queremos realizar operaciones sencillas como sería leer el contenido de una etiqueta en concreto. Esto, no está tan claro en la documentación (al menos para mi) y he aquí una pequeña receta de como conseguirlo con minidom:&lt;br /&gt;&lt;br /&gt;#Importamos el módulo&lt;br /&gt;from xml.dom import minidom&lt;br /&gt;&lt;br /&gt;#Creamos una función que busca un tag dado en un fichero XML&lt;br /&gt;#y nos devuelve una lista con todos los contenidos que había&lt;br /&gt;#dentro de los tags.&lt;br /&gt;&lt;br /&gt;def buscaXMLTag(xmlFile,xmlTag):&lt;br /&gt;resultList = []&lt;br /&gt;    try:&lt;br /&gt;        dom = minidom.parse(xmlFile)&lt;br /&gt;        elements = dom.getElementsByTagName(xmlTag)&lt;br /&gt;        if len(elements) != 0:&lt;br /&gt;            for i in range(0,len(elements)):&lt;br /&gt;                resultList.extend([elements[i].childNodes[0].nodeValue])  &lt;br /&gt;        else:&lt;br /&gt;            print 'xxx No hay elementos en el fichero XML con la etiqueta ' + xmlTag&lt;br /&gt;    except:&lt;br /&gt;        print 'xxx El fichero no existe o está mal formado.'&lt;br /&gt;        print 'xxx Path del fichero: ' + xmlFile&lt;br /&gt;        print 'xxx Etiqueta sobre la que se realizó la búsqueda: ' + xmlTag&lt;br /&gt;        &lt;br /&gt;    return resultList&lt;br /&gt;&lt;br /&gt;#Ejecutamos la función y sacamos por pantalla todo el contenido encontrado&lt;br /&gt;datos = buscaXMLTag('/home/jose/test.xml','titulo')&lt;br /&gt;for elemento in datos:&lt;br /&gt;   print elemento&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-7102694014205907022?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/7102694014205907022/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=7102694014205907022' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7102694014205907022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7102694014205907022'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/05/python-como-leer-tags-xml-de-forma-fcil.html' title='Python: Como leer tags XML de forma fácil'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-3685147463341123190</id><published>2007-05-07T23:36:00.000+02:00</published><updated>2007-05-07T23:43:50.898+02:00</updated><title type='text'>La mejor forma de proteger una red wifi: esconderla entre 53.000 redes</title><content type='html'>De todas utilidades curiosas, esta destaca por ser realmente útil, un programa que simula hasta 53.000 puntos de acceso. &lt;br /&gt;Puede que nuestra red no sea del todo segura, que no tengamos más posibilidad que encriptar en WEP o que simplemente nos apetece agobiar un poquito a los "wardrivers". &lt;a href="http://www.blackalchemy.to/project/fakeap/"&gt;FakeAP&lt;/a&gt; es una utilidad que utiliza el controlador Host AP para chipsets Prism 2/2.5/3 para simular, decenas, cientos o miles de puntos de acceso falso que confundirán a un posible atacante.&lt;br /&gt;Esta utilidad puede obtenerse en la dirección: &lt;a href="http://www.blackalchemy.to/project/fakeap/"&gt;http://www.blackalchemy.to/project/fakeap/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-3685147463341123190?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/3685147463341123190/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=3685147463341123190' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3685147463341123190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3685147463341123190'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/05/la-mejor-forma-de-proteger-una-red-wifi.html' title='La mejor forma de proteger una red wifi: esconderla entre 53.000 redes'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-3405124835545796990</id><published>2007-04-25T21:26:00.000+02:00</published><updated>2007-04-25T21:58:19.192+02:00</updated><title type='text'>Módulos de red para Python</title><content type='html'>&lt;span style="font-style:italic;"&gt;No es raro volverse mico buscando el módulo necesario para ejecutar una tarea en red, como por ejemplo una funcionalidad de correo electrónico. He aquí un listado de los mismos y su función:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;socket&lt;/span&gt;: Comunicaciones a bajo nivel, TCP, UDP...&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;cgi&lt;/span&gt;: Construcción de aplicaciones web server-side&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;urllib&lt;/span&gt;: Extrae información de urls, en texto plano&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;httplib,ftplib,nntplib&lt;/span&gt;: Módulos para web, ftp y news&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;poplib, imaplib, smtplib&lt;/span&gt;: Módulos para manejar los protocolos de correo&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;telnetlib, gopherlib&lt;/span&gt;: Módulos para protocolos telnet y ghopher&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;htmllib, sgmllib, xml.*&lt;/span&gt;: Parseadores de tags html, sgml y xml&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;xdrlib&lt;/span&gt;: Codifica datos en binario para transmisión&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;email.*&lt;/span&gt;: Parsea y compone correo con asunto, adjuntos, etc&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;rfc822&lt;/span&gt;: Parseador de cabeceras de correo electrónico&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;mhlib, mailbox&lt;/span&gt;: Procesa correos y mbox complejos&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;mimetools, mimify&lt;/span&gt;: Maneja cabeceras MIME&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;multifile&lt;/span&gt;: Lee mensajes con diferentes partes&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;uu, binhex, base64, binascii, quopri, email.*&lt;/span&gt;: Codifica y decodifica datos binarios para transmitirlos como texto&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;urlparse&lt;/span&gt;: Parseador de urls en componentes&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SocketServer&lt;/span&gt;: Framework para servicios .NET&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;BaseHTTPServer&lt;/span&gt;: Implementación básica de servidor HTTP&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;simpleHTTPServer, CGIHTTPServer&lt;/span&gt;: Manejador de cabeceras HTTP&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-3405124835545796990?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/3405124835545796990/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=3405124835545796990' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3405124835545796990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3405124835545796990'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/04/mdulos-de-red-para-python.html' title='Módulos de red para Python'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-2649099804831481719</id><published>2007-04-24T23:33:00.000+02:00</published><updated>2007-04-25T00:17:40.039+02:00</updated><title type='text'>Herramientas de gestión de red</title><content type='html'>&lt;span style="font-style:italic;"&gt;Linux es un sistema conocido por sus bondades en la gestión de redes. Un gran número de firewalls y routers de diversos fabricantes incorporan núcleos de Linux ligeros. Son muchas las aplicaciones de gestión de red disponibles, conocidas por el administrador de sistemas pero extrañas para el usuario de "a pie". Algunas de las más importantes son las siguientes:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;/sbin/ifconfig&lt;/span&gt; y &lt;span style="font-weight:bold;"&gt;/sbin/route&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Con esta conocida herramienta podemos definir los parámetros de red o consultarlos. Ejecutando ifconfig sin parámetros nos muestra la configuración de red. Veamos un ejemplo de configuración de los parámetros de una red:&lt;br /&gt;&lt;br /&gt;ifconfig eth0 192.168.0.5 #Asigna esta dirección ip al interface eth0&lt;br /&gt;route add default eth0    #Indica que eth0 es nuestro interface primario&lt;br /&gt;route add default gw 192.168.0.1 #Asigna esta ip como puerta de enlace&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;/sbin/ip&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este comando nos proporciona los mismos detalles que las herramientas anteriores pero de forma más estructurada. Tiene dos formas básicas de ejecución:&lt;br /&gt;&lt;br /&gt;ip addr  #Nos muestra información sobre los adaptadores hardware&lt;br /&gt;ip route #Muestra información sobre ip y las rutas de acceso&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_NG_JlK-fTWk/Ri6B6Ey1zSI/AAAAAAAAABE/Ayz-hoX4Z6Q/s1600-h/ipaddr.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_NG_JlK-fTWk/Ri6B6Ey1zSI/AAAAAAAAABE/Ayz-hoX4Z6Q/s320/ipaddr.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5057122266303024418" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;/usr/bin/mtr&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Se trata de un traceroute avanzado repite la operación de envío de paquetes generando estadísticas. Ejemplo:&lt;br /&gt;&lt;br /&gt;mtr www.debian.org&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;/usr/sbin/tcpdump&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;tcpdump es un conocido sniffer, muy útil para monitorizar la actividad del sistema. Ejemplo:&lt;br /&gt;&lt;br /&gt;tcpdump  -i eth0 port 80  #Esta instrucción monitoriza el puerto 80 desde el interface eth0&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;/usr/sbin/iptraf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;iptraf nos indica exactamente lo que está ocurriendo en nuestra red, los protocolos que se están usando, las máquinas con las que se está estableciendo comunicación, etc.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_NG_JlK-fTWk/Ri6Bt0y1zRI/AAAAAAAAAA8/E94eIVUJ3DU/s1600-h/iptraf.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_NG_JlK-fTWk/Ri6Bt0y1zRI/AAAAAAAAAA8/E94eIVUJ3DU/s320/iptraf.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5057122055849626898" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-2649099804831481719?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/2649099804831481719/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=2649099804831481719' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/2649099804831481719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/2649099804831481719'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/04/herramientas-de-gestin-de-red.html' title='Herramientas de gestión de red'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_NG_JlK-fTWk/Ri6B6Ey1zSI/AAAAAAAAABE/Ayz-hoX4Z6Q/s72-c/ipaddr.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-1370491937909125487</id><published>2007-04-23T11:03:00.000+02:00</published><updated>2007-04-23T11:32:55.893+02:00</updated><title type='text'>Todo lo que querías saber sobre las X, pero no te atrevías a preguntar</title><content type='html'>&lt;span style="font-style:italic;"&gt;Todos conocemos las X-Window, pero son pocos los que conocen más allá de cambiar de KDE a Gnome, toquetear xorg.conf para cambiar algunas cosas o cambiar el login manager. &lt;br /&gt;En posts anteriores hemos visto &lt;a href="http://joservilas.blogspot.com/2006/09/controlando-las-x-windows-remotamente.html"&gt;como podemos iniciar una sesión gráfica en remoto&lt;/a&gt;, dando vida a equipos anticuados o centralizando los procesos en un servidor princial. Pero podemos llegar más lejos y explotar funcionalidades no tan conocidas de las X, como las siguientes:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Kiosk&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pongamos como ejemplo el clásico punto de información de una entidad, como una universidad, donde los usuarios pueden consultar datos mediante un interface. Realizar esto en Windows implica el programar el interface, deshabilitar las teclas especiales de Windows, eliminar las barras de Windows...&lt;br /&gt;Utilizando las X en Linux podemos lanzar una aplicación sin tener un gestor gráfico que nos dibuje las ventanas, es decir, no podremos arrastrar ventanas, ni tendremos bordes, ni barritas de desplazamiento, ni combinaciones de teclas (excepto las del sistema), nada de nada. La forma de ejecutar una aplicación como Firefox sería:&lt;br /&gt;&lt;br /&gt;X &gt; /dev/null 2&gt;&amp;1 &amp; exec firefox &amp;&lt;br /&gt;&lt;br /&gt;De querer disponer de un gestor de ventanas ligero como TWM sería:&lt;br /&gt;&lt;br /&gt;X &gt; /dev/null 2&gt;&amp;1 &amp; twm &amp; firefox &amp;&lt;br /&gt;&lt;br /&gt;Ahora nos quedaría eliminar ciertos botones a Firefox y combinaciones de teclas como Ctl+Alt+Backspace para tener un kiosk a prueba de crackers. En posts anteriores vimos como hacerlo:&lt;br /&gt;&lt;br /&gt;· &lt;a href="http://joservilas.blogspot.com/2007/01/eliminar-la-posibilidad-de-imprimir.html"&gt;Inhabilitar funcionalidades de Firefox&lt;/a&gt;&lt;br /&gt;· &lt;a href="http://joservilas.blogspot.com/2006/12/deshabilitar-ctlraltbackspace-en-x.html"&gt;Desactivar combinaciones de teclas&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Ejecución de aplicaciones en remoto de forma segura&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para ejecutar aplicaciones en remoto, nada mejor que hacerlo a través de SSH. Para ello, debemos habilitar esta funcionalidad en el servidor SSH, editando el fichero de configuración:&lt;br /&gt;&lt;br /&gt;vi /etc/ssh/sshd_config&lt;br /&gt;&lt;br /&gt;Al que deberemos añadir/cambiar la entrada X11Forwarding a yes&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_NG_JlK-fTWk/Rix8gEy1zQI/AAAAAAAAAA0/ffyX5kBTjZM/s1600-h/sshd_conf.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_NG_JlK-fTWk/Rix8gEy1zQI/AAAAAAAAAA0/ffyX5kBTjZM/s320/sshd_conf.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5056553372114865410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora tan solo nos queda ejecutar la instrucción y dejar que ssh haga el resto:&lt;br /&gt;&lt;br /&gt;ssh -X usuario@maquina aplicación&lt;br /&gt;&lt;br /&gt;Ej:&lt;br /&gt;&lt;br /&gt;ssh -X jose@srv.coruscant.com firefox&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-1370491937909125487?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/1370491937909125487/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=1370491937909125487' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/1370491937909125487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/1370491937909125487'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/04/todo-lo-que-queras-saber-sobre-las-x.html' title='Todo lo que querías saber sobre las X, pero no te atrevías a preguntar'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_NG_JlK-fTWk/Rix8gEy1zQI/AAAAAAAAAA0/ffyX5kBTjZM/s72-c/sshd_conf.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-9086604456300935669</id><published>2007-04-23T09:14:00.000+02:00</published><updated>2007-04-23T09:38:58.655+02:00</updated><title type='text'>Recuperando datos de un disco duro defectuoso o un sistema corrupto</title><content type='html'>Pongámonos en un escenario fatalista, nuestro disco duro se ha estropeado hasta tal punto que tiene tantos sectores defectuosos que es imposible iniciar el equipo. Llegados hasta aquí, es momento de recuperar tantos datos como nos sea posible y, para ello, utilizaremos las herramientas que nos brinda nuestro sistema operativo favorito.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;dd_rescue&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;dd_rescue es una variante de la conocida herramienta de Unix dd, orientada a la recuperación de datos. Comparada con dd, tiene dos diferencias importantes:&lt;br /&gt;&lt;br /&gt;a. Al contrario que dd, cuando hay un error de lectura (por ejemplo un sector defectuoso), dd_rescue no aborta la transferencia, se limita a indicarnos el error en el log.&lt;br /&gt;b. dd_rescue utiliza dos tamaños de bloques de datos durante la lectura, 16384 bytes si no encuentra errores y 512 bytes cuando los encuentra.&lt;br /&gt;&lt;br /&gt;El proceder para recuperar los datos de un disco duro, sería el siguiente:&lt;br /&gt;&lt;br /&gt;1. Asegurarnos de que tenemos espacio suficiente en disco para almacenar el backup (en su defecto podemos instalar otro disco duro y montarlo, montar una unidad de red, etc).&lt;br /&gt;&lt;br /&gt;2. Volcar los datos del disco a un fichero, asegurándonos de que tenemos espacio libre suficiente en la unidad de destino (este proceso puede tardar mucho tiempo, dependiendo del tamaño de disco y de la cantidad de errores encontrados):&lt;br /&gt;&lt;br /&gt;dd_rescue -A /dev/dispositivo_averiado /tmp/fichero_de_backup.iso&lt;br /&gt;&lt;br /&gt;3. Opcional pero recomendable. Intentar checkear el sistema de ficheros del backup (si se dispone de la herramienta):&lt;br /&gt;&lt;br /&gt;Para ext3: fsck.ext3 -p /tmp/fichero_de_backup.iso&lt;br /&gt;Para reiserfs: reiserfsck --fix-fixable /tmp/fichero_de_backup.iso&lt;br /&gt;&lt;br /&gt;4. Montamos el fichero con la copia de seguridad&lt;br /&gt;&lt;br /&gt;mount -o loop,ro /tmp/fichero_de_backup.iso /mnt&lt;br /&gt;&lt;br /&gt;5. Copiamos los datos utilizando los métodos tradicionales: cp, rsync, etc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-9086604456300935669?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/9086604456300935669/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=9086604456300935669' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/9086604456300935669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/9086604456300935669'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/04/recuperando-datos-de-un-disco-duro.html' title='Recuperando datos de un disco duro defectuoso o un sistema corrupto'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-649912412149006657</id><published>2007-04-18T10:30:00.000+02:00</published><updated>2007-04-18T10:41:37.057+02:00</updated><title type='text'>Activando las teclas multimedia del teclado en KDE</title><content type='html'>KDE en la mayoría de los casos no se entera de que las teclas multimedia existen y, no es que sean muy útiles, pero da rabia que no funcionen, especialmente cuando dispones de un portátil con mando a distancia a lo Apple.&lt;br /&gt;Mientras que en Gnome todo es coser y cantar en KDE necesitamos instalar el demonio lineakd. Veamos como realizar la configuración:&lt;br /&gt;&lt;br /&gt;1) Instalar los paquetes necesarios&lt;br /&gt;&lt;br /&gt;jose@coruscant:~$ apt-get install lineakd lineak-kdeplugins klineakconfig &lt;br /&gt;&lt;br /&gt;2) Ejecutamos klineakconfig y, si nuestro teclado no está entre los ya soportados, establecemos una configuración personalizada&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_NG_JlK-fTWk/RiXYtU4Zq7I/AAAAAAAAAAs/7sEqU2dFjSU/s1600-h/lineak.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_NG_JlK-fTWk/RiXYtU4Zq7I/AAAAAAAAAAs/7sEqU2dFjSU/s320/lineak.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5054684430004235186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3) Una vez que hemos guardado la configuración, nos vamos al fichero de configuración creado y asignamos los valores de las teclas&lt;br /&gt;&lt;br /&gt;jose@coruscant:~$ vi /home/jose/.lineak/lineakd.conf&lt;br /&gt;&lt;br /&gt;En mi caso he asignado estos valores:&lt;br /&gt;&lt;br /&gt;userdeffile = /home/jose/.lineak/lineakkb.def&lt;br /&gt;&lt;br /&gt;Anterior = amarok -r&lt;br /&gt;DVD = kmplayer&lt;br /&gt;Music = amarok&lt;br /&gt;Mute = EAK_MUTE&lt;br /&gt;Play = amarok -t&lt;br /&gt;Siguiente = amarok -f&lt;br /&gt;Stop = amarok -s&lt;br /&gt;VolDown = EAK_VOLDOWN&lt;br /&gt;VolUp = EAK_VOLUP&lt;br /&gt;&lt;br /&gt;4) Ponemos el demonio de lineakd en el arranque de KDE&lt;br /&gt;&lt;br /&gt;jose@coruscant:~$ ln -s /usr/bin/lineakd /home/jose/.kde/Autostart/lineakd&lt;br /&gt;&lt;br /&gt;5) Reiniciamos KDE y a disfrutar&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-649912412149006657?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/649912412149006657/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=649912412149006657' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/649912412149006657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/649912412149006657'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/04/activando-las-teclas-multimedia-del.html' title='Activando las teclas multimedia del teclado en KDE'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_NG_JlK-fTWk/RiXYtU4Zq7I/AAAAAAAAAAs/7sEqU2dFjSU/s72-c/lineak.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-7838559643687949570</id><published>2007-04-17T18:36:00.000+02:00</published><updated>2007-04-17T18:46:02.775+02:00</updated><title type='text'>Como solucionar el problema de las pantallas negras en Beryl</title><content type='html'>Los usuarios que estamos utilizando Beryl directamente con el driver de nVidia en ocasiones sufrimos el fastidioso problema de las pantallas en negro. Generalmente esto ocurre cuando maximizamos una ventana o lanzamos una aplicación nueva, se pone todo el cuerpo en negro y nos obliga a cambiar el gestor de ventanas o reiniciar la sesión.&lt;br /&gt;La forma de solucionarlo o de minimizarlo en gran medida es cambiar dos parámetros en las opciones avanzadas de Beryl, tal y como se ve en la imagen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_NG_JlK-fTWk/RiT5NE4Zq6I/AAAAAAAAAAk/cx7qdMyVl74/s1600-h/cap-beryl.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_NG_JlK-fTWk/RiT5NE4Zq6I/AAAAAAAAAAk/cx7qdMyVl74/s320/cap-beryl.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5054438684860459938" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Las opciones que debemos tocar son:&lt;br /&gt;&lt;br /&gt;Opciones avanzadas -&gt; Compuesto del recubrimiento de la ventana -&gt; Usar CROW&lt;br /&gt;Opciones avanzadas -&gt; Ruta de renderización -&gt; Copia&lt;br /&gt;&lt;br /&gt;Con eso debería estar todo arreglado&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-7838559643687949570?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/7838559643687949570/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=7838559643687949570' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7838559643687949570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/7838559643687949570'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/04/como-solucionar-el-problema-de-las.html' title='Como solucionar el problema de las pantallas negras en Beryl'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_NG_JlK-fTWk/RiT5NE4Zq6I/AAAAAAAAAAk/cx7qdMyVl74/s72-c/cap-beryl.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-6274499344806038153</id><published>2007-03-30T18:55:00.000+02:00</published><updated>2007-03-30T19:08:45.310+02:00</updated><title type='text'>Mapas gráficos con Gimp</title><content type='html'>Odio a Macromedia Flash, me mata el tener que tragarme los treinta segundos de introducción de rigor que tanto de moda se ha puesto y que, en muchos casos, ni tan siquiera hay botón de "skip".&lt;br /&gt;Como alternativa somos muchos los que proponemos los mapas gráficos que, además en Gimp se hacen en cuatro patadas:&lt;br /&gt;&lt;br /&gt;1) Abrir con Gimp la imagen sobre la que queremos generar el mapa&lt;br /&gt;&lt;br /&gt;2) Nos hacemos con el filtro necesario: Filtros -&gt; Web -&gt; Mapas de imagen&lt;br /&gt;&lt;br /&gt;3) Utilizando las herramientas de selección del filtro, escogemos la zona y damos valor al evento.&lt;br /&gt;&lt;br /&gt;4) Antes de abandonar la ventana del filtro, guardamos el documento en formato htm&lt;br /&gt;&lt;br /&gt;5) Copiamos el código o editamos el htm resultante&lt;br /&gt;&lt;br /&gt;Y el resultado sería tal que así:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_NG_JlK-fTWk/Rg1Dm_gu5WI/AAAAAAAAAAc/BBfWls7cOXU/s1600-h/Fabio+Capello.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_NG_JlK-fTWk/Rg1Dm_gu5WI/AAAAAAAAAAc/BBfWls7cOXU/s320/Fabio+Capello.jpg" alt="" id="BLOGGER_PHOTO_ID_5047765094515008866" border="0" usemap="#map" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;map name="map"&gt;&lt;br /&gt;&lt;!-- #$-:Image Map file created by GIMP Imagemap Plugin --&gt;&lt;br /&gt;&lt;!-- #$-:GIMP Imagemap Plugin by Maurits Rijk --&gt;&lt;br /&gt;&lt;!-- #$-:Please do not edit lines starting with "#$" --&gt;&lt;br /&gt;&lt;!-- #$VERSION:2.0 --&gt;&lt;br /&gt;&lt;!-- #$AUTHOR:profesor --&gt;&lt;br /&gt;&lt;area shape="rect" coords="60,92,170,121" onmouseover="alert(&amp;apos;Mis seductores ojos!&amp;apos;);"  nohref="nohref" /&gt;&lt;br /&gt;&lt;area shape="rect" coords="82,146,149,174" onmouseover="alert(&amp;apos;a que te muerdo&amp;apos;);"  nohref="nohref" /&gt;&lt;br /&gt;&lt;/map&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-6274499344806038153?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/6274499344806038153/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=6274499344806038153' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6274499344806038153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6274499344806038153'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/03/mapas-grficos-con-gimp.html' title='Mapas gráficos con Gimp'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_NG_JlK-fTWk/Rg1Dm_gu5WI/AAAAAAAAAAc/BBfWls7cOXU/s72-c/Fabio+Capello.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-748849359071681285</id><published>2007-03-27T23:23:00.000+02:00</published><updated>2007-03-27T23:38:31.301+02:00</updated><title type='text'>Plugin Flash 9 para Firefox (Iceweasel) bajo Debian AMD64</title><content type='html'>Ñapa donde las haya, pero bueno, tira, que es lo que cuenta en este caso:&lt;br /&gt;&lt;br /&gt;1) Descargarse el nspluginwrapper de su web, en formato rpm que es más cómodo&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://gwenole.beauchesne.info/en/projects/nspluginwrapper#downloads"&gt;http://gwenole.beauchesne.info/en/projects/nspluginwrapper#downloads&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2) Instalar los paquetes necesarios para ejecutar el programa y convertir los rpms a debs:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;geonosis:/usr/src# apt-get install ia32-libs linux32 alien&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3) Instalar el paquete ia32-libs-gtk de la rama experimental&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;geonosis:/usr/src# wget http://ftp.es.debian.org/debian/pool/main/i/ia32-libs-gtk/ia32-libs-gtk_1.0_amd64.deb&lt;br /&gt;geonosis:/usr/src# dpkg -i ia32-libs-gtk_1.0_amd64.dev&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;4) Convertir los rpms a .deb e instalarlos&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;geonosis:/usr/src# alien -d *.rpm&lt;br /&gt;geonosis:/usr/src# dpkg -i nspluginwrapper_0.9.91.3-2_amd64.deb nspluginwrapper-i386_0.9.91.3-2_amd64.deb&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;5) Descargamos el plugin flash de la página de Macromedia, descomprimimos el archivo y convertimos la librería con nspluginwrapper&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;geonosis:/usr/src# /usr/lib/nspluginwrapper/x86_64/linux/npconfig -i /home/jose/install_flash_player_9/libflashplayer.so&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;6) Copiamos el archivo generado al directorio de plugins de iceweasel&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;geonosis:/usr/src# cp /home/jose/install_flash_player_9/npwrapper.libflashplayer.so /usr/lib/iceweasel/plugins&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Y ñapa completada, aunque esperemos que en un futuro cercano todo se solucione con un apt-get install&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-748849359071681285?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/748849359071681285/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=748849359071681285' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/748849359071681285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/748849359071681285'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/03/plugin-flash-9-para-firefox-iceweasel.html' title='Plugin Flash 9 para Firefox (Iceweasel) bajo Debian AMD64'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-4363405167004286846</id><published>2007-03-23T12:10:00.000+01:00</published><updated>2007-03-23T12:31:09.378+01:00</updated><title type='text'>Kernel a lo Debian para un Turion62X2</title><content type='html'>Acabo de hacerme con uno de esos portátiles que además son portables (uséase pequeños, con pantalla de 13"), en concreto un HP Pavilion de la serie dv2000. El engendro en cuestión tiende todos los males necesarios como para desechar el kernel de stock, y cito:&lt;br /&gt;&lt;br /&gt;Tarjeta wifi Broadcom Wireless 1390&lt;br /&gt;Tarjeta gráfica nVidia Gforce Go&lt;br /&gt;Es un AMD Turion 64 X2&lt;br /&gt;&lt;br /&gt;Podría hacer lo típico, compilar los módulos para el hardware no soportado y arreando pero claro, cuando haga un apt-get update y me cambie el kernel la vamos a liar. Además, el nuevo kernel 2.6.20.3 soporta paravirtualización y ya puestos...&lt;br /&gt;Compilar el kernel en Debian tiene su cosa, ya que podemos tratarlo como un paquete más y desinstalarlo más adelante, entre otras cosas. Es por ello que la secuencia de comandos cambia un poco respecto a la manera clásica (a mano) de compilar el núcleo:&lt;br /&gt;&lt;br /&gt;Paso previo, instalar los paquetes necesarios:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;apt-get install nasm libncurses5 libncurses5-dev gcc make kernel-package&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1.- Descargar el kernel&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@coruscant:/usr/src$ wget &lt;a href="http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.3.tar.bz2"&gt;http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.3.tar.bz2&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.- Descomprimir y desempaquetar&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@coruscant:/usr/src$ bunzip2 linux-2.6.20.3.tar.bz2 ; tar xf linux-2.6.20.3.tar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3.- Entrar en el directorio creado y "limpiar"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@coruscant:/usr/src/linux$ make mrproper&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;4.- Para ahorrarnos lo gordo de la configuración, copiar la configuración existente del kernel de stock&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@coruscant:/usr/src/linux$ cp /boot/config-2.6.18-4-amd64 ./&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;5.- Configurar el kernel&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@coruscant:/usr/src/linux$ make menuconfig (o make xconfig según gustos)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;6.- Compilar y crear los paquetes&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@coruscant:/usr/src/linux$ make-kpkg clean ; make-kpkg --initrd kernel_image kernel_headers&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;7.- Instalar los paquetes creados en el directorio precedente&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@coruscant:/usr/src$ dpkg -i kernel-image-xxxxxx.deb kernel-headers-xxxxx.deb&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Y ahora ya podemos configurar todo el hardware que queramos sin miedo a las actualizaciones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-4363405167004286846?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/4363405167004286846/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=4363405167004286846' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/4363405167004286846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/4363405167004286846'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/03/kernel-lo-debian-para-un-turion62x2.html' title='Kernel a lo Debian para un Turion62X2'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-6917434178210201602</id><published>2007-02-20T12:40:00.000+01:00</published><updated>2007-02-20T13:16:12.367+01:00</updated><title type='text'>Instalar Beryl sin XGL ni AIGLX bajo Debian (y probablemente Ubuntu)</title><content type='html'>Para este pequeño how-to he utilizado como S.O Debian Etch para AMD64 y una tarjeta gráfica nVidia GForce7 7100 (los usuarios de ATI o Intel debereis indagar sobre como instalar vuestro controlador de video).&lt;br /&gt;Disfrutar de un entorno 3D con Beryl es realmente sencillo sin necesidad de instalar Xgl que, además, no se encuentra como paquete para Debian. Los pasos a seguir son los siguientes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1.- Instalar los controladores de nVidia&lt;/span&gt;. Para ello necesitamos instalar los paquetes linux-headers y linux-source en las versiones correspondientes a nuestro sistema y mesa-utils:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: georgia;"&gt;apt-get install linux-headers-`uname -r` linux-source-`uname -r` mesa-utils&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Probamos el soporte opengl&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;glxgears&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Descargamos el instalador del driver de nVidia de la web del fabricante, en mi caso:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;wget http://download.nvidia.com/XFree86/Linux-x86_64/1.0-8756/NVIDIA-Linux-x86_64-1.0-8756-pkg2.run&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Salimos de las X y paramos el gdm&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;/etc/init.d/gdm stop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Instalamos el controlador de nVidia (como root):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;sh NVIDIA-Linux-x86_64-1.0-8756-pkg2.run&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Reiniciamos gdm y deberíamos ver el logo de nVidia un segundo durante la carga&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;/etc/init.d/gdm start&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2.- Editamos xorg.conf&lt;/span&gt;  y realizamos los siguientes cambios:&lt;br /&gt;&lt;br /&gt;Comentamos las líneas (de tenerlas)&lt;br /&gt;&lt;pre&gt;&lt;code&gt;# Load "GLcore"&lt;br /&gt;# Load "dri"&lt;/code&gt;&lt;/pre&gt;y, si no la tenemos, agregamos la siguiente&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Load "glx"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En la sección Device añadimos lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;Section "Device"&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;Option "RenderAccel" "true"&lt;br /&gt;Option "AllowGLXWithComposite" "true"&lt;br /&gt;EndSection&lt;/code&gt;&lt;/pre&gt;En la sección Screen&lt;br /&gt;&lt;pre&gt;&lt;code&gt;Option "AddARGBGLXVisuals" "True"&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Y por último añadimos la siguiente sección&lt;br /&gt;&lt;pre&gt;&lt;code&gt;Section "Extensions"&lt;br /&gt;Option "Composite" "Enable"&lt;br /&gt;EndSection&lt;/code&gt;&lt;/pre&gt;Reiniciamos las X y probamos que todo funciona&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;/etc/init.d/gdm restart&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3.- Instalamos los paquetes de beryl&lt;/span&gt;, para ello hay que añadir el repositorio correspodiente, pero previamente agraremos el repositorio a pgp&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;wget http://debian.beryl-project.org/root@lupine.me.uk.gpg -O- | sudo apt-key add -&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Editamos /etc/apt/sources.list y añadimos el repositorio&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;deb http://debian.beryl-project.org/ etch main&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Actualizamos la lista de paquetes&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;apt-get update&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;E instalamos los paquetes necesarios&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;apt-get install beryl beryl-core beryl-dev beryl-manager beryl-plugins-data beryl-plugins beryl-settings emerald emerald-themes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;4.- Cargamos beryl en el inicio de Gnome utilizando el session manager de gnome:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;gnome-session&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;y agragamos beryl en los programas de inicio&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_NG_JlK-fTWk/RdrlX8_NCdI/AAAAAAAAAAM/K9ow3qSkqgk/s1600-h/session.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_NG_JlK-fTWk/RdrlX8_NCdI/AAAAAAAAAAM/K9ow3qSkqgk/s320/session.png" alt="" id="BLOGGER_PHOTO_ID_5033587733210925522" border="0" /&gt;&lt;/a&gt;Ahora toca disfrutar del nuevo entorno!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-6917434178210201602?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/6917434178210201602/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=6917434178210201602' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6917434178210201602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/6917434178210201602'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/02/instalar-beryl-sin-xgl-ni-aiglx-bajo.html' title='Instalar Beryl sin XGL ni AIGLX bajo Debian (y probablemente Ubuntu)'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_NG_JlK-fTWk/RdrlX8_NCdI/AAAAAAAAAAM/K9ow3qSkqgk/s72-c/session.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-3675019934898932767</id><published>2007-02-17T13:03:00.000+01:00</published><updated>2007-02-17T13:10:36.652+01:00</updated><title type='text'>Imprimir de Linux a Linux con cups</title><content type='html'>Esta no es una receta sobre como compartir una impresora en Linux para poder imprimir desde un bindous. Lo que vamos a hacer es partiendo de una impresora conectada a una máquina Linux, imprimir desde otra máquina Linux (¿compartir impresora en linux?). Esta receta es, como siempre, para Debian y debería funcionar en Ubuntu u otras distribuciones.&lt;br /&gt;&lt;br /&gt;1) Partiendo de que tenemos una máquina Linux con una impresora instalada editamos el fichero de configuración de cups /etc/cups/cupsd.conf y cambiamos unas cosas:&lt;br /&gt;&lt;br /&gt;#Listen localhost:631 lo comentamos y lo cambiamos por&lt;br /&gt;Listen *:631&lt;br /&gt;&lt;br /&gt;luego, permitimos el acceso desde nuestra subred&lt;br /&gt;&lt;br /&gt;&lt;location&gt;&lt;br /&gt;  Order allow,deny&lt;br /&gt;  Allow localhost&lt;br /&gt;  Allow From 192.168.1.0/24&lt;br /&gt;&lt;/location&gt;&lt;br /&gt;&lt;br /&gt;&lt;location&gt;&lt;br /&gt;  Encryption Required&lt;br /&gt;  Order allow,deny&lt;br /&gt;  Allow localhost&lt;br /&gt;  Allow From 192.168.1.0/24&lt;br /&gt;&lt;/location&gt;&lt;br /&gt;&lt;br /&gt;2) Reiniciar cups y configurar la impresora en el equipo remoto&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-3675019934898932767?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/3675019934898932767/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=3675019934898932767' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3675019934898932767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/3675019934898932767'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/02/imprimir-de-linux-linux-con-cups.html' title='Imprimir de Linux a Linux con cups'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-2187864949521369345</id><published>2007-02-16T14:16:00.000+01:00</published><updated>2007-02-17T13:33:40.046+01:00</updated><title type='text'>Configurando la tarjeta wifi de un Sony Vaio N21E (VGN-N21E chipset Atheros) en Debian y/o Ubuntu</title><content type='html'>Hace unos días le he echado guante a un portátil Sony Vaio VGN-N21E que, entre otras cosas, trae una tarjeta inalámbrica mini-pci con el chipset de Atheros.&lt;br /&gt;La forma de configurar este tipo de dispositivos es realmente sencilla, y este método sirve para todos los que tengais una tarjeta basada en Atheros, en sus diferentes versiones (pci, pcmcia, etc)&lt;br /&gt;&lt;br /&gt;1.- Por si nuestro sistema reconoce la tarjeta pero incorpora un controlador antiguo no compatible vamos a desmontar los posibles interfaces inálambricos&lt;br /&gt;&lt;br /&gt;coruscant:~# ifconfig ath0 down&lt;br /&gt;coruscant:~# ifconfig wifi0 down&lt;br /&gt;&lt;br /&gt;2.- Eliminamos posibles módulos incompatibles que tengamos instalados&lt;br /&gt;&lt;br /&gt;coruscant:~# rmmod ath_rate_sample wlan ath_hal ath_pci onoe wlan_wep&lt;br /&gt;&lt;br /&gt;3.- Instalamos los paquetes necesarios para poder compilar el nuevo módulo&lt;br /&gt;&lt;br /&gt;coruscant:~# apt-get install linux-headers linux-source module-assistant&lt;br /&gt;(Para los que usuais Ubuntu debereis instalar el paquete build-essentials) Ni que decir tiene que la imagen del kernel hay que descomprimirla y crearle el link&lt;br /&gt;&lt;br /&gt;cd /usr/src&lt;br /&gt;bunzip linux-image-XXXXXXX.bz2&lt;br /&gt;tar xf linux-image-XXXXXXX.tar&lt;br /&gt;ln -s linux-image-XXXXX/ linux&lt;br /&gt;&lt;br /&gt;4.- Descargamos el código fuente del módulo&lt;br /&gt;&lt;br /&gt;coruscant:/usr/src# wget &lt;a href="http://snapshots.madwifi.org/madwifi-ng-current.tar.gz" title="http://snapshots.madwifi.org/madwifi-ng-current.tar.gz"&gt;http://snapshots.madwifi.org/madwifi-ng-current.tar.gz&lt;/a&gt;&lt;br /&gt;coruscant:/usr/src# wget &lt;a href="http://patches.aircrack-ng.org/madwifi-ng-r1886.patch"&gt;http://patches.aircrack-ng.org/madwifi-ng-r1886.patch&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(Nota el patch r1886 es el existente al día de hoy, si el enlace está roto debeis entrar en &lt;a href="http://patches.aircrack-ng.org/"&gt;http://patches.aircrack-ng.org/ &lt;/a&gt;y ver la revisión del patch más actual)&lt;br /&gt;&lt;br /&gt;5.-  Descomprimimos el código del controlador&lt;br /&gt;&lt;br /&gt;coruscant:/usr/src#tar zxf madwifi-ng-current.tar.gz&lt;br /&gt;&lt;br /&gt;6.- Entramos en el directorio creado y aplicamos el patch&lt;br /&gt;&lt;br /&gt;coruscant:/usr/src# cd madwifi-ng-r2119-20070216/&lt;br /&gt;coruscant:/usr/src/madwifi-ng-r2119-20070216# patch -Np1 -i ../madwifi-ng-r1886.patch&lt;br /&gt;&lt;br /&gt;7.- Compilamos e instalamos&lt;br /&gt;&lt;br /&gt;coruscant:/usr/src/madwifi-ng-r2119-20070216# make&lt;br /&gt;coruscant:/usr/src/madwifi-ng-r2119-20070216# make install&lt;br /&gt;&lt;br /&gt;8.- Actualizamos la lista de módulos&lt;br /&gt;&lt;br /&gt;coruscant:/usr/src/madwifi-ng-r2119-20070216# depmod -ae&lt;br /&gt;&lt;br /&gt;9.- Cargamos el módulo o reiniciamos el sistema y configuramos la wifi&lt;br /&gt;&lt;br /&gt;coruscant:/# modprobe ath_pci&lt;br /&gt;&lt;br /&gt;Una vez completado, a disfrutar de nuestro nuevo interface&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-2187864949521369345?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/2187864949521369345/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=2187864949521369345' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/2187864949521369345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/2187864949521369345'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/02/configurando-la-tarjeta-wifi-de-un-sony.html' title='Configurando la tarjeta wifi de un Sony Vaio N21E (VGN-N21E chipset Atheros) en Debian y/o Ubuntu'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-117111028539049852</id><published>2007-02-10T13:18:00.000+01:00</published><updated>2007-02-10T13:24:45.403+01:00</updated><title type='text'>Bot IRC que captura urls y crea un rss</title><content type='html'>Para el canal #hardware del IRC-Hispano hemos creado un bot que rastrea las conversaciones en busca de una url y crea un rss que luego importaremos desde Wordpress, para componer la web &lt;a href="http://www.cajondesastre.net"&gt;http://www.cajondesastre.net&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Estoy terminando un segundo módulo que ha de subir este rss por ftp para mantenerlo en pseudo tiempo real accesible.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.terra.es/personal2/djevil/pyHardware.py"&gt;El código fuente del bot está accesible en este enlace&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-117111028539049852?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/117111028539049852/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=117111028539049852' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/117111028539049852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/117111028539049852'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/02/bot-irc-que-captura-urls-y-crea-un-rss.html' title='Bot IRC que captura urls y crea un rss'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-117087802040104308</id><published>2007-02-07T20:42:00.000+01:00</published><updated>2007-02-07T20:53:40.413+01:00</updated><title type='text'>Creación rápida de firewalls para Iptables</title><content type='html'>Como dice el anuncio... llega un momento en la vida en que tienes el firewall tan depurado que lo vas reutilizando instalación tras instalación. Pero, cuando no te quieres complicar o ese usuario novel te pide que le expliques como hacerse un firewall, la mejor opción es &lt;a href="http://easyfwgen.morizot.net/gen/"&gt;Easy Firewall Generator for iptables&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;En pocos minutos puedes tener un buen script para iptables funcionando.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-117087802040104308?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/117087802040104308/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=117087802040104308' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/117087802040104308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/117087802040104308'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/02/creacin-rpida-de-firewalls-para.html' title='Creación rápida de firewalls para Iptables'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-117029933063890506</id><published>2007-02-01T03:47:00.000+01:00</published><updated>2007-02-01T04:08:50.656+01:00</updated><title type='text'>Java SDK para Debian Etch i586/AMD64</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://java.com/java/download/index.jsp"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://java.sun.com/images/getjava_med.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Aunque este es un post muy recurrente y suficientemente explicado en cientos de blogs, sigue habiendo mucha gente que se lía a la hora de instalar el paquete.&lt;br /&gt;En lugar de utilizar los repositorios non-free habituales, he aquí los pasos para realizar una instalación de Java a partir de las versiones oficiales:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1)&lt;/span&gt; Descargarse el paquete Java apropiado para nuestra versión (i586 o AMD64), desde el &lt;a href="http://java.com/java/download/index.jsp"&gt;site oficial de Sun&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2)&lt;/span&gt; Instalar los paquetes fakeroot y java-package&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;coruscant:/home/jose# apt-get install fakeroot java-package&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3)&lt;/span&gt; Le damos permiso de ejecución al fichero .bin que nos hemos bajado&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@coruscant:~/Downloads$ chmod +x jdk-6-linux-amd64.bin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4)&lt;/span&gt; Con un usuario sin privilegios creamos el paquete .deb&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@coruscant:~/Downloads$ fakeroot make-jpkg jdk-6-linux-amd64.bin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4.1) &lt;/span&gt;Si nos hemos descargado la "versión 6" y nos da un error el paso 4, renombramos el paquete para engañar al make-jpkg y volvemos al paso anterior (es una ñapa, lo se):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt; jose@coruscant:~/Downloads$ mv jdk-6-linux-amd64.bin jdk-1_5_0_09-linux-amd64.bi&lt;/span&gt;n&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5)&lt;/span&gt; Como root, instalamos el paquete creado&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;coruscant:/home/jose/Downloads# dpkg -i sun-jdk-6_amd64.deb&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-117029933063890506?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/117029933063890506/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=117029933063890506' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/117029933063890506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/117029933063890506'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/02/java-sdk-para-debian-etch-i586amd64.html' title='Java SDK para Debian Etch i586/AMD64'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-117027495218848470</id><published>2007-01-31T20:57:00.000+01:00</published><updated>2007-01-31T21:22:32.220+01:00</updated><title type='text'>Deteccion de intrusos más amigable</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.intersectalliance.com/projects/RazorBack/RazorBack.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px;" src="http://www.intersectalliance.com/projects/RazorBack/RazorBack.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.snort.org/"&gt;Snort&lt;/a&gt; es el IDS (Sistema de Detección de Intrusos) probablemente más conocido entre los usarios del software libre. Actúa como sniffer analizando el tráfico de red y comparándolo con reglas pre-establecidas para ataques tipo. Cuestiones de especial relevancia como mantener estas reglas actualizadas o analizar los abstractos reportes se hacen un poco pesadas sin ayuda:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://oinkmaster.sourceforge.net/"&gt;Oinkmaster&lt;/a&gt; es un script perl que nos permite mantener las reglas de Snort al día sin grandes complicaciones, incluso añadiéndolo al cron para que la actualización sea totalmente desatendida.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.intersectalliance.com/projects/RazorBack/index.html"&gt;Razorback&lt;/a&gt; es un software de análisis de reportes de Snort para Gnome, que nos permite ir viendo en tiempo real las incidencias recogidas por los patrones del IDS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-117027495218848470?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/117027495218848470/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=117027495218848470' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/117027495218848470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/117027495218848470'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/01/deteccion-de-intrusos-ms-amigable.html' title='Deteccion de intrusos más amigable'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-117020034406379459</id><published>2007-01-31T00:35:00.000+01:00</published><updated>2007-01-31T00:39:04.073+01:00</updated><title type='text'>El "panadero" de Gnome o como grabar CD/DVD</title><content type='html'>Se hace atractivo utilizar las QT en los tiempos que corren, sobre todo con aplicaciones tan fantásticas como K3b pero, si te invade ese romanticismo anárquico que te impide instalar estas librerías puedes optar por Gnomebaker.&lt;br /&gt;Gnomebaker es el software de grabación de Gnome aunque, generalmente no viene instalado por defecto en las distribuciones, pero se encuentra en los repositorios sin mayores problemas.&lt;br /&gt;Con esto quedais respondidos todos aquellos que habeis preguntado por un software de grabación "casi" tan fantástico como K3b pra Gnome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-117020034406379459?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/117020034406379459/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=117020034406379459' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/117020034406379459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/117020034406379459'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/01/el-panadero-de-gnome-o-como-grabar.html' title='El &quot;panadero&quot; de Gnome o como grabar CD/DVD'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-116911068813789917</id><published>2007-01-18T09:42:00.000+01:00</published><updated>2007-01-18T09:58:09.100+01:00</updated><title type='text'>Eliminar la posibilidad de imprimir desde Firefox</title><content type='html'>En ciertas ocasiones, como puede ser el caso de un kiosk o para que los niños no gasten tinta, puede interesarnos deshabilitar la impresora en el navegador.&lt;br /&gt;Para ello debemos editar/crear un fichero user.js dentro del directorio de configuración de Firefox o editar la configuración desde el propio navegador tecleando la dirección about:config, cambiando/creando las siguientes entradas:&lt;br /&gt;&lt;br /&gt;user_pref("print.always_print_silent ", true);&lt;br /&gt;user_pref("print.show_print_progress", false);&lt;br /&gt;user_pref("browser.sessionstore.resume_from_crash", false);&lt;br /&gt;&lt;br /&gt;Reiniciar Firefox y trabajo completado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-116911068813789917?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/116911068813789917/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=116911068813789917' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116911068813789917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116911068813789917'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2007/01/eliminar-la-posibilidad-de-imprimir.html' title='Eliminar la posibilidad de imprimir desde Firefox'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-116750519578758269</id><published>2006-12-30T19:45:00.000+01:00</published><updated>2006-12-30T19:59:55.850+01:00</updated><title type='text'>Imprimir en una HP LaserJet 1018 bajo Linux</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/1232/3330/1600/321529/hp1018-large.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/1232/3330/320/14402/hp1018-large.jpg" alt="" border="0" /&gt;&lt;/a&gt;La HP1018 es de esas impresoras soportadas "a medias" en Linux, que si, que imprime perfectamente pero que hay que darle unas cuantas vueltas antes de conseguirlo.&lt;br /&gt;&lt;br /&gt;Buscando en Google existen muchas formas de hacerlo todo automático utilizando hotplug pero nosotros vamos a hacerlo más "a mano" y más rápido:&lt;br /&gt;&lt;br /&gt;1) Lo primero va a ser instalar la impresora utilizando &lt;span style="font-size:85%;"&gt;gnome-cups-manager&lt;/span&gt; u otra aplicación similar.&lt;br /&gt;&lt;br /&gt;2) Viendo que el driver utilizado es el de foo2zjs debemos instalar este paquete:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@tatooine:~$ apt-get install foo2zjs&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;3) La impresora necesita cargar el firmware antes de comenzar, con lo que lo descargarmos:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@tatooine:~$ getweb hp1018&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;4) Convertirmos el archivo.img descargado en un firmware válido:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@tatooine:~$ arm2hpdl sihp1018.img &gt; /usr/share/foo2zjs/firmware/sihp1018.dl&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;5) Creamos un script (cargafirmware.sh) que cargue el firmware en la impresora:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;#!/bin/bash&lt;br /&gt;cat /usr/share/foo2zjs/firmware/sihp1018.dl &gt; /dev/usb/lp0&lt;br /&gt;echo "Firmware de la impresora cargado!"&lt;br /&gt;sleep1&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;6) Ponemos el script en el arranque del sistema para no tener que ejecutarlo de cada vez:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;ln -s /root/cargafirmware.sh /etc/rc2.d/S99cargafirmware&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Este método debería funcionar para otros modelos de impresoras que padezcan de lo mismo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-116750519578758269?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/116750519578758269/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=116750519578758269' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116750519578758269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116750519578758269'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/12/imprimir-en-una-hp-laserjet-1018-bajo.html' title='Imprimir en una HP LaserJet 1018 bajo Linux'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-116611907496856755</id><published>2006-12-14T18:50:00.000+01:00</published><updated>2006-12-14T18:57:54.980+01:00</updated><title type='text'>Creando copias de seguridad del Master Boot Record</title><content type='html'>En ocasiones, cuando conviven diferentes sistemas operativos en la misma máquina o por haber tocado donde no se debe, perdemos el arranque de nuestro sistema. La solución habitual pasa por iniciar el sistema utilizando un CD/DVD Live u otro medio de arranque y, utilizando chroot, ejecutar los comandos pertinentes que regeneren el gestor de arranque. La siguiente propuesta se basa en realizar un backup de MBR a un fichero utilizando dd para, en caso de "desastre" poder recuperarlo de nuevo.&lt;br /&gt;&lt;br /&gt;Instrucción para crear la copia de seguridad:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;dd if=/dev/disco_duro_arranque of=fichero.bkp bs=512 count=1&lt;br /&gt;&lt;br /&gt;Ejemplo: dd if=/dev/sda of=/media/usbdisk/copia.boot bs=512 count=1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Instrucción para recuperar el MBR:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;dd if=fichero.bkp of=/dev/disco_duro_arranque bs=512 count=1&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-116611907496856755?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/116611907496856755/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=116611907496856755' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116611907496856755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116611907496856755'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/12/creando-copias-de-seguridad-del-master.html' title='Creando copias de seguridad del Master Boot Record'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-116531788032799677</id><published>2006-12-05T12:19:00.000+01:00</published><updated>2006-12-05T12:24:40.336+01:00</updated><title type='text'>Deshabilitar Ctlr+Alt+Backspace en X</title><content type='html'>A la hora de configurar un kiosko u otro equipo en el que no queremos que los usuarios puedan saltar a las consolas, nos las tenemos que dar de bruces contra las combinaciones de teclas típicas:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Ctrl+Alt+Backspace que reinicia las X&lt;br /&gt;Ctlr+Alt+(F1,F2,F3...) que salta a entorno texto &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La solución pasa por tocar el fichero de configuración de xorg (/etc/X11/xorg.conf) y añadir la siguiente sección (si no existe):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Section "ServerFlags"&lt;br /&gt;   Option "DontZap" "yes"&lt;br /&gt;EndSection&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Otra opción sería invocar el xinit con la opción -T (xinit -T) pero se complica si queremos utilizar un gestor de inicio gráfico.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-116531788032799677?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/116531788032799677/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=116531788032799677' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116531788032799677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116531788032799677'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/12/deshabilitar-ctlraltbackspace-en-x.html' title='Deshabilitar Ctlr+Alt+Backspace en X'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-116308842797162422</id><published>2006-11-09T16:59:00.000+01:00</published><updated>2006-11-09T17:07:08.356+01:00</updated><title type='text'>OSSTMM - El manual de referencia para el auditor de seguridad</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.isecom.org/pix/osstmm_red_200.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 130px; height: 138px;" src="http://www.isecom.org/pix/osstmm_red_200.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A la hora de asegurar un sistema cada administrador utiliza sus aplicaciones de detección de intrusos preferida, una configuración particular, etc. En realidad no se suele seguir una metodología contrastada más que la de la propia experiencia.&lt;br /&gt;La asociación &lt;a href="http://www.isecom.org/"&gt;ISECOM&lt;/a&gt; además de formar a auditores de seguridad en sus conocidas "Hackers High School", mantienen actualizado el Open Source Security Testing Methodology Manual, disponible su última versión pdf en cristiano se puede &lt;a href="http://www.isecom.info/mirror/OSSTMM.es.2.1.pdf"&gt;descargar aquí.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-116308842797162422?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/116308842797162422/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=116308842797162422' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116308842797162422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116308842797162422'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/11/osstmm-el-manual-de-referencia-para-el.html' title='OSSTMM - El manual de referencia para el auditor de seguridad'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-116290179538960124</id><published>2006-11-07T13:15:00.000+01:00</published><updated>2006-11-07T13:16:35.396+01:00</updated><title type='text'>Sistemas multimonitor con Xorg</title><content type='html'>Instalar un sistema multimonitor con Xorg es realmente sencillo. En este ejemplo me baso en un equipo con Debian Etch instalada y una tarjeta gráfica ATI Radeon 9200 AGP.&lt;br /&gt;&lt;br /&gt;Lo primero es instalar la extensión Xinerama, que nos permitirá expandir nuestro escritorio:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;apt-get install libxinerama1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Luego debemos clonar la configuración de nuestra tarjeta(s) y la del(os) monitor(es), en la que nuestro fichero /etc/X11/xorg.conf quedaría de la siguiente forma (he obviado los parámetros no significativos):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Section "Device"&lt;br /&gt;    #Salida VGA que ya habia configurado Xorg durante la instalacion&lt;br /&gt;    Identifier    "ATI Technologies Inc RV280 [Radeon 9200]"&lt;br /&gt;    Driver        "ati"&lt;br /&gt;    BusID        "PCI:1:0:0"&lt;br /&gt;    VideoRam    65536&lt;br /&gt;    #A continuacion le indicamos que no clone la imagen&lt;br /&gt;    Option        "Clone" "false"&lt;br /&gt;    #Indicamos el orden las salidas&lt;br /&gt;    Option        "MonitorLayout" "CRT,LFP"&lt;br /&gt;    #Agregamos un identificador&lt;br /&gt;    Screen        0&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Device"&lt;br /&gt;    #Salida DVI que debemos crear copiando la configuracion&lt;br /&gt;    #de la primera salida&lt;br /&gt;        Identifier      "ATI DVI"&lt;br /&gt;        Driver          "ati"&lt;br /&gt;        BusID           "PCI:1:0:0"&lt;br /&gt;    #Agregamos un identificador&lt;br /&gt;    Screen        1&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;    #Configuracion realizada por Xorg&lt;br /&gt;    Identifier    "Monitor genérico"&lt;br /&gt;    Option        "DPMS"&lt;br /&gt;    HorizSync    30-70&lt;br /&gt;    VertRefresh    59-76&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;    #Creamos un nuevo dispositivo, en mi caso un monitor CRT&lt;br /&gt;        Identifier      "Monitor CRT"&lt;br /&gt;        Option          "DPMS"&lt;br /&gt;        HorizSync       30-70&lt;br /&gt;        VertRefresh     59-76&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt;    #Configuración generada por Xorg&lt;br /&gt;    Identifier    "Default Screen"&lt;br /&gt;    Device        "ATI Technologies Inc RV280 [Radeon 9200]"&lt;br /&gt;    Monitor        "Monitor genérico"&lt;br /&gt;    DefaultDepth    24&lt;br /&gt;    SubSection "Display"&lt;br /&gt;        Depth        24&lt;br /&gt;        Modes        "1152x864" "1024x768" "800x600" "640x480"&lt;br /&gt;    EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt;    #Configuración creada para el monitor CRT que irá a la derecha&lt;br /&gt;    Identifier    "RightScreen"&lt;br /&gt;    Device        "ATI DVI"&lt;br /&gt;    Monitor     "Monitor CRT"&lt;br /&gt;    DefaultDepth    24&lt;br /&gt;    SubSection "Display"&lt;br /&gt;        Depth        24&lt;br /&gt;        Modes        "1152x864" "1024x768" "800x600" "640x480"&lt;br /&gt;    EndSubSection&lt;br /&gt;&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "ServerLayout"&lt;br /&gt;    #Sustituímos el ServerLayout por defecto por este otro que cargue&lt;br /&gt;    #los dos monitores.&lt;br /&gt;    Identifier    "Dual Monitor"&lt;br /&gt;    Screen        0    "Default Screen" 0 0&lt;br /&gt;    Screen        1    "RightScreen" RightOf "Default Screen"&lt;br /&gt;    InputDevice    "Generic Keyboard"&lt;br /&gt;    InputDevice    "Configured Mouse"&lt;br /&gt;    Option        "Xinerama" "true"&lt;br /&gt;EndSection&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Por último nos queda reiniciar el servidor Xorg y disfrutar de nuestro nuevo monitor expandido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-116290179538960124?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/116290179538960124/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=116290179538960124' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116290179538960124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116290179538960124'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/11/sistemas-multimonitor-con-xorg.html' title='Sistemas multimonitor con Xorg'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-116289069165122828</id><published>2006-11-07T10:11:00.000+01:00</published><updated>2006-11-07T10:11:31.653+01:00</updated><title type='text'>Python: Backup de una carpeta contra un servidor FTP remoto</title><content type='html'>&lt;p&gt;Sin lugar a dudas para cosas serias se debe utilizar rsync pero cuando tienes un equipo poco accesible y necesitas mover los ficheros de un directorio a un servidor FTP, esta porción de código puede resultar útil:&lt;/p&gt; &lt;p&gt;#!/usr/bin/env python&lt;br /&gt;# -*- coding: utf-8 -*-&lt;/p&gt; &lt;p&gt;import glob&lt;br /&gt;import os&lt;br /&gt;import string&lt;br /&gt;from ftplib import FTP&lt;/p&gt; &lt;p&gt;#Path donde se encuentran los ficheros&lt;/p&gt; &lt;p&gt;rutaFicheiros = ?/home/jose/Documentos/*?&lt;/p&gt; &lt;p&gt;#Parametros de la conexion&lt;br /&gt;ipServFTP = ?194.224.52.4?&lt;br /&gt;ftpUser = ?jose?&lt;br /&gt;ftpPasswd = ?mypasswdRocks?&lt;br /&gt;ftpDir = ?/Backups/Documentos?&lt;/p&gt; &lt;p&gt;def atopaFicheiros(ruta):&lt;br /&gt;?'?&lt;br /&gt;Lista todos los ficheros de una ruta dada y devuelve&lt;br /&gt;una lista con todos los paths absolutos.&lt;br /&gt;?'?&lt;br /&gt;listadoPaths = []&lt;br /&gt;if len(ruta) &gt; 0:&lt;br /&gt;listadoPaths = glob.glob(ruta)&lt;br /&gt;else:&lt;br /&gt;pass&lt;br /&gt;return listadoPaths&lt;/p&gt; &lt;p&gt;def subeFicheirosFTP(ip,usuario,passwd,directorio,ficheiros):&lt;br /&gt;?'?&lt;br /&gt;Sube un listado de ficheros dado a un directorio de un&lt;br /&gt;servidor ftp remoto.&lt;br /&gt;?'?&lt;br /&gt;print ?Estableciendo conexion??&lt;br /&gt;conexion = FTP(ip)&lt;br /&gt;conexion.login(usuario,passwd)&lt;br /&gt;conexion.cwd(directorio)&lt;br /&gt;print ?Subiendo ficheiros??&lt;/p&gt; &lt;p&gt;for i in ficheiros:&lt;br /&gt;try:&lt;br /&gt;ficheiroLocal = open(i,?rb?)&lt;br /&gt;nomeFicheiro = string.split(i,?/')[1:]&lt;br /&gt;conexion.storbinary(?STOR ? + nomeFicheiro, ficheiroLocal, 1024)&lt;br /&gt;ficheiroLocal.close()&lt;br /&gt;pipe = os.popen(?rm ?? + i +???)&lt;br /&gt;except:&lt;br /&gt;print ?Non se puido subi-lo arquivo ? + i&lt;br /&gt;conexion.close()&lt;br /&gt;conexion = FTP(ip)&lt;br /&gt;conexion.login(usuario,passwd)&lt;br /&gt;conexion.cwd(directorio)&lt;br /&gt;print ?Conexion re-establecida?&lt;/p&gt; &lt;p&gt;conexion.close()&lt;/p&gt; &lt;p&gt;if __name__ == ?__main__?:&lt;br /&gt;listaXmls = atopaFicheiros(rutaFicheirosXML)&lt;br /&gt;subeFicheirosFTP(ipServFTP,ftpUser,ftpPasswd,ftpDir,listaXmls) &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-116289069165122828?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/116289069165122828/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=116289069165122828' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116289069165122828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116289069165122828'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/11/python-backup-de-una-carpeta-contra-un.html' title='Python: Backup de una carpeta contra un servidor FTP remoto'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-116289065818853447</id><published>2006-11-07T10:10:00.001+01:00</published><updated>2006-11-07T10:10:58.190+01:00</updated><title type='text'>Truco Python: romper una cadena en subcadenas de X tamaño</title><content type='html'>&lt;p&gt;Con la siguiente función vamos a conseguir dividir un &lt;em&gt;string&lt;/em&gt; en X &lt;em&gt;substring&lt;/em&gt;s de un tamaño dado (muy útil por ejemplo para completar formularios). Es una función muy recurrida, al menos por mi:&lt;/p&gt; &lt;p&gt;&lt;em&gt; def splitCount(s, count):&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;    return [?".join(x) for x in zip(*[list(s[z::count]) for z in range(count)])]&lt;/em&gt;&lt;br /&gt;Para los que empezais con Python, la forma de usarla sería:&lt;/p&gt; &lt;p&gt;&lt;em&gt;myString = ?Esta cadena de pruebas la vamos a romper en cachitos?&lt;br /&gt;LengthOfPieces = 6&lt;br /&gt;a = splitCount(myString, LengthOfPieces)&lt;br /&gt;print a&lt;/em&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-116289065818853447?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/116289065818853447/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=116289065818853447' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116289065818853447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116289065818853447'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/11/truco-python-romper-una-cadena-en.html' title='Truco Python: romper una cadena en subcadenas de X tamaño'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-116289062885781905</id><published>2006-11-07T10:10:00.000+01:00</published><updated>2006-11-07T10:10:28.856+01:00</updated><title type='text'>Grabar imágenes CD/DVD de Nero en Linux</title><content type='html'>&lt;p&gt;Para los que tengais la necesidad de grabar imágenes de Nero en Linux lo único que necesitais es convertirlas a formato .iso. Para ello hay una utilidad preciosa llamada nrg2iso:&lt;/p&gt; &lt;p&gt;jose@tatooine:~$ apt-cache search nrg2iso&lt;br /&gt;nrg2iso - Extracts ISO9660 data from Nero ?.nrg? files&lt;br /&gt;jose@tatooine:~$ sudo apt-get install nrg2iso&lt;br /&gt;Una vez instalado la sintaxis es realmente sencilla:&lt;/p&gt; &lt;p&gt;nrg2iso imagen.nrg imagen.iso &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-116289062885781905?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/116289062885781905/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=116289062885781905' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116289062885781905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116289062885781905'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/11/grabar-imgenes-cddvd-de-nero-en-linux.html' title='Grabar imágenes CD/DVD de Nero en Linux'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-116289059571178777</id><published>2006-11-07T10:09:00.000+01:00</published><updated>2006-11-07T10:09:55.713+01:00</updated><title type='text'>Configurar un RAID con mdadm</title><content type='html'>&lt;p&gt;El funcionamiento de mdadm es similar al de otras herramientas como raidtools (kernel 2.4).&lt;br /&gt;Para crear un dispositivo RAID, debemos modificar el fichero de configuración de mdadm en /etc/mdadm.conf:&lt;/p&gt; &lt;p&gt;&lt;em&gt;DEVICE /dev/dispositivo(s)&lt;br /&gt;ARRAY /dev/md(id_array) devices=/dev/disco1,/dev/disco2?.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Ejemplo de configuración para un array de dos discos /dev/sda y /dev/sdb:&lt;/p&gt; &lt;p&gt;&lt;em&gt;DEVICE /dev/sd[ab]1&lt;br /&gt;ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1&lt;/em&gt;&lt;/p&gt; &lt;p&gt;A continuación debemos crear el array utilizando la configuración que hemos guardado. En este ejemplo crearemos un array en modo mirroring:&lt;/p&gt; &lt;p&gt;&lt;em&gt;$mdadm ?create /dev/md0 ?level=raid1 ?raid-devices=2 /dev/sda1 /dev/sdb1&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Ahora solo nos queda formatearlo y comenzar a utilizarlo:&lt;/p&gt; &lt;p&gt;&lt;em&gt;$mkfs.ext3 /dev/md0&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Para establecer un punto de montaje en el inicio de sistema debemos crearle una entrada en /etc/fstab:&lt;br /&gt;&lt;em&gt;&lt;br /&gt;/dev/md0 /  ext3    defaults    0     0&lt;/em&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-116289059571178777?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/116289059571178777/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=116289059571178777' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116289059571178777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116289059571178777'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/11/configurar-un-raid-con-mdadm.html' title='Configurar un RAID con mdadm'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-116289056071003822</id><published>2006-11-07T10:08:00.000+01:00</published><updated>2006-11-07T10:09:20.713+01:00</updated><title type='text'>Soporte para RAID por software en Linux</title><content type='html'>&lt;p&gt;El soporte de RAID por software es soportado por el kernel de Linux sin mayores problemas, en todos los modos de RAID que deseemos, combinaciones inclusive. También se soporta el uso de uno o más ?spare disks?, utilizados como ?discos reserva? en caso de que alguno de los discos del RAID falle. Cuando el sistema operativo detecta un fallo de discos, automáticamente comienza la réplica de datos al nuevo disco, minimizando la posibilidad de pérdida de datos y dándonos un tiempo adicional para sustituír el disco averiado.&lt;/p&gt; &lt;p&gt;Generalmente las distribuciones incluyen un módulo precompilado para soportar RAID por software, aunque puede estableceser de forma manual recompilando el kernel de forma que se active la opción:&lt;/p&gt; &lt;p&gt;&lt;em&gt;Multiple devices driver support (RAID and LVM) (CONFIG_MD) [Y/n/?] y&lt;br /&gt;RAID support (CONFIG_BLK_DEV_MD) [M/n/y/?] y&lt;br /&gt;Linear (append) mode (CONFIG_MD_LINEAR) [M/n/y/?] y&lt;br /&gt;RAID-0 (striping) mode (CONFIG_MD_RAID0) [M/n/y/?] y&lt;br /&gt;RAID-1 (mirroring) mode (CONFIG_MD_RAID1) [M/n/y/?] y&lt;br /&gt;RAID-4/RAID-5 mode (CONFIG_MD_RAID5) [M/n/y/?] y&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Una vez compilado, para certificar que el módulo se ha cargado podemos revisar el log de arranque:&lt;/p&gt; &lt;p&gt;&lt;em&gt;jose@pequerrecho:~$ dmesg | grep md&lt;br /&gt;[17179599.548000] md: md driver 0.90.3 MAX_MD_DEVS=256, MD_SB_DISKS=27&lt;br /&gt;[17179599.548000] md: bitmap version 4.39&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Este mensaje nos indica que el módulo está cargado y listo para detectar dispositivos RAID. Durante el proceso de autodetección, el kernel trata de buscar particiones marcadas como 0xFD (Linux RAID autodetect). Con fdiks podemos ver y/o editar los tags de una partición:&lt;/p&gt; &lt;p&gt;&lt;em&gt;jose@pequerrecho:~$ fdisk -l /dev/hda&lt;br /&gt;Disk /dev/hda: 100.0 GB, 100030242816 bytes255 heads, 63 sectors/track, 12161 cylinders&lt;br /&gt;Units = cylinders of 16065 * 512 = 8225280 bytes&lt;br /&gt;Device Boot    Start    End    Blocks   Id  System&lt;br /&gt;/dev/hda1   *    1     12095  97153056  fd  Linux raid autodetect&lt;br /&gt;/dev/hda2      12096   12160   522112+  fd  Linux raid autodetect&lt;/em&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-116289056071003822?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/116289056071003822/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=116289056071003822' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116289056071003822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/116289056071003822'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/11/soporte-para-raid-por-software-en.html' title='Soporte para RAID por software en Linux'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115953661687533285</id><published>2006-09-29T15:28:00.000+02:00</published><updated>2006-11-07T10:08:33.606+01:00</updated><title type='text'>¿En qué consiste RAID?</title><content type='html'>&lt;p&gt;RAID consiste en una serie de algoritmos de escritura de bloques de datos (data blocks) en múltiples discos duros. Cada modo o nivel de RAID especifica de qué forma se realizará esta escritura en los discos.&lt;br /&gt;Las dos propiedades que hacen indispensable a RAID son: redundancia y velocidad. Cada nivel de RAID especifica la forma que se aprovecharán estas propiedades, velocidad de lectura/escritura, redundancia de datos o una combinación de ambas propiedades.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;NIVELES DE RAID&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Los niveles de RAID se nombran con un número entero, siendo los niveles más utilizados: RAID0, RAID1, RAID5 y combinaciones de los mismos (RAID0+1, RAID1+0)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;RAID0 (stripping):&lt;/strong&gt; es el nivel de RAID en que se sacrifica la redundancia en favor de la eficiencia. En este nivel se consiguen unas tasas de transferencia de lectura/escritura ideales calculables con la siguiente fórmula:&lt;/p&gt; &lt;p&gt;eficiencia lectura = velocidad lectura de 1 disco * número de discos&lt;br /&gt;eficiencia escritura = velocidad escritura 1 disco * número de discos&lt;/p&gt; &lt;p&gt;Existe la creencia entre las comunidades de usuarios de en nivel 0 los bits se distribuyen de forma equitativa bit a bit entre los discos. Esto no es cierto, la repartición de datos se realiza bloque a bloque, de forma que dos bloques de datos consecutivos estarán en dos discos duros diferentes que conformen el RAID.&lt;br /&gt;Al no disponer de redundancia, en nivel 0 no se dispone la posibilidad de recuperación de datos.&lt;br /&gt;El mínimo número de discos necesarios para conformar un RAID0 es 2.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;RAID1 (mirroring):&lt;/strong&gt; es probablemente el nivel más utilizado en pequeños servidores. Se provee de redundancia aunque la eficiencia en escritura se ve sacrificada (debido a la redundancia). La eficiencia de este nivel puede calcularse en condiciones ideales con la siguiente fórmula:&lt;/p&gt; &lt;p&gt;eficiencia lectura = velocidad lectura 1 disco&lt;br /&gt;eficiencia escritura = velocidad escritura 1 disco / número de discos&lt;/p&gt; &lt;p&gt;En este nivel cada bloque de datos es copiado en todos los discos de conforman el RAID, de forma que si un disco duro ?se cae?, los datos pueden regenerarse en un nuevo disco a partir de las copias contenidas en los restantes discos que conforman el RAID.&lt;br /&gt;El número mínimo de discos necesarios para conformar un RAID1 es 2.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;RAID5 (stripping with parity):&lt;/strong&gt; es una mezcla entre RAID0 y RAID1 con la salvedad de que los bloques de datos y paridad se distribuyen entre todos los discos, en lugar de mantener imágenes de los mismos. Los cálculos de paridad se efectúan con cada proceso de escritura y son utilizados para regenerar los bloques de datos ante un fallo. Al mismo tiempo los bloques de datos consecutivos se almacenan en discos diferentes con lo que se aumenta al rendimiento tanto en lectura como en escritura. La eficiencia de un RAID5 en condiciones ideales podría calcular con la siguiente fórmula:&lt;/p&gt; &lt;p&gt;eficiencia lectura = velocidad 1 disco * número de discos&lt;br /&gt;eficiencia escritura = velocidad 1 disco * (número de discos - 1)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;RAID0+1 y RAID1+0&lt;/strong&gt; son modos avanzados que juntan los beneficios de RAID0 y RAID1 realizando ?grupos de RAIDs?. RAID0+1 por ejemplo, es el modo ?stripping? de un grupo de discos creando una unidad lógica mayor que los contenga en un nivel ?mirroring?. A modo de ejemplo, un RAID0+1 de 100GB estaría compuesto por 10 discos de 20GB, donde cada bloque de datos sería escrito en modo RAID0 sobre 5 discos y luego replicado en modo RAID1 sobre el otro RAID0 con los 5 discos restantes. El modo RAID1+0 es el efecto inverso. &lt;/p&gt;&lt;a href="http://blog.cajondesastre.net/"&gt;&lt;span style="font-size:180%;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115953661687533285?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115953661687533285/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115953661687533285' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115953661687533285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115953661687533285'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/09/en-qu-consiste-raid.html' title='¿En qué consiste RAID?'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115926607100359845</id><published>2006-09-26T12:14:00.000+02:00</published><updated>2006-09-26T12:21:11.010+02:00</updated><title type='text'>Copias de seguridad por e-mail?</title><content type='html'>Hace unos días alguien me planteó la posibilidad de tener un script en el cron que enviase por correo electrónico los logs del servidor ftp. Sin lugar a dudas rsync es el rey de las copias de seguridad pero ... vamos a hacerlo con un poco de Python:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;!/usr/bin/env python&lt;br /&gt;# -*- coding: iso-8859-15 -*-&lt;br /&gt;&lt;br /&gt;import zipfile&lt;br /&gt;import glob, os, socket&lt;br /&gt;import email&lt;br /&gt;import smtplib&lt;br /&gt;from email.MIMEMultipart import MIMEMultipart&lt;br /&gt;from email.MIMEBase import MIMEBase&lt;br /&gt;from email.MIMEText import MIMEText&lt;br /&gt;from email.Utils import COMMASPACE, formatdate&lt;br /&gt;from email import Encoders&lt;br /&gt;&lt;br /&gt;rutaFicheirosLog="/var/log/vsftdp*"&lt;br /&gt;logsComprimidos="/tmp/ficheiroslog.zip"&lt;br /&gt;correoSuxeito="Logs vsftpd para " + socket.gethostname()&lt;br /&gt;correoCorpo="Documento adxunto comprimido Zip"&lt;br /&gt;&lt;br /&gt;def sendMail(to, subject, text, files=[], server="smtp.meuservidor.com"):&lt;br /&gt;   assert type(to) == list&lt;br /&gt;   assert type(files) == list&lt;br /&gt;   fro = "Administrador_Sistemas &lt;sysadmin@meuservidor.com&gt;"&lt;br /&gt;  &lt;br /&gt;   msg = MIMEMultipart()&lt;br /&gt;   msg['From'] = fro&lt;br /&gt;   msg['To'] = COMMASPACE.join(to)&lt;br /&gt;   msg['Date'] = formatdate(localtime=True)&lt;br /&gt;   msg['Subject'] = subject&lt;br /&gt;  &lt;br /&gt;   msg.attach( MIMEText(text) )&lt;br /&gt;  &lt;br /&gt;   for file in files:&lt;br /&gt;      part = MIMEBase('application', "octect-stream")&lt;br /&gt;      part.set_payload( open(file,"rb").read() )&lt;br /&gt;      Encoders.encode_base64(part)&lt;br /&gt;      part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file))&lt;br /&gt;      msg.attach(part)&lt;br /&gt;     &lt;br /&gt;   smtp = smtplib.SMTP(server)&lt;br /&gt;   smtp.sendmail(fro, to, msg.as_string())&lt;br /&gt;   smtp.close()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def atopaReportes(ruta):&lt;br /&gt;   lstReportes = []&lt;br /&gt;   lstReportes = glob.glob(ruta)&lt;br /&gt;   return lstReportes&lt;br /&gt;&lt;br /&gt;if __name__=="__main__":&lt;br /&gt;  &lt;br /&gt;   ficheiroZip = zipfile.ZipFile(logsComprimidos,"w")&lt;br /&gt;   listadoLogs = atopaReportes(rutaFicheirosLog)&lt;br /&gt;  &lt;br /&gt;   for ficheiro in listadoLogs:&lt;br /&gt;      ficheiroZip.write(ficheiro, os.path.basename(ficheiro), zipfile.ZIP_DEFLATED)&lt;br /&gt;  &lt;br /&gt;   ficheiroZip.close()&lt;br /&gt;  &lt;br /&gt;   sendMail(["jose@meuservidor.com"], correoSuxeito, correoCorpo, ["/tmp/ficheiroslog.zip"]) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Es un poco trivial, pero para echarlo a andar por casa viene siendo útil.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115926607100359845?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115926607100359845/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115926607100359845' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115926607100359845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115926607100359845'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/09/copias-de-seguridad-por-e-mail.html' title='Copias de seguridad por e-mail?'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115797371428490542</id><published>2006-09-11T13:18:00.000+02:00</published><updated>2006-09-11T13:21:54.293+02:00</updated><title type='text'>Controlando las X-Windows remotamente</title><content type='html'>&lt;span style="font-style: italic;"&gt;Muchos usuarios de Microsoft Windows suelen echarme por cara la facilidad que les supone el controlar máquinas de forma remota utilizando productos como Symantec PC Anywhere o Radlink Remote Administrator. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Casi todo el mundo conoce VNC pero, personalmente no termina de atraerme la gran cantidad de recursos que consume. A continuación vamos a listar un par de opciones válidas para Linux:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;OPCION 1: &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"Compartir el monitor" y lanzar aplicaciones en una máquina remota visualizándolas en el equipo local&lt;/span&gt; (muy útil en redes locales). Es decir, podemos tener un servidor X-Window ligero lanzado en un 486 a 66 Mhz, compartir el monitor del 486, conectarnos a una estación más potente y lanzar desde allí los procesos, por ejemplo el Firefox y, por qué no? ... el Quake. (Más de uno se quedaría de piedra viéndolo)&lt;br /&gt;Los pasos para conseguirlo son los siguientes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1.-&lt;/span&gt; Desde una sesión X-Window que tengamos lanzada, abrimos un terminal y "compartimos el monitor" con xhost:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@pequerrecho:~$ xhost +192.168.1.32&lt;br /&gt;192.168.1.32 being added to access control list&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En este caso permitimos que la ip 192.168.1.32 pueda utilizar nuestro servidor X. Si queremos abrir acceso para todo el mundo:&lt;br /&gt;&lt;br /&gt;j&lt;span style="font-size:85%;"&gt;ose@pequerrecho:~$ xhost +&lt;br /&gt;access control disabled, clients can connect from any host&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2.- &lt;/span&gt;Nos conectamos a la máquina remota desde la que queremos lanzar las aplicaciones:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@pequerrecho:~$ ssh jose@192.168.1.32&lt;br /&gt;password:&lt;br /&gt;jose@maquina2:~$&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3.- &lt;/span&gt;Indicamos a la máquina remota que queremos usar el servidor X de nuestra máquina:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@maquina2:~$ export DISPLAY=192.168.1.32:0.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4.-&lt;/span&gt; Lanzamos la aplicación en el equipo remoto y la visionamos en nuestro pc local:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@maquina2:~$ firefox &amp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;OPCION 2:&lt;/span&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;Permitir login gráfico remoto con XDMCP&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta opción nos permite acceder a nuestro "Desktop Manager" favorito de forma remota, como si estuviésemos en el equipo local. Utilizando GDM es realmente fácil:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1.-&lt;/span&gt; Como root lanzamos el configurador de GDM:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@pequerrecho:~$ gdmsetup&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2.-&lt;/span&gt; En la pestaña "Remota", activamos la entrada remota, en principio igual que la entrada local.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3.-&lt;/span&gt; Reiniciamos GDM pulsando (Ctrl + Alt + BackSpace)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4.-&lt;/span&gt; Desde el equipo cliente iniciamos la sesión remota:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@equiporemoto:$ X -query ip_servidor_XDMCP&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTA DE SEGURIDAD:&lt;/span&gt; &lt;span style="font-size:85%;"&gt;Hay que tener muy en cuenta, sobre todo si las máquinas están expuestas que hay un número de puertos que debemos asegurar/denegar/filtrar para las ips interesadas. Además, estos servicios deberían correr bajo túneles ssh como medida extra de seguridad. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115797371428490542?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115797371428490542/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115797371428490542' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115797371428490542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115797371428490542'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/09/controlando-las-x-windows-remotamente.html' title='Controlando las X-Windows remotamente'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115796149596552162</id><published>2006-09-11T09:57:00.000+02:00</published><updated>2006-09-11T09:58:15.966+02:00</updated><title type='text'>Spamassassin, no más correo basura en Evolution</title><content type='html'>Los spammers utilizan cada día técnicas más enrevesadas para saltarse el software anti-spam y los filtros de muchos proveedores de correo se confunden (como Dinio) y dejan pasar demasiada basura (como por ejemplo Terra).&lt;br /&gt;SpamAssassin es una herramienta muy popular y hay paquetes disponibles para la gran mayoría de distribuciones, listos para instalar en un click. En nuestra distribución favorita es realmente fácil:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;apt-get install spamassassin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para los que opten por una instalación manual, SpamAssassin requiere Perl y los siguientes módulos: perl-Time-HiRes, perl-Digest-SHA1, perl-Digest-HMAC y perl-Net-DNS.&lt;br /&gt;&lt;br /&gt;La integración de SpamAssassin con Evolution es realmente buena, simplemente debemos de tener el demonio de SpamAssassin corriendo y decirle a Evolution que lo utilice. Para ello, lo primero será configurar SpamAssasin para arranque como demonio editando el fichero de configuración /etc/default/spamassassin y cambiando el valor de ENABLED a 1, ya que por defecto es 0:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;# /etc/default/spamassassin&lt;br /&gt;# Duncan Findlay&lt;br /&gt;# WARNING: please read README.spamd before using.&lt;br /&gt;# There may be security risks.&lt;br /&gt;# Change to one to enable spamd&lt;br /&gt;ENABLED=1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Luego iniciamos el demonio:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;/etc/init.d/spamassassin start&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Por último nos queda indicarle a Evolution que debe usar SpamAssassin (en la mayoría de los casos ya está activado). Debemos de clickar en el menú Editar/Complementos y activar la casilla "Complemento de filtro de spam con SpamAssassin".&lt;br /&gt;A partir de ahora el correo basura irá directamente a la carpeta "Spam" (o Junk según el idioma de instalación). Si se cuela algún correo indeseable o SpamAssassin se equivoca e impide la entrada de correos válidos, podemos entrenarlo marcando o desmarcando como spam los correos que deseemos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115796149596552162?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115796149596552162/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115796149596552162' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115796149596552162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115796149596552162'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/09/spamassassin-no-ms-correo-basura-en_11.html' title='Spamassassin, no más correo basura en Evolution'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115746604009575787</id><published>2006-09-05T16:15:00.000+02:00</published><updated>2006-09-05T16:20:40.110+02:00</updated><title type='text'>Escritorio 3D en el portátil sin morirse en el intento</title><content type='html'>Parece ser que están de moda los &lt;span style="font-weight: bold;"&gt;escritorios 3D con XGL&lt;/span&gt; pero claro, no todo el mundo tiene una tarjeta gráfica nVidia o ATI. En mi caso particular la experiencia ha sido sobre un portátil con &lt;span style="font-weight: bold;"&gt;tarjeta gráfica de Intel y driver i810&lt;/span&gt;.&lt;br /&gt;La gran premisa es conseguir un entorno bonito, lleno de efectos que ponga a trabajar a la gráfica pero que el rendimiento de la máquina no caiga. Los pasos para conseguirlo bajo Ubuntu 6.0.6 son los siguientes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1.- Añadir los repositorios necesarios para descargarse los paquetes:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;deb http://xgl.compiz.info/ dapper main aiglx&lt;br /&gt;deb-src http://xgl.compiz.info/ dapper main aiglx&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2.- Instalar los módulos de DRI:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;sudo apt-get install linux-dri-modules-common&lt;br /&gt;sudo apt-get install linux-dri-modules-`uname -r`&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3.- Instalar los siguientes paquetes:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;sudo apt-get install xserver-xorg-air-core, compiz, compiz-gnome, gnome-compiz-manager&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4.- Enlazar los módulos del antiguo servidor X al nuevo, de lo contrar xorg-air se quejará de que no encuentra los drivers especificados en /etc/X11/xorg.con:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;sudo ln -s /usr/lib/xorg/modules/drivers/  /usr/lib/xorg-air/modules/drivers&lt;br /&gt;sudo ln -s /usr/lib/xorg/modules/input/  /usr/lib/xorg-air/modules/input&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5.- Editar el fichero de configuración /etc/X11/xorg.conf y tocar los siguientes parámetros:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;    * En la sección Modules:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;      Load "dri"&lt;br /&gt;      Load "dbe"&lt;br /&gt;      Load "glx"&lt;br /&gt;y comentar #Load "GLCore"&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;    * En la sección Device:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;      Option "XAANoOffscreenPixmaps"&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;   * En ServerLayout:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;      Option "AIGLX" "true"&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;   * En DRI (probablemente ya esté así):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;      Section "DRI"&lt;br /&gt;          Mode 0666&lt;br /&gt;      EndSection&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;    * Crear una sección Extensions:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;      Section "Extensions"&lt;br /&gt;          Option "Composite" "Enable"&lt;br /&gt;      EndSection&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6.- Tocar la configuración del GDM para que cargue el nuevo servidor X en /etc/gdm/gdm.conf-custom , añadiendo las siguientes líneas al final del fichero:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;[servers]&lt;br /&gt;0=aiglx&lt;br /&gt;[server-aiglx]&lt;br /&gt;name=aiglx server&lt;br /&gt;command=/usr/bin/Xorg-air :0&lt;br /&gt;flexible=true&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7.- Reiniciar GDM para que cargue la nueva configuración:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;sudo /etc/init.d/gdm restart&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;8.- Tocar el script de arranque de compiz para optimizar la ejecución, en /usr/bin/compiz-start:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#Comentar esta línea:    &lt;span style="font-size:85%;"&gt;nohup compiz --strict-binding --indirect-rendering --replace dbus csm &gt; /dev/null &amp;  exit;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Y añadir esta otra a continuación:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;    nohup compiz --strict-binding --indirect-rendering --replace gconf decoration wobbly fade minimize cube rotate zoom scale move resize place switcher &gt; /dev/null &amp; exit;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;9.- Activar GLDesktop dando con el botón derecho en el icono colocado en la barra de tareas o lanzando la aplicación gnome-compiz-preferences:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@pequerrecho:/usr/bin$ gnome-compiz-preferences&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;10.- Lanzar compiz tecleando:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;jose@pequerrecho:/usr/bin$ compiz-start&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;11.- (Opcional)Tras probar que todo está a nuestro gusto, meter compiz en el arranque de Gnome o crear un lanzador para el comando compiz-start. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115746604009575787?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115746604009575787/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115746604009575787' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115746604009575787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115746604009575787'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/09/escritorio-3d-en-el-porttil-sin.html' title='Escritorio 3D en el portátil sin morirse en el intento'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115375756512204030</id><published>2006-07-24T18:10:00.000+02:00</published><updated>2006-07-24T18:12:45.130+02:00</updated><title type='text'>Portátiles con Intel SpeedStep AMD Powernow</title><content type='html'>Uno de los problemas más comunes que se suele tener con Linux viene dado a la hora de configurarlo en dispositivos portátiles, especialmente en lo que a gasto de batería se refiere. Y es que muchas de nuestras distribuciones no habilitan por defecto la gestión inteligente de energía, y surge la duda de que el sistema de Microsoft sea más eficiente. Veamos en pocos pasos como habilitar la gestión inteligente de energía:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1.-&lt;/strong&gt; Instalar el módulo correspondiente a nuestro procesador, según sea su fabricante:&lt;br /&gt;&lt;br /&gt;Para Intel Mobile : modprobe speedstep-centrino&lt;br /&gt;Para AMD Mobile: modprobe powernow-k7&lt;br /&gt;Para AMD64 Mobile: modprobe powernow-k8&lt;br /&gt;&lt;br /&gt;Una vez comprobado que el módulo funciona no queda más que añadirlo a nuestro /etc/modules para que se cargue en el arranque del sistema.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2.-&lt;/strong&gt; Instalar los módulos de gestión de velocidad, que se encuentran en /lib/modules/version_de_kernel/kernel/drivers/cpufreq, los cuales podemos cargar de nuevo en /etc/modules:&lt;br /&gt;&lt;br /&gt;freq_table&lt;br /&gt;cpufreq_powersave&lt;br /&gt;cpufreq_userspace&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3.-&lt;/strong&gt; Instalar el demonio que gestionará la velocidad. Aquí tenemos dos opciones cpudyn y powernowd y, aunque el segundo suena similar a la tecnología de AMD funciona igual de bien con Intel:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;cpudyn&lt;/strong&gt;: utiliza el módulo cpu_powersave y conmuta el micro entre la velocidad máxima y mínima, sin estados intermedios, con lo que el rendimiento de la máquina es bueno y en usos que no demanden de mucho proceso, el ahorro de energía es notable.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;powernowd&lt;/strong&gt;: utiliza el módulo cpu_userspace y conmuta los valores entre máximo y mínimo pasando por estados intermedios con lo que el ahorro de batería es superior a cpudyn pero la máquina se muestra más lenta.&lt;br /&gt;&lt;br /&gt;Personalmente prefiero powernowd ya que lo que me interesa cuando estoy funcionando con baterías es que éstas se aprovechen al máximo alargando el tiempo de operatibilidad.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;4.-&lt;/strong&gt; Instalar un applet para nuestro entorno gráfico favorito que nos muestre en cada instante la velocidad del micro, como gnome-applets y kpowersave&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115375756512204030?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115375756512204030/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115375756512204030' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115375756512204030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115375756512204030'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/porttiles-con-intel-speedstep-amd.html' title='Portátiles con Intel SpeedStep AMD Powernow'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115369271897931956</id><published>2006-07-23T23:59:00.000+02:00</published><updated>2006-07-24T00:11:58.986+02:00</updated><title type='text'>Y quien quiere un Cisco o un Checkpoint?</title><content type='html'>Todos tenemos nuestro viejo ordenador tirado en el trastero sin hacer nada, en mi caso es un HP Intel Pentium 233MX con 32Mb de ram. Me he propuesto darle uso a base de pinguino y no hay mejor aplicación que reconvertirlo en un firewall al estilo de los Cisco Systems o Checkpoint.&lt;br /&gt;Para ello simplemente debemos equipar nuestra vieja máquina con dos tarjetas de red o una tarjeta para la Lan y un módem ADSL compatible compatible con Linux (uno compatible como el de Telefónica, no como el Sagem feo que me envió a mi Wanadoo). Acto seguido podemos instalar nuestra distribución favorita y ponerle un buen script de iptables, aunque hay una forma de obtener un firewall realmente profesional y en cinco minutos.&lt;br /&gt;Existen dos distribuciones ideales para este propósito como son &lt;a href="http://www.smoothwall.org/"&gt;SmoothWall&lt;/a&gt; e &lt;a href="http://ipcop.org/"&gt;IPCop&lt;/a&gt;, que convierten nuestro equipo en un router potentísimo en un par de minutos.  Todo con gestion gráfica remota mediante https, detección de intrusos, logs, actualizaciones remotas, VPN, etc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115369271897931956?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115369271897931956/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115369271897931956' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115369271897931956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115369271897931956'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/y-quien-quiere-un-cisco-o-un.html' title='Y quien quiere un Cisco o un Checkpoint?'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115343391579697416</id><published>2006-07-20T23:59:00.000+02:00</published><updated>2006-07-21T00:21:46.256+02:00</updated><title type='text'>Monitorización de redes con Nagios</title><content type='html'>Cada administrador de sistemas tiene sus reglas y sus políticas, más o menos acertadas en lo que a la monitorización de sus redes se refiere y utiliza unas herramientas y otras basándose en su experiencia. Lo que me dice mi experiencia es lo siguiente:&lt;br /&gt;Cierto es que existen herramientas indispensables como sniffers que nos ayudan a resolver incidencias en problemas puntuales, pero acaso tendrías un sniffer corriendo todo el día? También existen los típicos "pingeadores" como &lt;a href="http://www.linux-magazine.com/issue/54/Charly_Column.pdf"&gt;Smokeping&lt;/a&gt; que hacen bien lo que tienen que hacer, un ping y  te avisa si la máquina no responde (acaso eso no puede hacerse con bash?).&lt;br /&gt;A mi entender monitorizar una red es sinónimo de monitorizar los servicios que se ofrecen, junto con aquellos dispositivos que se consideran indispensables, como por ejemplo el router y para realizar estas tareas a mi siempre me ha funcionado &lt;a href="http://www.nagios.org"&gt;Nagios&lt;/a&gt;. Con Nagios no sólo se puede monitorizar que una máquina esté levantada sinó que podemos ver que el servidor ftp que aloja está funcionando y que el servidor bind9 acepta escuchas. Es muy útil para mantener un historial de fallas cuando ofreces servidores de servicios como: smtp, imap, pop, ftp, www, dns, etc&lt;br /&gt;Existen ejemplos de configuración muy instructivos en &lt;a href="http://bulma.net/impresion.phtml?nIdNoticia=2075"&gt;Bulma&lt;/a&gt;, &lt;a href="http://www.e-ghost.deusto.es/docs/2005/cursos/charlaNagios_20050224.pdf"&gt;Deusto&lt;/a&gt; y &lt;a href="http://nagios.tuxjm.net/"&gt;Nagios-howto&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115343391579697416?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115343391579697416/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115343391579697416' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115343391579697416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115343391579697416'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/monitorizacin-de-redes-con-nagios.html' title='Monitorización de redes con Nagios'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115340050800300647</id><published>2006-07-20T14:55:00.000+02:00</published><updated>2006-07-20T15:01:48.020+02:00</updated><title type='text'>Denegar acceso a MSN Messenger / Hotmail</title><content type='html'>Para los que tengais que administrar redes corporativas probablemente os interesará evitar que los usuarios de la red interna accedan al chat del MSN Hotmail. Basándonos en el &lt;a href="http://joservilas.blogspot.com/2006/07/firewalls-serios-con-iptables.html"&gt;script iptables&lt;/a&gt; que está posteado en este mismo blog, he aquí unas pequeñas líneas complementarias para denegar el acceso a este servicio:&lt;br /&gt;&lt;br /&gt;iptables -A tcp_outbound -p TCP -s 0/0 --destination-port 1863 -j REJECT&lt;br /&gt;iptables  -t mangle -A PREROUTING -p tcp --dport 1863 -j DROP&lt;br /&gt;iptables -t mangle -A PREROUTING -d 63.208.13.126 -j DROP&lt;br /&gt;iptables -t mangle -A PREROUTING -d 64.4.12.200 -j DROP&lt;br /&gt;iptables -t mangle -A PREROUTING -d 64.4.12.201 -j DROP&lt;br /&gt;iptables -t mangle -A PREROUTING -d 65.54.131.249 -j DROP&lt;br /&gt;iptables -t mangle -A PREROUTING -d 65.54.194.118 -j DROP&lt;br /&gt;iptables -t mangle -A PREROUTING -d 65.54.211.61 -j DROP&lt;br /&gt;iptables -t mangle -A PREROUTING -d 207.46.104.20 -j DROP&lt;br /&gt;iptables -t mangle -A PREROUTING -d 207.46.110.2 -j DROP&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115340050800300647?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115340050800300647/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115340050800300647' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115340050800300647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115340050800300647'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/denegar-acceso-msn-messenger-hotmail.html' title='Denegar acceso a MSN Messenger / Hotmail'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115339338864141979</id><published>2006-07-20T12:48:00.000+02:00</published><updated>2006-07-20T13:03:08.660+02:00</updated><title type='text'>Kioslaves, atajos útiles en KDE</title><content type='html'>Tan bien me han hablado de Kubuntu que he tenido que probarlo en el último portátil de Hewlett Packard que ha caído en mis manos (a que si Rubén!).&lt;br /&gt;Había oído hablar de las "kioslaves" unos atajos que vienen con Konqueror y que facilitan ciertas tareas al usuario. Aunque hay una gran cantidad de kioslaves, los que me han parecido más útiles son los siguientes (por cierto, para utilizarlos simplemente teclearlos en la barra de direcciones de Konqueror):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;smb:/&lt;/span&gt;, accede a recursos compartidos windows en red&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;fish:/&lt;/span&gt;, establece una conexión ssh con un equipo remoto&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;pop3:/, imap:/ y smtp:/&lt;/span&gt;, se conectan a diferentes servidores de correo&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;ftp:/ y sftp:/&lt;/span&gt;, cliente ftp y ftp seguro&lt;br /&gt;&lt;br /&gt;Por ejemplo, si quiero conectarme con ssh a mi otra máquina de red de forma gráfica, simplemente he de teclear fish://mi_usuario@ip_de_mi_maquina (pensar que hay gente que utiliza VNC para lo mismo). Otro ejemplo útil sería el descubrir los recursos compartidos de los windozes que hay en red, con un simple smb://&lt;br /&gt;&lt;br /&gt;Teneis un listado más completo en &lt;a href="http://www.linux-magazine.com/issue/56/Konqueror_3.4_Tricks.pdf"&gt;Linux Magazine&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115339338864141979?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115339338864141979/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115339338864141979' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115339338864141979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115339338864141979'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/kioslaves-atajos-tiles-en-kde.html' title='Kioslaves, atajos útiles en KDE'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115313527658068544</id><published>2006-07-17T13:14:00.000+02:00</published><updated>2006-07-17T13:21:16.603+02:00</updated><title type='text'>pyHardware, un bot IRC escrito en Python</title><content type='html'>Como había comentado en post anteriores, es francamente sencillo implementar un simple bot IRC de ayuda utilizando pyIRClib. Este módulo nos da el protocolo totalmente másticado y además incluye el módulo pyIrcBot, muy útil para este caso.&lt;br /&gt;Al bichejo en cuestión lo he llamado pyHardware y su finalidad es la de &lt;a href="http://joservilas.blogspot.com/2006/07/pygoogle-bsquedas-en-tus-programas.html"&gt;realizar búsquedas en google&lt;/a&gt; y mostrar los resultados en el canal. En principio tenía más comandos, como uno de aprendizaje mediante el cual los usuarios le iban enseñando cosas pero, me lo estaban maleducando con lo que decidí eliminarle esa función (en realidad no es más que manejar el comando !aprende e ir guardando en un fichero de texto o una pequeña base de datos).&lt;br /&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;Aquí podeis encontrar el &lt;a href="http://www.terra.es/personal2/djevil/botijo.py"&gt;código fuente del bot&lt;/a&gt; perfectamente indentado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115313527658068544?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115313527658068544/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115313527658068544' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115313527658068544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115313527658068544'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/pyhardware-un-bot-irc-escrito-en.html' title='pyHardware, un bot IRC escrito en Python'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115280968007815662</id><published>2006-07-13T18:49:00.000+02:00</published><updated>2006-07-13T22:11:43.616+02:00</updated><title type='text'>Previniendo ataques de diccionario a nuestros servicios SSH, FTP ...</title><content type='html'>Para los que vivimos aíslados del mundo, de los virus del churros (más conocido como Windows) y de los últimos ingenios antispyware, ver como al &lt;span style="font-family:courier new;"&gt;auth.log&lt;/span&gt; crece sin parar nos pone nerviosos. Confieso pertenecer a ese grupo de usuarios paranoicos que vuelcan el &lt;span style="font-family:courier new;"&gt;auth.log&lt;/span&gt; en el &lt;span style="font-family:arial;"&gt;tty12&lt;/span&gt; (para los que no lo hacen, &lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;tail -f /va/log/auth.log &gt; /dev/tty12&lt;/span&gt;&lt;/span&gt;) y la primera vez que vi correr líneas con intentos de login fallidos casi se me escapan unas gotitas.&lt;br /&gt;&lt;br /&gt;Una vez me expliraron que era un virus, sabiendo que mis claves parecen sumas md5 y que no tengo definidos usuarios con shell válida salvo el mío, entonces me sentí a salvo. Aún así, no me apetece que alguien, sea ente o persona, esté machacando mi conexión y haciendo crecer mi log, con lo que aupado por el calor del momento son tiempos de plantar cara y declarar la guerra al invasor.&lt;br /&gt;&lt;br /&gt;Se me ocurren tres soluciones:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1.- La ley marcial.&lt;/span&gt; Denegar el acceso a los servicios desde el exterior o limitarlos a un cierto número de ips concreto. Lo cierto es que todos los servicios sensibles como SSH deberían estar limitados pero, cuando tienes ips dinámicas es un poco complicado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;a href="http://joservilas.blogspot.com/2006/07/denyhosts-no-ms-flood-mi-sshd.html"&gt;2.- DenyHosts&lt;/a&gt;.&lt;/span&gt; Se trata de un script Python configurable con una serie de reglas que va leyendo el fichero &lt;span style=";font-family:courier new;font-size:85%;"  &gt;/var/log/auth.log&lt;/span&gt; (o &lt;span style=";font-family:courier new;font-size:85%;"  &gt;/var/log/secure&lt;/span&gt; para los del sombrero rojo) y toma decisiones cuando detecta una actividad anormal, como por ejemplo, denegar el servicio.&lt;br /&gt;&lt;a href="http://joservilas.blogspot.com/2006/07/portknocking-abriendo-puertos-bajo_13.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;&lt;a href="http://joservilas.blogspot.com/2006/07/portknocking-abriendo-puertos-bajo_13.html"&gt;3.- PortKnocking&lt;/a&gt;.&lt;/span&gt; La idea es tener todos los puertos "firewalleados" y "llamando" a una secuencia de puertos concretos abrir/cerrar puertos según políticas establecidas. Por ejemplo, podemos establecer una regla para abrir el puerto 22 que sea atacara en esta secuencia a los puertos puertos 87, 54, y 344 y acto seguido el puerto 22 será accesible. El único pero, es que se necesita la aplicación de "marcado" en cada uno de los equipos clientes (siempre se puede llevar en un lápiz usb).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115280968007815662?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115280968007815662/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115280968007815662' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115280968007815662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115280968007815662'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/previniendo-ataques-de-diccionario.html' title='Previniendo ataques de diccionario a nuestros servicios SSH, FTP ...'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115280923099043252</id><published>2006-07-13T18:44:00.000+02:00</published><updated>2006-07-13T22:15:19.703+02:00</updated><title type='text'>DenyHosts, no más flood a mi SSHd</title><content type='html'>DenyHosts es un script escrito en Python que tiene como único fin el evitar ataques de fuerza bruta, algo más que habitual cuando tenemos una máquina corriendo un servidor SSH público. Este script monitoriza el fichero &lt;span style=";font-family:courier new;font-size:85%;"  &gt;/var/log/auth.log&lt;/span&gt; en búsqueda de un anormal crecimiento del mismo, como por ejemplo mi propio &lt;span style=";font-family:courier new;font-size:85%;"  &gt;auth.log&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;Jul  9 09:20:18 firewall-one sshd[687]: Failed password for root from 222.122.160.115 port 35695 ssh2&lt;br /&gt;Jul  9 09:20:21 firewall-one sshd[689]: Could not reverse map address 222.122.160.115.&lt;br /&gt;Jul  9 09:20:21 firewall-one PAM_unix[689]: authentication failure; (uid=0) -&gt; root for ssh service&lt;br /&gt;Jul  9 09:20:23 firewall-one sshd[689]: Failed password for root from 222.122.160.115 port 35909 ssh2&lt;br /&gt;Jul  9 09:20:26 firewall-one sshd[691]: Could not reverse map address 222.122.160.115.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para comenzar a utilizar denyhost, un simple &lt;span style=";font-family:courier new;font-size:85%;"  &gt;apt-get install denyhost&lt;/span&gt; y, he aquí la configuración simple para impacientes:&lt;br /&gt;&lt;br /&gt;/etc/denyhosts.conf&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;DENY_THRESHOLD_INVALID = 2 #Número de intentos fallidos permitos a un usuario inexistente antes de denegar acceso&lt;br /&gt;DENY_THRESHOLD_VALID = 4 #Número de intentos fallidos permitidos a un usuario existente antes de denegar acceso&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Documentación más ampliada en la&lt;a href="http://denyhosts.sourceforge.net/"&gt; web de DenyHosts&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115280923099043252?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115280923099043252/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115280923099043252' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115280923099043252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115280923099043252'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/denyhosts-no-ms-flood-mi-sshd.html' title='DenyHosts, no más flood a mi SSHd'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115280645953238567</id><published>2006-07-13T17:57:00.000+02:00</published><updated>2006-07-13T18:08:37.220+02:00</updated><title type='text'>PortKnocking, abriendo puertos bajo demanda</title><content type='html'>&lt;style type="text/css"&gt;    &lt;!-- @media print {  body {   padding-top:1in;   padding-bottom:1in;   padding-left:1in;   padding-right:1in;  } } body {  text-decoration:none;  text-indent:0in;  text-align:left;  font-weight:normal;  font-variant:normal;  color:#000000;  font-size:12pt;  font-style:normal;  widows:2;  font-family:'Times New Roman'; } table { } td {  border-collapse:collapse;  text-align:left;  vertical-align:top; } p, h1, h2, h3, li {  color:#000000;  font-family:'Times New Roman';  font-size:12pt;  text-align:left;  vertical-align:normal; }      --&gt;   &lt;/style&gt;     &lt;div&gt;Se conoce como portknocking a la técnica de abrir puertos utilizando una combinación de llamadas a un grupo de puertos en concreto en una concreta secuencia, es decir, girando la rueda de nuestra caja fuerte (atacando puertos) en una secuencia de números secretos (grupo de puertos) para poder abrirla (abrir un puerto).&lt;br /&gt;&lt;br /&gt;Partiendo de un firewall que lo deniega todo, un script perl vigila el log del firewall en busca de una secuencia de llamadas a puertos concreta que actúa a modo de password, desbloqueando la ejecución de una aplicación o una línea de comandos. La secuencia de llamadas se realiza utilizando el software cliente de la propia aplicación, la cual debe estar instalada en los equipos remotos desde los que queremos accecer al servicio oculto (también puede estar en un lápiz usb).&lt;br /&gt;&lt;br /&gt;Veamos una configuración simple partiendo del paquete knockd disponible para Debian.&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;br /&gt;1.- Instalamos el paquete&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;pequerrecho:~# apt-get install knockd&lt;br /&gt;....&lt;br /&gt;Configurando knockd (0.4-1) ...&lt;br /&gt;Not starting knockd. To enable it edit /etc/default/knockd&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;2.- Modificamos /etc/default/knockd para permitir que knockd arranque en el inicio de sistema&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;START_KNOCKD=1&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;br /&gt;3.- Editamos /etc/knockd.conf y configuramos nuestros servicios&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;[options]&lt;br /&gt;    logfile = /var/log/knockd.log&lt;br /&gt;[abrirCerrarSSH]&lt;br /&gt;   sequence    = 874, 29, 173&lt;br /&gt;   seq_timeout = 5&lt;br /&gt;   tcpflags    = syn&lt;br /&gt;   start_command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT&lt;br /&gt;   cmd_timeout   = 10&lt;br /&gt;   stop_command  = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;4.- Reiniciar el servicio&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;pequerrecho:~# /etc/init.d/knockd restart &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A partir de este momento, nuestro sistema será invisible a los portscanners pero utilizando el cliente knock y la secuencia de puertos que hemos establecido, podemos abrir el puerto bajo demanda:&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;pequerrecho:~# knock 194.224.52.4   874 29 173&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Existe un cliente portknocking para Windows, cuyo funcionamiento no he verificado llamado &lt;a href="http://www.min.at/port/"&gt;It's Me&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115280645953238567?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115280645953238567/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115280645953238567' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115280645953238567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115280645953238567'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/portknocking-abriendo-puertos-bajo_13.html' title='PortKnocking, abriendo puertos bajo demanda'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115262717656615381</id><published>2006-07-11T16:09:00.000+02:00</published><updated>2006-07-13T15:13:11.733+02:00</updated><title type='text'>Firewalls serios con iptables</title><content type='html'>Que tiempos aquellos en que poníamos  "echo 1 &gt; /proc/sys/net/ipv4/ip_forward" para routear nuestras redes internas!&lt;br /&gt;Hay muchas formas de construirse un buen firewall, una de ellas es copiando y pegando este script (la otra es leyéndose la documentación, pero seamos realistas...):&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:78%;"  &gt;#!/bin/bash&lt;br /&gt;SYSCTL="/sbin/sysctl -w"&lt;br /&gt;IPT="/sbin/iptables"&lt;br /&gt;INET_IFACE="eth0" #Interface conectado a Inet&lt;br /&gt;INET_IP="192.168.0.2" #IP del iface conectado a Inet&lt;br /&gt;LAN_IFACE="eth1" #Interface conectado a la Lan&lt;br /&gt;LAN_IP="192.168.1.1" #IP  del iface conectado a la Lan&lt;br /&gt;LAN_NET="192.168.1.0/24"&lt;br /&gt;LAN_BCAST="192.168.1.255"&lt;br /&gt;LOCAL_IFACE="lo"&lt;br /&gt;LOCAL_IP="127.0.0.1"&lt;br /&gt;&lt;br /&gt;#Carga de módulos&lt;br /&gt;modprobe ip_tables&lt;br /&gt;modprobe ip_conntrack&lt;br /&gt;modprobe ip_nat_ftp&lt;br /&gt;modprobe ip_conntrack_ftp #Estos dos últimos por si tenemos un ftp no pasivo&lt;br /&gt;&lt;br /&gt;#Parámetros del kernel&lt;br /&gt;$SYSCTL net.ipv4.ip_forward="1"&lt;br /&gt;$SYSCTL net.ipv4.tcp_syncookies="1"&lt;br /&gt;$SYSCTL net.ipv4.conf.all.rp_filter="1"&lt;br /&gt;$SYSCTL net.ipv4.icmp_echo_ignore_broadcasts="1"&lt;br /&gt;$SYSCTL net.ipv4.conf.all.accept_source_route="0"&lt;br /&gt;$SYSCTL net.ipv4.conf.all.secure_redirects="1"&lt;br /&gt;$SYSCTL net.ipv4.conf.all.log_martians="1"&lt;br /&gt;&lt;br /&gt;#Borrado de reglas establecidas&lt;br /&gt;$IPT -P INPUT ACCEPT&lt;br /&gt;$IPT -P FORWARD ACCEPT&lt;br /&gt;$IPT -P OUTPUT ACCEPT&lt;br /&gt;$IPT -t nat -P PREROUTING ACCEPT&lt;br /&gt;$IPT -t nat -P POSTROUTING ACCEPT&lt;br /&gt;$IPT -t nat -P PREROUTING ACCEPT&lt;br /&gt;$IPT -t nat -P POSTROUTING ACCEPT&lt;br /&gt;$IPT -t nat -P OUTPUT ACCEPT&lt;br /&gt;$IPT -t mangle -P PREROUTING ACCEPT&lt;br /&gt;$IPT -t mangle -P OUTPUT ACCEPT&lt;br /&gt;$IPT -F&lt;br /&gt;$IPT -t nat -F&lt;br /&gt;$IPT -t mangle -F&lt;br /&gt;$IPT -X&lt;br /&gt;$IPT -t nat -X&lt;br /&gt;$IPT -t mangle -X&lt;br /&gt;&lt;br /&gt;#Política por defecto: DROP&lt;br /&gt;$IPT -P INPUT DROP&lt;br /&gt;$IPT -P OUTPUT DROP&lt;br /&gt;$IPT -P FORWARD DROP&lt;br /&gt;$IPT -N bad_packets&lt;br /&gt;$IPT -N bad_tcp_packets&lt;br /&gt;$IPT -N icmp_packets&lt;br /&gt;$IPT -N udp_inbound&lt;br /&gt;$IPT -N icmp_packets&lt;br /&gt;$IPT -N udp_inbound&lt;br /&gt;&lt;br /&gt;$IPT -A bad_packets -p ALL -i $INET_IFACE -s $LAN_NET -j LOG         --log-prefix "fp=bad_packets:2 a=DROP "&lt;br /&gt;$IPT -A bad_packets -p ALL -i $INET_IFACE -s $LAN_NET -j DROP&lt;br /&gt;$IPT -A bad_packets -p ALL -m state --state INVALID -j LOG         --log-prefix "fp=bad_packets:1 a=DROP "&lt;br /&gt;$IPT -A bad_packets -p ALL -m state --state INVALID -j DROP&lt;br /&gt;$IPT -A bad_packets -p tcp -j bad_tcp_packets&lt;br /&gt;$IPT -A bad_packets -p ALL -j RETURN&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp -i $LAN_IFACE -j RETURN&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG         --log-prefix "fp=bad_packets:1 a=DROP "&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j LOG         --log-prefix "fp=bad_packets=2 a=DROP "&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j DROP&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j LOG         --log-prefix "fp=bad_tcp_packets:3 a=DROP "&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j DROP&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG         --log-prefix "fp=bad_tcp_packets:4 a=DROP "&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG         --log-prefix "fp=bad_tcp_packets:5 a=DROP "&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACL,FIN,URG -j DROP&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j LOG         --log-prefix "fp=bad_tcp_packets:6 a=DROP "&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG         --log-prefix "fp=bad_tcp_packets:7 a=DROP "&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP&lt;br /&gt;$IPT -A bad_tcp_packets -p tcp -j RETURN&lt;br /&gt;$IPT -A icmp_packets --fragment -p ICMP -j LOG         --log-prefix "fp=icmp_packets:1 a=DROP "&lt;br /&gt;$IPT -A icmp_packets --fragment -p ICMP -j DROP&lt;br /&gt;$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j DROP&lt;br /&gt;$IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT&lt;br /&gt;$IPT -A icmp_packets -p ICMP -j RETURN&lt;br /&gt;#Denegar el acceso a Netbios&lt;br /&gt;$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j DROP&lt;br /&gt;$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 130 -j DROP&lt;br /&gt;##&lt;br /&gt;$IPT -A udp_inbound -p UDP -j RETURN&lt;br /&gt;$IPT -A udp_outbound -p UDP -s 0/0 -j ACCEPT&lt;br /&gt;$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT #Aceptamos SSH&lt;br /&gt;$IPT -A tcp_inbound -p TCP -j RETURN&lt;br /&gt;$IPT -A tcp_outbound -p TCP -s 0/0 -j ACCEPT&lt;br /&gt;$IPT -A INPUT -p ALL -i $LOCAL_IFACE -j ACCEPT&lt;br /&gt;$IPT -A INPUT -p ALL -j bad_packets&lt;br /&gt;$IPT -A INPUT -p ALL -d 224.0.0.1 -j DROP&lt;br /&gt;$IPT -A INPUT -p ALL -i $LAN_IFACE -s $LAN_NET -j ACCEPT&lt;br /&gt;$IPT -A INPUT -p ALL -i $LAN_IFACE -d $LAN_BCAST -j ACCEPT&lt;br /&gt;$IPT -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED         -j ACCEPT&lt;br /&gt;$IPT -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound&lt;br /&gt;$IPT -A INPUT -p UDP -i $INET_IFACE -j udp_inbound&lt;br /&gt;$IPT -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets&lt;br /&gt;$IPT -A INPUT -m pkttype --pkt-type broadcast -j DROP&lt;br /&gt;$IPT -A INPUT -j LOG --log-prefix "fp=INPUT:99 a=DROP "&lt;br /&gt;$IPT -A FORWARD -p ALL -j bad_packets&lt;br /&gt;$IPT -A FORWARD -p tcp -i $LAN_IFACE -j tcp_outbound&lt;br /&gt;$IPT -A FORWARD -p udp -i $LAN_IFACE -j udp_outbound&lt;br /&gt;$IPT -A FORWARD -p ALL -i $LAN_IFACE -j ACCEPT&lt;br /&gt;$IPT -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED         -j ACCEPT&lt;br /&gt;&lt;br /&gt;#Redireccionar un puerto&lt;br /&gt;#$IPT -A FORWARD -p tcp -i $INET_IFACE --destination-port 80 #        --destination 192.168.1.20 -j ACCEPT&lt;br /&gt;&lt;br /&gt;$IPT -A FORWARD -j LOG --log-prefix "fp=FORWARD:99 a=DROP "&lt;br /&gt;$IPT -A OUTPUT -m state -p icmp --state INVALID -j DROP&lt;br /&gt;$IPT -A OUTPUT -p ALL -s $LOCAL_IP -j ACCEPT&lt;br /&gt;$IPT -A OUTPUT -p ALL -o $LOCAL_IFACE -j ACCEPT&lt;br /&gt;$IPT -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT&lt;br /&gt;$IPT -A OUTPUT -p ALL -o $LAN_IFACE -j ACCEPT&lt;br /&gt;$IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT&lt;br /&gt;$IPT -A OUTPUT -j LOG --log-prefix "fp=OUTPUT:99 a=DROP "&lt;br /&gt;&lt;br /&gt;$IPT -t nat -A POSTROUTING -o $INET_IFACE         -j SNAT --to-source $INET_IP&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115262717656615381?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115262717656615381/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115262717656615381' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115262717656615381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115262717656615381'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/firewalls-serios-con-iptables.html' title='Firewalls serios con iptables'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115262615059382422</id><published>2006-07-11T15:50:00.000+02:00</published><updated>2006-07-11T15:55:50.606+02:00</updated><title type='text'>Psyco, python a toda máquina</title><content type='html'>Si estás escribiendo un programa bastante largo y quieres agilizar la ejecución sin revisar tu código para quitar 40 "ifs" que sobran, existe un módulo llamado &lt;a href="http://psyco.sourceforge.net/"&gt;Psyco&lt;/a&gt; que lo hace por ti.&lt;br /&gt;&lt;br /&gt;Para los impacientes que no se van a leer la &lt;a href="http://psyco.sourceforge.net/psycoguide/node8.html"&gt;documentación&lt;/a&gt;, he aquí la forma más rápida de acelerar tus aplicaciones:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-weight: bold;"&gt;import psyco&lt;br /&gt;psyco.full()&lt;/pre&gt; Y para aplicaciones con ingentes cantidades de código:&lt;br /&gt;&lt;br /&gt;&lt;div class="verbatim"&gt;&lt;pre&gt;&lt;span style="font-weight: bold;"&gt;import psyco&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;psyco.profile()&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115262615059382422?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115262615059382422/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115262615059382422' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115262615059382422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115262615059382422'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/psyco-python-toda-mquina.html' title='Psyco, python a toda máquina'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115261635004753610</id><published>2006-07-11T12:51:00.000+02:00</published><updated>2006-07-11T13:12:30.056+02:00</updated><title type='text'>NMEA, leer datos del GPS y no morir en el intento</title><content type='html'>Esta receta es útil para quien tenga la necesidad de programar una aplicación que lea de un GPS (como es mi caso particular). La estructura de las cadenas que nos indican el posicionamiento es la siguiente:&lt;br /&gt;&lt;br /&gt;Trama de ejemplo:&lt;br /&gt;&lt;pre&gt;$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47&lt;br /&gt;&lt;br /&gt;Donde:&lt;br /&gt;    GGA          Datos GPS&lt;br /&gt;    123519       Hora del dato en horario UTC&lt;br /&gt;    4807.038,N   Latitud&lt;br /&gt;    01131.000,E  Longitud&lt;br /&gt;    1            Validez:     0 = invalido&lt;br /&gt;                              1 = GPS valido&lt;br /&gt;                              2 = DGPS valido&lt;br /&gt;                              6 = estimatedo&lt;br /&gt;          8 = modo simulación&lt;br /&gt;    08           Número de satelites utilizados&lt;br /&gt;    0.9          Desviación horizontal&lt;br /&gt;    545.4,M      Altitud en metros&lt;br /&gt;    46.9,M       Geoid&lt;br /&gt;    (vacío)      Tiempo desde última actualización&lt;br /&gt;    (vacío)      ID estación DGPS&lt;br /&gt;    *47          checksum&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115261635004753610?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115261635004753610/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115261635004753610' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115261635004753610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115261635004753610'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/nmea-leer-datos-del-gps-y-no-morir-en.html' title='NMEA, leer datos del GPS y no morir en el intento'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115261442251027157</id><published>2006-07-11T12:38:00.000+02:00</published><updated>2006-07-11T12:40:22.520+02:00</updated><title type='text'>Expresiones regulares en Python</title><content type='html'>He aquí un tutorial sobre expresiones regulares en Python.&lt;br /&gt;&lt;br /&gt;Es bastante completo y en mi caso particular me ha sido de gran ayuda.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://milugar.net/index2.php?option=com_content&amp;task=view&amp;amp;id=73&amp;pop=1&amp;amp;page=0&amp;amp;Itemid=5"&gt;Expresiones regulares en Python - milugar.net&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115261442251027157?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115261442251027157/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115261442251027157' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115261442251027157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115261442251027157'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/expresiones-regulares-en-python.html' title='Expresiones regulares en Python'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30957194.post-115261347142204202</id><published>2006-07-11T12:15:00.000+02:00</published><updated>2006-07-11T12:24:31.423+02:00</updated><title type='text'>Usuarios virtuales vs usuarios sin shell</title><content type='html'>Pongámonos en situación:&lt;br /&gt;&lt;br /&gt;Tenemos que dar acceso FTP e IMAP a un cierto número de usuarios, para que puedan colgar sus ficheros y tener su correo electrónico almacenado. Nuestra política de seguridad más básica a la hora de crear los usuarios será la de darles acceso a estos servicios pero denegarles las entradas a la shell (más que básico es obvio). Para realizar esta tarea, tenemos dos opciones:&lt;br /&gt;&lt;br /&gt;a) Crear usuarios virtuales en cada uno de los servicios con sus consecuentes políticas de acceso. Esta opción es profesional, segura pero muy lenta y tediosa de administrar.&lt;br /&gt;&lt;br /&gt;b) Añadir los usuarios que nos interese a una shell nula, con lo que nunca podrán hacer login. Es una solución sobria y rápida. Los pasos que debemos seguir son los siguientes:&lt;br /&gt;&lt;br /&gt;1.- Añadir la shell nula a la lista de shells permitidas: &lt;span style="font-weight: bold;font-size:78%;" &gt;echo "/bin/false" &gt;&gt; /etc/shells&lt;/span&gt;&lt;br /&gt;2.- Indicar a los usuarios la shell que deben usar: &lt;span style="font-weight: bold;font-size:78%;" &gt;useradd -g users -s /bin/false -d /home/nombre_usuario nombre_usuario&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sencillo, rápido y efectivo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30957194-115261347142204202?l=joservilas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joservilas.blogspot.com/feeds/115261347142204202/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30957194&amp;postID=115261347142204202' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115261347142204202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30957194/posts/default/115261347142204202'/><link rel='alternate' type='text/html' href='http://joservilas.blogspot.com/2006/07/usuarios-virtuales-vs-usuarios-sin.html' title='Usuarios virtuales vs usuarios sin shell'/><author><name>Jose Ramon Vilas</name><uri>http://www.blogger.com/profile/02697730794759795047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
