#!/bin/bash function Continuar() { while [ 1 ] do echo -e "\nSeguir? (s/n) " read resposta # Finalitza l'script if [ "$resposta" == "n" ] ; then exit 0 ; fi # Finalitza la funció if [ "$resposta" == "s" ] ; then return 0 ; fi done } # Fitxers i directoris a mantenir de la versió vella a la nova # Si existeixen a la versió nova, seran esborrats abans de fer la còpia # Un fitxer o directori per línia, relatius al directori del Drupal. MAINTAIN_FILES="sites robots.txt .htaccess" # Determinem el directori del Drupal if [ "$1" == "" ]; then DIRDRUPAL="$PWD" else DIRDRUPAL="$1" fi DIRINICIAL="$PWD" DATA=`date +%Y%m%d.%H%M` # Definim les opcions per a totes les comandes de drush OPTS="-r \"$DIRDRUPAL\"" DIRBASE=`echo "$DIRDRUPAL" | sed -e 's/\/.[^/]*$//'` # Ens coloquem a un directori per sobre del del drupal cd "$DIRBASE" # Informem de l'estat actual echo "Directori del Drupal: '$DIRDRUPAL'" echo "Directori base: '$DIRBASE'" Continuar # Determinem el nom de la BD, la versió actual del drupal DIRFINAL=`echo "$DIRDRUPAL" | sed -e 's/.*\///'` echo "Determinant l'estat actual del Drupal..." STATUS="/tmp/drupal.$DIRFINAL.status.txt" drush -r "$DIRDRUPAL" status > "$STATUS" cat "$STATUS" BD=`grep "Database Name" $STATUS | sed -e 's/.*: //'` VERSION_OLD=`grep "Drupal version" "$STATUS" | sed -e 's/.*: //'` DIRDRUPAL_OLD="$DIRDRUPAL-$VERSION_OLD" echo "Versió actual: $VERSION_OLD" Continuar # Descarreguem la nova versió del drupal i en desem la versió i el directori # on es troba echo "Descarregant la nova versió..." drush -r "$DIRDRUPAL" dl > "$STATUS" VERSION_NEW=`cat $STATUS | sed -e 's/.*(//' | sed -e 's/).*//'` DIRDRUPAL_NEW="$PWD/drupal-$VERSION_NEW" echo "Versió nova: $VERSION_NEW" Continuar # Comprovem que les versions actual i nova siguin diferents if [ "$VERSION_OLD" == "$VERSION_NEW" ]; then echo "El Drupal ja està actualitzat. No cal fer res." exit 2 fi # Posem el site en mode de manteniment echo "Posant Drupal en mode de manteniment..." drush -r "$DIRDRUPAL" eval "variable_set('site_offline', '1')" > /dev/null # Mirem els mòduls activats de tercers (no core) echo "Fent el llistat de mòduls de tercers habilitats..." drush -r "$DIRDRUPAL" enabledmodules --pipe > "$STATUS" MODULES=`cat "$STATUS"` echo "Mòduls de tercers habilitats: `cat "$STATUS"`" Continuar # Fem còpia de seguretat de la BD echo "Fent la còpia de seguretat de la Base de Dades..." NOMFITBD="$BD.$VERSION_OLD.$DATA.sql" drush -r $DIRDRUPAL sql dump > "$NOMFITBD" gzip "$NOMFITBD" echo "Còpia de seguretat de la BD realitzada: '$NOMFITBD'" Continuar # Fem còpia de seguretat del drupal echo "Fent la còpia de seguretat del directori actual del Drupal..." NOMFITZIP="$DIRDRUPAL.$VERSION_OLD.$DATA.tar.gz" tar czf "$NOMFITZIP" "$DIRDRUPAL" > /dev/null echo "Còpia de seguretat dels fitxers realitzada: '$NOMFITZIP'" Continuar # Desactivem els mòduls de tercers echo "Desactivant els mòduls de tercers..." drush -r "$DIRDRUPAL" disable $MODULES Continuar # Copiem les dades del directori 'sites' i els fitxers '.htacces' i # 'robots.txt' a la nova versió NAMES="" for i in $MAINTAIN_FILES; do if [ "$NAMES" != "" ]; then NAMES="$NAMES, " fi NAMES="$NAMES '$i'" done echo "Copiant les dades dels fitxers o directoris $NAMES a la nova versió..." for i in $MAINTAIN_FILES; do FILE="$DIRDRUPAL_NEW/$i" FILE_OLD="$DIRDRUPAL/$i" if [ -e "$FILE_OLD" ]; then if [ -e "$FILE" ]; then echo "Esborrant el fitxer '$FILE' per evitar conflictes." rm -R "$FILE" fi echo "Copiant el fitxer '$FILE_OLD' a '$FILE'." cp -pR "$FILE_OLD" "$DIRDRUPAL_NEW" else echo "El fitxer '$FILE_OLD' no existeix. Saltant: no esborrem a la nova versió i no intentem copiar-lo." fi done Continuar # Fem el canvi dels directoris echo "Canviem els directoris del Drupal..." mv "$DIRDRUPAL" "$DIRDRUPAL_OLD-old" mv "$DIRDRUPAL_NEW" "$DIRDRUPAL" Continuar # Executem l'actualització de la BD echo "Executant l'actualització de la Base de Dades (update.php) per al core..." drush -r "$DIRDRUPAL" updatedb Continuar # Reactivem els mòduls de tercers echo "Activant els mòduls de tercers..." drush -r "$DIRDRUPAL" enable $MODULES Continuar # Executem l'actualització de la BD per als mòduls de tercers echo "Executant l'actualització de la Base de Dades (update.php) per als mòduls de tercers..." drush -r "$DIRDRUPAL" updatedb Continuar # Posem el site en mode normal echo "Traient Drupal del mode de manteniment..." drush -r "$DIRDRUPAL" eval "variable_set('site_offline', '0')" # Mostrem un estat final del drupal echo "Mirant l'estat final del Drupal..." drush -r "$DIRDRUPAL" status cd "$DIRINICIAL"