Frases desafortunadas (y XLII)

icono para las frases desafortunadas

“Las familias viven con tremendo desasosiego la búsqueda de colegio para sus hijos, es una decisión vital muy importante y hacen todo lo posible para lograr plaza en un centro que se adecue a sus preferencias y valores. El verdadero fraude se da cuando los padres eligen un determinado colegio y acaban teniendo que ir a otro que nada tiene que ver con el tipo de educación que desean para sus hijos.”

Lucía Figar, Consejera de Educación de la Comunidad de Madrid en una minientrevista en el tebeo La Razón. La pregunta en cuestión que se le hace es que si está perseguido el fraude de padres que falsifican datos para conseguir plaza en un determinado colegio. Ya saben: empadronamientos falsos, certificar enfermedades inventadas, etc. y que me registren si “nuestra” Consejera no está justificando plenamente este tipo de prácticas con su respuesta.

Introducción a IPv6

textos y apuntesEl siguiente documento es una recopilación en un archivo único de la Introducción a IPv6 que di el curso pasado a mis alumnos del módulo de Redes de Área Local (Ciclo Formativo de Sistemas Microinformáticos y Redes). Se trata de una introducción básica al nuevo espacio de direccionamiento del protocolo, unas notas sobre la forma de empezar a trabajar con él en windows y en Linux, una práctica sobre la forma de hacer un túnel desde Linux (que ya había dejado por aquí) y algún apunte sobre el estado de implantación en nuestro país que puedes ampliar aquí o aquí. Ahí queda por si a alguien le viene bien:

Descargar “Introducción a IPv6”

Cine en noviembre’11

icono con claqueta de cine

megamind kick-ass inside job
x-men first class un cuento chino sunshine thor
stone

Sunshine (2007) sería una buena candidata a lo mejor del mes si no fuera por un final terriblemente malo y forzado. La peli parte de que nuestro sol ha entrado en un ciclo que acabará por enfriarlo causando la extinción de la vida en nuestro planeta y nuestra única esperanza de supervivencia reside en una peligrosa misión y en los ocho astronautas que van a llevarla a cabo. El clima de tensión y claustrofobia a bordo de la nave espacial y entre los diferentes tripulantes de la misma está muy bien logrado pero al final se inventan un noveno pasajero que está como una puta regadera y que se ha subido como polizón y es el responsable de todas las cosas raras que ocurren en la nave. Un truño como la copa de un pino, vaya.

X-Men First Class (2011) tampoco está mal. Las pelis de los hombres X han ido mejorando con el tiempo y aunque son muy repetitivas en sus planteamientos, no exprimen todas las posibilidades de muchos secundarios (y hacen un poco de daño a los puristas que no entendemos bien a que obedecen esas mezclas entre las distintas generaciones de hombres X), se dejan ver con facilidad. La estropea el ridículo personaje del profesor Xavier y que se echa (mucho) de menos a Ian McKellen como Magneto. Inside Job (2010) tiene un ritmo cansino y aburridísimo que, a mi parecer, estropea el mensaje que quiere hacernos llegar. Y es que debe de ser que ya estamos acostumbrados al trato desenfadado de los documentales denuncia de Michael Moore y lo echamos de menos.

Y así, finalmente, llegamos a mis dos grandes favoritas de este mes: Megamind (2010) y Kick-Ass (2010), dos divertidas parodias del cine de superheroes. La primera, con un estupendo trabajo de animación detrás, plantea la llegada simultanea a nuestro planeta de los dos últimos representantes de sus respectivas razas, ambos dotados de superpoderes. Uno aterrizará en el salón de la casa de una familia modelo americana y el otro en el patio de una carcel. La segunda es una adaptación del cómic del mismo nombre de Mark Millar y Romita Jr. Es dura y violenta (aunque bastante menos que el cómic original) y cuenta la historia de un adolescente completamente normal (bueno, es un decir…) que decide comprarse un traje de latex y saltar a la calle a hacer el superheroe. No, no tiene nada que ver con los Watchmen. Y si, está Nicolas Cage y eso casi siempre es un punto negativo, pero la peli está tan bién parida que ni él logra estropearla. De veras.

Un cuento chino (2011) cuenta con la extraordinaria interpretación de Ricardo Darín. Y ya. Por lo demás la historia se hace aburrida enseguida y el final es absolutamente insípido e intranscendente. Una pena.

