jueves, 25 de febrero de 2010

Habilitar cgi en lighttpd

¿Por qué? El por qué es sencillo. Necesito habilitar la ejecución de CGIs en un webserver para mostrar en una gráfica el envio de mensajes de una máquina corriendo Postfix. ¿Qué es un CGI? En la wikipedia tienes una definición mucho mejor de la que pueda escribir. Si sueles leer este blog(cosa que dudo), habrás observado algún que otro post sobre lighttpd. Pues bien, la máquina que ilustra este ejemplo, es la tercera que tengo actualmente en producción sirviendo webs con lighttpd y puedo decir que estoy muy satisfecho con los resultados. El rendimiento en relación a Apache2 y Cherokee es espectacular. Por partes. No se trata de desmerecer a ningún software httpd, pero tengo mis predilecciones dependiendo del escenario.
  • Apache2: Máquinas con hardware "potente" dónde el procesador y el consumo de RAM no supongan un problema. Es muy sencillo de configurar. Hay mucha documentación tanto en la red Internet como impresa. Lo instalo en máquinas que no sólo administro yo, es decir: "Alberto, mira, que el PHP dice que "not found curl extension"", y claro, entonces le dejas subir al cielo contestando "estás en el grupo sudoers, ¿sabes instalar paquetes en Debian GNU/Linux?", entonces el luser del programador contesta "claro!Uso chupiBuntu Linux desde hace 6 meses, ya lo instalo yo"; y claro, luego le comentará a sus amigos "...y claro, el Administrador no tiene ni puta idea y tuve que instalar en un servidor que tenemos en la provincia Hoth , en Dinamarca, el soporte CURL para PHP5". ¿Lo habéis entendido, verdad?
  • Cherokee. Máquinas con hardware "normal"[fíjense en la notación entrecomillada, que debería ir con ], con un equilibrio relativo entre el número de peticiones y las prestaciones de la máquina. Lo instalo(instalaba, ahora estoy "fall in love" con lighttpd) en escenarios dónde el tiempo de respuesta es realmente importante. Cherokee responde bien, se actualiza constantemente, y la interfaz gráfica de cherokee-admin es de lo mejor que he visto en los últimos meses.
  • Lighttpd. Ideal para un VPS, con poca RAM, limitada por el propio entorno de virtualización. Es muy rápido y el consumo de memoria es muy muy escaso, tanto, que muchas veces ni te darás cuenta de que se está ejecutando en el servidor. El fichero de configuración, si estás acostumbrado a Apache2, al principio es un poco hostil, pero luego te acabas acostumbrando.
Después de esta chapa, vamos al tema.Lo primero es cargar el módulo cgi en el fichero de configuración[/etc/lighttpd/lighttpd.conf]. En Debian GNU/Linux 5.0.x por el paquete precompilado de lighttpd ya soporta cgi's.

server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_compress",
"mod_cgi"
)
include "mod_cgi.conf"

Mediante una directiva include, indicamos que lea el contenido del fichero mod_cgi.conf, cuyo contenido es el siguiente:
Fichero /etc/lighttpd/mod_cgi.conf

alias.url = ( "/cgi-bin/" => "/var/www/cgi-bin/" )
$HTTP["url"] =~ "^/cgi-bin/" {
#Deshabilitamos el listado de directorios
dir-listing.activate = "disable"
cgi.assign = (
".pl" => "/usr/bin/perl",
".cgi" => "/usr/bin/perl"
)
}

Ahora sólo nos queda localiza este bloque de código en el fichero lighttpd.conf y añadir la extensión .cgi para que sea excluída por el servidor a la hora de manejar ficheros estáticos.

# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".cgi" )

Reiniciamos a lucifer y listo.

hansolo:~# /etc/init.d/lighttpd restart
Stopping web server: lighttpd.
Starting web server: lighttpd.
hansolo:~#

Uso mailgraph para generar las gráficas, y el resultado es.....

miércoles, 24 de febrero de 2010

PEAR para comprobar respuestas icmp

PEAR es un repositorio de extensiones para PHP, que añade funcionalidades "extra" a este lenguaje de programación. Personalmente me interesan todas las relacionadas con el networking. Esta mañana he revisado mis enlaces y he "escrito" un pequeño script PHP que devuelve esta estado de un host. Simplemente comprueba si responde a un paquete ICMP. Si es así, muestra un mensaje en pantalla.

