De Drupal a WordPress

Recientemente estuve trabajando en la migración de un blog de Drupal 7 a WordPress 3.3.

Basándome en ésta guía dirigida a migrar de Drupal 6 a WordPress, y con algunas pocas modificaciones, pude realizar el proceso sin mayores inconvenientes.

A continución dejo el detalle de los pasos realizados.

Detalles:

  • La base de datos utilizada por Drupal 7 se llama drupal, y la utilizada por WordPress 3.3, wordpress.
  • Ninguna de las instrucciones que aquí se indican escriben en la Base de Datos drupal, por lo tanto, el procedimiento se puede aplicar de forma reiterada la cantidad de veces que sea necesario.

Limpieza de las tablas de wordpress

TRUNCATE TABLE wordpress.wp_comments;
TRUNCATE TABLE wordpress.wp_links;
TRUNCATE TABLE wordpress.wp_postmeta;
TRUNCATE TABLE wordpress.wp_posts;
TRUNCATE TABLE wordpress.wp_term_relationships;
TRUNCATE TABLE wordpress.wp_term_taxonomy;
TRUNCATE TABLE wordpress.wp_terms;

Migración de las categorías

REPLACE INTO wordpress.wp_terms (term_id, `name`, slug, term_group)
SELECT DISTINCT d.tid, d.name,
REPLACE(LOWER(d.name), ' ', '_'), 0
FROM drupal.taxonomy_term_data d
INNER JOIN drupal.taxonomy_term_hierarchy h
USING(tid)
WHERE (1);

INSERT INTO wordpress.wp_term_taxonomy (term_taxonomy_id, term_id, taxonomy, description, parent)
SELECT DISTINCT d.tid 'term_id', d.tid 'term_id', 'category' category, d.description 'description', h.parent 'parent'
FROM drupal.taxonomy_term_data d
INNER JOIN drupal.taxonomy_term_hierarchy h
USING(tid)
WHERE (1);

Migración de los POSTS

INSERT INTO wordpress.wp_posts (id, post_author, post_date, post_content, post_title,
            post_excerpt, post_name, post_modified, post_type, post_status)
SELECT nid 'id', n.uid 'post_author', FROM_UNIXTIME(n.created) 'post_date', r.body_value 'post_content',
       n.title 'post_title', r.body_summary 'post_excerpt', n.title 'post_title', 'post', 'post',
IF(n.status = 1, 'publish', 'private') 'post_status'
FROM drupal.node n, drupal.field_data_body r
WHERE n.nid = r.entity_id;

Asociación de Posts y Categorías

INSERT INTO wordpress.wp_term_relationships (object_id, term_taxonomy_id)
SELECT DISTINCT nid, tid
FROM drupal.taxonomy_index;

Contabilización de post en cada categoría

UPDATE wordpress.wp_term_taxonomy tt
SET `count` = (
SELECT COUNT(tr.object_id)
FROM wordpress.wp_term_relationships tr
WHERE tr.term_taxonomy_id = tt.term_taxonomy_id);

Migración y asociación de comentarios

INSERT INTO wordpress.wp_comments (comment_post_ID, comment_date, comment_content,
            comment_parent, comment_author, comment_author_email, comment_author_url,
            comment_approved)
SELECT dc.nid, FROM_UNIXTIME(dc.created), df.comment_body_value, dc.thread, dc.name,
       dc.mail, dc.homepage, ((dc.status + 1) % 2) 'status'
FROM drupal.comment dc, drupal.field_data_comment_body df
WHERE cid = entity_id;

Contabilización de comentarios en cada Post

UPDATE wordpress.wp_posts SET `comment_count` = ( SELECT COUNT(`comment_post_id`)
FROM wordpress.wp_comments
WHERE wordpress.wp_posts.`id` = wordpress.wp_comments.`comment_post_id` );

Servidores web y SSL

La implementación de SSL en servidores web permite garantizar autenticación y privacidad entre los extremos de una comunicación. Esto es: asegurar que el cliente está conectado al servidor correcto, y asegurar que la información transmitida entre los extremos (cliente y servidor) no puede ser vista por nadie que esté en el medio de la comunicación.