Lo peor del mes es, sin duda, Stone (2010), una historia que a pesar de estar pilotada por tres grandes monstruos de la interpretación y tener un arranque que te pone el corazón en un puño. se pierde luego con personajes muy poco creibles ¿Alguién es capaz de tragarse la extraordinaria y rápida evolución que sufre el personaje interpretado por Edward Norton?

Y el premio a la gran decepción se lo lleva Thor (2011), una peli que esperaba con expectación y cariño y que lo único bueno que tiene es que, muy a ratos, adapta estupendamente la psicología del personaje de algunos de los cómics de los 70, con un Thor belicoso y desenfadado que sólo piensa en hazañas y en jaranas. El resto es lamentable. En particular, Asgard me parece un enorme decorado de Eurovisión en lugar de la ciudad residencia de los dioses nórdicos y prescindir del personaje lisiado dentro del cual Odín destierra a su hijo me parece un lamentable error.

AWStats revisitado

estadisticas Desde hace unos meses he dejado de lado a Piwik, el maravilloso sistema de estadísticas que he venido usando durante los tres últimos años. Piwik ha evolucionado muchísimo desde que empecé a usarlo: ya no usa gráficos flash, mantiene muy controlado el tamaño de su base de datos, es más rápido y tiene nuevos plugins que lo convierten en un perfecto competidor libre de google analytic y lo están haciendo escalar puestos poco a poco en el competitivo ranking de los sistemas de estadísticas. Pero… tiene un enorme problema: el consumo de memoria resulta del todo inasumible para una máquina con RAM escasa que es el gran cuello de botella de un servidor web con Apache, así que cuando me pasé a un servidor VPS en Linode, con la limitación de RAM que eso supone, fue lo primero que tuve que sacrificar. Algún día me pararé a probar lighttpd o a ver si realmente el módulo MPM worker mejora tanto como cuentan la gestión de memoria, pero por el momento los alrededor de 128 Megas que consumen los scripts de Piwik me resultan del todo inasumibles.

AWStats tiene un aspecto realmente “viejuno” de web sacada de Geocities, pero hace bien lo que tiene que hacer, apenas consume RAM y obtiene sus resultados leyendo directamente de los logs de Apache con lo que no pierde ni una sóla visita. Cualquier otro método (usando javascript en cliente, PHP en el servidor, etc.) es susceptible de perder información en determinadas circunstancias.
Pantalla principal de Awstats

El hecho de que no ofrezca datos en tiempo real se puede mitigar haciendo que los logs se procesen en intervalos más pequeños o, incluso, añadiendo un enlace para que estos se procesen bajo demanda. El filtro de estadísticas diario que por defecto no es posible también puede conseguirse mediante la extensión Day by Day que también veremos en esta entrada.

Los únicos requisitos previos son tener instalados perl (necesario para ejecutar los scripts de awstats) y nuestro servidor web que, en este ejemplo, será Apache. La instalación en una debian es tan fácil como siempre (apt-get install awstats) pero la versión en el repositorio estable es la 6.9.5 que tiene más de dos años. Si quieres trabajar con la última versión (la 7.0 o la beta 7.1 en estos momentos) lo más fácil es bajarte el paquete desde aquí y descomprimirlo en tu servidor en el directorio /usr/local. Todo lo que vamos a ver a continuación supone que estamos instalando por este segundo método.

A continuación creamos un virtual host en nuestro Apache para realizar el acceso a las estadísticas o incluimos las siguientes líneas (sacadas del modelo que tendremos en el fichero /usr/local/awstats/tools/httpd_conf) en, por ejemplo, la instancia por defecto del mismo:

Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"
Alias /awstatscss "/usr/local/awstats/wwwroot/css/"
Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"
Alias /awstatsjs "/usr/local/awstats/wwwroot/js/"
ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"


     Options None
     AllowOverride None
     Order allow,deny
     Allow from all

Una vez editado debemos de pedir a apache que vuelva a leer la configuración para que tengan efecto estas líneas (service apache2 reload).

