diff options
| author | Silvio Rhatto <rhatto@riseup.net> | 2012-01-04 14:32:21 -0200 | 
|---|---|---|
| committer | Silvio Rhatto <rhatto@riseup.net> | 2012-01-04 14:32:21 -0200 | 
| commit | f360acf0fab1d941bc7de8bec3d22aabd64f49fe (patch) | |
| tree | afd6f8e326996018f0c5fc81cdb2a8a6121df82f /share/hydractl/backup-restore-site | |
| parent | 2cfe1c7aad93d666424379b89a27247e570d6e47 (diff) | |
| download | hydra-f360acf0fab1d941bc7de8bec3d22aabd64f49fe.tar.gz hydra-f360acf0fab1d941bc7de8bec3d22aabd64f49fe.tar.bz2 | |
Enhanced backup restoration
Diffstat (limited to 'share/hydractl/backup-restore-site')
| -rwxr-xr-x | share/hydractl/backup-restore-site | 97 | 
1 files changed, 79 insertions, 18 deletions
| diff --git a/share/hydractl/backup-restore-site b/share/hydractl/backup-restore-site index 39353e9..4604755 100755 --- a/share/hydractl/backup-restore-site +++ b/share/hydractl/backup-restore-site @@ -1,34 +1,52 @@  #!/bin/bash  # -# Restore a website from backup +# Restore a website from backup.  # -# TODO: moin -# TODO: check for site user -# TODO: support restoration from /var/sites/backups  # Load.  source $APP_BASE/lib/hydra/functions || exit 1  hydra_config_load +# Basic parameters.  SITE="$2"  SITES="/var/sites"  FOLDER="$SITES/$SITE"  WWW="/var/www/data" +# Syntax check.  if [ -z "$SITE" ]; then    hydra_action_usage    exit 1  fi -hydra_backup_environment $1 restore +# Check restore stratety. +if [ "$1" == "localhost" ]; then +  hydra_backup_environment_local $2 restore +else +  hydra_backup_environment_remote $1 restore +fi + +# Set site user. +if hydra_check_user $SITE; then +  $SITE_USER="$SITE" +else +  $SITE_USER="root" +fi -# Check if folder exist on the backup +# Set site group. +if hydra_check_group $SITE; then +  $SITE_GROUP="$SITE" +else +  $SITE_GROUP="root" +fi + +# Check if folder exist on the backup.  if [ ! -d "$RESTOREDIR/$FOLDER" ]; then    echo "Folder $FOLDER does not exist at restored backup $RESTOREDIR"    exit 1  fi -# Check if there's already a site folder and backup it +# Check if there's already a site folder and backup it.  if [ -e "$FOLDER" ]; then    echo "Folder $FOLDER already exists, backing it up first..."    hydractl backup-site $SITE @@ -41,45 +59,69 @@ if [ -e "$FOLDER" ]; then    fi  fi +# Local backups are stored compressed +if [ "$1" == "localhost" ]; then +  if [ -e "$RESTOREDIR/$SITE.tar.bz2" ]; then +    ( cd $RESTOREDIR && tar xvf $SITE.tar.bz2 ) +  fi +fi +  # Copy site folder from backup -echo "Copying site $SITE from backup $RESTOREDIR..." -cp -a $RESTOREDIR/$FOLDER $FOLDER +if [ -d "$RESTOREDIR/$FOLDER" ]; then +  echo "Copying site $SITE from backup $RESTOREDIR..." +  cp -a $RESTOREDIR/$FOLDER $FOLDER +fi + +# Deleted uncompressed local backup +if [ "$1" == "localhost" ]; then +  rm -rf $RESTOREDIR/$FOLDER  +fi  # Fix permissions  chown -R root.root $FOLDER  # Trac  if [ -e "$FOLDER/trac" ]; then -  ( cd $FOLDER/trac && chown -R $SITE.$SITE attachments conf db auth plugins .egg-cache ) +  ( cd $FOLDER/trac && chown -R $SITE_USER.$SITE_GROUP attachments conf db auth plugins .egg-cache )  fi  # PmWiki  if [ -e "$FOLDER/wiki" ]; then -  ( cd $FOLDER/wiki && chown -R $SITE.$SITE wiki.d uploads ) +  ( cd $FOLDER/wiki && chown -R $SITE_USER.$SITE_GROUP wiki.d uploads )    chown $SITE.root $FOLDER/wiki/local/config.php    chmod 660 $FOLDER/wiki/local/config.php  fi  # Site  if [ -e "$FOLDER/site" ]; then -  chown -R $SITE.$SITE $FOLDER/site +  chown -R $SITE_USER.$SITE_GROUP $FOLDER/site  fi  # Drupal  if [ -e "$FOLDER/drupal" ]; then    SERIES="$3" -  chown -R $SITE.$SITE $FOLDER/drupal/files -  chown root.$SITE $FOLDER/drupal/settings.php +  chown -R $SITE_USER.$SITE_GROUP $FOLDER/drupal/files +  chown root.$SITE_GROUP $FOLDER/drupal/settings.php    chmod 640 $FOLDER/drupal/settings.php +  if [ -e "/etc/apache2/sites-available/$SITE" ]; then +    SERVER_ALIAS="`grep ServerAlias /etc/apache2/sites-available/$SITE | sed -e 's/ServerAlias//'`" +  fi +    if [ ! -z "$SERIES" ]; then -    if [ -e "$WWW/drupal-$SERIES" ]; then +    if [ -e "$WWW/drupal-$SERIES/sites" ]; then        echo "Creating basic drupal symlinks..."        (        cd $WWW/drupal-$SERIES/sites        ln -sf $FOLDER/drupal $SITE        ln -sf $FOLDER/drupal $SITE.`facter domain` + +      for server_alias in $SERVER_ALIAS; do +        if [ ! -e "$server_alias" ]; then +          ln -sf $FOLDER/drupal $server_alias +        fi +      done        )      else        echo "No drupal $SERIES found in the system, so no symlink handling" @@ -89,13 +131,25 @@ if [ -e "$FOLDER/drupal" ]; then    fi  fi +# Check if there are database dumps +if [ -f "$DB_DUMP_BASE/$SITE.sql.gz" ]; then +  DB_DUMP_EXT=".gz" +  DB_DUMP_EXTRACT="gunzip" +elif [ -f "$DB_DUMP_BASE/$SITE.sql.bz2" ]; then +  DB_DUMP_EXT=".bz2" +  DB_DUMP_EXTRACT="bunzip" +elif [ -f "$DB_DUMP_BASE/$SITE.sql" ]; then +  DB_DUMP_EXT="" +  DB_DUMP_EXTRACT="true" +fi +  # Restore database -if [ -f "$RESTOREDIR/var/backups/mysql/sqldump/$SITE.sql.gz" ]; then +if [ ! -z "$DB_DUMP_EXT" ]; then    echo "Restoring database $SITE..."    BASEDIR="$FOLDER"    hydra_set_tmpfile $SITE -d -  cp $RESTOREDIR/var/backups/mysql/sqldump/$SITE.sql.gz $TMPWORK -  ( cd $TMPWORK && gunzip $SITE.sql.gz ) +  cp $DB_DUMP_BASE/$SITE.sql$DB_DUMP_EXT $TMPWORK +  ( cd $TMPWORK && $DB_DUMP_EXTRACT $SITE.sql$DB_DUMP_EXT )    hydra_truncate_database $SITE    mysql $SITE < $TMPWORK/$SITE.sql    hydra_unset_tmpfile $TMPWORK @@ -115,3 +169,10 @@ if [ -e "$FOLDER/ikiwiki" ]; then      echo "Either $file or git repository not found for $SITE ikiwiki instance"    fi  fi + +# Moin +if [ -e "$FOLDER/moin" ]; then +  echo "Restoring moin for $SITE..." +  chown -R root.root $FOLDER/moin/ +  chown -R $SITE_USER.$SITE_GROUP $FOLDER/moin/{cgi-bin,data,underlay} +fi | 