Implementar SSL en un servidor web es una tarea que aparentemente se realiza con cero esfuerzo, y es, posiblemente, ésta razón la que lleva a cometer varios errores que debilitan sensiblemente las garantías de autenticación y privacidad que uno debe (y seguramente desea) garantizar.

Quisiera exponer a continuación algunos de los errores más frecuentes con los que suelo encontrarme al analizar la seguridad de servidores web que implementan SSL:

DNS: Las inconsistencias en la configuración de los DNS es uno de los factores que pueden debilitar la garantía de la autenticación. Encontrarme con que www.midominio.com apunta a un servidor web, mientras que midominio.com apunta a otro es algo bastante común.

Puertos: Al ingresar a http://www.midominio.com se espera ver el mismo contenido que al ingresar a https://www.midominio.com. Publicar aplicaciones distintas, en distintos puertos, y bajo el mismo dominio no contribuye en nada, y es un frecuente error.

Certificados auto-firmados: Los certificados auto-firmados obligan a los usuarios a ignorar cuadros de diálogo que advierten sobre la autenticidad del servidor al cual se están conectando. En estas condiciones, cualquier mensaje de advertencia “real” que sea presentado será también ignorado por el usuario.

Certificados incompletos: Si al ingresar a www.midominio.com se espera ver el mismo contenido que al ingresar en midominio.com, es también de esperar que en ninguno de los dos casos aparezcan mensajes de advertencia sobre la autenticidad del sitio o el uso de certificados. En estos casos, el uso de certificados multi-dominio es una de las soluciones.

Contenido mixto: Mezclar la carga de contenido a través de canales planos y canales cifrados puede dar lugar a ataques de tipo MitM. No se debe mezclar el uso de canales cifrados y canales planos en una misma aplicación web.

Configuración del servidor web: Muchas de las implementaciones de SSL descansan sobre la configuración estándar que incluye el servidor web. Esta configuración no suele ser lo suficientemente robusta como para poner un servidor web en producción, y mucho menos expuesto a Internet.

Domando al escritor

Recientemente me encontré con un muy buen libro: Writer 3.3 para escritores.

Writer es el procesador de textos incluido en OpenOffice.org y su reciente fork LibreOffice

Este texto, a diferencia de otros, se focaliza en el uso de Writer para escritores; ya sea el profesional de las letras o el amateur que escribe por el puro placer de hacerlo.

Desde el correcto uso de estilos y plantillas, hasta la estructura de los archivos odt, pasando por el uso de Math y Draw, los campos y las referencias cruzadas, la base de datos bibliográfica, el correcto uso del registro de página, ligaduras tipográficas gracias a la tecnología Graphite… y un largo etcétera que se extiende por más de 300 páginas, el lector encontrará en este volumen todo lo necesario para trabajar con OOo/LibO Writer en su máximo potencial.

En esta tercera edición se incluye además un nuevo capítulo dedicado al trabajo en colaboración. Las diferencias entre OpenOffice.org Writer y LibreOffice Writer son también comentadas en detalle.

Puede conseguir este libro (y sus nuevas versiones/ediciones) a través del sitio del autor, donde además encontrará mucha información adicional sobre OpenOffice.org, LibreOffice, Fotografía Digital en Linux, Soporte Multimedia en Linux, Programas de uso científico, y varios temas más.

Aquí dejo la tercera edición de este libro.

Hardware viejo, ¿software viejo?

Existe una tendencia generalizada que consiste en asociar el uso de hardware viejo con el uso, o instalación, de software viejo; de modo tal que, tanto hardware como software, resulten coetáneos.

Esta idea de vincular hardware viejo con software viejo en principio parece lógica, pero basta analizarla un poco para convencernos que nada está más lejos de la realidad.

Frecuentemente me encuentro con hardware que hoy podemos considerar viejo (Pentium III, Pentium IV, etc) ofreciendo servicios importantes, como DNS, Proxy, filtros antispam y antivirus, para correo electrónico, etc. Esto lo he visto no sólo en pequeñas empresas, sino también en medianas y grandes.

