parent
3b9fd8c796
commit
6eea372883
@ -0,0 +1,72 @@
|
||||
SUMMARY = "Backup scripts"
|
||||
LICENSE = "BSD"
|
||||
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/BSD;md5=3775480a712fc46a69647678acb234cb"
|
||||
|
||||
SRC_URI += "file://cbackup \
|
||||
file://cbackup.sh \
|
||||
file://mbackup \
|
||||
file://mbackup.sh \
|
||||
file://checkbk \
|
||||
file://checkbk.service \
|
||||
file://checkflashcfg \
|
||||
file://checkflash.service \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}"
|
||||
|
||||
# set this variable to 0 to avoid blocking the boot process if flash configuration is not valid
|
||||
# normally keep it to 1, in upper layers except if there is no way to know that a flash repair
|
||||
# is needed from external server
|
||||
export BLOCKOPTION = "0"
|
||||
|
||||
inherit gitver-repo
|
||||
|
||||
REPODIR = "${THISDIR}"
|
||||
REPOFILE = "backup-scripts_1.0.bb"
|
||||
PR := "r${REPOGITFN}"
|
||||
|
||||
REPODIR = "${THISDIR}/files"
|
||||
REPOFILE = ""
|
||||
PR := "${PR}.${REPOGITFN}"
|
||||
|
||||
RDEPENDS_${PN} += "busybox cronie util-linux coreutils base-files"
|
||||
|
||||
do_install() {
|
||||
install -d ${D}${sysconfdir}
|
||||
install -d ${D}${sysconfdir}/systemd
|
||||
install -d ${D}${sysconfdir}/systemd/system
|
||||
install -d ${D}${sysconfdir}/systemd/system/multi-user.target.wants
|
||||
install -m 0755 -d ${D}${base_libdir}
|
||||
install -m 0755 -d ${D}${systemd_unitdir}
|
||||
install -m 0755 -d ${D}${systemd_unitdir}/system
|
||||
install -m 0644 ${S}/checkbk.service ${D}${systemd_unitdir}/system/checkbk.service
|
||||
ln -sf ${systemd_unitdir}/system/checkbk.service ${D}${sysconfdir}/systemd/system/multi-user.target.wants/checkbk.service
|
||||
install -m 0644 ${S}/checkflash.service ${D}${systemd_unitdir}/system/checkflash.service
|
||||
ln -sf ${systemd_unitdir}/system/checkflash.service ${D}${sysconfdir}/systemd/system/multi-user.target.wants/checkflash.service
|
||||
install -d ${D}${bindir}
|
||||
install -m 0755 ${S}/cbackup ${D}${bindir}/.cbackup
|
||||
install -m 0755 ${S}/mbackup ${D}${bindir}/.mbackup
|
||||
install -m 0755 ${S}/cbackup.sh ${D}${bindir}/cbackup
|
||||
install -m 0755 ${S}/mbackup.sh ${D}${bindir}/mbackup
|
||||
install -m 0755 ${S}/checkbk ${D}${bindir}/checkbk
|
||||
install -m 0755 ${S}/checkflashcfg ${D}${bindir}/checkflashcfg
|
||||
echo "BLOCKOPTION=${BLOCKOPTION}" > ${D}${sysconfdir}/bootoptions.conf
|
||||
chmod 755 ${D}${sysconfdir}/bootoptions.conf
|
||||
}
|
||||
|
||||
pkg_postinst_${PN}_append() {
|
||||
echo "adding crontab"
|
||||
test -d $D/var/spool/cron || mkdir -p $D/var/spool/cron
|
||||
test -f /var/spool/cron/root && sed -i '/checkbk/d' $D/var/spool/cron/root
|
||||
echo "15 3 * * * nice -n 15 ${bindir}/checkbk" >> $D/var/spool/cron/root
|
||||
}
|
||||
|
||||
FILES_${PN} += "${bindir}/mbackup \
|
||||
${bindir}/.mbackup \
|
||||
${bindir}/cbackup \
|
||||
${bindir}/.cbackup \
|
||||
${bindir}/checkbk \
|
||||
${bindir}/checkflashcfg \
|
||||
${sysconfdir} \
|
||||
${systemd_unitdir}/* \
|
||||
"
|
@ -0,0 +1,190 @@
|
||||
#!/bin/sh
|
||||
STAG=cbackup:
|
||||
# lock wait time max 15mn * 60 = 900 secs (sufficient time to update)
|
||||
LOCKWAIT=900
|
||||
# this is a protection to make sure a backup is not currently created while checking
|
||||
bname=mbackup
|
||||
BAKPATH=""
|
||||
_curr_dir=""
|
||||
BAKEXT=".tar.gz"
|
||||
BAKMD5EXT=".md5"
|
||||
mybasename=""
|
||||
|
||||
readonly LOCKFILE_DIR=/var/lock
|
||||
readonly LOCK_FD=980
|
||||
|
||||
lock() {
|
||||
local prefix=$1
|
||||
local fd=${2:-$LOCK_FD}
|
||||
local lock_file=$LOCKFILE_DIR/$prefix.lock
|
||||
|
||||
# still allow to run unlocked if the lock dir does not exist
|
||||
if [ ! -d "${LOCKFILE_DIR}" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# create lock file
|
||||
eval "exec $fd>$lock_file"
|
||||
# still allow to run unlocked if the lock file cannot be created
|
||||
if [ $? -ne 0 ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# acquier the lock
|
||||
flock -w ${LOCKWAIT} $fd \
|
||||
&& return 0 \
|
||||
|| return 1
|
||||
}
|
||||
|
||||
unlock() {
|
||||
local prefix=$1
|
||||
local fd=${2:-$LOCK_FD}
|
||||
local lock_file=$LOCKFILE_DIR/$prefix.lock
|
||||
|
||||
# release the lock
|
||||
flock -u $fd
|
||||
sync
|
||||
}
|
||||
|
||||
function my_exit()
|
||||
{
|
||||
cd "$_curr_dir"
|
||||
unlock $bname
|
||||
exit $*
|
||||
}
|
||||
|
||||
function __sig_int {
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGINT caught"
|
||||
my_exit 110
|
||||
}
|
||||
|
||||
function __sig_quit {
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGQUIT caught"
|
||||
my_exit 111
|
||||
}
|
||||
|
||||
function __sig_term {
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGTERM caught"
|
||||
my_exit 112
|
||||
}
|
||||
|
||||
function __sig_hup {
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGHUP caught"
|
||||
my_exit 113
|
||||
}
|
||||
|
||||
function log_write()
|
||||
{
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
function log_write_nr()
|
||||
{
|
||||
echo -n "$*"
|
||||
}
|
||||
|
||||
function show_help {
|
||||
log_write "cbackup help information:"
|
||||
log_write "checks integrity of backup created with mbackup, exit with 0 when valid"
|
||||
log_write "Usage: cbackup [ --help ] <bfile>"
|
||||
log_write " where: <bfile> # source backup base file name (without .tar.gz)"
|
||||
log_write " # same base file name as provided with mbackup -f option"
|
||||
log_write " --help # displays this help information"
|
||||
log_write "example: cbackup /mnt/storage/.sysbackup/bk-mnt-rom-user # checks backup"
|
||||
}
|
||||
|
||||
function check_path()
|
||||
{
|
||||
local retval=0
|
||||
local slen=${#1}
|
||||
local mystr
|
||||
if ! [ -d $1 ] ; then
|
||||
log_write "$STAG directory does not exist ($1)!"
|
||||
retval=80
|
||||
else
|
||||
if [ "${1:$slen - 1:1}" == "/" ] ; then
|
||||
mystr=${1:0:$slen - 1}
|
||||
slen=$((slen-1))
|
||||
else
|
||||
mystr=$1
|
||||
fi
|
||||
BAKPATH=$mystr"/"
|
||||
fi
|
||||
return $retval
|
||||
}
|
||||
|
||||
_curr_dir=`pwd`
|
||||
|
||||
# Lock to test a single instance is running, and exit if wait timeout
|
||||
log_write "$STAG Checking if allowed to run..."
|
||||
lock $bname || ( log_write "$STAG Checking if allowed to run... failed"; exit 100 )
|
||||
log_write "$STAG Checking if allowed to run... done"
|
||||
|
||||
# Set TRAPs to release lock if forced to exit
|
||||
trap __sig_int SIGINT
|
||||
trap __sig_quit SIGQUIT
|
||||
trap __sig_term SIGTERM
|
||||
trap __sig_hup SIGHUP
|
||||
|
||||
TOTALARG=$#
|
||||
while getopts :- FLAG; do
|
||||
case $FLAG in
|
||||
'-')
|
||||
show_help
|
||||
my_exit 0;;
|
||||
\?)
|
||||
log_write "Invalid option: -$OPTARG" && my_exit 1;;
|
||||
\:)
|
||||
log_write "Required argument not found for option: -$OPTARG" && my_exit 2;;
|
||||
esac
|
||||
done
|
||||
|
||||
# removes processed option(s) from the cmd line args
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if [ "$#" -ne 1 ]; then
|
||||
show_help
|
||||
my_exit 3
|
||||
fi
|
||||
|
||||
check_path `dirname "$1"`
|
||||
valret=$?
|
||||
if [ $valret -ne 0 ]; then
|
||||
my_exit $valret
|
||||
fi
|
||||
mybasename=`basename "$1"`
|
||||
|
||||
log_write "$STAG Checking backup: "$BAKPATH$mybasename
|
||||
if ! [ -f $BAKPATH$mybasename$BAKEXT ] ; then
|
||||
log_write "$STAG Source backup does not exist ($BAKPATH$mybasename$BAKEXT)!"
|
||||
my_exit 4
|
||||
fi
|
||||
if ! [ -f $BAKPATH$mybasename$BAKMD5EXT ] ; then
|
||||
log_write "$STAG Source backup MD5 does not exist ($BAKPATH$mybasename$BAKMD5EXT)!"
|
||||
my_exit 5
|
||||
fi
|
||||
# verify if backup is valid
|
||||
cd $BAKPATH
|
||||
if [ $? != 0 ]; then
|
||||
log_write "$STAG change dir to ($BAKPATH) failed."
|
||||
my_exit 6
|
||||
fi
|
||||
# verifies if md5 is for the expected backup file
|
||||
md5file=`cat $BAKPATH$mybasename$BAKMD5EXT | awk '{ print $2 }'`
|
||||
if ! [ "./"$mybasename$BAKEXT == "$md5file" ]; then
|
||||
log_write "$STAG MD5 ref file is not backup file ($md5file)!"
|
||||
my_exit 7
|
||||
fi
|
||||
# verifies if md5 is correct
|
||||
myresult=$(md5sum -c $BAKPATH$mybasename$BAKMD5EXT 2>&1)
|
||||
myres=$?
|
||||
if [ $myres != 0 ]; then
|
||||
log_write "$STAG Checksum invalid"
|
||||
my_exit 8
|
||||
fi
|
||||
log_write "$STAG Checksum Ok."
|
||||
my_exit 0
|
@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
# Starts a lower priority version of cbackup
|
||||
nice -n 5 /usr/bin/.cbackup "$@"
|
@ -0,0 +1,193 @@
|
||||
#!/bin/sh
|
||||
# checks all flash partition backup integrity when the expected flash partition is mounted correctly
|
||||
STAG=checkbk:
|
||||
PENDINGCHK=/tmp/.boot_pending
|
||||
# lock wait time max 15mn * 60 = 900 secs (sufficient time to update)
|
||||
LOCKWAIT=900
|
||||
bname=checkbk
|
||||
TMPBK=""
|
||||
DEFBAKPATH=/mnt/storage/.sysbackup
|
||||
_curr_dir=""
|
||||
configflashuser=/mnt/rom/user
|
||||
configflashuserbk=$DEFBAKPATH/bk-mnt-rom-user
|
||||
configflashfactory=/mnt/rom/factory
|
||||
configflashfactorybk=$DEFBAKPATH/bk-mnt-rom-factory
|
||||
__USESYSLOG=1
|
||||
VERBOSE=''
|
||||
__EXITCODE=0
|
||||
|
||||
readonly LOCKFILE_DIR=/var/lock
|
||||
readonly LOCK_FD=978
|
||||
|
||||
lock() {
|
||||
local prefix=$1
|
||||
local fd=${2:-$LOCK_FD}
|
||||
local lock_file=$LOCKFILE_DIR/$prefix.lock
|
||||
|
||||
# still allow to run unlocked if the lock dir does not exist
|
||||
if [ ! -d "${LOCKFILE_DIR}" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# create lock file
|
||||
eval "exec $fd>$lock_file"
|
||||
# still allow to run unlocked if the lock file cannot be created
|
||||
if [ $? -ne 0 ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# acquier the lock
|
||||
flock -w ${LOCKWAIT} $fd \
|
||||
&& return 0 \
|
||||
|| return 1
|
||||
}
|
||||
|
||||
unlock() {
|
||||
local prefix=$1
|
||||
local fd=${2:-$LOCK_FD}
|
||||
local lock_file=$LOCKFILE_DIR/$prefix.lock
|
||||
|
||||
# release the lock
|
||||
flock -u $fd
|
||||
sync
|
||||
}
|
||||
|
||||
function my_exit()
|
||||
{
|
||||
cd "$_curr_dir"
|
||||
unlock $bname
|
||||
exit $*
|
||||
}
|
||||
|
||||
function __sig_int {
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGINT caught"
|
||||
my_exit 110
|
||||
}
|
||||
|
||||
function __sig_quit {
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGQUIT caught"
|
||||
my_exit 111
|
||||
}
|
||||
|
||||
function __sig_term {
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGTERM caught"
|
||||
my_exit 112
|
||||
}
|
||||
|
||||
function __sig_hup {
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGHUP caught"
|
||||
my_exit 113
|
||||
}
|
||||
|
||||
checkflashpartro() {
|
||||
if ! grep "$* jffs2 " /proc/mounts | grep -q " ro[,]"; then
|
||||
return 13
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
function log_write()
|
||||
{
|
||||
if [ ! -z ${VERBOSE} ] || [ ${__USESYSLOG} -eq 0 ]; then
|
||||
echo "$*"
|
||||
fi
|
||||
if [ ${__USESYSLOG} -ne 0 ] ; then
|
||||
logger -p local4.info "$*"
|
||||
fi
|
||||
}
|
||||
|
||||
function show_help {
|
||||
echo "checkbk help information:"
|
||||
echo "Usage: checkbk [ [ [-f file] [-n] ] | [--help] ] <spath>"
|
||||
echo " -d # print debug verbose info"
|
||||
echo " --help # displays this help information"
|
||||
echo "example: checkbk; # checks and backup flash partitions silently"
|
||||
echo "example: checkbk -d; # checks and backup flash partitions with verbose"
|
||||
}
|
||||
|
||||
if [ -e "${PENDINGCHK}" ]; then
|
||||
echo "$STAG Pending reboot, could not run!"
|
||||
exit 97
|
||||
fi
|
||||
|
||||
_curr_dir=`pwd`
|
||||
|
||||
# Lock to test a single instance is running, and exit if wait timeout
|
||||
echo "$STAG Checking if allowed to run..."
|
||||
lock $bname || ( echo "$STAG Checking if allowed to run... failed"; exit 100 )
|
||||
echo "$STAG Checking if allowed to run... done"
|
||||
|
||||
# Set TRAPs to release lock if forced to exit
|
||||
trap __sig_int SIGINT
|
||||
trap __sig_quit SIGQUIT
|
||||
trap __sig_term SIGTERM
|
||||
trap __sig_hup SIGHUP
|
||||
|
||||
if [ -e "${PENDINGCHK}" ]; then
|
||||
echo "$TAG Pending reboot, could not run!"
|
||||
my_exit 97
|
||||
fi
|
||||
|
||||
#keeps log file from getting big if run through a cron job
|
||||
rm /var/log/$LOG_FILE >/dev/null 2>&1
|
||||
|
||||
TOTALARG=$#
|
||||
while getopts :d- FLAG; do
|
||||
case $FLAG in
|
||||
d ) VERBOSE=1;;
|
||||
'-')
|
||||
show_help
|
||||
my_exit 0;;
|
||||
\?)
|
||||
log_write "Invalid option: -$OPTARG" && my_exit 1;;
|
||||
\:)
|
||||
log_write "Required argument not found for option: -$OPTARG" && my_exit 2;;
|
||||
esac
|
||||
done
|
||||
|
||||
# removes processed option(s) from the cmd line args
|
||||
shift $((OPTIND-1))
|
||||
|
||||
log_write "$STAG started"
|
||||
|
||||
# checks if factory partition needs a backup
|
||||
if checkflashpartro $configflashfactory ; then
|
||||
log_write "$STAG checking partition ($configflashfactory)"
|
||||
__CBACKUP_RES=$(cbackup "$configflashfactorybk" 2>&1)
|
||||
__CBACKUP_RET=$?
|
||||
log_write "$__CBACKUP_RES"
|
||||
if test ${__CBACKUP_RET} -ne 0; then
|
||||
__MBACKUP_RES=$(mbackup "$configflashfactory" 2>&1)
|
||||
__MBACKUP_RET=$?
|
||||
log_write "$__MBACKUP_RES"
|
||||
if test ${__MBACKUP_RET} -ne 0; then
|
||||
__EXITCODE=$__MBACKUP_RET
|
||||
fi
|
||||
fi
|
||||
else
|
||||
log_write "$STAG partition ($configflashfactory) is not ready for backup"
|
||||
__EXITCODE=70
|
||||
fi
|
||||
if checkflashpartro $configflashuser ; then
|
||||
log_write "$STAG checking partition ($configflashuser)"
|
||||
__CBACKUP_RES=$(cbackup "$configflashuserbk" 2>&1)
|
||||
__CBACKUP_RET=$?
|
||||
log_write "$__CBACKUP_RES"
|
||||
if test ${__CBACKUP_RET} -ne 0; then
|
||||
__MBACKUP_RES=$(mbackup "$configflashuser" 2>&1)
|
||||
__MBACKUP_RET=$?
|
||||
log_write "$__MBACKUP_RES"
|
||||
if test ${__MBACKUP_RET} -ne 0; then
|
||||
__EXITCODE=$__MBACKUP_RET
|
||||
fi
|
||||
fi
|
||||
else
|
||||
log_write "$STAG partition ($configflashuser) is not ready for backup"
|
||||
__EXITCODE=71
|
||||
fi
|
||||
log_write "$STAG done!"
|
||||
my_exit $__EXITCODE
|
@ -0,0 +1,22 @@
|
||||
[Unit]
|
||||
Description=Check flash backups.
|
||||
DefaultDependencies=no
|
||||
Before=sysinit.target
|
||||
After=mountuser.service checkroot.service checkstoragefs.service checkmonolithicupdate.service
|
||||
Wants=mountuser.service checkroot.service checkstoragefs.service checkmonolithicupdate.service
|
||||
RequiresMountsFor=/mnt/rom/user
|
||||
RequiresMountsFor=/mnt/rom/factory
|
||||
RequiresMountsFor=/tmp
|
||||
RequiresMountsFor=/run
|
||||
RequiresMountsFor=/mnt/storage
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
Restart=no
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/bin/sh -c 'export _NOSPINDLE=1 ; /usr/bin/checkbk -d ; export _NOSPINDLE= ; '
|
||||
StandardOutput=syslog+console
|
||||
StandardError=syslog+console
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -0,0 +1,25 @@
|
||||
[Unit]
|
||||
Description=Check config flash state.
|
||||
Before=multi-user.target
|
||||
Before=shutdown.target
|
||||
Before=watchdog.service
|
||||
After=time-sync.target
|
||||
After=checkbk.service
|
||||
Wants=checkbk.service
|
||||
Conflicts=shutdown.target
|
||||
RequiresMountsFor=/mnt/rom/user
|
||||
RequiresMountsFor=/tmp
|
||||
RequiresMountsFor=/run
|
||||
RequiresMountsFor=/var/volatile
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
Restart=no
|
||||
RemainAfterExit=yes
|
||||
TimeoutStartSec=infinity
|
||||
ExecStart=/usr/bin/checkflashcfg -d
|
||||
StandardOutput=syslog+console
|
||||
StandardError=syslog+console
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -0,0 +1,269 @@
|
||||
#!/bin/sh
|
||||
# checks boot options to see what to do when the system has a flash configuration corruption
|
||||
STAG=checkflashcfg:
|
||||
PENDINGCHK=/tmp/.boot_pending
|
||||
# lock wait time max 15mn * 60 = 900 secs (sufficient time to check it)
|
||||
LOCKWAIT=900
|
||||
bname=checkflashcfg
|
||||
_curr_dir=""
|
||||
__USESYSLOG=1
|
||||
VERBOSE=''
|
||||
__EXITCODE=0
|
||||
CONFIGMOUNT=/mnt/rom/user
|
||||
CONFIGMOUNTTYPE=jffs2
|
||||
DEVCONFIG=/dev/mtdblock9
|
||||
tempdir=""
|
||||
TMPMOUNT=/tmp/.mnt_config
|
||||
__NOHANG=0
|
||||
_RECOVERY=1
|
||||
|
||||
readonly LOCKFILE_DIR=/var/lock
|
||||
readonly LOCK_FD=977
|
||||
|
||||
# Get boot options configuration file
|
||||
if [ -f "/etc/bootoptions.conf" ]; then
|
||||
source "/etc/bootoptions.conf"
|
||||
fi
|
||||
|
||||
lock() {
|
||||
local prefix=$1
|
||||
local fd=${2:-$LOCK_FD}
|
||||
local lock_file=$LOCKFILE_DIR/$prefix.lock
|
||||
|
||||
# still allow to run unlocked if the lock dir does not exist
|
||||
if [ ! -d "${LOCKFILE_DIR}" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# create lock file
|
||||
eval "exec $fd>$lock_file"
|
||||
# still allow to run unlocked if the lock file cannot be created
|
||||
if [ $? -ne 0 ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# acquier the lock
|
||||
flock -w ${LOCKWAIT} $fd \
|
||||
&& return 0 \
|
||||
|| return 1
|
||||
}
|
||||
|
||||
unlock() {
|
||||
local prefix=$1
|
||||
local fd=${2:-$LOCK_FD}
|
||||
local lock_file=$LOCKFILE_DIR/$prefix.lock
|
||||
|
||||
# release the lock
|
||||
flock -u $fd
|
||||
sync
|
||||
}
|
||||
|
||||
function my_exit()
|
||||
{
|
||||
trap - SIGINT
|
||||
trap - SIGQUIT
|
||||
trap - SIGTERM
|
||||
trap - SIGHUP
|
||||
sync
|
||||
if [ -d "${tempdir}" ]; then
|
||||
if mount | grep -q "${tempdir}"; then
|
||||
umount "$tempdir"
|
||||
fi
|
||||
rmdir "$tempdir"
|
||||
fi
|
||||
cd "$_curr_dir"
|
||||
unlock $bname
|
||||
exit $*
|
||||
}
|
||||
|
||||
checkrecovery() {
|
||||
if mount | grep -q "on / type nfs" ; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function __sig_int {
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGINT caught"
|
||||
my_exit 110
|
||||
}
|
||||
|
||||
function __sig_quit {
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGQUIT caught"
|
||||
my_exit 111
|
||||
}
|
||||
|
||||
function __sig_term {
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGTERM caught"
|
||||
my_exit 112
|
||||
}
|
||||
|
||||
function __sig_hup {
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGHUP caught"
|
||||
my_exit 113
|
||||
}
|
||||
|
||||
checkflashconfig() {
|
||||
if ! grep -q "$* " /proc/mounts; then
|
||||
return 14
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
function log_write()
|
||||
{
|
||||
if [ ! -z ${VERBOSE} ] || [ ${__USESYSLOG} -eq 0 ]; then
|
||||
echo "$*"
|
||||
fi
|
||||
if [ ${__USESYSLOG} -ne 0 ] ; then
|
||||
logger -p local4.info "$*"
|
||||
fi
|
||||
}
|
||||
|
||||
function show_help {
|
||||
echo "checkflashcfg help information:"
|
||||
echo "Usage: checkflashcfg [ [ [-d] [-n] ] | [--help] ]"
|
||||
echo "Verify boot options and flash config state to learn what to do when corrupted"
|
||||
echo "WARNING: this script may intentionnaly hang if -n is not provided and flash is corrupted"
|
||||
echo " if not hanging, it may attempt to recreate an unmountable corrupted flash"
|
||||
echo " config partition"
|
||||
echo " -d # print debug verbose info"
|
||||
echo " -n # no hang even if boot option specifies blocking in corruption"
|
||||
echo " --help # displays this help information"
|
||||
echo "example: checkflashcfg; # checks flash corruption and boot options silently"
|
||||
echo "example: checkflashcfg -d -n;# checks flash corruption and boot options verbose, no hang"
|
||||
}
|
||||
|
||||
if [ -e "${PENDINGCHK}" ]; then
|
||||
echo "$STAG Pending reboot, could not run!"
|
||||
exit 97
|
||||
fi
|
||||
|
||||
_curr_dir=`pwd`
|
||||
|
||||
# Lock to test a single instance is running, and exit if wait timeout
|
||||
echo "$STAG Checking if allowed to run..."
|
||||
lock $bname || ( echo "$STAG Checking if allowed to run... failed"; exit 100 )
|
||||
echo "$STAG Checking if allowed to run... done"
|
||||
|
||||
# Set TRAPs to release lock if forced to exit
|
||||
trap __sig_int SIGINT
|
||||
trap __sig_quit SIGQUIT
|
||||
trap __sig_term SIGTERM
|
||||
trap __sig_hup SIGHUP
|
||||
|
||||
if [ -e "${PENDINGCHK}" ]; then
|
||||
echo "$STAG Pending reboot, could not run!"
|
||||
my_exit 97
|
||||
fi
|
||||
|
||||
#keeps log file from getting big
|
||||
rm /var/log/$LOG_FILE >/dev/null 2>&1
|
||||
|
||||
TOTALARG=$#
|
||||
while getopts :dn- FLAG; do
|
||||
case $FLAG in
|
||||
d ) VERBOSE=1;;
|
||||
n ) __NOHANG=1;;
|
||||
'-')
|
||||
show_help
|
||||
my_exit 0;;
|
||||
\?)
|
||||
log_write "Invalid option: -$OPTARG" && my_exit 1;;
|
||||
\:)
|
||||
log_write "Required argument not found for option: -$OPTARG" && my_exit 2;;
|
||||
esac
|
||||
done
|
||||
|
||||
# removes processed option(s) from the cmd line args
|
||||
shift $((OPTIND-1))
|
||||
|
||||
log_write "$STAG checking..."
|
||||
|
||||
# checks if user flash is mounted correctly
|
||||
if ! checkflashconfig "$CONFIGMOUNT" "$CONFIGMOUNTTYPE" ; then
|
||||
# verifies if in recovery mode
|
||||
checkrecovery
|
||||
_RECOVERY=$?
|
||||
# checks if the block boot option is active from bootoptions.conf
|
||||
if [ ${BLOCKOPTION} -eq 1 ]; then
|
||||
if [ ${__NOHANG} -ne 1 ]; then
|
||||
if [ $_RECOVERY -eq 0 ]; then
|
||||
log_write "$STAG script process is blocked as flash config is in recovery mode!"
|
||||
else
|
||||
log_write "$STAG script process is blocked as flash config needs to be repaired!"
|
||||
fi
|
||||
_MYCOUNTER=0
|
||||
# makes sure the watchdog is manually started as systemd booting seq would be stuck to our process
|
||||
/etc/init.d/watchdog.sh start
|
||||
#loops forever to make sure any dependant service won't start when booting
|
||||
while [ $_MYCOUNTER -eq 0 ]; do
|
||||
sleep 1s
|
||||
done
|
||||
else
|
||||
if [ $_RECOVERY -ne 0 ]; then
|
||||
log_write "$STAG flash config needs to be repaired!"
|
||||
__EXITCODE=3
|
||||
fi
|
||||
fi
|
||||
else
|
||||
if [ $_RECOVERY -ne 0 ]; then
|
||||
# checks if flash could be mounted correctly
|
||||
tempdir=`mktemp -d`
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG could not create tmp directory!"
|
||||
my_exit 4
|
||||
fi
|
||||
if ! mount -t ${CONFIGMOUNTTYPE} -o ro,noatime,sync ${DEVCONFIG} ${tempdir}; then
|
||||
# we need to recreate flash content cause the system could not self warns the problem
|
||||
# and the flash is not mountable
|
||||
log_write "$STAG recreating configuration flash partition..."
|
||||
_C_RES=$(flash_erase -j /dev/mtd9 0 0 2>&1)
|
||||
_C_RET=$?
|
||||
if [ $_C_RET -ne 0 ]; then
|
||||
log_write "Warning: cannot recreate flash partition!"
|
||||
__EXITCODE=5
|
||||
else
|
||||
log_write "$STAG recreating configuration flash partition... Done"
|
||||
# attempt to use mountuser tool to get flash access
|
||||
_C_RES=$(/usr/bin/mountuser rw 2>&1)
|
||||
_C_RET=$?
|
||||
if [ $_C_RET -eq 0 ]; then
|
||||
log_write "$STAG recreating config flash partition content..."
|
||||
cp -rf $CONFIGMOUNT/* $TMPMOUNT
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "Warning: cannot copy current config to flash mount!"
|
||||
__EXITCODE=6
|
||||
else
|
||||
echo "---------------------------" >> $TMPMOUNT/config/motd
|
||||
echo "Attempted to recreate Flash" >> $TMPMOUNT/config/motd
|
||||
echo "---------------------------" >> $TMPMOUNT/config/motd
|
||||
_C_RES=$(/usr/bin/mountuser ro 2>&1)
|
||||
_C_RET=$?
|
||||
if [ $_C_RET -ne 0 ]; then
|
||||
log_write "Warning: cannot remount flash mount to read only!"
|
||||
__EXITCODE=7
|
||||
else
|
||||
log_write "$STAG recreating config flash partition content... Done"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
log_write "$STAG cannot access flash for rw access!"
|
||||
__EXITCODE=8
|
||||
fi
|
||||
fi
|
||||
else
|
||||
log_write "$STAG flash is mountable, won't be automatically repaired!"
|
||||
__EXITCODE=9
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
log_write "$STAG checking... Done"
|
||||
my_exit $__EXITCODE
|
@ -0,0 +1,444 @@
|
||||
#!/bin/sh
|
||||
# Define this variable _NOSPINDLE before calling this script if this script run through a systemd service
|
||||
# if this variable _SAFESYNC is also defined, it will do a wd safe sync instead (when watchdog daemon is not used)
|
||||
|
||||
STAG=mbackup:
|
||||
ENDSIG=/tmp/mbackup_sig
|
||||
ERRSIG=/tmp/mbackup_err
|
||||
PENDINGCHK=/tmp/.boot_pending
|
||||
# lock wait time max 15mn * 60 = 900 secs (sufficient time to update)
|
||||
LOCKWAIT=900
|
||||
bname=mbackup
|
||||
TMPBK=""
|
||||
DEFBAKPATH=/mnt/storage/.sysbackup/
|
||||
BAKPATH=$DEFBAKPATH
|
||||
_curr_dir=""
|
||||
BAKEXT=".tar.gz"
|
||||
PREVEXT=".tar.gz.bk1"
|
||||
TMPEXT=".tar.gz.tmp"
|
||||
BAKMD5EXT=".md5"
|
||||
PREVMD5EXT=".md5.bk1"
|
||||
TMPMD5EXT=".md5.tmp"
|
||||
mybasename=""
|
||||
CREATEPBACK=1
|
||||
|
||||
sp="/-\|"
|
||||
sc=0
|
||||
spin() {
|
||||
if [ -z "$_NOSPINDLE" ]; then
|
||||
printf "\r${STAG} ${sp:sc++:1}"
|
||||
((sc==${#sp})) && sc=0
|
||||
else
|
||||
printf "${STAG} ${sp:sc++:1} \n"
|
||||
((sc==${#sp})) && sc=0
|
||||
if [ ! -z "$_SAFESYNC" ]; then
|
||||
dmesg -D
|
||||
echo 1 > /dev/watchdog
|
||||
dmesg -E
|
||||
fi
|
||||
fi
|
||||
}
|
||||
endspin() {
|
||||
if [ -z "$_NOSPINDLE" ]; then
|
||||
printf "\r"
|
||||
else
|
||||
if [ ! -z "$_SAFESYNC" ]; then
|
||||
dmesg -E
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
readonly LOCKFILE_DIR=/var/lock
|
||||
readonly LOCK_FD=980
|
||||
|
||||
lock() {
|
||||
local prefix=$1
|
||||
local fd=${2:-$LOCK_FD}
|
||||
local lock_file=$LOCKFILE_DIR/$prefix.lock
|
||||
|
||||
# still allow to run unlocked if the lock dir does not exist
|
||||
if [ ! -d "${LOCKFILE_DIR}" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# create lock file
|
||||
eval "exec $fd>$lock_file"
|
||||
# still allow to run unlocked if the lock file cannot be created
|
||||
if [ $? -ne 0 ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# acquier the lock
|
||||
flock -w ${LOCKWAIT} $fd \
|
||||
&& return 0 \
|
||||
|| return 1
|
||||
}
|
||||
|
||||
unlock() {
|
||||
local prefix=$1
|
||||
local fd=${2:-$LOCK_FD}
|
||||
local lock_file=$LOCKFILE_DIR/$prefix.lock
|
||||
|
||||
# release the lock
|
||||
flock -u $fd
|
||||
sync
|
||||
}
|
||||
|
||||
function my_exit()
|
||||
{
|
||||
sync
|
||||
if [ -f "$BAKPATH$mybasename$TMPEXT" ]; then
|
||||
rm -f $BAKPATH$mybasename$TMPEXT
|
||||
fi
|
||||
if [ -f "$BAKPATH$mybasename$TMPMD5EXT" ]; then
|
||||
rm -f $BAKPATH$mybasename$TMPMD5EXT
|
||||
fi
|
||||
if [ -d "${TMPBK}" ]; then
|
||||
TMPBKMNT_RES=$(mount | grep "${TMPBK}")
|
||||
TMPBKMNT_RET=$?
|
||||
if [ $TMPBKMNT_RET -eq 0 ]; then
|
||||
umount ${TMPBK}
|
||||
fi
|
||||
rmdir "${TMPBK}"
|
||||
fi
|
||||
sync
|
||||
cd "$_curr_dir"
|
||||
unlock $bname
|
||||
exit $*
|
||||
}
|
||||
|
||||
function __sig_int {
|
||||
endspin
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGINT caught"
|
||||
my_exit 110
|
||||
}
|
||||
|
||||
function __sig_quit {
|
||||
endspin
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGQUIT caught"
|
||||
my_exit 111
|
||||
}
|
||||
|
||||
function __sig_term {
|
||||
endspin
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGTERM caught"
|
||||
my_exit 112
|
||||
}
|
||||
|
||||
function __sig_hup {
|
||||
endspin
|
||||
log_write " "
|
||||
log_write "$STAG WARNING: SIGHUP caught"
|
||||
my_exit 113
|
||||
}
|
||||
|
||||
function log_write()
|
||||
{
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
function log_write_nr()
|
||||
{
|
||||
echo -n "$*"
|
||||
}
|
||||
|
||||
function show_help {
|
||||
log_write "mbackup help information:"
|
||||
log_write "Usage: mbackup [ [ [-f file] [-n] ] | [--help] ] <spath>"
|
||||
log_write " where: <spath> # source directory path to backup recursively"
|
||||
log_write " options: -f file # force output file name (will be appended with .tar.gz/.md5)"
|
||||
log_write " # specified file destination directory must exist!"
|
||||
log_write " # if -f not used, default dest. dir. is created: $BAKPATH"
|
||||
log_write " # with auto generated filename according to <spath>"
|
||||
log_write " -n # do not create a previous backup (*.bk1) if one already exist"
|
||||
log_write " # default is to create one"
|
||||
log_write " --help # displays this help information"
|
||||
log_write "example: mbackup /mnt/rom/user; # backup user flash configuration to default dir"
|
||||
log_write "example: mbackup -f /tmp/qq /mnt/rom/user; # backup user flash configuration to /tmp/qq"
|
||||
}
|
||||
|
||||
function create_basename()
|
||||
{
|
||||
local retval
|
||||
local retval2
|
||||
local repchr=-
|
||||
local srcchr=/
|
||||
local slen=${#1}
|
||||
local mystr
|
||||
local mystr2
|
||||
if [ "${1:$slen - 1:1}" == "/" ] ; then
|
||||
mystr=${1:0:$slen - 1}
|
||||
slen=$((slen-1))
|
||||
else
|
||||
mystr=$1
|
||||
fi
|
||||
if [ ${1:0:1} == "/" ] ; then
|
||||
mystr2=${mystr:1:$slen - 1}
|
||||
slen=$((slen-1))
|
||||
else
|
||||
mystr2=$mystr
|
||||
fi
|
||||
retval="bk-"${mystr2//$srcchr/$repchr}
|
||||
retval2=${retval// /$repchr}
|
||||
echo $retval2
|
||||
}
|
||||
|
||||
# returns the file basename without directory and extension
|
||||
function get_basename()
|
||||
{
|
||||
echo ${1//+(*\/|.*)}
|
||||
return 0
|
||||
}
|
||||
|
||||
function check_destpath()
|
||||
{
|
||||
local retval=0
|
||||
local slen=${#1}
|
||||
local mystr
|
||||
if ! [ -d $1 ] ; then
|
||||
log_write "$STAG Destination directory does not exist ($1)!"
|
||||
retval=80
|
||||
else
|
||||
if [ "${1:$slen - 1:1}" == "/" ] ; then
|
||||
mystr=${1:0:$slen - 1}
|
||||
slen=$((slen-1))
|
||||
else
|
||||
mystr=$1
|
||||
fi
|
||||
BAKPATH=$mystr"/"
|
||||
fi
|
||||
return $retval
|
||||
}
|
||||
|
||||
# corrects md5 associated source file
|
||||
# param1=originalfilename
|
||||
# param2=newfilename
|
||||
# param3=md5 file to correct
|
||||
function correct_md5_file()
|
||||
{
|
||||
local name1
|
||||
local name2
|
||||
name1=`basename $1`
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG Getting basename of ($1) fail!"
|
||||
return 81
|
||||
fi
|
||||
name2=`basename $2`
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG Getting basename of ($2) fail!"
|
||||
return 82
|
||||
fi
|
||||
sed -i "s/$name1/$name2/g" $3
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG Sed md5 file ($3) fail!"
|
||||
return 83
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
if [ -e "${PENDINGCHK}" ]; then
|
||||
log_write "$STAG Pending reboot, could not run!"
|
||||
exit 97
|
||||
fi
|
||||
|
||||
_curr_dir=`pwd`
|
||||
|
||||
# Lock to test a single instance is running, and exit if wait timeout
|
||||
log_write "$STAG Checking if allowed to run..."
|
||||
lock $bname || ( log_write "$STAG Checking if allowed to run... failed"; exit 100 )
|
||||
log_write "$STAG Checking if allowed to run... done"
|
||||
|
||||
# Set TRAPs to release lock if forced to exit
|
||||
trap __sig_int SIGINT
|
||||
trap __sig_quit SIGQUIT
|
||||
trap __sig_term SIGTERM
|
||||
trap __sig_hup SIGHUP
|
||||
|
||||
if [ -e "${PENDINGCHK}" ]; then
|
||||
log_write "$TAG Pending reboot, could not run!"
|
||||
my_exit 97
|
||||
fi
|
||||
|
||||
TOTALARG=$#
|
||||
while getopts :f:n- FLAG; do
|
||||
case $FLAG in
|
||||
f)
|
||||
#log_write "#Filename (-f)"
|
||||
check_destpath `dirname "$OPTARG"`
|
||||
valret=$?
|
||||
if [ $valret -ne 0 ]; then
|
||||
my_exit $valret
|
||||
fi
|
||||
mybasename=`basename "$OPTARG"`;;
|
||||
n)
|
||||
log_write "$STAG No previous backup option specified (-n)"
|
||||
CREATEPBACK=0;;
|
||||
'-')
|
||||
show_help
|
||||
my_exit 0;;
|
||||
\?)
|
||||
log_write "Invalid option: -$OPTARG" && my_exit 1;;
|
||||
\:)
|
||||
log_write "Required argument not found for option: -$OPTARG" && my_exit 2;;
|
||||
esac
|
||||
done
|
||||
|
||||
# removes processed option(s) from the cmd line args
|
||||
shift $((OPTIND-1))
|
||||
|
||||
if [ "$#" -ne 1 ]; then
|
||||
show_help
|
||||
my_exit 3
|
||||
fi
|
||||
|
||||
if ! [ -d $1 ] ; then
|
||||
log_write "$STAG Source directory does not exist ($1)!"
|
||||
my_exit 4
|
||||
fi
|
||||
if [ "x$mybasename" == "x" ] ; then
|
||||
mybasename=$(create_basename $1)
|
||||
if ! [ -d "$BAKPATH" ]; then
|
||||
mkdir -p $BAKPATH
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG create dir ($BAKPATH) fail!"
|
||||
my_exit 5
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
log_write "$STAG Creating backup to: "$BAKPATH$mybasename
|
||||
TMPBK=$(mktemp -d)
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG mktemp fail!"
|
||||
my_exit 6
|
||||
fi
|
||||
|
||||
# temporarily bind mount dir to backup to TMPBK
|
||||
mount --bind -o ro $1 ${TMPBK}
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG mount $1 to temp folder fail!"
|
||||
my_exit 7
|
||||
fi
|
||||
|
||||
rm -f $BAKPATH$mybasename$TMPEXT
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG cannot remove ($BAKPATH$mybasename$TMPEXT)!"
|
||||
my_exit 8
|
||||
fi
|
||||
rm -f $BAKPATH$mybasename$TMPMD5EXT
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG cannot remove ($BAKPATH$mybasename$TMPMD5EXT)!"
|
||||
my_exit 9
|
||||
fi
|
||||
rm -f ${ENDSIG}
|
||||
rm -f ${ERRSIG}
|
||||
log_write "$STAG Creating files backup..."
|
||||
(
|
||||
tar -zcf $BAKPATH$mybasename$TMPEXT -C ${TMPBK} .
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write " $STAG tar ($BAKPATH$mybasename$TMPEXT) fail!"
|
||||
touch ${ERRSIG}
|
||||
exit 10
|
||||
fi
|
||||
touch ${ENDSIG}
|
||||
) &
|
||||
until [ -f ${ENDSIG} ]; do
|
||||
spin
|
||||
if [ -f ${ERRSIG} ]; then
|
||||
my_exit 11
|
||||
fi
|
||||
if [ ! -f ${ENDSIG} ]; then
|
||||
sleep 1s
|
||||
fi
|
||||
done
|
||||
endspin
|
||||
log_write "$STAG Creating files backup... done"
|
||||
|
||||
# create md5
|
||||
cd $BAKPATH
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG cannot change dir to ($BAKPATH)!"
|
||||
my_exit 12
|
||||
fi
|
||||
md5sum ./$mybasename$TMPEXT > ./$mybasename$TMPMD5EXT
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG cannot create md5 for ($BAKPATH$mybasename$TMPEXT)!"
|
||||
my_exit 13
|
||||
fi
|
||||
|
||||
# create a previous backup if one already exit
|
||||
if [ $CREATEPBACK -eq 1 ]; then
|
||||
if [ -f "$BAKPATH$mybasename$BAKEXT" ] && [ -f "$BAKPATH$mybasename$BAKMD5EXT" ]; then
|
||||
log_write "$STAG Copy prev. backup to: "$BAKPATH$mybasename$PREVEXT
|
||||
cp -f $BAKPATH$mybasename$BAKEXT $BAKPATH$mybasename$PREVEXT
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG Creating previous backup ($BAKPATH$mybasename$PREVEXT) fail!"
|
||||
my_exit 14
|
||||
fi
|
||||
log_write "$STAG Copy prev. MD5 to: "$BAKPATH$mybasename$PREVMD5EXT
|
||||
cp -f $BAKPATH$mybasename$BAKMD5EXT $BAKPATH$mybasename$PREVMD5EXT
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "$STAG Creating previous backup ($BAKPATH$mybasename$PREVMD5EXT) fail!"
|
||||
my_exit 15
|
||||
fi
|
||||
correct_md5_file $BAKPATH$mybasename$BAKEXT $BAKPATH$mybasename$PREVEXT $BAKPATH$mybasename$PREVMD5EXT
|
||||
if [ $? -ne 0 ]; then
|
||||
my_exit $?
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# create current backup from temporary files
|
||||
rm -f $BAKPATH$mybasename$BAKEXT
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write " $STAG cannot remove ($BAKPATH$mybasename$BAKEXT) fail!"
|
||||
my_exit 16
|
||||
fi
|
||||
rm -f $BAKPATH$mybasename$BAKMD5EXT
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write " $STAG cannot remove ($BAKPATH$mybasename$BAKMD5EXT) fail!"
|
||||
my_exit 17
|
||||
fi
|
||||
log_write "$STAG Move backup to: "$BAKPATH$mybasename$BAKEXT
|
||||
mv $BAKPATH$mybasename$TMPEXT $BAKPATH$mybasename$BAKEXT
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write " $STAG cannot move to ($BAKPATH$mybasename$BAKEXT) fail!"
|
||||
my_exit 18
|
||||
fi
|
||||
log_write "$STAG Move MD5 to: "$BAKPATH$mybasename$BAKMD5EXT
|
||||
mv $BAKPATH$mybasename$TMPMD5EXT $BAKPATH$mybasename$BAKMD5EXT
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write " $STAG cannot move to ($BAKPATH$mybasename$BAKMD5EXT) fail!"
|
||||
my_exit 19
|
||||
fi
|
||||
correct_md5_file $BAKPATH$mybasename$TMPEXT $BAKPATH$mybasename$BAKEXT $BAKPATH$mybasename$BAKMD5EXT
|
||||
if [ $? -ne 0 ]; then
|
||||
my_exit $?
|
||||
fi
|
||||
rm -f ${ENDSIG}
|
||||
rm -f ${ERRSIG}
|
||||
log_write "$STAG System sync..."
|
||||
(
|
||||
sync
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write " $STAG sync fail!"
|
||||
touch ${ERRSIG}
|
||||
exit 20
|
||||
fi
|
||||
touch ${ENDSIG}
|
||||
) &
|
||||
until [ -f ${ENDSIG} ]; do
|
||||
spin
|
||||
if [ -f ${ERRSIG} ]; then
|
||||
my_exit 21
|
||||
fi
|
||||
if [ ! -f ${ENDSIG} ]; then
|
||||
sleep 1s
|
||||
fi
|
||||
done
|
||||
endspin
|
||||
log_write "$STAG System sync... done"
|
||||
my_exit 0
|
@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
# Starts a lower priority version of mbackup
|
||||
nice -n 5 /usr/bin/.mbackup "$@"
|
Loading…
Reference in new issue