diff options
Diffstat (limited to 'core/scripts/backup-system.sh')
-rw-r--r-- | core/scripts/backup-system.sh | 189 |
1 files changed, 136 insertions, 53 deletions
diff --git a/core/scripts/backup-system.sh b/core/scripts/backup-system.sh index 2bced8a..49b9873 100644 --- a/core/scripts/backup-system.sh +++ b/core/scripts/backup-system.sh @@ -18,8 +18,47 @@ ConfirmOrExit () echo "You entered $CONFIRM. Continuing ..." } +mkbk_coll_pkg() { + col=$1 + # make copy of packages + mkdir ${PORT_PKG}/${col} + while read line; do + if [ ! -f /usr/ports/packages/${line} ]; then + echo "Building package: ${line};\n" + name=$(echo ${line} | cut -d "#" -f 1) + #$sudo prt-get update -fr ${name} + fi + + if [ -f /usr/ports/packages/${line} ]; then + echo "Backing up package: ${line}" + echo ${line} >> ${DEST_DIR}/backup.pkg + cp /usr/ports/packages/${line} ${PORT_PKG}/${col}/ + else + echo "Package not found: ${line}" + echo ${line} >> ${DEST_DIR}/${col}-notfound.pkg + fi + done < $DEST_DIR/${col}.pkg +} + +mkbk_coll_ports() { + col=$1 + + # tar --xattrs -zcpf $PORT_PRT/${col}-`date '+%Y-%j-%H-%M-%S'`.tar.gz \ + # --directory=$ROOT_DIR/usr/ports/${col} \ + # . + tar --xattrs -zcpf $PORT_PRT/${col}.tar.gz \ + --directory=$ROOT_DIR/usr/ports/${col} \ + --exclude=.git/ \ + . + +} + mkbk_metadata() { + # archive pkgutils data + tar --xattrs -zcpf $DATA_CNF/pkg-db.tar.gz \ + /var/lib/pkg/db + # must be using gwak instead of sed, xargs and echo prt-get listinst -v | sed -s s/" "/#/g | xargs -i echo {}.pkg.tar.gz > ${DEST_DIR}/installed.pkg @@ -36,80 +75,141 @@ mkbk_metadata() { } -mkbk_coll_pkg() { - col=$1 - # make copy of packages - mkdir ${PORT_PKG}/${col} - while read line; do - if [ ! -f /usr/ports/packages/${line} ]; then - echo "Building package: ${line};\n" - name=$(echo ${line} | cut -d "#" -f 1) - #$sudo prt-get update -fr ${name} - fi +mkbk_etc_conf() { - if [ -f /usr/ports/packages/${line} ]; then - echo "Backing up package: ${line}" - echo ${line} >> ${DEST_DIR}/backup.pkg - cp /usr/ports/packages/${line} ${PORT_PKG}/${col}/ - else - echo "Package not found: ${line}" - echo ${line} >> ${DEST_DIR}/${col}-notfound.pkg + 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 \ + . +} + +mkbk_srv_www() { + + # 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 - done < $DEST_DIR/${col}.pkg + 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 } -mkbk_coll_ports() { - col=$1 +mkbk_srv_pgsql() { -# tar --xattrs -zcpf $PORT_PRT/${col}-`date '+%Y-%j-%H-%M-%S'`.tar.gz \ -# --directory=$ROOT_DIR/usr/ports/${col} \ -# . - tar --xattrs -zcpf $PORT_PRT/${col}.tar.gz \ - --directory=$ROOT_DIR/usr/ports/${col} \ - --exclude=.git/ \ - . + # 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 } -mkbk_data_conf() { +mkbk_srv_gitolite() { - tar --xattrs -zcpf $DATA_CNF/etc.tar.gz \ - --directory=$ROOT_DIR/etc \ - . + # backup gitolite repositories - tar --xattrs -zcpf $DATA_CNF/usr_etc.tar.gz \ - --directory=$ROOT_DIR/usr/etc \ + 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 \ . } +mkbk_user_metadata() { + + 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 +} -echo -n "root directory you want backup (/mnt/): " +echo -n "root directory you want backup (/mnt/):\n " #read ROOT_DIR ROOT_DIR=$1 -echo -n "where you want to save (/home/user): " +echo -n "where you want to save (/home/user):\n " DEST_DIR=$2 # Temporary directory PORT_PKG="${DEST_DIR}/crux" PORT_PRT="${DEST_DIR}/ports" DATA_CNF="${DEST_DIR}/conf" +DATA_USR="${DEST_DIR}/user" +DATA_SRV="${DEST_DIR}/srv" echo "ROOT_DIR=${ROOT_DIR}" echo "DEST_DIR=${DEST_DIR}" echo "PORT_PKG=${PORT_PKG}" echo "PORT_PRT=${PORT_PRT}" echo "DATA_CNF=${DATA_CNF}" +echo "DATA_USR=${DATA_USR}" +echo "DATA_SRV=${DATA_SRV}" ConfirmOrExit +if [ ${ROOT_DIR} == "/" ]; then + ROOT_DIR="" +fi + mkdir -p ${PORT_PKG} mkdir -p ${PORT_PRT} mkdir -p ${DATA_CNF} +mkdir -p ${DATA_USR} +mkdir -p ${DATA_SRV} +# Light backup data mkbk_metadata -mkbk_data_conf +mkbk_etc_conf +mkbk_user_metadata +mkbk_srv_www +mkbk_srv_pgsql +mkbk_srv_gitolite +# Port system mkbk_coll_ports "core" mkbk_coll_pkg "core" mkbk_coll_ports "opt" @@ -121,20 +221,3 @@ mkbk_coll_pkg "xorg" mkbk_coll_pkg "other" -#echo $DES_DIR -#echo $ROOT_DIR -# -#tar --xattrs -zcpf $DEST_DIR/system-backup-`date '+%Y-%j-%H-%M-%S'`.tar.gz \ -# --directory=$ROOT_DIR \ -# --exclude=usr/ports \ -# --exclude=usr/src \ -# --exclude=var/run \ -# --exclude=var/lock \ -# --exclude=srv \ -# --exclude=mnt \ -# --exclude=home \ -# --exclude=dev \ -# --exclude=run \ -# --exclude=tmp \ -# --exclude=proc \ -# --exclude=sys . |