En muchos de estos casos me resulta llamativo la resistencia que se suele ofrecer a actualizar el software que se está ejecutando sobre esos equipos argumentando cosas como: “Esos equipos son viejos, no podemos actualizar el software. Estamos pensando en reemplazar los equipos para poder actualizar el software”

Lo que uno pretende de una nueva versión de un software es que ésta sea mejor, y cuando hablamos de mejor software, no hablamos necesariamente de nuevas funcionalidades, lo que podríamos definir como más, sino que pretendemos, estrictamente, que sea mejor.

Que un software sea mejor implica, entre otras cosas, que haga un mejor uso de los recursos de hardware que utiliza para funcionar, es decir, un mejor uso de la memoria, un mejor uso de CPU, un mejor uso de los dispositivos del almacenamiento, etc. Podemos decir, entonces, que una nueva versión de software será mejor que la anterior si hace un uso más eficaz de todos los recursos de hardware que éste necesita.

Este razonamiento suena mejor, ¿no? Incluso suena mucho más coherente ¿no le parece?

No estoy muy seguro de cómo funciona esto de la evolución del software en todas las plataformas y en todos los sistemas operativos, pero si lo estoy sobre como funciona dentro del modelo de software libre; y sobre GNU/Linux en particular.

Como administrador de sistemas GNU/Linux puedo asegurar, y hasta demostrar, que cada nueva versión de software es realmente mejor a la anterior, al punto que, en hardware viejo lo mejor es instalar las versiones de software más nuevas en vez de versiones viejas.

El hardware debe dimensionarse según el uso y la carga de trabajo que recibirá, y no por el software que en él se ejecutará.

Si la mayor carga de trabajo que el hardware debe soportar es ejecutar un sistema operativo, y sus servicios, probablemente algo no esté bien, y casi con seguridad el costo de su infraestructura no tendrá ninguna relación con los servicios que ofrece.

¡Habemus Squeeze!

Finalmente, y tal como estaba previsto, el 5/6 de Febrero de 2011 ha sido publicado Debian 6 (Squeeze).

Después de 19 horas de trabajo, y sin ningún imprevisto (creo que hubo 2 detalles menores que retrasaron un poquito las cosas) Squeeze es la nueva versión estable del proyecto Debian.

Debian está disponible para un amplio número de arquitecturas, y al momento del lanzamiento de cada nueva versión, todo el proyecto tiene que estar compilado para cada una de ellas.

  1. amd64
  2. armel
  3. i386
  4. ia64
  5. mips
  6. mipsel
  7. powerpc
  8. sparc
  9. s390

Además de esta variedad de arquitecturas, se ha agregado la integración de las herramientas GNU con el kernel FreeBSD. Squeeze es la primera versión de Debian que está disponible con 2 kernels:

  1. Linux
  2. kFreeBSD (solo 32 y 64 bits)

De esta forma, Debian se convierte en una distribución GNU/Linux y GNU/FreeBSD

Debian cuenta actualmente con, aproximadamente, 29000 paquetes. Mantener, administrar y compilar todos estos paquetes para las arquitecturas antes listadas, y ahora con 2 kernels, no es una tarea menor.

Conjuntamente con el lanzamiento de Squeeze, y después de 13 años, el proyecto Debian ha lanzado también el re-diseño del sitio web.

Todo el proceso de preparación y lanzamiento de Debian (19 horas de trabajo continuo) pudo seguirse por:

  • Voz: Se estableció un canal de voz para que personas de todo el mundo puedan compartir y seguir todo el proceso.
  • identi.ca: Siguiendo al usuario debian era posible recibir actualizaciones sobre el estado de cada uno de los pasos necesarios para el lanzamiento. Por este medio también se fueron mencionando algunos datos anecdóticos e interesantes del proyecto Debian.
  • IRC: A través de los canales #debian-release y #debian-cd, de irc.oftc.net, fue posible hacer un seguimiento mucho más detallado y pormenorizado de todo el proceso de preparación y lanzamiento de Debian Squeeze.

