Rsync implementation, formatting
This commit is contained in:
392
main.sh
392
main.sh
@@ -1,42 +1,39 @@
|
||||
#! /bin/bash
|
||||
|
||||
function init {
|
||||
echo "Backify is starting, looking for configuration file..." >&2
|
||||
echo "Backify is starting, looking for configuration file..." >&2
|
||||
|
||||
config='backup.cfg'
|
||||
secured_config='sbackup.cfg'
|
||||
config='backup.cfg'
|
||||
secured_config='sbackup.cfg'
|
||||
|
||||
if [ ! -f "$config" ]
|
||||
then
|
||||
if [ ! -f "$config" ]; then
|
||||
echo "Error: Config file not found: $config" >&2
|
||||
echo "Please create a config file or specify the location of an existing file." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if grep -E -q -v '^#|^[^ ]*=[^;]*' "$config"; then
|
||||
echo "Config file is unclean, cleaning it..." >&2
|
||||
grep -E '^#|^[^ ]*=[^;&]*' "$config" > "$secured_config"
|
||||
config="$secured_config"
|
||||
fi
|
||||
if grep -E -q -v '^#|^[^ ]*=[^;]*' "$config"; then
|
||||
echo "Config file is unclean, cleaning it..." >&2
|
||||
grep -E '^#|^[^ ]*=[^;&]*' "$config" >"$secured_config"
|
||||
config="$secured_config"
|
||||
fi
|
||||
|
||||
source "$config"
|
||||
source "$config"
|
||||
|
||||
echo "Configuration file loaded" >&2
|
||||
echo "Configuration file loaded" >&2
|
||||
|
||||
if [ "$EUID" -ne 0 ]
|
||||
then echo "Please run as root"
|
||||
exit
|
||||
fi
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "Please run as root"
|
||||
exit
|
||||
fi
|
||||
}
|
||||
|
||||
function system {
|
||||
|
||||
if [ -f /etc/redhat-release ]
|
||||
then
|
||||
if [ -f /etc/redhat-release ]; then
|
||||
echo "Discovered Red Hat-based OS..."
|
||||
system='rhel'
|
||||
elif [ -f /etc/lsb-release ]
|
||||
then
|
||||
elif [ -f /etc/lsb-release ]; then
|
||||
echo "Discovered Ubuntu-based OS..."
|
||||
system='ubuntu'
|
||||
else
|
||||
@@ -44,245 +41,218 @@ function system {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Discovered $system based OS..." >&2
|
||||
echo "Discovered $system based OS..." >&2
|
||||
}
|
||||
|
||||
function makedir {
|
||||
timestamp=$(date +%Y%m%d_%H%M)
|
||||
mkdir /tmp/backify-$timestamp
|
||||
tmpdir="/tmp/backify-$timestamp"
|
||||
timestamp=$(date +%Y%m%d_%H%M)
|
||||
mkdir -p $backup_path/backify-$timestamp
|
||||
tmpdir="$backup_path/backify-$timestamp"
|
||||
}
|
||||
|
||||
function wwwbackup {
|
||||
if [ "$www_backup" = true ]
|
||||
then
|
||||
if [ "$www_backup" = true ]; then
|
||||
echo "Backing up wwwroot..." >&2
|
||||
mkdir -p $tmpdir/wwwdata
|
||||
cp -r $www_dir/ $tmpdir/wwwdata/
|
||||
echo "Finished" >&2
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function vhostbackup {
|
||||
if [ "$vhost_backup" = true ]
|
||||
then
|
||||
if [ "$vhost_backup" = true ]; then
|
||||
echo "Backing up vhosts..." >&2
|
||||
mkdir -p $tmpdir/vhosts
|
||||
cp -r $vhost_dir/ $tmpdir/vhosts/
|
||||
echo "Finished" >&2
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function logbackup {
|
||||
if [ "$log_backup" = true ]
|
||||
then
|
||||
if [ "$log_backup" = true ]; then
|
||||
echo "Backing up system logs..." >&2
|
||||
mkdir -p $tmpdir/syslogs
|
||||
|
||||
case $system in
|
||||
"rhel")
|
||||
cp /var/log/syslog $tmpdir/syslogs/
|
||||
cp /var/log/message $tmpdir/syslogs/
|
||||
"rhel")
|
||||
cp /var/log/syslog $tmpdir/syslogs/
|
||||
cp /var/log/message $tmpdir/syslogs/
|
||||
|
||||
if [ "$fail2ban_log" = true ]
|
||||
then
|
||||
cp /var/log/fail2ban.log $tmpdir/syslogs/
|
||||
if [ "$fail2ban_log" = true ]; then
|
||||
cp /var/log/fail2ban.log $tmpdir/syslogs/
|
||||
fi
|
||||
|
||||
if [ "$log_backup_web" = true ]; then
|
||||
if [ "$apache" = true ]; then
|
||||
mkdir -p $tmpdir/apachelogs
|
||||
cp -r /var/log/httpd $tmpdir/apachelogs
|
||||
fi
|
||||
|
||||
if [ "$log_backup_web" = true ]
|
||||
then
|
||||
if [ "$apache" = true ]
|
||||
then
|
||||
mkdir -p $tmpdir/apachelogs
|
||||
cp -r /var/log/httpd $tmpdir/apachelogs
|
||||
fi
|
||||
if [ "$nginx" = true ]
|
||||
then
|
||||
mkdir -p $tmpdir/nginxlogs
|
||||
cp -r /var/log/nginx $tmpdir/nginxlogs
|
||||
fi
|
||||
if [ "$nginx" = true ]; then
|
||||
mkdir -p $tmpdir/nginxlogs
|
||||
cp -r /var/log/nginx $tmpdir/nginxlogs
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$log_purge" = true ]
|
||||
then
|
||||
echo "Purging logs..." >&2
|
||||
truncate -s 0 /var/log/syslog
|
||||
truncate -s 0 /var/log/message
|
||||
if [ "$apache" = true ]
|
||||
then
|
||||
truncate -s 0 /var/log/httpd/*
|
||||
rm /var/log/httpd/*.gz
|
||||
fi
|
||||
if [ "$nginx" = true ]
|
||||
then
|
||||
truncate -s 0 /var/log/nginx/*
|
||||
rm /var/log/nginx/*.gz
|
||||
fi
|
||||
if [ "$fail2ban_log" = true ]
|
||||
then
|
||||
truncate -s 0 /var/log/fail2ban.log
|
||||
fi
|
||||
if [ "$log_purge" = true ]; then
|
||||
echo "Purging logs..." >&2
|
||||
truncate -s 0 /var/log/syslog
|
||||
truncate -s 0 /var/log/message
|
||||
if [ "$apache" = true ]; then
|
||||
truncate -s 0 /var/log/httpd/*
|
||||
rm /var/log/httpd/*.gz
|
||||
fi
|
||||
;;
|
||||
|
||||
"ubuntu")
|
||||
cp /var/log/syslog $tmpdir/syslogs/
|
||||
cp /var/log/message $tmpdir/syslogs/
|
||||
|
||||
if [ "$fail2ban_log" = true ]
|
||||
then
|
||||
cp /var/log/fail2ban.log $tmpdir/syslogs/
|
||||
if [ "$nginx" = true ]; then
|
||||
truncate -s 0 /var/log/nginx/*
|
||||
rm /var/log/nginx/*.gz
|
||||
fi
|
||||
|
||||
if [ "$log_backup_web" = true ]
|
||||
then
|
||||
if [ "$apache" = true ]
|
||||
then
|
||||
mkdir -p $tmpdir/apachelogs
|
||||
cp -r /var/log/apache2 $tmpdir/apachelogs
|
||||
fi
|
||||
if [ "$nginx" = true ]
|
||||
then
|
||||
mkdir -p $tmpdir/nginxlogs
|
||||
cp -r /var/log/nginx $tmpdir/nginxlogs
|
||||
fi
|
||||
if [ "$fail2ban_log" = true ]; then
|
||||
truncate -s 0 /var/log/fail2ban.log
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
if [ "$log_purge" = true ]
|
||||
then
|
||||
echo "Purging logs..." >&2
|
||||
truncate -s 0 /var/log/syslog
|
||||
truncate -s 0 /var/log/message
|
||||
if [ "$apache" = true ]
|
||||
then
|
||||
truncate -s 0 /var/log/apache2/*
|
||||
rm /var/log/apache2/*.gz
|
||||
fi
|
||||
if [ "$nginx" = true ]
|
||||
then
|
||||
truncate -s 0 /var/log/nginx/*
|
||||
rm /var/log/nginx/*.gz
|
||||
fi
|
||||
if [ "$fail2ban_log" = true ]
|
||||
then
|
||||
truncate -s 0 /var/log/fail2ban.log
|
||||
fi
|
||||
"ubuntu")
|
||||
cp /var/log/syslog $tmpdir/syslogs/
|
||||
cp /var/log/message $tmpdir/syslogs/
|
||||
|
||||
if [ "$fail2ban_log" = true ]; then
|
||||
cp /var/log/fail2ban.log $tmpdir/syslogs/
|
||||
fi
|
||||
|
||||
if [ "$log_backup_web" = true ]; then
|
||||
if [ "$apache" = true ]; then
|
||||
mkdir -p $tmpdir/apachelogs
|
||||
cp -r /var/log/apache2 $tmpdir/apachelogs
|
||||
fi
|
||||
esac
|
||||
fi
|
||||
if [ "$nginx" = true ]; then
|
||||
mkdir -p $tmpdir/nginxlogs
|
||||
cp -r /var/log/nginx $tmpdir/nginxlogs
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$log_purge" = true ]; then
|
||||
echo "Purging logs..." >&2
|
||||
truncate -s 0 /var/log/syslog
|
||||
truncate -s 0 /var/log/message
|
||||
if [ "$apache" = true ]; then
|
||||
truncate -s 0 /var/log/apache2/*
|
||||
rm /var/log/apache2/*.gz
|
||||
fi
|
||||
if [ "$nginx" = true ]; then
|
||||
truncate -s 0 /var/log/nginx/*
|
||||
rm /var/log/nginx/*.gz
|
||||
fi
|
||||
if [ "$fail2ban_log" = true ]; then
|
||||
truncate -s 0 /var/log/fail2ban.log
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
function push {
|
||||
if [ "$rsync_push" = true ]
|
||||
then
|
||||
#Push - Dockerized
|
||||
if [ "$push_clean" = true ]
|
||||
then
|
||||
rm /opt/backify-$timestamp.tar.gz
|
||||
fi
|
||||
if [ "$rsync_push" = true ]; then
|
||||
echo "Pushing the backup package to $target_host..." >&2
|
||||
rsync -avz -e "ssh -i $target_key" $backup_path/backify-$timestamp.tar.gz $target_user@$target_host:$target_dir
|
||||
if [ "$push_clean" = true ]; then
|
||||
echo "Removing archive..." >&2
|
||||
rm $backup_path/backify-$timestamp.tar.gz
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function dockerbackup {
|
||||
if [ "$docker_enabled" = true]
|
||||
then
|
||||
if [ "$docker_images" = true]
|
||||
then
|
||||
echo "Backing up Docker images..." >&2
|
||||
for i in `docker inspect --format='{{.Name}}' $(docker ps -q) | cut -f2 -d\/`
|
||||
do container_name=$i
|
||||
echo -n "$container_name - "
|
||||
container_image=`docker inspect --format='{{.Config.Image}}' $container_name`
|
||||
mkdir -p $tmpdir/containers/$container_name
|
||||
save_dir="$tmpdir/containers/$container_name/$container_name-image.tar"
|
||||
docker save -o $save_dir $container_image
|
||||
echo "Finished" >&2
|
||||
done
|
||||
fi
|
||||
if [ "$docker_volumes" = true ]
|
||||
then
|
||||
echo "Backing up Docker volumes..." >&2
|
||||
#Thanks piscue :)
|
||||
for i in `docker inspect --format='{{.Name}}' $(docker ps -q) | cut -f2 -d\/`
|
||||
do container_name=$i
|
||||
mkdir -p $tmpdir/containers/$container_name
|
||||
echo -n "$container_name - "
|
||||
docker run --rm --userns=host \
|
||||
--volumes-from $container_name \
|
||||
-v $backup_path:/backup \
|
||||
-e TAR_OPTS="$tar_opts" \
|
||||
piscue/docker-backup \
|
||||
backup "$tmpdir/containers/$container_name/$container_name-volume.tar.xz"
|
||||
echo "Finished" >&2
|
||||
done
|
||||
fi
|
||||
if [ "$docker_data" = true ]
|
||||
then
|
||||
echo "Backing up container information..." >&2
|
||||
for i in `docker inspect --format='{{.Name}}' $(docker ps -q) | cut -f2 -d\/`
|
||||
do container_name=$i
|
||||
echo -n "$container_name - "
|
||||
container_data=`docker inspect $container_name`
|
||||
mkdir -p $tmpdir/containers/$container_name
|
||||
echo $container_data > $tmpdir/containers/$container_name/$container_name-data.txt
|
||||
echo "Finished" >&2
|
||||
done
|
||||
fi
|
||||
if [ "$docker_enabled" = true]; then
|
||||
if [ "$docker_images" = true]; then
|
||||
echo "Backing up Docker images..." >&2
|
||||
for i in $(docker inspect --format='{{.Name}}' $(docker ps -q) | cut -f2 -d\/); do
|
||||
container_name=$i
|
||||
echo -n "$container_name - "
|
||||
container_image=$(docker inspect --format='{{.Config.Image}}' $container_name)
|
||||
mkdir -p $tmpdir/containers/$container_name
|
||||
save_dir="$tmpdir/containers/$container_name/$container_name-image.tar"
|
||||
docker save -o $save_dir $container_image
|
||||
echo "Finished" >&2
|
||||
done
|
||||
fi
|
||||
if [ "$docker_volumes" = true ]; then
|
||||
echo "Backing up Docker volumes..." >&2
|
||||
#Thanks piscue :)
|
||||
for i in $(docker inspect --format='{{.Name}}' $(docker ps -q) | cut -f2 -d\/); do
|
||||
container_name=$i
|
||||
mkdir -p $tmpdir/containers/$container_name
|
||||
echo -n "$container_name - "
|
||||
docker run --rm --userns=host \
|
||||
--volumes-from $container_name \
|
||||
-v $backup_path:/backup \
|
||||
-e TAR_OPTS="$tar_opts" \
|
||||
piscue/docker-backup \
|
||||
backup "$tmpdir/containers/$container_name/$container_name-volume.tar.xz"
|
||||
echo "Finished" >&2
|
||||
done
|
||||
fi
|
||||
if [ "$docker_data" = true ]; then
|
||||
echo "Backing up container information..." >&2
|
||||
for i in $(docker inspect --format='{{.Name}}' $(docker ps -q) | cut -f2 -d\/); do
|
||||
container_name=$i
|
||||
echo -n "$container_name - "
|
||||
container_data=$(docker inspect $container_name)
|
||||
mkdir -p $tmpdir/containers/$container_name
|
||||
echo $container_data >$tmpdir/containers/$container_name/$container_name-data.txt
|
||||
echo "Finished" >&2
|
||||
done
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function backup_db {
|
||||
if [ "$db_all" = true ]
|
||||
then
|
||||
if [ "$database_type" = "mysql" ]
|
||||
then
|
||||
mysqldump -u "$db_username" -p"$db_password" --all-databases > $tmpdir/db/db_all.sql
|
||||
elif [ "$database_type" = "postgresql" ]
|
||||
then
|
||||
pg_dumpall -U "$db_username" -f $tmpdir/db/db_all.sql
|
||||
fi
|
||||
else
|
||||
if [ "$database_type" = "mysql" ]
|
||||
then
|
||||
mysqldump -u "$db_username" -p"$db_password" "$db_name" > $tmpdir/db/$db_name.sql
|
||||
elif [ "$database_type" = "postgresql" ]
|
||||
then
|
||||
pg_dump -U "$db_username" "$db_name" -f $tmpdir/db/$db_name.sql
|
||||
if [ "$db_all" = true ]; then
|
||||
if [ "$database_type" = "mysql" ]; then
|
||||
mysqldump -u "$db_username" -p"$db_password" --all-databases >$tmpdir/db/db_all.sql
|
||||
elif [ "$database_type" = "postgresql" ]; then
|
||||
pg_dumpall -U "$db_username" -f $tmpdir/db/db_all.sql
|
||||
fi
|
||||
else
|
||||
if [ "$database_type" = "mysql" ]; then
|
||||
mysqldump -u "$db_username" -p"$db_password" "$db_name" >$tmpdir/db/$db_name.sql
|
||||
elif [ "$database_type" = "postgresql" ]; then
|
||||
pg_dump -U "$db_username" "$db_name" -f $tmpdir/db/$db_name.sql
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function runbackup {
|
||||
# init, config check
|
||||
init
|
||||
# run system detection
|
||||
system
|
||||
if [ "$enabled" = true ]
|
||||
then
|
||||
# step 1 : create directory
|
||||
makedir
|
||||
# step 2 : www backup
|
||||
wwwbackup
|
||||
# step 3 : vhost backup
|
||||
vhostbackup
|
||||
# step 4: log backup
|
||||
logbackup
|
||||
# step 5: docker backup
|
||||
dockerbackup
|
||||
# step 6: db backup
|
||||
if [ "$db_backup" = true ]
|
||||
then
|
||||
backup_db
|
||||
fi
|
||||
# archive data
|
||||
echo "Creating backup archive..." >&2
|
||||
tar -czvf /opt/backify-$timestamp.tar.gz $tmpdir
|
||||
# push data to server
|
||||
push
|
||||
echo "Voila, enjoy the rest of the day" >&2
|
||||
else
|
||||
echo "Backup is disabled in the configuration" >&2
|
||||
# init, config check
|
||||
init
|
||||
# run system detection
|
||||
system
|
||||
if [ "$enabled" = true ]; then
|
||||
# step 1 : create directory
|
||||
makedir
|
||||
# step 2 : www backup
|
||||
wwwbackup
|
||||
# step 3 : vhost backup
|
||||
vhostbackup
|
||||
# step 4: log backup
|
||||
logbackup
|
||||
# step 5: docker backup
|
||||
dockerbackup
|
||||
# step 6: db backup
|
||||
if [ "$db_backup" = true ]; then
|
||||
backup_db
|
||||
fi
|
||||
# archive data
|
||||
echo "Creating backup archive..." >&2
|
||||
tar -czvf $backup_path/backify-$timestamp.tar.gz $tmpdir
|
||||
# push data to server
|
||||
push
|
||||
# remove temp files
|
||||
rm -r $tmpdir
|
||||
echo "Voila, enjoy the rest of the day" >&2
|
||||
else
|
||||
echo "Backup is disabled in the configuration" >&2
|
||||
fi
|
||||
}
|
||||
|
||||
runbackup
|
||||
runbackup
|
||||
|
||||
Reference in New Issue
Block a user