Archive for the ‘GNU/Linux’ Category

Remover direcciones IP bloqueadas por DenyHosts

Sunday, January 25th, 2009

DenyHosts es un script escrito en Python que analiza los logs del servidor sshd y determinar posibles intentos de ataques. En caso de que se detecte tal intento se actualiza el archivo /etc/hosts.deny con la IP del posible ataque para prevenir cualquier intento futuro.

A través del archivo /etc/denyhosts.conf se setea la configuración, por ejemplo cantidad de intentos fallidos por el puerto ssh (por defecto 22) para que se considere un ataque.

¿Qué sucede si por equivocación DenyHosts nos confunde con un atacante al habernos confundido en la cantidad de intentos posibles? Nuestra IP es almacenada en /etc/hosts.deny y por lo tantos tenemos el acceso bloqueado. Para remediar esta situación no bastará con remover nuestra IP de hosts.deny. Tenemos que hacer lo siguiente:

  • Detener DenyHosts (i.e. /etc/init.d/denyhosts stop)
  • Remover la IP bloqueada de /etc/hosts.deny
  • Remover la IP bloqueada de WORK_DIR/hosts
  • Remover la IP bloqueada de WORK_DIR/hosts-restricted
  • Remover la IP bloqueada de WORK_DIR/hosts-root
  • Remover la IP bloqueada de WORK_DIR/hosts-valid
  • Remover la IP bloqueada de WORK_DIR/user-hosts
  • Arrancar DenyHosts (i.e. /etc/init.d/denyhosts start)

Nota: Para obtener WORK_DIR utilizar el siguiente comando:


$ cat /etc/denyhosts.conf | grep 'WORK_DIR ='

En Debian Etch la salida del comando anterior es WORK_DIR = /var/lib/denyhosts

Fuente

Imprimir PDF: dos páginas por hoja y doble faz

Wednesday, December 3rd, 2008

Recurrente problema que he tenido hace tiempo; además de ser una manera excelente de economizar en impresiones de libros digitales.

Simplemente he codificado un pequeño script que divide el documento en cuestión en dos archivos: primeras.pdf y segundas.pdf. Cada archivo contiene las hojas divididas, teniendo en cuenta que se van a imprimir dos hojas por cara, para primero imprimir todas las hojas correspondientes a las caras superiores y el otro el de las inferiores.

Por ejemplo: tenemos un documento llamado libro.pdf el cual tiene 16 hojas. Al utilizar el script obtendremos dos archivos, los cuales contendrán las hojas:

  • primeras.pdf; contiene hojas de las caras superiores: 1, 2, 5, 6, 9, 10, 13, 14.
  • segundas.pdf; contiene hojas de las caras inferiores: 3, 4, 7, 8, 11, 12, 15, 16.

Script


#!/bin/bash
total=#Coloque la cantidad de hojas del documento
eval pdftk A=$1 cat `i=1;while [ $i -lt $((total)) ];
do echo A$i A$(($i+1));
let i=$(($i + 4));
done` output primeras.pdf
eval pdftk A=$1 cat `i=3;while [ $i -lt $((total)) ];
do echo A$i A$(($i+1));
let i=$(($i + 4));
done` output segundas.pdf

Uso

  1. Hay que editar el script (como se indica más abajo).
  2. Colocar el documento en la misma carpeta que el script.
  3. Abrir una terminal y teclear:
    
    $ ./script.sh foo.pdf
    
  4. Genera dos archivos. Primero imprimir: primeras.pdf, luego segundas.pdf.

Consideraciones

  • Para que el script funcione se debe tener instalado pdftk; un pequeño software que manipula documentos PDF (en cualquier distribución Debian: aptitude install pdftk).
  • Lamento no ser un experto en bash; el script no es perfecto. Antes de utilizarlo hay que indicarle la cantidad de hojas del documento, editando el script, asignando el valor a la variable: total. He intentado automatizar esto pero no he podido lograrlo. Si alguien lograse hacerlo agradecería que compartiese la solución. (dejo una pequeña ayuda para obtener la cantidad de hojas del documento PDF: eval pdftk $documento dump_data | grep “NumberOfPages:” | awk ‘{print $2}’).

Enlaces simbólicos y scp

Wednesday, July 9th, 2008

Me tocó hacer unos respaldos de cantidades importantes de archivos, entre dos equipos que se encontraban localizados en la misma red. Al enfrentar dicho trabajo, supuse erróneamente que sería muy fácil utilizando el comando scp, utilizando el parámetro r.


# scp -r /home/dante root@192.168.1.1:/mnt/disk015/dante

Se necesitaban respaldar aproximadamente 210GB. Calculé que el proceso iba a tomar aproximadamente unas 5 horas, dejo los cálculos, espero que estén bien :-P

  • 210 GB = 225485783040 Bytes
  • 225485783040 Bytes = 1803886264320 bits
  • 1803886264320 bits = 1803886 mbits
  • A 100 mbps -> 18038 segundos
  • 18038 segundos = 5 horas

La cuestión es que al pasar las cinco horas seguía copiando. Deje que siguiera, creyendo que había algún error de redondeo u horrores en los cálculos anteriores, pero luego de 3 horas más (con un total de 8 horas) ¡todavía seguía copiando!

Tenía dos hipótesis:

  1. Tengo serios problemas con las matemáticas.
  2. Pasa algo raro con el comando scp.

Con respecto a la primera todavía tengo dudas :-D En cuanto a la segunda, pude comprobar que scp no entiende los links simbólicos. Por lo tanto, al encontrar un link simbólico, no lo respeta y lo sigue, copiando todo el contenido al que apunta. Para entender la magnitud de esto, les sigo comentando mi experiencia.

rsync

Es un programa similar a rcp, pero tiene muchas más opciones. Además permite transferir sólo las diferencias entre archivos, logrando velocidad de transferencia.

Al revisar las copias, comprobé lo comentado anteriormente. Efectivamente, hacía copias de los contenidos apuntados por los links simbólicos. El problema principal fue un serie de links simbólicos que apuntaban a una carpeta llamada “Videos”,que pesaba unos 120GB y existían 3 links simbólicos a esta carpeta, entonces de los 120GB que creí que se debían copiar, pase a copiar ¡360GB!

Todo esto pude haberlo aludido si hubiese sabido sobre el comando rsync, su uso es tan sencillo como scp.


# rsync -r -l -t -v -u /home/dante root@192.168.1.1:/mnt/disk015/dante

Las opciones que utilicé indican.

r
Recursive, recurre dentro de los directorios.
l
Links, al encontrarse con un link simbólico lo copia como tal.
t
Time, preserva los tiempos (de los archivos) al copiarlos.
v
Verbosity, incrementa la verbosidad en la salida del comando.
u
Updates, no copia archivos que estén actualizados en el receptor.

Además de estas opciones, se encuentran muchas más y muy útiles. Puedes consultar todas las opciones y ejemplos de uso en las páginas man de rsync[samba.org].

Excluyendo carpetas o archivos

Al realizar un backup de una carpeta como home es frecuente que se encuentren archivos o carpetas que no necesitan ser respaldadas, esto puede ser indicado a rsync con el parámetro exclude. Por ejemplo, supongamos que queramos excluir del respaldo la carpeta foo/ relativa /home/dante/:


# rsync -r -l -t -v -u --exclude 'foo' /home/dante root@192.168.1.1:/mnt/disk015/dante

Nota: el archivo o carpeta a excluir debe ir entre comillas simples.

Excluir más de un archivo o carpeta

Será necesario editar un simple archivo de texto plano que liste los archivos o carpetas que no se deberán respaldar. Un pequeño ejemplo podría ser:


quux
quuux/tmp/*/*.pid
quuuux
baz

Guardamos el archivo como no_respaldar en /home/dante/ y se lo indicamos a rsync:


# rsync -r -l -t -v -u --exclude-from 'no_respaldar' /home/dante root@192.168.1.1:/mnt/disk015/dante

Problemas frecuentes

Al ejecutar el comando puede ser que obtengas la siguiente salida:


rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: remote command not found (code 127) at io.c(454) [sender=2.6.9]

Para solucionarlo basta instalar rsync también en la máquina remota.

UXi 10, Revista de software libre

Saturday, June 21st, 2008

Último número de la revista UXi. Es el número aniversario, en el que cumple un año.

Aquí les dejo un resumen de los temas tratados en esta entrega:

  • Articulo sobre la elección de un buscador de contenidos para una intranets
  • Encriptar sistemas de ficheros en Debian
  • Explicación de la estrategia de migración al software libre aplicada por UCI
  • Programación de socket en C++
  • [Descargar]

Esta edición fue dedicada a una de las grandes figuras de la humanidad José Martí, por este motivo en algunos pie de páginas se pueden encontrar frases de este prócer. Aquí dejo unas:

“La libertad no es placer propio: es deber extenderla a los demás”
“Poseer algo no es más que el deber de emplearlo bien”

José Martí

Ambas frases se entrelazan en el mensaje que intentan transmitir,
cuyo mensajero siempre puso de manifiesto a lo largo de su vida.

Todas las revistas pueden ser descargadas del blog oficial de UXi. O desde infosofía:=0×69AEE7.

UXi 01, Volumen 2

Saturday, June 21st, 2008

Este
nuevo número de UXi marca el aniversario de dicha revista y el comienzo
del volumen 2, el cual constará de 10 entregas. En este número dentro
de los temas tratados, podemos encontrar los siguientes:

  • Festival de software libre, celebrando el aniversario de UXi
  • Lanzamiento de la Comunidad Virtual Unix-BSD de la UCi
  • Características de las principales herramientas para acceso a servicios de Internet, para facilitar la migración
  • Grub en un diskette
  • Cómo construir un GrubSplash
  • Programación de hilos y semáforos en GNU/Linux con C++
  • Apache como servidor web por excelencia

Link de descarga

[descargar]

El resto de los números pueden ser bajados desde el blog de UXi o desde infosofia:=0×69AEE7.

UXi 03, volumen 02

Saturday, June 21st, 2008

En este número encontré los siguientes artículos de interés:

  • Cómo configurar MySQL 5.0 para replicación Master-Master, sobre Debian.
  • Instalar GRUB en una partición y no en el Master Boot Record.

  • Presentación de frameworks para desarrollo PHP.

Links de descargas

Consulta aquí para los números anteriores.

Nepomuk, el escritorio semántico de KDE

Friday, June 20th, 2008

Introducción

Es la respuesta de KDE a un escritorio semántico. Consiste en un framework para crear y consultar meta datos de cualquier tipo de recurso, por ejemplo un archivo. Dentro de los meta datos podemos encontrar tres tipos.

  • Meta datos propios de los archivos.
  • Meta datos creados por el usuario (ej. tag o ranking).
  • Meta datos que no pueden ser obtenidos fácilmente.

En los últimos es donde podemos encontrar el verdadero poder del escritorio semántico. Plantemos tres ejemplos:

  1. Un usuario descarga un adjunto de un mail. Cuando el adjunto se guarda al disco, se pierden las referencias tanto del que envió el mail como la uri desde donde se descargo el mail.
  2. Mantener datos para poder consultar que aplicaciones tenía abierta un determinado usuario en el momento que hubo un error en un programa de servicio.
  3. Generación de ranking de aplicaciones, archivos, etc de algún usuario. Por ejemplo, cuál es el usuario que más escrituras hace al disco sda1? Cuál usuario tiene el mayor número de paquetes recibidos?.

Componentes

Nepomuk esta compuesto principalmente por Soprano, Stringi y KMetaData. Soprano es un framework orientado a objetos para datos RDF y Strigi es un pequeño y simple demonio de búsqueda portable.

KMetaData

KMetaData es una librería que facilita el acceso a los metadatos a través de wrapper de los mismos. Por lo tanto, manipulamos objetos de clases de recursos.

Soprano

El papel que cumple Soprano es poder bajar el acoplamiento entre nuestros datos RDF y Nepmuk. De esta manera podemos tener un enfoque cliente/servidor y colocar nuestros repositorio de datos RDF remotamente. Además cuenta con una interface para comunicaciones TCP (dentro de otras), es posible tener un repositorio en cualquier parte del mundo. Se podría pensar en la idea de conectarse no con uno, sino con varios. Aquí entra mucho en juego, al tener muchos repositorios, podríamos especializarlos, por ejemplo tener un repositorio especial para programadores y proyectos. Entonces el usuario programador al leer el código fuente de su aplicación favorita, tendría información sobre el perfil de los programadores que la desarrollaron.

Strigi

Strigi es el encargado de indexar y consultar datos disponibles en el disco. Pero la ventaja de Strigi es su sistema JStream, el cual le permite revisar e indexar contenido de los archivos. Por ejemplo podría obtener la duración de un archivo de audio o obtener todos los meta datos disponibles en el contenido de un archivo PDF. JStream esta limitado en estos momentos a un número reducido de tipos de archivos, los más elegante para mi gusto son:

  • Paquetes Debian
  • Paquetes RPM
  • PDF
  • MP3

Se podría aumentar ampliamente el potencial de administradores de paquetes, por ejemplo aptitude hace un amplio uso de la rica meta información contenida en los paquetes .deb, el hecho de poder darle un valor semántico, facilitaría las resoluciones de dependencias o conflictos de aptitude. Incluso antes de resolver con determinado conflicto (por lo general pide confirmación al usuario), podría consultar meta información propia del usuario y poder inferir la confirmación del usuario para resolver el conflicto…

Strigi hace uso del subsistema inotify del kernel de Linux. Inotify notifica sobre eventos sobre el sistema de archivos. De esta manera, Strigi puede aprovecharlo para reindexar archivos modificados y ahorrar estar haciendo búsquedas frecuentes por todo el sistema de archivos. Aquí las aplicaciones podrían generar muchos meta datos en relación a log del sistema y como los log son archivos de texto plano se puede aprovechar JStream para obtener más relaciones entre los datos.

En este video se puede ver el potencial de Nepomuk.

Formatear y montar un disco con NFS

Friday, June 20th, 2008

Voy a explicar a través de mi experiencia como podemos compartir un disco en una LAN,
no es nada novedos, pero la información se encuentra a veces dispersa
en internet. Además hay muchas cosas que no son explicadas, por eso
aquí trato de cubrir esos asuntos y hacer un resumen.

Nota: En el post utilizo indebidamente la palabra formatear. La uso en el sentido de crear un sistema de archivos (formateo lógico).
Decidí utilizarla, ya que es la que habitualmente se utiliza para
referirse a la creación de un sistema de archivos, pero en realidad
está definición no es exacta. Formatear es darle formato al disco de
forma física.

Una vez que conectamos el disco y arrancamos el sistema. Abrimos una consola y con superusuario hacemos.


# fdisk -l

Esto nos devolverá una lista de las particiones de cada disco. Con
esto obtendremos cual es el nombre del dispositivo. El disco en
cuestión es de 80 GB.


Disco /dev/sda: 80.0 GB, 80026361856 bytes
255 cabezas, 63 sectores/pista, 9729 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

El disco /dev/sda no contiene una tabla de particiones válida

Disco /dev/sdb: 300.0 GB, 300069052416 bytes
255 cabezas, 63 sectores/pista, 36481 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sdb1   *           1       36293   291523491   83  Linux
/dev/sdb2           36294       36481     1510110    5  Extendida
/dev/sdb5           36294       36481     1510078+  82  Linux swap / Solaris

Disco /dev/sdc: 250.0 GB, 250059350016 bytes
255 cabezas, 63 sectores/pista, 30401 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes

Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sdc1               1       30401   244196001   83  Linux

Una vez identificado el nombre del dispositivo (/dev/sda) procedemos a formatearlo. Utilizaremos el sistema de archivos ext3 y la herramienta mke2fs para el cometido.

Es importante notar que sólo podemos formatear si el dispositivo en cuestión se encuentra desmontado.


# mkfs.ext3 /dev/sda
mke2fs 1.40-WIP (14-Nov-2006)
¡/dev/sda es todo el dispositivo, no sólo una partición!
¿Se continúa de todas formas? (s,n) s
Etiqueta del sistema de ficheros=
Tipo de SO: Linux
Tamaño del bloque=4096 (bitácora=2)
Tamaño del fragmento=4096 (bitácora=2)
9781248 nodos i, 19537686 bloques
976884 bloques (5.00%) reservados para el súper usuario
Primer bloque de datos=0
Número máximo de bloques en el sistema de archivos=0
597 bloque de grupos
32768 bloques por grupo, 32768 fragmentos por grupo
16384 nodos i por grupo
Respaldo del súper bloque guardado en los bloques:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424

Mientras se escribían las tablas de nodos i: terminado
Creando el fichero de transacciones (32768 bloques): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho

Este sistema de ficheros se revisará automáticamente cada 37 meses o
180 dias, lo que suceda primero.  Utilice tune2fs -c o -i para cambiarlo.

Nota: podríamos haber utilizado para formatear a ext3 el siguiente comando: mke2fs -j <dispositivo>

Para poder utilizar el disco (con su sistema de archivo) debemos montarlo. Antes que nada y siguiendo el buen dicho: “Prevenir antes que curar”. Vamos a hacer una copia de resguardo de un archivo muy delicado, fstab. Para esto bastará un simple.


# cp /etc/fstab /etc/fstab.backup

Ahora sigamos; debemos crear un punto de montaje para poder colgar
el disco a nuestro sistema de archivos y luego debemos editar la fstab para indicar al sistema que cuelgue el disco al punto de montaje especificado.


$ mkdir /mnt/sda
$ chmod 777 /mnt/sda
# echo "/dev/sda /mnt/sda ext3 defaults 0 0" >> /etc/fstab
# mount -a

Al fstab, le estamos especificando:

  1. El dispositivo
  2. El punto de montaje
  3. El sistema de archivos
  4. Las opciones. La opción defaults equivale a rw, suid, dev, exec, auto, nouser y async
  5. Frecuencias de copias de seguridad, utilizado por dump
  6. Orden en el que se compararán los sistemas de archivos en el arranque; el 0 índica que no se comprueba

Fstab describe los diferentes sistemas de archivos del
equipo. Cada sistema se define en una linea. Una linea está formada por
campos separadados por espacio o tabulador.

Creamos el punto de montaje en /mnt/sda y agregamos al fstab las ordenes para montarlo y luego con la opción a de mount indicamos que se monten todos los sitemas de archivos especificados en fstab.

Ahora instalaremos el servidor NFS


aptitude install portmap nfs-kernel-server nfs-common

Detallemos un poco está instalación, para que no sea un vulgar copy & paste

nfs-kernel-server
Este es el servidor NFS, pero se ejecuta en el espacio del núcleo (kernel), obteniendo de este modo varias ventajas.
portmap
Es un demonio que mapea los números de RPC a puertos.
nfs-common
Utilidades de NFS tanto para el servidor como el cliente.

Nota: El kernel tiene que soportar NFS,
para eso debe estar compilado con esa característica. Podemos verificar
que el núcleo está compilado con soporte para NFS, haciendo cat /proc/filesystems. La salida nos muestra los sistemas de archivos que soporta el núcleo, dentro de estos debe figurar nodev nfs.

Una vez finalizada la instalación, tenemos que indicar al servidor
que carpetas queremos compartir que exporte a nuestros clientes. Para
esto debemos editar el archivo exports. Este archivo es un ACL, por esto tenemos que definir quién puede acceder al recurso y cómo


# echo "/mnt/sda 192.168.2.0/24(rw,sync,no_root_squash)” >> /etc/exports

Expliquemos un poco lo anterior. La sintaxis es sencilla tenemos. <recurso> <cliente>(<opciones>). El recurso es el disco montado, el cliente nuestra LAN y las opciones para esos clientes, donde especificamos:

rw
Read Write, no hay más que decir.
sync
Aquí el servidor sólo responderá a solicitudes una vez que los
cambios hayan sido confirmados en disco (todos los bloques de la cache
buffer se hayan escrito al disco). Ganamos que el servidor sea
consistente pero perdemos performance (se confirma una vez que se copia
el contenido de la cache al disco). Imaginar que sucedería en caso que
la máquina remota (o la red) se cae y la cache buffer no fue escrita en
disco…
no_root_squash
Con esto solucionamos un problema que tiene NFS con los UID y GID.
Al indicar esto, cada cliente que utilice la raíz compartida tendrá UID
y GID de la máquina servidora. Por ejemplo, el usuario del servidor es
david y el cliente pablo. Cuándo el cliente cree un archivo en la raíz
compartida, el uid será de david y no de pablo.

Ahora debemos hacer notar de estas modificaciones al servidor NFS, para eso lo alertamos con



# exportfs -a

Eso sería suficiente por el lado del servidor, nos pasamos al lado del cliente. El cliente debe tener instalado los paquetes portmap y nfs-common, en caso que no se encuentren instalados:


# aptitude install portmap nfs-common

Ahora tenemos que montar el disco que compartimos desde el servidor. Para esto debemos tener la
siguiente información:

  • La dirección IP del servidor NFS
  • La ruta del recurso compartido (el disco)

Antes de montarlo, crearemos un punto de montaje e indicaremos el recurso a montar, en este caso el disco sda del servidor, supondremos que la dirección IP del servidor es, 192.168.2.1.


$ mkdir disco_remoto
# echo "192.168.2.1:/mnt/sda /disco_remoto nfs rw,defaults 0 0" >> /etc/fstab
# mount -a

Ahora podemos hacer algunas pruebas para verificar que esté todo correcto. Del lado del servidor ejecutamos el comando exportfs, nos mostrará un listado de los sistemas de archivos exportados.


$ exportfs
/mnt/sda 192.168.2.0/24

La ip 192.168.2.159 es la dirección IP de la máquina cliente en la que acabamos de montar el disco.

Del lado del cliente podemos utilizar el comanto showmount con la opción e, la cual despliega la lista de sistemas de archivos exportados por un determinado servidor.


$ showmount -e 192.168.2.1
Export list for 192.168.2.1:
/mnt/sda 192.168.2.0/24

Nota: Durante toda la explicación se dio a entender implícitamente que la máquina servidor no se encontraba detrás de un firewall. En el caso que se encuentre detrás del firewall, deberemos abrir los siguientes puertos: 2049 TCP/UDP para nfsd y 111 TCP/UDP para portmap. Para el resto de los demonios hay que definir un rango de IP’s, para mayor información consultar aquí.

Bibliografía


UXi 02 (Vol 2)

Friday, June 20th, 2008

Me
encuentro ante una nueva entrega de la revista y vale la pena señalar
que se ha mejorado muchísimo el diseño gráfico, comparado a sus
primeras entregas. Hacen ver el esfuerzo que se está volcando sobre la
revista y cómo bien mencionan en ella, el crecimiento que está teniendo
el software libre en UCi.

Paso a mencionar algunos de los temas tratados:

  • Juegos libre para GNU/Linux y emuladores
  • Exportar un disco usando el protocolo AoE
  • Un script para particionar discos, mas la explicación de la estructura física de un disco

Links de descargas

Consulta aquí para los números anteriores

La tira de Raulito el friki

Friday, June 20th, 2008

Buscando, por el dato pasado por Mauricio (un amigo), encontré las tiras de Raulito el friki,
creo que se encuentra completa. Comparto aquí todas las tiras,
realmente tenerlas es para chuparse los dedos ¡Espero que la disfruten!

  1. Raulito_el_friki_infosofia[00-10].tar.gz
  2. Raulito_el_friki_infosofia[11-20].tar.gz
  3. Raulito_el_friki_infosofia[21-30].tar.gz
  4. Raulito_el_friki_infosofia[31-40].tar.gz
  5. Raulito_el_friki_infosofia[41-50].tar.gz
  6. Raulito_el_friki_infosofia[51-60].tar.gz
  7. Raulito_el_friki_infosofia[61-70].tar.gz
  8. Raulito_el_friki_infosofia[71-80].tar.gz
  9. Raulito_el_friki_infosofia[81-90].tar.gz
  10. Raulito_el_friki_infosofia[91-95].tar.gz

Raulito, el friki

Para aquellos desconocedores de la tira; Raulito es un friki con
unos 30 años amante de Debian GNU/Linux y con la desgracia de que las
iniciales de su nombre son R P M (Raúl Peñáez Martinez), que no puede
encajar en la sociedad (¿o la sociedad no encaja con él?). Sus padres
frustrados de su anómalo hijo (el cual reiteradas veces piensa y actúa
como un kernel de Linux) tratan de cambiarlo e integrarlo a la
sociedad, por ejemplo llamando a un cura (del opus dei) para que lo
guíe por el buen camino. Al final éste termina creyendo que esta
poseído y que es un ferviente y apasionado homosexual.

Dejo un par de tiras de muestra.

Tira de Raulito el friki 18

Tira de Raulito el friki 9

Tira de Raulito el friki 4

¿Cuál crees que es la mejor tira de Raulito?

Deja tu Freak-o-meter del post ;-)