Vamos ahora a crear un fichero de configuración para awstats. Partimos del modelo que habrá en /usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf. Lo copiamos en el directorio /etc/awstats (que debemos de haber creado antes) con un nombre distintivo (por ejemplo awstats.miweb001.conf) y lo editamos para adecuarlo a nuestra instalación. Mucha antención a la partícula miweb001 que debería de identificar a la web cuyas estadísticas queremos ver y que tendremos que usar en otras instrucciones más adelante. Las líneas que deberías de modificar sobre la configuración por defecto (y que no aparecen consecutivamente como aquí ¿eh?) son estas:

LogFile="/var/log/apache2/apache2-myweb001-access.log"
SiteDomain="www.miweb001.es"
HostAliases="www.miweb0001.com www.miweb001.net"
DNSLookup=1
DirData="/var/lib/awstats"
DirCgi="/awstats"
DirIcons="/awstatsicons"
AllowToUpdateStatsFromBrowser=1
AllowFullYearView=3

Las tres primeras definen, respectivamente, el emplazamiento del fichero de logs de la instancia de apache, el nombre de la web y los posibles alias a través de los cuales podamos acceder a la misma (separados estos por espacios). La cuarta línea habilita la resolución completa por DNS de las IP’s de acceso. En la quinta línea decimos donde queremos que deje los ficheros resultantes de procesar los ficheros de log (¡no olvides crearlo!). En la sexta y la séptima se define donde están los diferentes componentes de awstats según los hemos definido anteriormente en el fichero de configuración de la instancia de apache. Las dos últimas líneas hacen que nos aparezca un enlace que permita refrescar los datos en cualquier momento y habilitan la posibilidad de realizar informes estadísticos de todo un año.

Existen muchos otros parámetros interesantes o útiles para activar plugins, funcionalidades extras, personalización, etc, pero yo te recomiendo que lo eches a funcionar sólo con esto que es lo mínimo y luego ya te metas en experimentar otras cosas. Sobre todo si no tienes mucha experiencia en estas lides.

Vamos ahora a programar el cron de nuestra máquina para que procese los logs de apache, por ejemplo, cada 15 minutos. Creamos un fichero llamado /etc/awstats/cron-awstats.sh, le damos permisos de ejecución y copiamos lo siguiente en él:

#!/bin/sh
perl /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=miweb001 -update
perl /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=miweb001 -databasebreak=day -update

Fijate bien en que la partícula que aparece a continuación de config en ambas líneas (miweb001) debe de ser exactamente la misma que aparece en el nombre del fichero de configuración que hemos creado anteriormente (awstats.miweb001.conf). Bien, ahora editamos el fichero /etc/crontab y añadimos al final del mismo lo siguiente:

*/15 * * * * root /etc/awstats/cron-awstats.sh > /dev/null

Y listo. Nos quedan unos pequeños retoques pero ahora ya cada 15 minutos se analizarán los logs del servidor de apache y podremos consultar la información, ya procesada, en la siguiente URL. Atención, de nuevo, a la partícula miweb001:

http://ip-del-servidor/awstats/awstats.pl?config=miweb001

Si, como es habitual, nuestro sistema rota los ficheros de log tenemos que evitar perder el procesado de los últimos minutos antes de una rotación. Para ello editamos el fichero /etc/logrotate.d/apache2 y bajo la línea donde pone prerotate volvemos a ejecutar el procedimiento que llama a los scripts de awstats:

prerotate
     /etc/awstats/cron-awstats.sh > /dev/null

Lo último que nos resta por hacer es habilitar la posibilidad de mostrar informes diarios. Para ello usaremos la extensión Day by Day. Para instalarla y configurarla tenemos que descargarnos la última versión, descomprimirla y copiar los dos archivos javascript (day-by-day-head.js y day-by-day-end.js) en el directorio /usr/local/awstats/wwwroot/js/. A continuación editamos el fichero de configuración de awstats (recuerda que en nuestro ejemplo se llama awstats.miweb001.conf y está en el directorio /etc/awstats) y reemplazamos los valores de los dos parámetros HTMLHeadSection y HTMLEndSection (casi al final del fichero) por las siguientes líneas:

HTMLHeadSection="%MINIFYHTMLe7e4b633aa415d7eb4802a4d1beb9fae10%"
HTMLEndSection="%MINIFYHTMLe7e4b633aa415d7eb4802a4d1beb9fae11%"

