archives/2009/05 http://grulicueva.homelinux.net/~mdione/glob//archives/2009/05/ StyXman's glob charla-ssh-scp-screen http://grulicueva.homelinux.net/~mdione/glob//posts/charla-ssh-scp-screen/ http://grulicueva.homelinux.net/~mdione/glob//posts/charla-ssh-scp-screen/ tags/security tags/utils Sat, 18 Apr 2009 23:49:35 +0200 2009-04-18T21:49:35Z <p>El otro día dí una charlita un poquito larga de ssh/scp y screen en el <a href="http://iate.oac.uncor.edu/">IATE</a>, el lugar donde laburo. En la misma hablo de <code>ssh/scp</code> básico, mas cómo poner claves públicas/privadas y cómo usar el <code>ssh-agent</code> para administrarlas (algo de lo que <a href= "http://grulicueva.homelinux.net/~mdione/glob/posts/ssh-agent/">ya hablé en este glob</a>), mas otros temas como el X11 forwarding y el agent-forwarding. Además hablé de <code>screen</code>, una herramineta que se complementa muy bien con <code>ssh</code>. Dejo las filminas <a href= "http://grulicueva.homelinux.net/~mdione/charlas/ssh-screen-2.odp">acá</a>.</p> <p><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2009/05/../../../tags/security/">security</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2009/05/../../../tags/utils/">utils</a></p> recuperando-particiones-con-papel-y-lapiz http://grulicueva.homelinux.net/~mdione/glob//posts/recuperando-particiones-con-papel-y-lapiz/ http://grulicueva.homelinux.net/~mdione/glob//posts/recuperando-particiones-con-papel-y-lapiz/ tags/rescue tags/sysadmin Fri, 17 Apr 2009 19:11:48 +0200 2009-04-17T17:11:48Z <p>El sábado pasado recibo un mail de un chango del laburo con subject «ayuuuudaaa urgenteeeeee»[sic]. Me dice que estaba boludeando el viernes a la noche cuando la máquina se quedó primero sin sonido y luego se tildaba. Cuando la quizo reiniciar no arrancó más. «dice algo de disco no booteable...».</p> <p>El lunes caigo como siempre y me voy a verla. Efectivamente, decía algo de disco no booteable. Booteo con un <a href= "http://grml.org/">GRML</a> que tengo en un pendrive y descubro que el disco no tiene particiones.</p> <p>Pánico.</p> <p>El tipo está acá haciendo un posdoc en algo astronómico (literalmente) y todo su laburo está ahí dentro. No hay backups, como corresponde, así que me preparo a hacer un rescate de particiones.</p> <p>En el mismo pendrive tengo un sistema con <a href= "http://www.gnu.org/software/parted/">parted</a>. Booteo con eso y trato de usar el rescue del parted. Naranja. Le pregunto cómo eran las particiones, etc. Me responde que él sólo instaló un Kubuntu por defecto. Por defecto Kubuntu crea una partición swap y una ext3 para / y eso es todo, lo cual hacía mas fácil lo que estaba por venir.</p> <p>Reninicio en el GRML y con <code>hexdump -C /dev/sda | more</code> me pongo a ver el contenido del diso a pelo. No es la primera vez que hago malabares con particiones y MBRs, pero antes lo hacía con una herramienta que creo que a esta ahora está discontinuada (El programa se llamaba adecuadamente DiskEdit, de una empresa que lleva el mismo nobre que un vino y que el apellido del dueño, cuyo nombre es el mismo que el padre en Family Guy, y que vienen haciendo Utilities para Windows desde que las hacían para DOS) y que tenía visores especiales para estos sectores y también editar FATs y un montón cosas útiles... en el universo M$.</p> <p>Primero confirmo que, efectivamente, el primer sector es un MBR (al menos tiene el signature <code>0x55aa</code> en los últimos dos bytes), y toda la <a href= "http://en.wikipedia.org/wiki/Mbr#MBRs_and_disk_partitioning">tabla de particiones</a> está vacía, pero que en el segundo sector parece haber una copia. Agarro papel y lápiz, transcribo lo que parece haber, pero al final resulta que no sólo tengo la mitad de los datos, sino que es una partición muy chica.</p> <p>Entonces me propongo buscar la partición ext3 a mano. Para ello tuve que averiguar cómo es que hace un ext3 para saber que la partición realmente es una ext3 y no cualquier verdura. Sabía que que sería con un magic, pero no tenía ni idea. Instalé las fuentes del 2.6.29 en mi laptop y me puse a mirar el código de ext3. Después de dar bastante vueltas, incluyendo seguir el código que se ejecuta cuando <a href= "http://lxr.linux.no/linux+v2.6.29/fs/super.c#L917">montás</a> <a href="http://lxr.linux.no/linux+v2.6.29/fs/super.c#L779">un</a> <a href= "http://lxr.linux.no/linux+v2.6.29/fs/super.c#L357">filesystem</a> <a href= "http://lxr.linux.no/linux+v2.6.29/fs/ext3/super.c#L1546">ext3</a>, donde <a href= "http://lxr.linux.no/linux+v2.6.29/fs/ext3/super.c#L1614">podemos ver que usa</a> un <a href= "http://lxr.linux.no/linux+v2.6.29/include/linux/magic.h#L16">magic</a>[3] y <a href= "http://lxr.linux.no/linux+v2.6.29/include/linux/ext3_fs.h#L454">también</a> la <a href= "http://lxr.linux.no/linux+v2.6.29/include/linux/ext3_fs.h#L454">estructura del superblock del ext3</a>, donde vemos que <a href= "http://lxr.linux.no/linux+v2.6.29/include/linux/ext3_fs.h#L470">el offset del magic</a> es 0x38.</p> <p>Entonces el problema de encontrar un ext3 en un disco se reduce a buscar un 0x53ef (fucking little endian) en la posición 0x38 de un sector en el disco. Por suerte <code>more</code> tiene para buscar, así que me siento a buscar toooodas las ocurrencias de <code>53 ef</code> esperando que la dirección a la derecha termine con <code>30</code> y que sean el 9no y el 10mo byte de la línea (maldito 0 based).</p> <p>Unos cuantos next después, tengo mi primer candidato. Pinta muy bien, porque además lo estaba comparando con el mismo dump pero del pendrive (que tengo formateado en ext2, y por suerte ext2 y ext3 comparten todas estas estructuras), y además pude ver algo que tenía toda la pinta de ser un <a href= "http://lxr.linux.no/linux+v2.6.29/include/linux/ext3_fs.h#L499"><code> uuid</code></a>.</p> <p>Saco que la dirección del magic es <code>0x80731038</code>. A eso le resto los <code>0x38</code> y me da que el superblock empieza en <code>0x80731000</code>, un lindo número redondito. Pasado a decimal me dá el byte <code>2.155.024.384</code>, unos 2GiB desde del comienzo del disco. ¡Pinta muy bien! El swap podría estar primero, y ser de unos 2GiB.</p> <p>Arranco un <code>fdisk /dev/sda</code> y al mostrar la tabla (aún vacía) de particiones me dice que hay <code>16.065</code> sectores por cilindro*<code>512</code> bytes por sector= <code>8.225.280</code> bytes por cilindro. Casi todas las distros (en realidad creo que todas) particionan los discos por cilindros[1], por lo que si el sector éste está justo al principio de un cilindro...</p> <p>Divido <code>2.155.024.384/8.225.280=...</code></p> <p>(suspenso)[2]</p> <p><code>262.000124494...</code></p> <p>¡Damn! Casi lo tenía... Hmm, ¿y cuánto es lo que sobra? <code>(262.000124494-262)*8.225.280=...</code> ¡<code>1024</code>! ¿Será que...?</p> <p>Arranco un <code>strace debugfs -R show_super_stats /dev/sdb1</code> (la partición en mi pendrive) y veo que ¡efectivamente hace un seek de <code>1024</code> bytes dentro de la partición para leer el superblock!</p> <p>This is it. Con el 262 en la cabeza arranco <code>fdisk /dev/sda</code> y creo dos particiones: un swap en los cilindros 1-261 y una linux del cilindro 262 en adelante. Guardo, salgo, cruzo los dedos y corro un <code>debugfs -R show_super_stats /dev/sda1</code>. ¡Fail! ¿Qué pasa? Reinicio y pruebo de nuevo, no vaya a ser que el kernel no haya leído bien la nueva tabla de particiones. Tampoco. ¿WTF?</p> <p>Ah, duh, es <code>sda2</code>. Ok, <code>debugfs -R show_super_stats /dev/sda2</code>... ¡Anda, el muy HDP anda! No lo puedo creer. Me la juego: <code>fsck -n /dev/sda2</code>. «Filesystem is clean» Damn, vamos de nuevo: <code>fsck -n -f /dev/sda2</code>...</p> <pre> <code>Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sda2 sarasa sarasa... </code> </pre> <p>¡Intacto! Pero el MBR no tiene un grub, así que hago el habitual proceso de reinstalar Grub, reinicio...</p> <p>Bootea perfecto, y termina en un hermoso login. Satisfecho, me doy unas palmaditas en la espalda, cargo mis cosas y comienzo el fin de semana.</p> <p><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2009/05/../../../tags/sysadmin/">sysadmin</a> rescue</p> <hr /> <p>[1] ... desperdiciando unos 8MiB entre el MBR y la primera partición</p> <p>[2] Los perspicaces se darán cuenta al toque que eso no puede ni a ganchos dar entero.</p> <p>[3] Son muy graciosos los magics de Reiser. Parece haber iniciado una moda que ahora usan los AdOlEsCeNtEs.</p> pycamp-2009 http://grulicueva.homelinux.net/~mdione/glob//posts/pycamp-2009/ http://grulicueva.homelinux.net/~mdione/glob//posts/pycamp-2009/ tags/bazaar tags/kde tags/pyar tags/python tags/twisted Wed, 08 Apr 2009 06:27:04 +0200 2009-04-08T04:27:04Z <p>Acaba de terminar la edición 2009 de pyCamp. Esta vez vinieron cerca de 40 personas, lo cual hizo que hubiera más proyectos dando vueltas y mas gente en los proyectos. Fueron 4 días fantásticos llenos de ideas, código, reuniones, juegos, algo de alcohol y mucho mas. A diferencia del año pasado, esta vez vienieron algunos audaces con familia, no sé cómo les habrá ido.</p> <p>Este año estuve mucho mas enganchado. El primer día hicimos un schedule cuasi definitivo y en el momento se me ocurrió hacer cosas con Fuse y Python. Cuando tocó el slot, di una charla de cómo funciona Fuse y algunas puntas de cómo implementar file systems con él. Al final del evento yo había terminado el wrapper que venía haciendo hace unas semanas (ok, ok, falta <code>statvfs</code>) y <a href="http://perrito666.com.ar">perrito</a> se hizo un filesystem para acceder los iPod. Lucio me hizo prometer ver cómo combinar Fuse async con Twisted. También le estuve explicando <code>ctypes</code> al Polako, con lo que creo que terminé de entender el módulo y me ayudó a entender algunas cosas que había hecho para el wrapper.</p> <p>También estuve en el diseño y (re)implementación del bot de irc. En apenas 2 días y medio ya tenemos el core y unos cuantos plugins, y hay varios desarrolladores haciendo mas. Sólo faltan implementar pedezos de infraestructura, sobre todo la parte de bases de datos, pero me veo metiendo un par de plugins mas y ponerla en producción muy muy pronto (en relaidad perrito le va a dar hosting). También fue una oportunidad para (re)aprender Twisted, y enterarse de cosas como que <a href= "http://twistedmatrix.com/projects/core/documentation/howto/gendefer.html#auto2"> no podés hacer asincrónico un proceso sincrónico</a>, y de aprender de boca de Guillo cómo usar <code>bzr</code> para laburar entre los 6 u 8 que metíamos código.</p> <p>También estuve renegando los dos primeros días con el applet de batería de KDE4. Terminé encontrando (un bug en Solid)[https://bugs.kde.org/show_bug.cgi?id=187600] y aprendiendo detalles sobre Hal, D-Bus, algunos bastante oscuros y bizarros. Al mismo tiempo estuve viendo cómo se comportan los algoritmos de recarga de batería y de estimación de los tiempos de descarga y de descarga. Resulta que cuando está terminando de cargar se empieza a estirar el tiempo y los últimos 5 minutos pueden termiar siendo 20.</p> <p>Estuvo genial poder conocer más gente y de volver a ver algunas caras conocidas (hace rato que no estaba en un evento de alguna comunidad). Entre los nuevos encontré a gente de <a href= "http://kde.org.ar">Kde-ar</a> como Leo u otros jugando con PyQt. Me encantó volver a sentir que programaba, ver unos proyectos arrancar y otros continuar a velocidades de la hostia, con features apareciendo como hongos y bugs desapareciendo como... bueno, no es una buena fecha para hablar de desapariciones :|</p> <p>El último sprint estuvo genial; monitoreen la lista y/o el canal para enterarse de los resultados ;-)</p> <p><a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2009/05/../../../tags/python/">python</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2009/05/../../../tags/twisted/">twisted</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2009/05/../../../tags/bazaar/">bazaar</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2009/05/../../../tags/pyar/">pyar</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//archives/2009/05/../../../tags/kde/">kde</a></p>