A través de identi.ca e IRC fue posible apreciar un poco “más de cerca” la cantidad de trabajo y el gran esfuerzo que todos lo miembros de Debian realizan para mantener este gran, gran proyecto.

Uno siempre está agradecido a todos los que trabajan para el proyecto Debian, pero la verdad es que luego de “ver” este gran esfuerzo y trabajo, las palabras de gratitud quedan cortas y pocas.

No solo el agradecimiento quiero dejar en estas líneas, sino también mis más sinceras felicitaciones.

¡Habemus Debian Squeeze!

¡GRACIAS y FELICITACIONES a  todo el equipo Debian!

Debian Squeeze Countdown

El equipo de desarrollo de Debian ha anunciado que el lanzamiento de la nueva versión 6.0, con nombre clave “Squeeze“, está programado para el próximo 5 y 6 de Febrero.

Debian es mi distribución de GNU/Linux preferida. Es la distribución que uso en absolutamente todas mis PCs y en la gran mayoría de los servidores que mantengo y administro.

Debian es también el “punto de partida” de otras distribuciones y proyectos.

Algunas de las características de la nueva versión de Debian pueden verse aquí.

Estamos a 11 días del lanzamiento, y varios somos los que estamos ansiosos, esperando. He agregado a la izquierda un contador con la cuenta regresiva, como si eso acortase el tiempo, o hiciese más leve la espera.

Chromium + NotScripts

Desde hace unos meses comencé a probar Chromium (que no es lo mismo que Google Chrome) como navegador, y de a poco se fue convirtiendo en mi navegador principal, preferido y de cabecera.

Hasta ese momento utilizaba Iceweasel (equivalente a Firefox en Debian); y cuando comencé con Chromium, lo que más extrañaba era la extensión NoScript. Durante bastante tempo, incluso usando Chromium como navegador principal, la extrañaba.

Recientemente encontré la extensión equivalente para Chroumium, y se llama NotScripts.

Hace unas semanas que estoy usando esta extensión y anda muy bien. Estoy muy contento.

Algunas de las razones por la que extrañaba y uso este tipo de extensiones son:

  • Seguridad
  • Mayor velocidad en la carga de las páginas
  • Mayor control sobre los plugins que quiero que se ejecuten y los que no

En resumen: Me he pasado definitivamente a Chromium como navegador y estoy más que satisfecho con su velocidad, liviandad, características y funcionalidades. Teniendo ahora NotScripts, lo único que puedo decir es que soy un poco más feliz.

Si todavía no probaste Chromium, deberías hacerlo. No creo que te arrepientas.

Si no usabas Chromium porque no tenías la extensión NoScript, eso ya es una excusa del pasado.

Windows, otra vez ¿Otra vez?

Ya había escrito algo similar a esto sobre Windows Vista. Se que puede resultar un poco reiterativo (incluso a mi me suena reiterativo), pero no quiero dejar de escribirlo y mostrarlo.

Ayer, o antes de ayer, instalé por primera vez la última versión de Windows. Windows 7 Ultimate, para ser más exacto. Se que voy medio atrasado, pero saben que no soy usuario de Windows. El tema es que lo instalé, y de jodido que soy nomas, hice algunas pruebas para verificar la evolución del Sistema Operativo más usado en los escritorios (o puestos de trabajo). Las pruebas y los resultados fueron:

  1. Creación de un directorio con nombre “con“: Falló
  2. Ejecución del comando “mem“: MS-DOS reside en el área de memoria alta.

Con esas 2 pruebas me alcanzó. Dejo los screenshots.

Solución de problemas (I)

El día a día de los que trabajamos en sistemas está muy relacionado con la resolución de diversos tipos de problemas. Posiblemente estas tareas no sean las mejores, o las más divertidas; pero así son las cosas.

Dentro de los distintos tipos de problemas con los que uno se encuentra, hay uno que me llama mucho la atención, y es el caso de los sistemas (o funcionalidades de los sistemas) que misteriosamente, y sin razón aparente dejan de funcionar.

