scripts/ceph/ceph.backup.deb.files.sh

60 lines
1.7 KiB
Bash
Raw Normal View History

#!/bin/sh
# Purpose {{{
## This script will check if some Ceph related Debian packages are available
## in APT cache.
## And backup all of them (ceph, rados, rbd,…) in tar with version name and date.
#
## You can use this script in a cron (for periodic backup of Ceph packages) or
## directly.
# }}}
# Vars {{{
CEPH_DEB_PKG_DIR=$(mktemp --directory --tmpdir="/tmp" -- ceph-deb-files-XXXXXX.tmp)
CEPH_DEB_PKG_PATTERN="ceph|rados|rbd"
CEPH_VERSION=$(ceph version | cut -d" " -f3)
BKP_DIR="/srv/ceph"
BKP_TAR_PATH="${BKP_DIR}/ceph-deb_${CEPH_VERSION}-$(date +%Y%m%d).tar"
EXISTENT_BACKUP_TAR="$(find "${BKP_DIR}" -type f -iname "ceph-deb_${CEPH_VERSION}*")"
# }}}
# If Ceph is installed on the system
if [ "$(command -v ceph)" ]; then
# and no backup of this version already exists
if [ ! "${EXISTENT_BACKUP_TAR}" ]; then
## Ensure to create backup directory
mkdir -p -- "${BKP_DIR}"
## Create and go to a temp directory
cd -- "${CEPH_DEB_PKG_DIR}" > /dev/null || exit 2
## Download deb files of all ceph related packages installed on the system
printf '%b\n' "Download deb files of all ceph related packages installed on the system."
apt download -- $(dpkg -l | awk -v pattern="${CEPH_DEB_PKG_PATTERN}" '$0~pattern {print $2"="$3}')
printf '%b\n' "Backup Ceph deb files in version: ${CEPH_VERSION}"
tar cf "${BKP_TAR_PATH}" ./*.deb > /dev/null 2>&1
## Remove deb files
rm -rf -- *.deb
cd - > /dev/null || exit 2
## Remove temp directory
rmdir -- "${CEPH_DEB_PKG_DIR}"
else
printf '%b\n' "A backup of this version already exists: ${EXISTENT_BACKUP_TAR}"
exit 1
fi
else
printf '%b\n' "Ceph doesn't seems to be available. Please take a look on \`ceph version\` command"
exit 1
fi
exit 0