Dos razones para conectar tu WordPress a Subversion: Actualizaciones sencillas y deteción de Malware
Si eres desarrollador muy probablemente ya has trabajado con Subversion (o alguno similar), en pocas es un sistema de control de versiones, que permite llevar un historial de cambios en el código fuente (y archivos en general) de cualquier programa. ¿Que tiene que ver esto con WordPress?
Pues como todo Software Libre utilizan Subversión como herramienta de desarrollo y permite a sus desarrolladores tener acceso inmediato a los cambios más recientes en el código. Pero lo interesante es que aún si no estás involucrado en el desarrollo de WordPress puedes sacar provecho de este:
Actualizaciones mucho más sencillas
Tanto la instalación como la actualización usando el repositorio Subversion de WordPress son bastante sencillos, solo necesitas:
- Tener acceso SSH hacia el servidor donde vas usar WordPress
- Y que este tenga instalado un cliente Subversion
Puedes usar cualquier versión publicada por Automattic, todo es de buscarla en:
http://core.svn.wordpress.org/tags/
Instalación desde cero
El proceso de instalación y actualización está detallado en el Codex de WordPress, acá solo los mencionaré brevemente. Por ejemplo para iniciar una instalación de cero usamos el comando checkout
(abreviado co
):
$ mkdir public_html $ cd public_html $ svn co http://core.svn.wordpress.org/tags/3.0.2 .
Con esto tendrás el código de la versión 3.0.2 dentro de public_html
, que es equivalente a descargar el .zip de dicha versión y extraerlo en este folder, pero con Subversion queda automáticamente “amarrado” al repositorio (ya veremos como cambiar de versión).
Migrar desde una instalación ya existente
Si ya tenemos un sitio funcionando con WordPress y queremos que esté ligado el repositorio, el proceso es un poco más laborioso pero solo se hace una vez:
- Creamos un directorio temporal para la copia de WordPress en el repositorio:
$ mkdir tempwp $ cd tempwp $ svn co http://core.svn.wordpress.org/tags/3.0.2 .
- Ahora copiamos la configuración del blog hacia la nueva instancia en
tempwp
:$ cd ../public_html $ cp -p wp-config.php .htaccess ../tempwp
Asumiento que nuestra instalación activa se encuentra en
public_html
- Ahora movemos lo del wp-content hacia tempwp
$ cp -rfp wp-content/* ../tempwp/wp-content
Esto posiblemente cree conflictos con algunos archivos del wp-content que están dentro del repositorio. Para eso ejecutamos:
$ cd ../tempwp $ svn status ? wp-config.php ? .htaccess ? wp-content/upgrade ? wp-content/uploads ? wp-content/plugins/hacks.php ? wp-content/plugins/dashboard-widget-manager ? wp-content/plugins/privatewp X wp-content/plugins/akismet ? wp-content/plugins/openid ? wp-content/themes/p2 ? wp-content/themes/prologue
Normalmente todo debería salir con un símbolo de
?
(que no está en el repositorio) oX
de akismet. Si hay algo conM
(tiene modificaciones) lo mejor es revertir cualquier diferencia que tenga. Por ejemplo si tuviéramos una versión anterior de akismet a la del repositorio, lo revertimos ejecutando:$ svn revert wp-content/plugins/akismet/akismet.php
Y así para el resto de archivos marcados como modificados.
- Si tienes algún otro archivo fuera del
wp-content
también hay que copiarlo. - Con esto ya solo quedaría renombrar los directorios para usar la que nos interesa:
$ mv public_html old_html $ mv tempwp public_html
Si por alguna razón no funciona, siempre tienes una copia en
old_html
(o según corresponda en tu caso) a la cual puedes regresar rápidamente.
Actualizar la instalación
Una vez ya tengas una instalación ligada al repositorio, podemos cambiar la versión de nuestro WordPress usando el comando switch
(abreviado sw
). Por ejemplo para pasar de 3.0.1 al recién salido 3.0.2:
$ svn sw http://core.svn.wordpress.org/tags/3.0.2/ U wp-includes/ms-files.php U wp-includes/version.php U wp-includes/comment.php U wp-includes/functions.php U wp-includes/load.php U wp-includes/canonical.php U wp-includes/capabilities.php U readme.html U wp-admin/includes/plugin.php U wp-admin/includes/file.php U wp-admin/includes/update-core.php U wp-admin/plugins.php Updated to revision 16644.
¿Fácil no? Esto también significa que podemos regresar a una versión anterior, siempre y cuando la base de datos lo permita; todo es de buscar en los tags del repositorio las versiones correspondientes. Para los temerarios, también pueden pasarse directamente al /trunk, la rama principal de desarrollo donde no es raro que las cosas dejen de funcionar.
Detectando Malware
El hecho que podamos ver que archivos tienen modificaciones respecto al repositorio o cuales no están en este, nos ayuda mucho a detectar malware que por algún plugin defectuoso logró infectar nuestro WordPress. Para esto usamos nuevamente svn status
:
$ svn status ? wp-config.php ? redir.php ? .htaccess ? sitemap.xml.gz ? geositemap.xml ? imgs ? wp-includes/malware.php M wp-includes/general-template.php M index.php ? wp-content/cache ? wp-content/languages ? wp-content/plugins/hacks.php ? wp-content/plugins/wp-super-cache ? wp-content/plugins/wp-postviews X wp-content/plugins/akismet ? wp-content/plugins/google-sitemap-generator ? wp-content/plugins/postie ? wp-content/themes/log ? wp-content/themes/sandbox
En este ejemplo no hay razón para que el index.php
y wp-includes/general-template.php
tengan modificaciones (marcados con M), o para que exista un archivo como wp-includes/malware.php
y que no esté en el repositorio (marcado con ? dentro de wp-includes). Sino hemos hecho modificaciones por nuestra cuenta a dichos archivos, lo mejor es revertir cualquier cambio:
$ svn revert index.php wp-includes/general-template.php Reverted 'index.php' Reverted 'wp-includes/general-template.php'
Y eliminar cualquier otro archivo que nosotros no hayamos puesto demás. Sin el repositorio hubiera sido complicado encontrar dichas modificaciones, incluso sería más sencillo sobreescribir todos los archivos del core de WordPress.
Si el malware está en el wp-content
va ser un poco más complicado, porque es natural que esos archivos no estén en el repositorio, toca actualizar todos los plugins y themes o incluso ir desactivando los que parezcan sospechosos. No hay una formula mágica para esos casos.
Muy interesante artículo Javier… Lo estoy colgando ahora mismo en mi delicious 😉
Ya quise utilizar SubVersion para los Blogs hace tiempo, pero no tengo esa opción en el Hosting. Se que es buena idea, ya que lo utilizo en el trabajo y va genial, pero no puedo. Una pena.
Saludos.
qué tal cambiarte a alguna empresa que te de la opción?
yo no me he enterado de na… jejejeje, creo que todavia no he llegado a estos niveles de conocimiento de wordpress
Que bueno ver tutoriales de programacion, espero vengan muchos mas, saludos.