Si aún no conoces PEAR, y programas aplicaciones PHP , o simplemente tienes curiosidad, en este enlace tienes documentación sobre cómo instalar PEAR en Ubuntu. Aún no he implementado PEAR en ninguno de los servidores que administro. En mi máquina con Ubuntu 9.10 [Linux apermuy-desktop 2.6.31-19-generic #56-Ubuntu SMP Thu Jan 28 01:26:53 UTC 2010 i686 GNU/Linux] he seguido las instrucciones para la instalación de la web oficial. Si tienes experiencia instalando aplicaciones desde el terminal no tendrás demasiados problemas.

El paquete que he utilizado en el script es Net_Ping. En un primer momento y con el ejemplo de la web, el resultado es confuso: "escupe" en un array el resultado de un var_dump, con lo cual os podéis imaginar...Sí he comprobado, por lo menos en este paquete, que a pesar de que los programadores corrigen bugs y añaden nuevas características, el ejemplo de código para describir el uso de Net_Ping es "bastante cutre". He recurrido a esta web para comprender totalmente la utilización de la extensión.

Fichero ping.php :

require_once "Net/Ping.php";
$ping = Net_Ping::factory();
if (PEAR::isError($ping)) {
echo $ping->getMessage();
} else {
$ping->setArgs(array('count' => 1));
$servidores = array(
0=>"www.gnome.org",
1=>"www.debian.org",
2=>"www.gnu.org");
foreach($servidores as $posicion=>$host){
if($ping->checkhost($host)){
echo "El host ".$host." esta levantado
";
}
else{
echo "El host ".$host." esta caido
";
}
}
}
Es evidente que no soy ni programador ni experto en PHP, pero estos días me documentaré más sobre PEAR, un proyecto realmente interesante.

martes, 23 de febrero de 2010

Complementos para Firefox

Firefox

[Posteado en www.proxectodesire.eu]

Firefox es un navegador web desarrollado por la Fundación Mozilla. Es multiplataforma, por lo tanto se puede ejecutar en máquinas que corran sistemas operativos GNU/Linux, MacOSX , BSDs y Microsoft Windows.Es rápido y seguro. El equipo de desarrollo trabaja continuamente, adaptando el navegador a los estándares web, añadiendo nuevas funcionalidades y corrigiendo errores(bugs).




Una de las características de Firefox son sus complementos(addons).Los complementos son "pequeñas porciones de código empaquetado" que añaden funcionalidades extra al navegador. La Fundación Mozilla en el URL https://addons.mozilla.org tienen a libre disposición de todos los usuarios de la red Internet miles de complementos, ordenados y catalogados por categorías.Las cifras del sitio dan miedo: 1.819.544.505 descargas y 4.453.956 usuarios registrados a fecha 21 de Febrero de 2010. Con estos datos encima de la mesa, el lector puede hacerse una idea de la enorme difusión e impacto de Firefox en la web.



Instalando complementos en Firefox podrás cambiar el aspecto de tu navegador, añadir nuevas y útiles barras de herramientas,diccionarios de idiomas, y un sin fin de atractivas funcionalidades. Entre los miles de complementos, podemos destacar:



.- DownThemAll! Gestor de descargas construido dentro de Firefox.

.- XMarks. Comparte tus marcadores en varios PCs.

.- ScreenGrab. Permite realizar capturas de pantalla en varios formatos de imágenes.

.- Echofon. Twittea desde Firefox!

.- FastestFox. ¿Efecto placebo? Aumenta el rendimiento de Firefox.

.- Personas. Personaliza tu navegador con miles de pieles.



A parte de obtener complementos individuales, existen los llamados "Recopilatorios", que como su nombre indica, son complementos recopilados en base a un criterio común: diseñadores web, programadores, tiendas online...etc. ¿ A qué esperas para personalizar Firefox?

lunes, 22 de febrero de 2010

Transport con regexp para Postfix

La semana pasada he configurado un servidor Postfix para enviar vía relay a smtp.gmail.com y a smtp.mundo-r.com. Este post carecía de sentido(por la cantidad de información que hay en la red) si no fuese por que debo discriminar el envío dependiendo del destinatario. Nada mejor que aplicar expresiones regulares en Postfix para lograrlo. A modo de apunte personal, dejo los ficheros de configuración.

Fichero main.cf[incompleto]

#Fichero configuracion Postfix
#Alberto Permuy Leal - alberto.permuy(en) gmail.com
#Febrero 2010
#
#
#Configuracion basica
append_dot_mydomain = yes
command_directory = /usr/sbin
data_directory = /var/lib/postfix
unknown_local_recipient_reject_code = 550
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
setgid_group = postdrop
#
#
#Redes a las que sirve/recibe correo
myorigin = subdominio.dominio.es
mydomain = $myorigin
mynetworks_style = subnet
mynetworks = 127.0.0.0/8, 192.168.0.0/22
#
#
#Un banner por aqui
smtpd_banner = ESMTP $mail_name
#
#
#PATHS
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliasesx
mailq_path = /usr/bin/mailq
#
#
#Manpages y demas
html_directory = no
manpage_directory = /usr/local/man
#
#
#
#Alias
alias_maps = hash:/etc/aliases
#
#
#TRANSPORTE DE CORREO
#
#
transport_maps = regexp:/etc/postfix/transport_regexp
#
#
#Configuracion para smtp-relay autenticado
smtp_use_tls = yes
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_sasl_password_maps = hash:/etc/postfix/smtp_passwords
smtp_sasl_auth_enable = yes
smtp_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
smtp_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtp_sasl_auth_enable = yes
smtp_sasl_security_options=noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_tls_auth_only = no
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

La línea "más importante" es transport_maps = regexp:/etc/postfix/transport_regexp , que como podemos "deducir" apunta al fichero transport_regexp.
Fichero transport_regexp

/dominio.es$/ smtp:smtp.mundo-r.com
/^.*$/ smtp:smtp.gmail.com:587


Este fichero es muy muy sencillo. Todos los correos con destinatario en @dominio.es se envía directamente por smtp.mundo-r.com y el resto por smtp.gmail.com .

Como indicamos en la línea smtp_sasl_password_maps = hash:/etc/postfix/smtp_passwords , el fichero smtp_passwords contiene las credenciales para autenticarse contra los dos servidores de correo.
Fichero smtp_passwords

smtp.dominio.es user@smtp.mundo-r.com:password-delusuario
smtp.gmail.com:587 usergmail@gmail.com:password-gmail

miércoles, 17 de febrero de 2010

automysqlbackup

EnlaceEnlace
Vía @zetxek me entero de que en SourceForge hay un script de nombre automysqlbackup que permite automatizar los backups de MySQL. Persolmante prefiero escribir mis propios scripts, ya que muchas veces escriben en dispositivos de cinta(mt) o en discos usb, o montan directorios vía NFS o CIFS. Total, que le he echado un vistazo y me ha parecido interesante dejar una reseña en el blog.