Una vez hecho esto, la pantalla principal de nuestro awstats aparecerá con un cintillo en la parte superior donde podemos escoger un día concreto y, al hacerlo, en la gráfica principal aparecerá un corte de detalle por horas. El resto de los datos también serán referidos al día escogido. Para volver a la vista mensual pulsamos el enlace “Back to monthly report” del cintillo superior.
Pantalla principal de Awstats con la extensión Day by Day

Si tenemos otras instancias web separadas en nuestro servidor y también queremos obtener sus estadísticas sólo tenemos que repetir, por cada una de ellas, dos de los pasos anteriores:

  • Crear un fichero de configuración separado en el directorio /etc/awstats con los datos pertinentes. No olvides incluir las líneas finales que hemos visto para la extensión Day by Day.
  • Añadir un par de líneas adicionales correspondientes a la nueva instancia en el fichero /etc/awstats/cron-awstats.sh

La URL para consultar las estadísticas de estas nuevas instancias será también diferente, claro. Y recuerda que la partícula distintiva que usamos en el nombre del fichero de configuración será la que nos permitirá construirla.

ACTUALIZACI?N: Hace unos meses apareció Apache2Piwik un script que importa los logs de Apache a la base de datos de Piwik. Habrá que echarle un vistazo y si el consumo de memoria es bajo lo mismo volvemos a hablar de ello por aquí…

Merluza en salsa verde

icono distintivo de los textos de recetas de cocina La merluza en salsa verde es, al igual que otros platos que hemos tocado por aquí, una de esas recetas tradicionales que tiene mil variantes diferentes y para las que todo el mundo cree que tiene conocimiento único y exclusivo de la auténtica, asi que desde ya aviso que lo que aquí sigue es mi forma de prepararla, que es un plato sencillo, sano y delicioso y que bienvenidas sean las aportaciones y polémicas pero al que pierda las formas o el sentido del humor al comentar lo echo a patadas. Y dicho queda.
Merluza en Salsa Verde

  • 800grs. de merluza.
  • 2 huevos.
  • 3 dientes de ajo.
  • 1 cebolla.
  • 1 cucharada de harina.
  • 300cc de caldo de pescado o verdura.
  • 1 vaso de vino blanco.
  • 200 grs. de guisantes.
  • 100 grs. de gambas.
  • 100 grs. de yemas de espárragos blancos.
  • 250 grs. de almejas
  • perejil, aceite, sal y pimienta negra.

Cocemos dos huevos duros (en un cazo de agua fría con sal y 9 o 10 minutos desde que el agua empieza a hervir). Hacemos un majado con tres dientes de ajo bien picados, un par de cucharadas soperas de perejil picado, un poco de aceite y sal. Echamos parte del caldo en el mortero donde hemos hecho el majado y el resto lo reservamos.

Freimos una cebolla picada y cuando está pochada (sin quemar) echamos una cucharada sopera de harina. Le damos un par de vueltas y enseguida el caldo que tenemos reservado, el majado y el medio vaso de vino blanco. Cuando empieza a hervir echamos la merluza (en lomos o rodajas y salpimentada desde unos 30 minutos antes), los guisantes, las gambas peladas, las yemas de espárragos y las almejas (abiertas al vapor previamente y con el caldo que han soltado).

Dejamos cocer unos 15 minutos a fuego medio-bajo y dando una sóla vuelta a la merluza a mitad de este tiempo con mucho cuidado de que no se desbarate. A continuación añadimos los huevos duros pelados y picados, espolvoreamos con un poco más de perejil fresco y dejamos cocer tres o cuatro minutos más.

Listo. A comer.

Paquetes RPM, archivos .repo y yum

herramientasLejos han quedado ya los tiempos en que se usaba la expresión “infierno de las dependencias” o que había que ir por ahí buscando herramientas de terceros o recurrir a rebuscados trucos para gestionar instalaciones y actualizaciones en una distribución Linux con paquetes rpm. Hoy en día la combinación rpm/yum de Fedora, Red Hat, CentOS y otras derivadas tiene poco (o nada) que envidiarle a la pareja dpkg/apt-get de Debian & co. En esta entradilla vamos a dar un pequeño repaso a las opciones más comunes y a alguna de las más útiles.

Para empezar, los comandos usados más frecuentemente son estos:

                          Comando                         
