Cómo instalar y actualizar drupal desde cvs

Hay varias maneras de gestionar las actualizaciones menores de drupal (de la versión 6.1 a la 6.2, ...). El flujo canónico sería[1]:

  1. descargar drupal a /var/www/drupal-6.1
  2. trabajar con drupal {crear sites, descargar modulos,...}
  3. sale una nueva versión de drupal
  4. descargamos la nueva version a /var/www/drupal-6.2
  5. borramos /var/www/drupal-6.2/sites
  6. movemos /var/www/drupal-6.1/sites /var/www/drupal-6.2/sites
  7. cambiamos los DocumentRoot en apache y reiniciamos
  8. volvemos al punto 3 durante las 15 o 20 versiones menores de drupal que vayan saliendo...

Esto no es duro de hacer pero se vuelve tedioso cuando tienes varios sites y cuando ya vamos por la 6.15 y quizás hemos tenido que hacer estos pasos 14 veces!.

El primer punto de mejora es usar el mismo nombre de directorio para no tener que cambiar el DocumentRoot en apache. Es decir, usar siempre un directorio como /var/www/drupal-6.x independiente de la versión de drupal. Se puede mejorar un poco más usando enlaces simbólicos: /var/www/drupal-6.x -> /var/www/drupal-6.14 . También se puede optar por mantener la carpeta sites fuera del drupal (por ejemplo en /var/www/drupal6-sites) y usar otro enlace simbólico para esta carpeta. No lo voy a explicar en detalle pues es una configuración bastante simple y no es el objeto de este artículo.

CVS

Tampoco es el objeto de este artículo hacer un background sobre lo que es cvs, etc etc etc. Si quieres saber más sobre cvs y drupal aquí tienes el handbook y aquí el quickstart para module maintainers.

Descargar drupal desde cvs

Vamos a descargar drupal de manera anónima desde el cvs. Descargaremos la revisión 6.13 y lo guardaremos en un directorio de nombre drupal6-cvs.
<a href="mailto:jonhattan@larry">jonhattan@larry</a>:/tmp$ export CVSROOT=:pserver:<a href="mailto:anonymous@cvs.drupal.org">anonymous@cvs.drupal.org</a>:/cvs/drupal
<a href="mailto:jonhattan@larry">jonhattan@larry</a>:/tmp$ cvs login
Logging in to :pserver:<a href="mailto:anonymous@cvs.drupal.org">anonymous@cvs.drupal.org</a>:2401/cvs/drupal
CVS password:  <em>[anonymous]</em>
<a href="mailto:jonhattan@larry">jonhattan@larry</a>:/tmp$ cvs co -r DRUPAL-6-13 -d drupal6-cvs drupal
cvs checkout: Updating drupal6-cvs
U drupal6-cvs/.htaccess
U drupal6-cvs/CHANGELOG.txt
U drupal6-cvs/COPYRIGHT.txt
U drupal6-cvs/INSTALL.mysql.txt
U drupal6-cvs/INSTALL.pgsql.txt
U drupal6-cvs/INSTALL.txt
U drupal6-cvs/LICENSE.txt
U drupal6-cvs/MAINTAINERS.txt
U drupal6-cvs/UPGRADE.txt
U drupal6-cvs/cron.php
U drupal6-cvs/index.php
U drupal6-cvs/install.php
....

Actualizar cuando sale una nueva versión

Pongamos por caso que acaba de salir la versión 6.14. Ejecutando una sóla instrucción se puede actualizar:
<a href="mailto:jonhattan@larry">jonhattan@larry</a>:/tmp$ cd drupal6-cvs/
<a href="mailto:jonhattan@larry">jonhattan@larry</a>:/tmp/drupal6-cvs$ cvs up -dP -r DRUPAL-6-14
cvs update: Updating .
P CHANGELOG.txt
P COPYRIGHT.txt
cvs update: Updating includes
P includes/actions.inc
P includes/bootstrap.inc
P includes/cache.inc
P includes/common.inc
U includes/database.inc
U includes/database.mysql-common.inc
U includes/database.mysql.inc
U includes/database.mysqli.inc
U includes/database.pgsql.inc
P includes/file.inc
P includes/form.inc
P includes/locale.inc
P includes/theme.maintenance.inc
cvs update: Updating misc
P misc/drupal.js
cvs update: Updating misc/farbtastic
cvs update: Updating modules
cvs update: Updating modules/aggregator
cvs update: Updating modules/block
cvs update: Updating modules/blog
P modules/blog/blog.pages.inc
cvs update: Updating modules/blogapi
cvs update: Updating modules/book
cvs update: Updating modules/color
cvs update: Updating modules/color/images
cvs update: Updating modules/comment
P modules/comment/comment.module
cvs update: Updating modules/contact
cvs update: Updating modules/dblog
P modules/dblog/dblog.install
cvs update: Updating modules/filter
P modules/filter/filter.module
cvs update: Updating modules/forum
cvs update: Updating modules/help
cvs update: Updating modules/locale
cvs update: Updating modules/menu
cvs update: Updating modules/node
P modules/node/content_types.inc
P modules/node/node.module
U modules/node/node.tpl.php
cvs update: Updating modules/openid
U modules/openid/login-bg.png
P modules/openid/openid.inc
P modules/openid/openid.module
P modules/openid/openid.pages.inc
cvs update: Updating modules/path
cvs update: Updating modules/php
cvs update: Updating modules/ping
cvs update: Updating modules/poll
P modules/poll/poll.module
cvs update: Updating modules/profile
cvs update: Updating modules/search
P modules/search/search.module
cvs update: Updating modules/statistics
P modules/statistics/statistics.install
cvs update: Updating modules/syslog
cvs update: Updating modules/system
P modules/system/system.admin.inc
P modules/system/system.install
P modules/system/system.js
P modules/system/system.module
cvs update: Updating modules/taxonomy
P modules/taxonomy/taxonomy.module
cvs update: Updating modules/throttle
cvs update: Updating modules/tracker
cvs update: Updating modules/translation
cvs update: Updating modules/trigger
cvs update: Updating modules/update
P modules/update/update.fetch.inc
cvs update: Updating modules/upload
U modules/upload/upload.module
cvs update: Updating modules/user
P modules/user/user.module
P modules/user/user.pages.inc
cvs update: Updating profiles
cvs update: Updating profiles/default
cvs update: Updating scripts
cvs update: Updating sites
cvs update: Updating sites/all
cvs update: Updating sites/default
P sites/default/default.settings.php
cvs update: Updating themes
cvs update: Updating themes/bluemarine
cvs update: Updating themes/chameleon
cvs update: Updating themes/chameleon/marvin
cvs update: Updating themes/engines
cvs update: Updating themes/engines/phptemplate
cvs update: Updating themes/garland
P themes/garland/style.css
P themes/garland/template.php
cvs update: Updating themes/garland/color
cvs update: Updating themes/garland/images
cvs update: Updating themes/garland/minnelli
cvs update: Updating themes/garland/minnelli/color
cvs update: Updating themes/pushbutton





[1] Si usas un alojamiento compartido y no puedes cambiar el DocumentRoot en apache sino que tienes una carpeta public_html o similar donde tiene que ir tu drupal, lo que se me ocurre es descargar la nueva versión de drupal localmente, borrar su carpeta sites y subir el resto por ftp, sobreescribiendo los ficheros y directorios que ya estén en el servidor. Este artículo está escrito para quienes tienen acceso shell a la máquina.