Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
iml-backup
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
IML Open Source
iml-backup
Commits
ee7359e7
Commit
ee7359e7
authored
3 years ago
by
Hahn Axel (hahn)
Browse files
Options
Downloads
Patches
Plain Diff
keep old transfer.sh for a moment
parent
bc89e137
Branches
Branches containing commit
No related tags found
1 merge request
!1
Version 2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
transfer_legacy.sh
+366
-0
366 additions, 0 deletions
transfer_legacy.sh
with
366 additions
and
0 deletions
transfer_legacy.sh
0 → 100755
+
366
−
0
View file @
ee7359e7
#!/bin/bash
# ================================================================================
#
# TRANSFER LOCAL DATA TO BACKUP STORAGE
#
# SYNTAX:
# transfer.sh - incremental backup
# transfer.sh full - full backup
# transfer.sh dumps - transfer local dumps only
#
# duplicity see
# - man pages http://duplicity.nongnu.org/duplicity.1.html
# - example http://duplicity.nongnu.org/contrib/jwfull
# - example http://duplicity.nongnu.org/contrib/jwincr
#
# this script was build to support ssh backend only
#
# --------------------------------------------------------------------------------
# ah - Axel Hahn <axel.hahn@iml.unibe.ch>
# ds - Daniel Schueler <daniel.schueler@iml.unibe.ch>
#
# 2016-11-10 ah,ds v1.0
# 2016-12-19 ah,ds v1.1 added parameter "dumps"
# 2017-02-16 ah,ds v1.2 added support for storage slots
# 2017-10-11 ah,ds v1.3 added support for duplicity param --ssh-backend
# 2017-10-17 ah,ds v1.4 remove PIPESTATUS for Debian8 compatibility
# 2017-11-17 ah,ds v1.5 check pid of lockfile in process list if process still runs
# 2018-06-19 ah,ds v1.6 replace --exclude with --exclude regexp in custom dirs
# 2019-06-05 ah,ds v1.7 add custom cache dir
# 2019-09-09 ah,ds v1.8 add testfile on target
# 2019-10-30 ah,ds v1.9 for rsync targets: create remote target dir with ssh command
# 2020-01-21 ah,ds v1.10 show colored OK or FAILED at the end of output
# 2020-02-25 ah,ds, v1.11 fix test -z with non existing vars; show final backup status
# 2021-01-29 ah,ds, v1.12 abort on empty passphrase
# ================================================================================
# --------------------------------------------------------------------------------
# CONFIG
# --------------------------------------------------------------------------------
# . `dirname $0`/inc_config.sh
.
`
dirname
$0
`
/jobhelper.sh
.
`
dirname
$0
`
/inc_bash.sh
typeset
-i
rc
=
0
STORAGE_BASEDIR
=
`
_j_getvar
${
STORAGEFILE
}
"storage"
`
STORAGE_TESTFILE
=
`
_j_getvar
${
STORAGEFILE
}
"storage-file"
`
STORAGE_KEEP
=
`
_j_getvar
${
STORAGEFILE
}
"keep"
`
STORAGE_VOLSIZE
=
`
_j_getvar
${
STORAGEFILE
}
"volsize"
`
# check
if
[
-z
"
$STORAGE_BASEDIR
"
]
;
then
color error
echo
ERROR: missing config
for
backup target.
echo
There must be an entry storage
in
${
STORAGEFILE
}
color reset
exit
1
fi
if
[
!
-z
"
$STORAGE_TESTFILE
"
-a
!
-f
"
$STORAGE_TESTFILE
"
]
;
then
color error
echo
ERROR: missing testfile
$STORAGE_TESTFILE
on backup target.
echo
The Backup target disk / NAS is not mounted.
color reset
exit
1
fi
if
[
-z
"
$STORAGE_KEEP
"
]
;
then
color error
echo
ERROR: missing config
for
backup target.
echo
There must be an entry keep
in
${
STORAGEFILE
}
color reset
exit
1
fi
# METHOD incremental is default; full backup will be triggered with
# first param "full"
METHOD
=
transferlog
=
"
${
DIR_LOGS
}
/transfer-
`
date
+%Y%m%d
`
.log"
lockfile
=
"
${
DIR_LOGS
}
/transfer.running"
rcfile
=
/tmp/transfer-rc.
$$
.tmp
# --------------------------------------------------------------------------------
# FUNCTIONS
# --------------------------------------------------------------------------------
# --------------------------------------------------------------------------------
# MAIN
# --------------------------------------------------------------------------------
h1
`
date
`
TRANSFER LOCAL DATA TO STORAGE |
tee
-a
$transferlog
echo
METHOD:
$METHOD
|
tee
-a
$transferlog
echo
TARGET:
${
STORAGE_BASEDIR
}
|
tee
-a
$transferlog
echo
|
tee
-a
$transferlog
# ----- Check requirements
j_requireUser
"root"
j_requireBinary
"duplicity"
echo
Check locking of a running transfer
if
[
-f
"
${
lockfile
}
"
]
;
then
color error
echo
A lock file
for
a running transfer was found
cat
"
${
lockfile
}
"
color reset
echo
# 1659 - check process id inside the lock file
# detect pid from lockfile and search for this process
lockpid
=
`
cat
"
${
lockfile
}
"
|
cut
-f
2
-d
"-"
|
cut
-f
4
-d
" "
|
grep
"[0-9]"
`
if
[
-z
$lockpid
]
;
then
color error
echo
ERROR: pid was not fetched from lock file. Check the transfer processes manually, please.
color reset
exit
1
fi
echo
transfer processes with pid or ppid
${
lockpid
}
:
color cmd
ps
-ef
|
grep
$lockpid
|
grep
"transfer"
rccheck
=
$?
color reset
if
[
$rccheck
-eq
0
]
;
then
color error
echo
ERROR: The transfer with pid
$lockpid
seems to be still active. Aborting.
color reset
exit
1
fi
color ok
echo
OK, the transfer seems not to be active anymore. I IGNORE the lock and
continue
...
color reset
fi
echo
Creating a lock file ...
echo
"transfer started
`
date
`
- process id
$$
"
>
"
${
lockfile
}
"
if
[
$?
-ne
0
]
;
then
color error
echo
ABORT - unable to create transfer lock
color reset
exit
2
fi
# ----- BACKUP VARS
# parameters for all
sParams
=
if
[
"
$1
"
=
"dumps"
]
;
then
sDirs2Backup
=
"
`
_j_getvar
${
DIRFILE
}
dir-localdumps
`
"
else
sDirs2Backup
=
"
`
j_getDirs2Backup
`
"
fi
if
[
"
$1
"
=
"full"
]
;
then
METHOD
=
"full"
fi
if
[
"
$1
"
=
"auto"
]
;
then
METHOD
=
"--full-if-older-than
$2
"
fi
PASSPHRASE
=
`
_j_getvar
${
STORAGEFILE
}
"gnupg-passphrase"
`
if
[
-z
"
${
PASSPHRASE
}
"
]
;
then
echo
"ERROR: no value gnupg-passphrase was set in
${
STORAGEFILE
}
to encrypt backup data."
echo
"Aborting."
exit
1
fi
sParamExclude
=
# build exclude param list for duplicity
#
# REMARK: the excludes must fit the include definition
# On non matching excludes duplicity stops
#
for
sItem
in
`
_j_getvar
${
DIRFILE
}
exclude
`
do
sParamExclude
=
"
$sParamExclude
--exclude-regexp """
$sItem
""" "
done
#
# sExcludefile="${DIR_JOBS}/transfer-exclude.txt"
#
# if [ -f ${sExcludefile} ]; then
# sParamExclude="$sParamExclude --exclude-filelist """${sExcludefile}""" "
# fi
export
PASSPHRASE
# task#1623 - fallback ssh backend for Debian 8
sSshBackend
=
`
_j_getvar
${
STORAGEFILE
}
"ssh-backend"
`
if
[
!
-z
$sSshBackend
]
;
then
sParams
=
"
${
sParams
}
--ssh-backend
$sSshBackend
"
fi
sFileSshPrivkey
=
`
_j_getvar
${
STORAGEFILE
}
"ssh-privatekey"
`
if
[
!
-z
$sFileSshPrivkey
]
;
then
sParams
=
"
${
sParams
}
--ssh-options="""
-oIdentityFile
=
${
sFileSshPrivkey
}
""" "
fi
# task#3046 - add custom cache dir
sCacheDir
=
`
_j_getvar
${
STORAGEFILE
}
"cachedir"
`
if
[
!
-z
$sCacheDir
]
;
then
sParams
=
"
${
sParams
}
--archive-dir=
$sCacheDir
"
if
[
!
-d
$sCacheDir
]
;
then
mkdir
-p
$sCacheDir
chmod
750
$sCacheDir
fi
fi
# ----- Wait for a free slot
j_transferStart |
tee
-a
$transferlog
# ----- START BACKUPS
(
for
mydir
in
$sDirs2Backup
do
# remove ending slash ... otherwise duplicity will fail
mydir
=
`
echo
$mydir
|
sed
's#\/$##g'
`
if
[
-d
"
$mydir
"
]
;
then
h2
"
`
date
`
STORE
$mydir
"
# --- build parameters for duplicity
sSafeName
=
`
j_getSafename
"
$mydir
"
`
sTarget
=
`
j_getFullTarget
"
$mydir
"
`
sBackupParams
=
sBackupParams
=
"
${
sBackupParams
}
${
sParams
}
"
sBackupParams
=
"
${
sBackupParams
}
${
sParamExclude
}
"
if
[
!
-z
$STORAGE_VOLSIZE
]
;
then
sBackupParams
=
"
${
sBackupParams
}
--volsize
${
STORAGE_VOLSIZE
}
"
fi
# verbosity level to fetch changed files from log
sBackupParams
=
"
${
sBackupParams
}
-v8"
# add asynchronous upload
sBackupParams
=
"
${
sBackupParams
}
--asynchronous-upload"
# ---------- START --------------------
# detect custom backup sets and add its includes and excludes
backupid
=
`
j_getSetnameOfPath
"
$mydir
"
`
sSpaceReplace
=
"___SPACE___"
if
[
!
-z
$backupid
]
;
then
for
param
in
include exclude
do
for
sItem
in
`
_j_getvar
${
DIRFILE
}
"
${
backupid
}
\-\-
${
param
}
"
|
sed
"s#
\
#
${
sSpaceReplace
}
#g"
`
do
sBackupParams
=
"
${
sBackupParams
}
--
${
param
}
-regexp """
$sItem
""" "
done
done
sBackupParams
=
`
echo
${
sBackupParams
}
|
sed
"s#
${
sSpaceReplace
}
# #g"
`
fi
# ---------- ENDE --------------------
# --- for rsync only: create remote directory
echo
${
sTarget
}
| fgrep
"rsync://"
>
/dev/null
if
[
$?
-eq
0
]
;
then
# sshTarget=`echo ${sTarget} | sed "s#rsync://#scp://#"`
# echo Creating remote directory with fetching collection-status on $sshTarget
# color cmd
# duplicity collection-status ${sParams} ${sshTarget}
# color reset
sshTarget
=
`
echo
${
sTarget
}
|
cut
-f
3
-d
'/'
`
RemoteDir
=
`
echo
${
sTarget
}
|
cut
-f
4-
-d
'/'
`
cmd
=
"ssh"
if
[
!
-z
${
sFileSshPrivkey
}
]
;
then
cmd
=
"
${
cmd
}
-i
${
sFileSshPrivkey
}
"
fi
cmd
=
"
${
cmd
}
${
sshTarget
}
mkdir -p
${
RemoteDir
}
2>/dev/null ; ls -ld
${
RemoteDir
}
"
echo
Creating remote directory first ...
color cmd
$cmd
color reset
fi
# --- backup
echo
backup to target:
${
sTarget
}
echo
duplicity
${
METHOD
}
${
sBackupParams
}
${
mydir
}
${
sTarget
}
color cmd
duplicity
${
METHOD
}
${
sBackupParams
}
${
mydir
}
${
sTarget
}
fetchrc
color reset
echo
if
[
$myrc
-ne
0
]
;
then
color error
echo
DIR ERROR
${
mydir
}
rc
=
$myrc
during file transfer
case
$myrc
in
23
)
echo
A lock file was found. Maybe this server was rebooted
while
performing a backup.
echo
If so delete the file lockfile.lock named
in
the output and start
$0
again.
;;
31
)
echo
Maybe you it is a problem with the gpg-agent.conf
ls
-l
~/.gnupg/gpg-agent.conf
&&
cat
~/.gnupg/gpg-agent.conf
;;
esac
else
color ok
echo
DIR OK
${
mydir
}
was successful.
fi
color reset
echo
# --- cleanup on remote target
h2
"
`
date
`
Cleanup old backup data"
echo
duplicity remove-older-than
$STORAGE_KEEP
--force
${
sParams
}
${
sTarget
}
color cmd
duplicity remove-older-than
$STORAGE_KEEP
--force
${
sParams
}
${
sTarget
}
fetchrc
color reset
echo
echo
else
color error
echo
"DIR SKIP
$mydir
... does not exist (no error)"
color reset
fi
echo
done
echo
$rc
>
${
rcfile
}
exit
$rc
)
|
tee
-a
$transferlog
# rc=${PIPESTATUS[0]}
rc
=
`
cat
${
rcfile
}
`
rm
-f
"
${
lockfile
}
"
"
${
rcfile
}
"
j_transferEnd
echo
STATUS
$0
exit
with final returncode
rc
=
$rc
|
tee
-a
$transferlog
echo
|
tee
-a
$transferlog
if
[
$rc
-eq
0
]
;
then
color ok
echo
Backup OK |
tee
-a
$transferlog
else
color error
echo
Backup FAILED :-/ |
tee
-a
$transferlog
fi
color reset
echo
|
tee
-a
$transferlog
echo
`
date
`
TRANSFER DONE |
tee
-a
$transferlog
ls
-l
$transferlog
exit
$rc
# --------------------------------------------------------------------------------
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment