#!/bin/bash
#========================================
#scvrestore 2020/10/21
#Copyright J's Communication Co., Ltd.
#========================================

PROGNAME="scvrestore"
PROGVER="4.0.0"
UPDATED="2020/10/21"

RUNSYNSTATUS=`sudo test -L /home/scvrun ; echo $?`
SCVSYNSTATUS=`sudo test -L /var/www/html ; echo $?`

RUNSYNFL=0
SCVSYNFL=0

#/home/scvrunがシンボリックリンクだった時
 if [ $RUNSYNSTATUS -eq 0 ]; then
    RUNSYNFL=1
 fi

#/var/www/html/scvがシンボリックリンクだった時
 if [ $SCVSYNSTATUS -eq 0 ]; then
    SCVSYNFL=1
 fi

#usage表示関数
usage() {
  echo "$PROGNAME $PROGVER $UPDATED"
  echo "usage : $PROGNAME <scvbackup file>"
}

stopproc(){
  for PROG in $PROGS; do
    sudo $PROG -stop
  done
}

current_dir=`pwd`

if [ $# -ne 0 ] ; then

    #引数で指定したバックアップファイルのディレクトリパスとファイル名を取得
    #パスのみ取得
    FilePath=`echo $(cd $(dirname $1) && pwd)`
    #ファイル名のみ取得
    FileName=`basename $1`

    #指定したファイルが存在することを確認する
    if [ ! -e $FilePath/$FileName ] ; then
        usage
        echo "ERROR: $1 is not exitst."
        exit 1
    fi
    #引数で指定したファイルがscvbackupファイルであるか確認する
    if [ `echo $1 | grep 'scvbackup' | grep 'tar.gz'` ] ; then
            :
    else
        usage
        echo "ERROR:Please set the backup file."
        exit 1
    fi

    #tarの中身を取得
    TAR_INSIDE=`sudo tar ztf $1 | grep 'dump' -a -3 | grep 'scv' -a -3 | grep 'home' -a -3 | grep 'etc'`

        #指定したtar.gzファイルの中身を確認して、backupで圧縮した4ファイルが存在することを確認する
    if [ -n "$TAR_INSIDE" ] ; then
        :
    else
        usage
        echo "ERROR:Please set the backup file.,"
        exit 1
    fi

    #scvxがインストールされているか確認する
    if [ ! -e /var/www/html/scv ] ; then
        usage
        echo "SCVX is not installed. Please install SCVX."
        exit 1
    fi

    #リストア実行前に確認を行う
    echo "Start the restores. Are you OK?[y/N]"
    read ANSER
    case $ANSER in
        "Y" | "y" | "yes" | " Yes" | "YES" )  : ;;
        * ) echo "Canseled"
        exit 1 ;;
    esac

    #--------------------------------------------
    # メイン：リストア(復元)処理
    #--------------------------------------------

    #■リストア実行前にscvbackupを実行する
    #scvconfに指定されている場合は指定場所に保存。それ以外の場合はカレントディレクトリに保存。
    scvbackup scvrestore

    PROGS="scvmond scvclustd scvreserved"
    stopproc

    #■復元するディレクトリを削除
    cd /home

    #homeを削除(scvadminは除外)
    if [ $RUNSYNFL -eq 0 ]; then
         ls|egrep -v '^scvadmin'| xargs sudo rm -rf
    else  
	 ls | egrep -v "^scvadmin" | egrep -v "^scvrun" | xargs sudo rm -rf
    fi

    #scvを削除
    if [ $SCVSYNFL -eq 0 ]; then 
         sudo rm -rf /var/www/html/scv
    else
	 sudo rm -rf /var/www/html/scv/.
    fi

    #※Ubuntu 14.04 | 16.04 確認してmysqlの取得先の変更をする
    if [ `cat /etc/lsb-release | grep 'trusty'` ];then
      MysqlDir="/etc/mysql/my.cnf"
    else
      MysqlDir="/etc/mysql/mysql.conf.d/mysqld.cnf"
    fi

    #etcを削除
    sudo rm -rf /etc/apache2/sites-available/scv.conf \
    $MysqlDir \
    /etc/rc.local \
    /etc/default/docker \
    /etc/docker/daemon.json \
    /etc/cron.d/php5 \
    /etc/cron.d/php \
    /etc/updatedb.conf \
    /etc/ssh/sshd_config

    #■バックアップファイルを解凍

    #scvbackupファイルの場所に移動
    #cd $FilePath
    cd $current_dir

    #backupファイルを一時的に保存するディレクトリ作成
    temp_dir=`mktemp -d /tmp/temp.XXXXXX`
    sudo cp $1 $temp_dir
    cd $temp_dir

    #■バックアップファイルを解凍
    sudo tar zxvf $FileName

    #ファイル名
    DIRNAME=`echo $FileName | cut -d"p" -f2 | cut -d"." -f1`

    echo $DIRNAME

    cd $DIRNAME

    #■解凍
    #1 /home
    sudo tar xvzfp home$DIRNAME.tar.gz

    #2 /var/www/html/scv
    sudo tar xvzfp scv$DIRNAME.tar.gz

    #3 /etc
    sudo tar xvzfp etc$DIRNAME.tar.gz

    #■コピー
    #1 /home
    if [ $RUNSYNFL -eq 0 ]; then
        sudo cp -rp home /
    else
        sudo rsync -rp --exclude 'home/scvrun' home /
        sudo cp -Lrp home/scvrun/. /home/scvrun
    fi

    #scvadmin以外のknown_hostsを削除
    sudo find /home -type d -name scvadmin -prune -o -name known_hosts -print -exec rm {} \;

    #2 /var/www/html/scv
    if [ $SCVSYNFL -eq 0 ]; then
     if [ -e scv ];then
         sudo cp -rp scv /var/www/html
     else
         sudo cp -rp var /
     fi
    fi
     if [ -e scv ];then
         sudo cp -Lrp scv/. /var/www/html/scv
     else
         sudo cp -Lrp var/. /var/
     fi

    #3 mysqlのリストア(復元)
    scvsqle -restore dump$DIRNAME.sql

    #4 /etc(sudoersは除外)
    sudo rsync -a --exclude='sudoers' --include='*' etc/ /etc/

    #sudoersが不完全な場合のみsudoersをコピーする
    if [ ! `sudo cat /etc/sudoers | grep -e "'www-data'"` -a  `sudo cat /etc/sudoers | grep -e "'scvrun'"` ] ; then
        sudo cp -rp etc/sudoers /etc
    fi

    cd ../

    sudo rm -r $DIRNAME

    sudo rm -rf $temp_dir

    exit 0

else
    #ヘルプを表示
    usage
    exit 1
fi