Abordar la solución de problemas con pre-conceptos del tipo “no cambió nada“, o “nadie tocó nada“, no es un buen comienzo. Generalmente esto lleva a resultados frustrantes, y dilata sensiblemente el tiempo requerido para hallar la solución.

Lo primero que uno necesita es romper con esos pre-conceptos. Si el sistema de ayer a hoy dejó de funcionar, como mínimo cambió la fecha (el número y el día, cuando no el mes y el año). Al mismo tiempo, de ayer a hoy seguramente hay varias personas que pudieron haber realizado cambios, en diversos lugares, que pueden haber afectado (directa o indirectamente) el funcionamiento del sistema. Que de ayer a hoy nada cambió, no es cierto.

Habiendo quitado ese pre-concepto, ya se puede comenzar a buscar la solución de otra forma, seguramente de una forma más objetiva. Mientras uno siga con la idea de problemas misteriosos, y sin sentido, nada bueno ni útil va a salir.

Si ayer funcionaba, y hoy no, indefectiblemente, algo ha cambiado. Hay que focalizarse en encontrar dónde se produjo el cambio. No es cuestión de entrar a meter manos por todos lados, hacer cambios azarosos, reiniciar equipos, etc. Esto solo va a ensuciar más el terreno.

Por otro lado, si tenes que llamar a alguien para que te ayude a resolver el problema (como el administrador de sistemas, por ejemplo), lo mejor es que lo llames, le comentes la situación, y le preguntes sobre cualquier cambio que él haya realizado que pueda haberte afectado. Llamar alterado, nervioso, desesperado, diciendo que no sabes porque el sistema X dejó de funcionar, que nadie tocó nada, y si él sabe qué podrá ser, no es una buena técnica, lo más probable es que recibas como respuesta una negativa, y que sigas si hallar la solución.

Las cosas no dejan de funcionar porque sí, así como tampoco los problemas se resuelven porque sí. Concentrate en el problema de forma objetiva, busca la razón y el origen del problema, es lo único que te va a llevar a una pronta y efectiva solución. Es mentira que de ayer a hoy nada ha cambiado.

OpenSSH

Sin ninguna duda, una de las herramientas que más sorpresas y alegrías me ha dado es OpenSSH. Es una de esas herramientas «interminable», siempre tiene algo adicional para dar; sea cual sea la tarea que necesites hacer, si hay una red de por medio, ahí estará OpenSSH para simplificarte la vida.

Pero uno nunca deja de caer, y de reincidir; luego de un tiempo trabajando con OpenSSH, uno cree conocer la herramienta, y más aún:  uno cree que la domina de arriba a abajo. Pero no, siempre hay más.

Es justo en esos momentos en los que uno cree que lo ha visto todo cuando revisando el man page de OpenSSH (man ssh), se encuentran con cosas como esta:

ESCAPE CHARACTERS
When a pseudo-terminal has been requested, ssh supports a number of functions through the use of an escape character.

A single tilde character can be sent as ~~ or by following the tilde by a character other than those described below.  The escape character must always follow a new‐
line to be interpreted as special.  The escape character can be changed in configuration files using the EscapeChar configuration directive or on the command line by
the -e option.

The supported escapes (assuming the default ‘~’) are:

~.      Disconnect.

~^Z     Background ssh.

~#      List forwarded connections.

~&      Background ssh at logout when waiting for forwarded connection / X11 sessions to terminate.

~?      Display a list of escape characters.

~B      Send a BREAK to the remote system (only useful for SSH protocol version 2 and if the peer supports it).

~C      Open command line.  Currently this allows the addition of port forwardings using the -L, -R and -D options (see above).  It also allows the cancellation of
existing remote port-forwardings using -KR[bind_address:]port.  !command allows the user to execute a local command if the PermitLocalCommand option is
enabled in ssh_config(5).  Basic help is available, using the -h option.

~R      Request rekeying of the connection (only useful for SSH protocol version 2 and if the peer supports it).

Y en esos momentos uno vuelve a decir: “¡Pero será posible, es que SSH nunca va a dejar de sorprenderme!