blob: 49b98730d9d129c403e923f961fc96a2385102f8 (
plain) (
tree)
|
|
#!/bin/sh
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 ..."
}
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
# make list and copy installed core packages
prt-get printf "%i %p %n#%v-%r.pkg.tar.gz\n" | grep "yes /usr/ports/core" | cut -d " " -f 3 > ${DEST_DIR}/core.pkg
prt-get printf "%i %p %n#%v-%r.pkg.tar.gz\n" | grep "yes /usr/ports/opt" | cut -d " " -f 3 > $DEST_DIR/opt.pkg
prt-get printf "%i %p %n#%v-%r.pkg.tar.gz\n" | grep "yes /usr/ports/contrib" | cut -d " " -f 3 > $DEST_DIR/contrib.pkg
prt-get printf "%i %p %n#%v-%r.pkg.tar.gz\n" | grep "yes /usr/ports/xorg" | cut -d " " -f 3 > $DEST_DIR/xorg.pkg
prt-get printf "%i %p %n#%v-%r.pkg.tar.gz\n" | grep -v "yes /usr/ports/core" | grep -v "yes /usr/ports/opt" | grep -v "yes /usr/ports/contrib" | grep -v "yes /usr/ports/xorg" | grep "yes " | cut -d " " -f 3 > $DEST_DIR/other.pkg
}
mkbk_etc_conf() {
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
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_srv_pgsql() {
# 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_srv_gitolite() {
# 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 \
.
}
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/):\n "
#read ROOT_DIR
ROOT_DIR=$1
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_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"
mkbk_coll_pkg "opt"
mkbk_coll_ports "contrib"
mkbk_coll_pkg "contrib"
mkbk_coll_ports "xorg"
mkbk_coll_pkg "xorg"
mkbk_coll_pkg "other"
|