e='generator' content='cgit 1.4.1-2-gfad0'/>
about summary refs log blame commit diff stats
path: root/core/scripts/backup-system.sh
blob: 22fe5881b87050f8b0ff3a200c5c76da0c3e881f (plain) (tree)
1
2
3
4
5
6
7
8
9



                     
                             


                           
 











                                                      



                                           
 
 


                               
                               



                               
 






                                                                            
 











                                           
                                         



                                       












                                                   
             
 
                    

                    
 



                                         
 



                                             
                        
                






































































                                                                        

          

                                    




                                                
                               





                                          
             

          

                                    




                                                
                           




                                          
#!/bin/bash

ROOT_DIR=
DEST_DIR=/root/backup
DEST_SYS="${DEST_DIR}/system"
DATA_CNF="${DEST_DIR}/conf"
DATA_USR="${DEST_DIR}/user"
DATA_SRV="${DEST_DIR}/srv"

ConfirmOrExit ()
{
    while true
    do
        echo -n "Please confirm (y or n) :"
        read CONFIRM
        case $CONFIRM in
            y|Y|YES|yes|Yes) break ;;
            n|N|no|NO|No)
                echo "Aborting - you entered $CONFIRM"
                exit
                ;;
	*) echo "Please enter only y or n"
esac
done
echo "You entered $CONFIRM. Continuing ..."
}

print_data () {
    echo "ROOT_DIR=${ROOT_DIR}"
    echo "DEST_DIR=${DEST_DIR}"
    echo "DEST_SYS=${DEST_SYS}"
    echo "DATA_CNF=${DATA_CNF}"
    echo "DATA_USR=${DATA_USR}"
    echo "DATA_SRV=${DATA_SRV}"
}

print_help() {
    echo "usage: backup-system [options]"
    echo "options:"
    echo "  -r,   --root                root directory to backup, default /"
    echo "  -d,   --destination         save backup, default /root/backup"
    echo "  -h,   --help                print help and exit"
}

while [ "$1" ]; do
    case $1 in
        -r|--root)
            ROOT_DIR=$2
            if [ ${ROOT_DIR} == "/" ]; then
                ROOT_DIR=""
            fi
            shift ;;
        -d|--destination)
            DEST_DIR=$2

            # Destination directory
	    DEST_SYS="${DEST_DIR}/system"
	    DATA_CNF="${DEST_DIR}/conf"
	    DATA_USR="${DEST_DIR}/user"
	    DATA_SRV="${DEST_DIR}/srv"

            shift ;;
        -h|--help)
            print_help
            exit 0 ;;
        *)
            echo "backup-system: invalid option $1"
            print_help
            exit 1 ;;
    esac
    shift
done

print_data
ConfirmOrExit

mkdir -p ${DATA_CNF}
mkdir -p ${DATA_USR}
mkdir -p ${DATA_SRV}

# Backup system settings
tar --xattrs -zcpf $DATA_CNF/etc.tar.gz \
    --directory=$ROOT_DIR/etc \
    .

tar --xattrs -zcpf $DATA_CNF/usr_etc.tar.gz \
    --directory=$ROOT_DIR/usr/etc \
    .

bacup_home_metadata () {
# User Meta Data

    for dir in /home/*; do
	if [ "${dir}" != "/home/lost+found" ]; then
	    user=$(basename $dir)
	    tar --xattrs -zcpf "${DATA_USR}/meta-${user}.tar.gz" \
		$dir/.bash_profile \
		$dir/.bashrc \
		$dir/.config \
		$dir/.gitconfig \
		$dir/.gnupg \
		$dir/.irssi \
		$dir/.lynxrc \
		$dir/.mutt \
		$dir/.netrc \
		$dir/.profile \
		$dir/.spectrwm.conf \
		$dir/.ssh \
		$dir/.tmux.conf \
		$dir/.vim \
		$dir/.vimrc \
		$dir/.xinitrc

	    # encript data
	    #gpg --output "${DATA_USR}/meta-${user}.tar.gz.gpg" \
		#    --encrypt --recipient user@host \
		#    "${DATA_USR}/meta-${user}.tar.gz"

	    tar --xattrs -zcpf "${DATA_USR}/gitolite-${user}.tar.gz" \
		$dir/gitolite-admin
	fi
    done
}

backup_services () {
    # backup web data first stop php and nginx
    for pkg_www in ${ROOT_DIR}/srv/www/*; do
	if [[ ! $(ls ${pkg_www} | grep -v "backup_deploy") = "" ]]; then
	    pkg_back="${DATA_SRV}/www"
	    if [ ! -d ${pkg_back} ]; then
		mkdir -p ${pkg_back}
	    fi
	    bck_file="${pkg_back}/$(basename ${pkg_www}).tar.gz"
	    exc="${pkg_www}/backup_deploy"
	    tar --exclude ${exc} --xattrs -zcpf ${bck_file} ${pkg_www}
	fi
    done

    # backup database data first dump all databases
    pkg_back="${DATA_SRV}/pgsql"
    if [ ! -d ${pkg_back} ]; then
	mkdir -p ${pkg_back}
    fi
    pg_dumpall -U postgres | gzip > ${pkg_back}/cluster_dump.gz

    tar --xattrs -zcpf "${pkg_back}/pgsql-conf.tar.gz" \
	${ROOT_DIR}/srv/pgsql/data/pg_hba.conf \
	${ROOT_DIR}/srv/pgsql/data/pg_ident.conf \
	${ROOT_DIR}/srv/pgsql/data/postgresql.conf


    # backup gitolite repositories
    pkg_back="${DATA_SRV}/gitolite"
    if [ ! -d ${pkg_back} ]; then
	mkdir -p ${pkg_back}
    fi

    tar --xattrs -zcpf "${pkg_back}/gitolite.tar.gz" \
	--directory=${ROOT_DIR}/srv/gitolite \
	.
}

while true
do
    echo "Backup User Metadata ?"
    echo "Please confirm (y or n): "
    read CONFIRM
    case $CONFIRM in
        n|N|no|NO|No) break ;;
        y|Y|YES|yes|Yes)
            echo "Accept - you entered $CONFIRM"
            bacup_home_metadata
            break
            ;;
        *) echo "Please enter only y or n"
    esac
done

# Server Data
while true
do
    echo "Backup Server Data ?"
    echo "Please confirm (y or n): "
    read CONFIRM
    case $CONFIRM in
        n|N|no|NO|No) break ;;
        y|Y|YES|yes|Yes)
            echo "Accept - you entered $CONFIRM"
            backup_services
            break
            ;;
        *) echo "Please enter only y or n"
    esac
done