Actualizar completamente el sistema. Las opciones --skip-broken --nogpgcheck y --assumeyes (o simplemente -y) son útilesyum update
Tratar de instalar o actualizar un paquete de un fichero local (no lo hace si faltan dependencias)rpm -Uvh fichero.rpm
Instalar un paquete de un fichero local resolviendo las dependencias necesariasyum localinstal fichero.rpm
Instalar un paquete de los repositorios y resolver las dependencias necesariasyum install nombre_paquete
Tratar de eliminar un paquete (no lo hace si hay otros que dependen de él)rpm -e nombre_paquete
Eliminar un paquete y todos los que dependan de él (pedirá confirmación)yum remove nombre_paquete

En un gran porcentaje de casos esto es todo lo que debemos conocer de ambos y lo que tendremos que usar de forma habitual. Pero existen muchas otras opciones útiles y/o interesantes:

                          Comando                         
Realiza un "downgrade" del paquete en fichero.rpmrpm -Uvh --oldpackage fichero.rpm
Idem que el anterior, pero usando yumyum dowgrade nombre_paquete
Lista las dependencias necesarias para el paqueterpm -qpR fichero.rpm
Lista todos los ficheros (y su ubicación) que se han instalado con el paqueterpm -ql nombre_paquete
Nos indica el paquete del que ha salido el fichero indicadorpm -qf nombre_fichero
Busca paquetes cuyo nombre sea total o parcialmente el indicadoyum search nombre
Busca el o los paquetes que proporcionan el fichero indicado. Muy útil cuando necesitamos determinada librería.yum whatprovides nombre_fichero
Busca el paquete indicado (admite comodines en el nombre) y nos dice si está instalado o no y otros datos.yum list nombre_paquete
Muestra el historial de uso reciente de yumyum history

Cuando queremos instalar un equipo con exactamente los mismos paquetes que otro dado, tenemos la posibilidad de crear una lista de paquetes instalados con el siguiente comando:

rpm -qa lista_paquetes.txt

Para luego instalarlos en la segunda máquina de esta forma que nos cuentan en Unixcraft:

sudo yum -y install $(cat paquetes.txt)

Para otras posibilidades, tienes buenas referencias aquí para yum y aquí y aquí para rpm (pero con cuidado, que he visto algunos ejemplos que usan opciones que ya no están disponibles, como --repackage) o, por supuesto, en las páginas del manual de cada una de ellas.

Además, yum cuenta con un amplio repertorio de plugins que le permiten mejorar u optimizar su trabajo. Puedes ver la lista de la que dispones en tus repositorios con alguno de los comandos que acabas de aprender (yum list yum-plugin* o yum search yum-plugin funcionarían). Aparte de los que vienen cargados con Fedora por defecto, estos son los que considero imprescindibles:

  • yum-plugin-fastestmirror elige el repositorio óptimo de entre una lista de mirrors.
  • yum-plugin-remove-with-leaves elimina también los paquetes de dependencias huérfanos cuando se borra un paquete
  • yum-plugin-downloadonly añade la posibilidad de poder descargar un paquete de los repositorios sin realizar su instalación

Y nos falta aún por ver la forma de indicarle al sistema donde están los repositorios de software, o sea, el equivalente al archivo /etc/apt/sources.list de los Debian. Esto se hace en archivos con extensión .repo que deben de crearse en el directorio /etc/yum.repos.d. Lo normal es crear un archivo por cada repositorio o familia de estos. Aquí tenemos también diferentes opciones de personalización. Veamos un ejemplo:

[kde-testing]
name=kde-testing
# baseurl=http://ftp.heanet.ie/pub/kde-redhat/fedora/$releasever/$basearch/testing
mirrorlist=http://apt.kde-redhat.org/apt/kde-redhat/fedora/mirrors-testing
enabled=1
gpgkey=http://apt.kde-redhat.org/apt/kde-redhat/kde-redhat.RPM-GPG-KEY
gpgcheck=1
skip_if_unavailable=1

En las páginas del manual de yum.conf (el archivo de configuración de esta herramienta) tienes explicadas estas opciones y otras muchas bajo el epígrafe de repository options.

Y para el que prefiera una utilidad gráfica y, como a mi, no le entusiasme KPackagekit (apper desde fedora 16), puede echarle un vistazo a yumex (mi favorito) o a smart.