#!/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_metadata() { # 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_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_data_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 \ . } echo -n "root directory you want backup (/mnt/): " #read ROOT_DIR ROOT_DIR=$1 echo -n "where you want to save (/home/user): " DEST_DIR=$2 # Temporary directory PORT_PKG="${DEST_DIR}/crux" PORT_PRT="${DEST_DIR}/ports" DATA_CNF="${DEST_DIR}/conf" 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}" ConfirmOrExit mkdir -p ${PORT_PKG} mkdir -p ${PORT_PRT} mkdir -p ${DATA_CNF} mkbk_metadata mkbk_data_conf 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" #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 .