Compare commits

..

14 Commits

7 changed files with 115 additions and 62 deletions

9
.gitignore vendored
View File

@ -1,9 +1,10 @@
*.swp
/conf/logrotate.conf
/conf/rcopy.conf
/conf/manual_hosts.conf
/conf/restore-website-from-backup.conf
/conf/exclude_from.list
/conf/*.conf
/conf/*.key
/hosts/*.sh
/hosts/BAK/*
/hosts/deleted/*
/hosts/OLD-Backup-Host/*
/hosts/Not_Yet-Moved/*
/hosts/Moved-o-borg2/*

View File

@ -24,6 +24,8 @@ BACKUP_HOST=`hostname -f`
HOME_DIR=$HOME
AGENT=/tmp/.agent-$USER.sh
SSH_KEY=/root/.ssh/id_ed25519-backup
admin_email="<ADMIN_EMAIL>"
from_address="backup@`hostname -f`"
company="<COMPANY>"
@ -84,12 +86,7 @@ backup_partition=
disk_identifier=
_found=false
if $crypto_backup_device ; then
backup_raw_partition=$_backup_partition
backup_partition="/dev/mapper/${backup_partition_name}"
elif $extern_usb_disk || $extern_sata_disk || $intern_disk ; then
if $extern_usb_disk || $extern_sata_disk || $intern_disk ; then
## - In case of unencrypted (and labeled) extern backup disc
## -
@ -113,10 +110,20 @@ elif $extern_usb_disk || $extern_sata_disk || $intern_disk ; then
## - Backup device could not be detected, so we will try the (above) given one..
## -
backup_partition=$_backup_partition
backup_raw_partition=$_backup_partition
#backup_partition=$_backup_partition
else
backup_partition=/dev/$disk_identifier
backup_raw_partition=/dev/$disk_identifier
#backup_partition=/dev/$disk_identifier
fi
if $(cryptsetup isLuks $backup_raw_partition) ; then
crypto_backup_device=true
backup_partition="/dev/mapper/${backup_partition_name}"
else
crypto_backup_device=false
backup_partition=$backup_raw_partition
fi
fi

View File

@ -127,7 +127,7 @@ fi
## -
[[ -z "$nextcloud_backup" ]] && nextcloud_backup=false
if [ "$found" = "true" -o "$pgsql_backup" = "true" -o "$mysql_backup" = "true" -o "$disksetting_backup" = "true" -o "$nextcloud_backup" = "true" ] ; then
if [ "$found" = "true" -o "$pgsql_backup" = "true" -o "$mysql_backup" = "true" -o "$disksetting_backup" = "true" -o "$nextcloud_backup" = "true" -o "$mount_netdir" = "true" ] ; then
begin_h=`date +%H`
begin_m=`date +%M`
@ -348,7 +348,7 @@ if [ "$found" = "true" -o "$pgsql_backup" = "true" -o "$mysql_backup" = "true"
if $mount_netdir; then
echolog "\nGoing to backup network directories.. ( `$date +%H`:`$date +%M` h )"
for dir in $net_mounted_dir_backup ; do
echolog "\n\tBackup network directory $dir"
#echolog "\n\tBackup network directory $dir"
export mount_netdir
backup_dir=$dir $script_dir/net_mounted_dir_backup.sh
done

View File

@ -103,11 +103,13 @@
## -
## - MariaDB > 10.3 or installed from debian package system:
## -
## - mysql -u root -S /var/run/mysqld/mysqld.sock -N -s -e "CREATE USER 'backup'@'localhost' IDENTIFIED BY 'backup'"
## - mysql -u root -S /run/mysqld/mysqld.sock -N -s -e "CREATE USER 'backup'@'localhost' IDENTIFIED BY 'backup'"
## -
## - mysql -u root -S /var/run/mysqld/mysqld.sock -N -s -e "GRANT USAGE ON *.* TO 'backup'@'localhost'"
## - mysql -u root -S /run/mysqld/mysqld.sock -N -s -e "GRANT USAGE ON *.* TO 'backup'@'localhost'"
## -
## - mysql -u root -S /var/run/mysqld/mysqld.sock -N -s -e "GRANT SELECT, SHOW VIEW, EVENT, LOCK TABLES, RELOAD, REPLICATION CLIENT ON *.* TO 'backup'@'localhost'"
## - mysql -u root -S /run/mysqld/mysqld.sock -N -s -e "GRANT SELECT, SHOW VIEW, EVENT, LOCK TABLES, EXECUTE, RELOAD, BINLOG MONITOR, REPLICATION CLIENT ON *.* TO 'backup'@'localhost'"
## -
## - mysql -u root -S /run/mysqld/mysqld.sock -N -s -e "FLUSH PRIVILEGES"
## -
## - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@ -269,14 +271,14 @@ if $ARCHIVE ;then
else
if [ -n "$mysql_credential_args" ] ; then
$(
$mysql $mysql_credential_args -N -s -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>'' AND user <> 'root' AND user <> 'sys-maint' AND user <> 'debian-sys-maint' AND user <> 'backup' AND user <> 'mysql.sys' AND user <> 'mysql.session' AND user <> 'mysql' AND user <> 'mariadb.sys'" | $mysql $mysql_credential_args -N -s -A | sed 's/\$/;/g' \
$mysql $mysql_credential_args -N -s -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>'' AND user <> 'root' AND user <> 'sys-maint' AND user <> 'debian-sys-maint' AND user <> 'backup' AND user <> 'mysql.sys' AND user <> 'mysql.session' AND user <> 'mysql' AND user <> 'mariadb.sys'" | $mysql $mysql_credential_args -N -s -A | sed "s/\$/;/g" \
> ${_backupDestArchiveDir}/MySQLGrants-${filedate}.sql 2> $err_Log
exit $?
)
retval=$?
else
$(
$mysql -u$mysql_user -p$mysql_password -N -s -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>'' AND user <> 'root' AND user <> 'sys-maint' AND user <> 'debian-sys-maint' AND user <> 'backup' AND user <> 'mysql.sys' AND user <> 'mysql.session' AND user <> 'mysql' AND user <> 'mariadb.sys'" | $mysql -u$mysql_user -p$mysql_password -N -s -A | sed 's/\$/;/g' \
$mysql -u$mysql_user -p$mysql_password -N -s -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>'' AND user <> 'root' AND user <> 'sys-maint' AND user <> 'debian-sys-maint' AND user <> 'backup' AND user <> 'mysql.sys' AND user <> 'mysql.session' AND user <> 'mysql' AND user <> 'mariadb.sys'" | $mysql -u$mysql_user -p$mysql_password -N -s -A | sed "s/\$/;/g" \
> ${_backupDestArchiveDir}/MySQLGrants-${filedate}.sql 2> $err_Log
exit $?
)
@ -388,14 +390,14 @@ if $ARCHIVE ;then
else
if [ -n "$mysql_credential_args" ] ; then
$(
$mysql $mysql_credential_args -N -s -A -e"SELECT CONCAT('SHOW CREATE USER ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>'' AND user <> 'root' AND user <> 'sys-maint' AND user <> 'debian-sys-maint' AND user <> 'backup' AND user <> 'mysql.sys' AND user <> 'mysql.session' AND user <> 'mysql' AND user <> 'mariadb.sys'" | $mysql $mysql_credential_args -N -s -A | sed 's/\$/;/g' \
$mysql $mysql_credential_args -N -s -A -e"SELECT CONCAT('SHOW CREATE USER ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>'' AND user <> 'root' AND user <> 'sys-maint' AND user <> 'debian-sys-maint' AND user <> 'backup' AND user <> 'mysql.sys' AND user <> 'mysql.session' AND user <> 'mysql' AND user <> 'mariadb.sys'" | $mysql $mysql_credential_args -N -s -A | sed "s/\$/;/g" \
> ${_backupDestArchiveDir}/MySQLCreateUser-00-${filedate}.sql 2> $err_Log
exit $?
)
retval=$?
else
$(
$mysql -u$mysql_user -p$mysql_password -N -s -A -e"SELECT CONCAT('SHOW CREATE USER ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>'' AND user <> 'root' AND user <> 'sys-maint' AND user <> 'debian-sys-maint' AND user <> 'backup' AND user <> 'mysql.sys' AND user <> 'mysql.session' AND user <> 'mysql' AND user <> 'mariadb.sys'" | $mysql $mysql_credential_args -N -s -A | sed 's/\$/;/g' \
$mysql -u$mysql_user -p$mysql_password -N -s -A -e"SELECT CONCAT('SHOW CREATE USER ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>'' AND user <> 'root' AND user <> 'sys-maint' AND user <> 'debian-sys-maint' AND user <> 'backup' AND user <> 'mysql.sys' AND user <> 'mysql.session' AND user <> 'mysql' AND user <> 'mariadb.sys'" | $mysql $mysql_credential_args -N -s -A | sed "s/\$/;/g" \
> ${_backupDestArchiveDir}/MySQLCreateUser-00-${filedate}.sql 2> $err_Log
exit $?
)
@ -835,14 +837,14 @@ if $ARCHIVE ;then
else
if [ -n "$mysql_credential_args" ] ; then
$(
$mysql $mysql_credential_args -N -s -A -e"SELECT CONCAT('SHOW CREATE USER ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>'' AND user <> 'root' AND user <> 'sys-maint' AND user <> 'debian-sys-maint' AND user <> 'backup' AND user <> 'mysql.sys' AND user <> 'mysql.session' AND user <> 'mysql' AND user <> 'mariadb.sys'" | $mysql $mysql_credential_args -N -s -A | sed 's/\$/;/g' \
$mysql $mysql_credential_args -N -s -A -e"SELECT CONCAT('SHOW CREATE USER ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>'' AND user <> 'root' AND user <> 'sys-maint' AND user <> 'debian-sys-maint' AND user <> 'backup' AND user <> 'mysql.sys' AND user <> 'mysql.session' AND user <> 'mysql' AND user <> 'mariadb.sys'" | $mysql $mysql_credential_args -N -s -A | sed "s/\$/;/g" \
> ${_backupDestArchiveDir}/MySQLCreateUser-00-${filedate}.sql 2> $err_Log
exit $?
)
retval=$?
else
$(
$mysql -u$mysql_user -p$mysql_password -N -s -A -e"SELECT CONCAT('SHOW CREATE USER ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>'' AND user <> 'root' AND user <> 'sys-maint' AND user <> 'debian-sys-maint' AND user <> 'backup' AND user <> 'mysql.sys' AND user <> 'mysql.session' AND user <> 'mysql' AND user <> 'mariadb.sys'" | $mysql $mysql_credential_args -N -s -A | sed 's/\$/;/g' \
$mysql -u$mysql_user -p$mysql_password -N -s -A -e"SELECT CONCAT('SHOW CREATE USER ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>'' AND user <> 'root' AND user <> 'sys-maint' AND user <> 'debian-sys-maint' AND user <> 'backup' AND user <> 'mysql.sys' AND user <> 'mysql.session' AND user <> 'mysql' AND user <> 'mariadb.sys'" | $mysql $mysql_credential_args -N -s -A | sed "s/\$/;/g" \
> ${_backupDestArchiveDir}/MySQLCreateUser-00-${filedate}.sql 2> $err_Log
exit $?
)
@ -1159,6 +1161,10 @@ if $ARCHIVE ;then
continue
fi
if [ "$i" = "mysql" -o "$i" = "sys" ];then
continue
fi
echo "CREATE DATABASE IF NOT EXISTS $i CHARACTER SET utf8 COLLATE utf8_general_ci;" \
>> ${_backupDestArchiveDir}/MySQL_Create_Databases-${filedate}.sql

View File

@ -12,6 +12,8 @@
## -
## - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
err_Log=${LOCK_DIR}/dir.err.log
> $err_Log
## - load functions
## -
@ -19,10 +21,29 @@
if $mount_netdir ; then
if [ $srcHost != "localhost" ] || $_via_ssh_tunnel ;then
print_error_stdout "Mounting network directories is only possible for localhost - yet:\n $(cat $err_Log)"
## - Network directory mounted ?
## -
if ! $($ssh ${ssh_user}@${srcHost} df -h 2> /dev/null | grep -q ${backup_dir} 2>/dev/null) ; then
$ssh ${ssh_user}@${srcHost} "$sudo mount ${backup_dir}" > /dev/null 2> $err_Log
if [[ "$?" -ne 0 ]]; then
echolog ""
echolog "\t[ERROR] Mounting network directories is only possible for localhost - yet"
echolog "\t[ERROR] Mounting '${backup_dir}' on '${srcHost}' failed!\n $(cat "$err_Log")"
exit 1
else
sleep 5
if ! $($ssh ${ssh_user}@${srcHost} df -h 2> /dev/null | grep -q ${backup_dir} 2>/dev/null) ; then
echolog ""
echolog "\t[ERROR] Something went wrong with mounting '${backup_dir}' on '${srcHost}'!"
exit 1
fi
fi
fi
else
## - Network directory mounted ?
## -
@ -43,20 +64,39 @@ fi
## - Check if directory is empty
## -
if [ $srcHost != "localhost" ] || $_via_ssh_tunnel ;then
if [ ! "$( $ssh ${ssh_user}@${srcHost} ls -A ${backup_dir})" ] ; then
echolog ""
echolog "\t[ NOTICE ]: Directory \"${backup_dir}\" on \"${srcHost}\" is empty. So nothing to do..\n"
exit 0
fi
else
if [ ! "$(ls -A $backup_dir)" ]; then
echolog ""
echolog "\t[ NOTICE ]: Directory \"$backup_dir\" is empty. So nothing to do..\n"
exit 0
fi
fi
echolog "\n\tBackup network directory \"$backup_dir\" ( `$date +%H`:`$date +%M` h )"
backup_dir=$backup_dir $script_dir/dir_backup.sh
if $mount_netdir ; then
if [ $srcHost != "localhost" ];then
print_error_stdout "Mounting network directories is only possible for localhost - yet:\n $(cat $err_Log)"
$ssh ${ssh_user}@${srcHost} "$sudo umount ${backup_dir}" > /dev/null 2> $err_Log
if [[ "$?" -ne 0 ]]; then
echolog ""
echolog "\t[ERROR] Mounting network directories is only possible for localhost - yet"
echolog "\t[ERROR] Unounting '${backup_dir}' on '${srcHost}' failed!\n $(cat "$err_Log")"
exit 1
fi
#print_error_stdout "Mounting network directories is only possible for localhost - yet:\n $(cat $err_Log)"
#echolog ""
#echolog "\t[ERROR] Mounting network directories is only possible for localhost - yet"
#exit 1
else
$umount $backup_dir 2> /dev/null
fi

View File

@ -13,6 +13,8 @@ manual=${manual:=false}
## -
USER=$LOGNAME
DEFAULT_SSH_KEY="/root/.ssh/id_ed25519-backup"
## - global configuration for the remote backup-script
## -
rcopy_base_dir="$(realpath $(dirname $0))"
@ -46,10 +48,12 @@ fi
NO_NEW_BACKUP=false
ONLY_BACKUP=false
MANUAL=false
while getopts BhNm opt ; do
while getopts Bhk:Nm opt ; do
case $opt in
B) ONLY_BACKUP=true
;;
k) SSH_KEY=$OPTARG
;;
m) MANUAL=true
;;
N) NO_NEW_BACKUP=true
@ -60,6 +64,10 @@ while getopts BhNm opt ; do
esac
done
if [[ -z "${SSH_KEY}" ]] ; then
SSH_KEY="${DEFAULT_SSH_KEY}"
fi
if $ONLY_BACKUP && $NO_NEW_BACKUP ; then
fatal "Parameter '-B' AND '-N' is not possible."
fi
@ -243,39 +251,30 @@ elif $remote_disk ; then
fi
## - $AGENT muss (root) geh<65>ren und darf nicht beschreibbar sein
## -
# ---
# SSH agent stuff
## --
if [ ! -O $AGENT ] || ! ps ax | grep ssh-agent | grep -v grep > /dev/null ; then
# Kill remaining ssh-agent processes if exists
#
if $(ps -U ${USER} -u ${USER} | ${grep} -q ssh-agent 2> /dev/null) ; then
killall ssh-agent > /dev/null 2> /dev/null
rm -f $AGENT
ssh-agent > $AGENT; . $AGENT > /dev/null ; ssh-add > /dev/null 2>&1
unset SSH_AGENT_PID
fi
if [ ! -O $AGENT ]; then
# Run SSH-Agent as background process..
#
eval $(ssh-agent 2> /dev/null | tee ${AGENT}) > /dev/null
msg_00="\n[ Error ]: No file \"$AGENT\" for ssh-agent informations found or i'm not the owner !!"
msg_01="\t ======================="
msg_02="\t !! BACKUP INTERUPTED !!"
msg_03="As user \"$USER\" do:\n\tssh-agent > $AGENT; . $AGENT; ssh-add"
msg="${msg_00}\n\n${msg_01}\n${msg_02}\n${msg_01}\n\n${msg_03}"
if $MANUAL ; then
echo -e "\n$msg\n"
else
datum="$(date +"%d.%m.%Y")"
subject="Backup Errors $company -- $datum"
subject_utf8="$(echo "$subject" | iconv -t UTF8)"
subject_utf8_encoded="=?utf-8?B?$(echo $subject_utf8 | base64 --wrap=0)?="
echo -e "To:${admin_email}\n${content_type}\nSubject:${subject_utf8_encoded}\n${msg}\n" | /usr/sbin/sendmail -F "Errors BACKUP $company" -f $from_address $admin_email
fi
exit 1
fi
. $AGENT > /dev/null 2>&1
# Load the SSH private key into ssh agent
#
ssh-add -q ${SSH_KEY} 2> /dev/null
if [ ! `$ps aux | $grep -e"^$USER" | $grep "$SSH_AGENT_PID" | $grep ssh-agent | awk '{print$2}'` ]; then
# Check if ssh key was loaded
#
if ! $(ps -U ${USER} -u ${USER} | $grep "$SSH_AGENT_PID" | $grep -q ssh-agent 2> /dev/null) ; then
msg_00="\n[ Error ]: No Prozess for ssh-agent with Process ID \"$SSH_AGENT_PID\" found !!"
msg_01="\t ======================="

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash
script_dir=$(realpath `dirname $0`)
$script_dir/rcopy.sh -m $*
$script_dir/rcopy.sh -m -B $*
exit $?