viernes, 29 de junio de 2012


Loggear la ip del cliente en lugar de la del proxy de varnish

Configuración de Varnish:
sub vcl_recv {
    # Add a unique header containing the client address
    remove req.http.X-Forwarded-For;
    set req.http.X-Forwarded-For = client.ip;
    # [...]
}

Configuración de apache:

Creamos el formato "varnishcombined" el cual es el que se registrará en nuestro log:

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined

En el virtualhost del apache se requiere especificar el formato en lugar de "common" o "combined":

<virtualhost *:80="">
     ServerName www.example.com
     # [...]
     CustomLog /var/log/apache2/www.example.com/access.log     varnishcombined
     # [...]
</virtualhost>

miércoles, 27 de junio de 2012


Significado de Columnas de HTOP


Como siempre se me olvidan prefiero tenerlas documentadas en mi blog, así que igual que como me sirve a mí, tal vez a alguien más también le sirvan.

Saludos.

Descripciones de columna:

PID: Número identificador de proceso

USER: Propietario del proceso

PR: Prioridad del proceso. El número más alto es el de mayor prioridad y viceversa.

NI: El valor agradable del proceso (nice value), el cual afecta su prioridad.

VIRT: Cantidad de memoria virtual que usa el proceso.

RES: Cantidad de RAM física utilizada en kilobytes.

SHR: Cantidad de memoria compartida. (SHARED)

S: Estado Actual del proceso. (zombied, sleeping, running, uninterruptedly sleeping, or traced).

%CPU: Porcentaje de CPU

%MEM: Porcentaje de RAM física usada por el proceso.

TIME+: Cantidad de tiempo que ha usado el proceso

COMMAND: Nombre del comando que inició el proceso.

Problema con Perl y la librería GD


El día de hoy estuve experimentando una serie de errores para poder instalar la libreria Image::Resize en perl, después de varios intentos y de encontrarme con mensajes que se exculpaban a si mismos, llegué a la siguiente conclusión:

Primero, el problema que tuve fue el siguiente:

Al querer instalar la librería Image::Resize desde cpan en perl, me tiró un error:

cpan> install Image::Resize

Can't locate object method "newFromJpeg" via package "GD::Image" at /usr/lib /perl5/site_perl/5.8.8/i386-linux-thread-multi/GD/Image.pm line 81.

Luego buscando por foros en internet decían que había que reinstalar el módulo GD y al querer hacer esto me tiraba el otro error cuando hacía el make test:

t/GD.t ........ 1/12 Can't load './blib/arch/auto/GD/GD.so' for module GD: libjpeg.so.8: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.

Ese error me decía que fuera a la línea 230 del archivo DynaLoader.pm y al ir allí me llevé la sorpresa del siguiente mensaje:

    # Many dynamic extension loading problems will appear to come from
    # this section of code: XYZ failed at line 123 of DynaLoader.pm.
    # Often these errors are actually occurring in the initialisation
    # C code of the extension XS file. Perl reports the error as being
    # in this perl code simply because this was the last perl code
    # it executed.

    my $libref = dl_load_file($file, $module->dl_load_flags) or
        croak("Can't load '$file' for module $module: ".dl_error());

Es decir, que el archivo que supuestamente daba el error no era el culpable de que otras librerías dinámicas lo mandaran llamar ¬¬ , y tenía razón, al leer por entre muchos foros llegué a la conclusión que lo que había que hacer era simplemente decirle a estas librerías que la libjpeg.so.8 se encontraba en otro directorio (/usr/local/lib), y a pesar de declararla dentro de @LIBS en el propio perl script, no funcionó, acudí al grandioso entorno, y la declaré como parte de sus variables, haciendo lo siguiente:

# LD_LIBRARY_PATH=/usr/local/lib; export LD_LIBRARY_PATH

Volví a compilar desde el directorio donde se encontraba el GD que en este caso es la version 2.46 haciendo lo siguiente en el directorio /root/.cpan/build/GD-2.46

# perl Makefile.PL
# make
# make test
# make install

Y voalá! Funcionó a la perfección.

jueves, 21 de junio de 2012

Conectándose a SSH server sin necesidad de password


Como recordatorio y con la necesidad diaria de conectarme a un servidor ssh a cada rato, busque la opción de que se hiciera automáticamente. Y encontré en taringa unos buenos consejos para hacer esto.
Cabe resaltar que hacer esto es algo peligroso, de antemano les comento que es bueno que creen una passphrase cuando se los pide, aunque se los dejo opcional, tengan mucho cuidado y también no lo hagan desde cualquier equipo, solamente desde uno que sea de su uso personal y que nadie más tenga acceso, no se les ocurra hacerlo desde un CIBER-CAFE ¬¬.

En nuestra computadora creamos una llave primero:

nuestracompu# ssh-keygen -t rsa 

A todas las opciones solo damos enter.


Generating public/private rsa key pair.

Enter file in which to save the key (/home/user/.ssh/id_rsa): 

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
00:00:00:55:66:77:88:99:99:77:24:09:0e:00:00 user@user-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|==               |
|LEO  .            |
|Bu.h. .          |
|o=88 . 0         |
|.+= d  . s        |
|+. .   d         |
|...              |
|                 |
|                 |
+-----------------+

Con eso ya generamos la clave pública y privada de nuestra computadora. Luego verificamos en el servidor de destino que exista la carpeta:


servidordestino# mkdir ~/.ssh


Finalmente introducimos la llave que nos generamos dentro del servidor destino pero hay que recordar que esto se hace desde nuestro equipo:

nuestracompu# cat .ssh/id_rsa.pub | ssh usuario@servidordestino 'cat >> .ssh/authorized_keys'

Y listo ya no tenemos que andar escribiendo la contraseña a cada rato para conectarnos.



En caso de que cometan un error y hayan agregado mal les puede salir algo como esto:



Agent admitted failure to sign using the key.


En este caso solo escriban en su computadora:


nuestracompu#ssh-add


Les pedirá un pasphrase y ponen el que hayan colocado en su clave o uno nuevo.

Saludos