All checks were successful
continuous-integration/drone/push Build is passing
101 lines
3.0 KiB
Bash
101 lines
3.0 KiB
Bash
#!/bin/sh
|
|
|
|
BACKUP_DATE=$(date +"%Y-%m-%d")
|
|
BACKUP_BASENAME=$S3_BUCKET_NAME$BACKUP_DATE.tar
|
|
SKIP_XZ=${ONLY_TAR:-0}
|
|
|
|
month_day=`date +"%d"`
|
|
|
|
if [ $SKIP_XZ -ne 0 ]; then
|
|
TAR_PARAM=
|
|
BACKUP_FILENAME=daily_$BACKUP_BASENAME
|
|
BACKUP_FILENAME_MONTHLY=monthly_$BACKUP_BASENAME
|
|
else
|
|
TAR_PARAM=-J
|
|
BACKUP_FILENAME=daily_$BACKUP_BASENAME.xz
|
|
BACKUP_FILENAME_MONTHLY=monthly_$BACKUP_BASENAME.xz
|
|
fi
|
|
|
|
rm -f ~/$BACKUP_FILENAME.gpg ~/$BACKUP_FILENAME
|
|
|
|
healthchck_fail(){
|
|
if [ -n $HEALTHCHECK_URL ]; then
|
|
curl -X POST --data "$*" --retry 3 $HEALTHCHECK_URL/fail --silent --output /dev/null
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
healthchck_start(){
|
|
if [ -n $HEALTHCHECK_URL ]; then
|
|
curl -X POST --data "$*" --retry 3 $HEALTHCHECK_URL/start --silent --output /dev/null
|
|
fi
|
|
}
|
|
|
|
healthchck_ok(){
|
|
if [ -n $HEALTHCHECK_URL ]; then
|
|
curl -X POST --data "$*" --retry 3 $HEALTHCHECK_URL --silent --output /dev/null
|
|
fi
|
|
}
|
|
|
|
healthchck_start "Starting Backup"
|
|
cd /backup
|
|
TAR_RETRIES=3
|
|
while [ $TAR_RETRIES -gt 0 ]; do
|
|
echo "make archive"
|
|
tar -c ${TAR_PARAM} ${TAR_EXTRA_PARAM} -f ~/$BACKUP_FILENAME ./* || healthchck_fail "TAR Failed"
|
|
if [ $? -ne 0 ]; then
|
|
TAR_RETRIES=$(($TAR_RETRIES-1))
|
|
else
|
|
TAR_RETRIES=0
|
|
fi
|
|
done
|
|
cd /
|
|
echo " done"
|
|
|
|
RECIPIENT=$(echo "$GPG_RECIPIENT" | sed "s/,/ --recipient /")
|
|
|
|
echo "encrypting"
|
|
gpg --batch --trust-model always --enable-progress-filter --output ~/$BACKUP_FILENAME.gpg --encrypt --recipient $RECIPIENT ~/$BACKUP_FILENAME || healthchck_fail "Encryption Failed"
|
|
rm ~/$BACKUP_FILENAME
|
|
|
|
echo "uploading"
|
|
if [ "$USE_SFTP" -eq 1 ]; then
|
|
cd ~/
|
|
sshpass -e sftp -oBatchMode=no ${SFTP_EXTRA} -b - ${SFTP_USER}@${SFTP_HOST} << !
|
|
cd ${SFTP_PATH}
|
|
put ${BACKUP_FILENAME}.gpg
|
|
bye
|
|
!
|
|
if [ "$month_day" -eq 1 ] ; then
|
|
echo "make monthly backup"
|
|
sshpass -e sftp -oBatchMode=no ${SFTP_EXTRA} -b - ${SFTP_USER}@${SFTP_HOST} << !
|
|
cd ${SFTP_PATH}
|
|
cp ${BACKUP_FILENAME}.gpg ${BACKUP_FILENAME_MONTHLY}.gpg
|
|
bye
|
|
!
|
|
fi
|
|
rm ~/$BACKUP_FILENAME.gpg
|
|
else
|
|
AWS_ENDPOINT_OPTION=
|
|
AWS_STORAGECLASS_OPTION="--storage-class DEEP_ARCHIVE"
|
|
if [ "$AWS_USE_MINIO" -eq 1 ] ; then
|
|
aws configure set default.s3.signature_version s3v4
|
|
AWS_ENDPOINT_OPTION="--endpoint-url https://${MINIO_ENDPOINT}"
|
|
AWS_STORAGECLASS_OPTION=
|
|
fi
|
|
echo aws ${AWS_ENDPOINT_OPTION} s3 cp ~/$BACKUP_FILENAME.gpg s3://$S3_BUCKET_NAME/$BACKUP_FILENAME.gpg ${AWS_STORAGECLASS_OPTION} || healthchck_fail "Upload Failed"
|
|
aws ${AWS_ENDPOINT_OPTION} s3 cp --no-progress ~/$BACKUP_FILENAME.gpg s3://$S3_BUCKET_NAME/$BACKUP_FILENAME.gpg ${AWS_STORAGECLASS_OPTION} || healthchck_fail "Upload Failed"
|
|
rm ~/$BACKUP_FILENAME.gpg
|
|
echo "done"
|
|
|
|
# On first month day do
|
|
if [ "$AWS_USE_MINIO" -eq 1 ]; then
|
|
echo "no monthly"
|
|
else
|
|
if [ "$month_day" -eq 1 ] ; then
|
|
echo "make monthly backup"
|
|
aws ${AWS_ENDPOINT_OPTIOM} s3 cp s3://$S3_BUCKET_NAME/$BACKUP_FILENAME.gpg s3://$S3_BUCKET_NAME/$BACKUP_FILENAME_MONTHLY.gpg --storage-class DEEP_ARCHIVE || healthchck_fail "failed to create monthly backup"
|
|
fi
|
|
fi
|
|
healthchck_ok "Success"
|