Refactoring
This commit is contained in:
parent
9f10f9bc52
commit
d663f4591d
197
bkctl
197
bkctl
|
@ -1,24 +1,23 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# bkctl is a shell script to create and manage a backup server which will
|
||||
# handle the backup of many servers (clients).
|
||||
|
||||
id=$(id -u)
|
||||
if [ $id != 0 ]; then
|
||||
echo "Error, you need to be root to run bkctl !"
|
||||
echo "Error, you need to be root to run bkctl !" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f /etc/default/evobackup ]; then
|
||||
source /etc/default/evobackup
|
||||
else
|
||||
echo "Error, you need /etc/default/evobackup !"
|
||||
echo "Error, you need /etc/default/evobackup !" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p $CONFDIR $JAILDIR $INCDIR
|
||||
|
||||
ProgName=$(basename $0)
|
||||
|
||||
sub_help(){
|
||||
echo "Usage: $ProgName <subcommand> [options]"
|
||||
echo "Usage: bkctl <subcommand> [options]"
|
||||
echo "Subcommands:"
|
||||
echo " init <jailname>"
|
||||
echo " start <jailname>"
|
||||
|
@ -32,11 +31,12 @@ sub_help(){
|
|||
echo " rm"
|
||||
echo ""
|
||||
echo "For help with each subcommand run:"
|
||||
echo "$ProgName <subcommand> -h|--help"
|
||||
echo "bkctl <subcommand> -h|--help"
|
||||
echo ""
|
||||
}
|
||||
|
||||
sub_init() {
|
||||
jail=$1
|
||||
mkdir -p ${JAILDIR}/${jail}
|
||||
umask 022
|
||||
|
||||
|
@ -71,14 +71,19 @@ sub_init() {
|
|||
done
|
||||
done
|
||||
echo "...OK"
|
||||
|
||||
if [ ! -f ${CONFDIR}/$jail ]; then
|
||||
install -m 0640 -v ${TPLDIR}/inc.tpl ${CONFDIR}/$jail
|
||||
fi
|
||||
}
|
||||
|
||||
sub_start() {
|
||||
set -e
|
||||
jail=$1
|
||||
check_jail $jail
|
||||
status=`check_jail_on $jail`
|
||||
status=$(check_jail_on $jail)
|
||||
if [ $status == "ON" ]; then
|
||||
echo "Jail $jail already running !"
|
||||
echo "Jail $jail already running !" >&2
|
||||
exit 1
|
||||
fi
|
||||
mount -t proc proc-chroot ${JAILDIR}/${jail}/proc/
|
||||
|
@ -105,14 +110,15 @@ sub_start() {
|
|||
|
||||
sub_stop() {
|
||||
set -e
|
||||
jail=$1
|
||||
check_jail $jail
|
||||
status=`check_jail_on $jail`
|
||||
status=$(check_jail_on $jail)
|
||||
if [ $status == "OFF" ]; then
|
||||
echo "Jail $jail is not running !"
|
||||
echo "Jail $jail is not running !" >&2
|
||||
exit 1
|
||||
fi
|
||||
pid=`cat ${JAILDIR}/${jail}/${SSHD_PID}`
|
||||
ps --ppid $pid -o pid=| while read conn; do
|
||||
pid=$(cat ${JAILDIR}/${jail}/${SSHD_PID})
|
||||
for conn in $(ps --ppid $pid -o pid=); do
|
||||
kill $conn
|
||||
done
|
||||
kill $pid
|
||||
|
@ -125,8 +131,9 @@ sub_stop() {
|
|||
|
||||
sub_reload() {
|
||||
set -e
|
||||
jail=$1
|
||||
check_jail $jail
|
||||
status=`check_jail_on $jail`
|
||||
status=$(check_jail_on $jail)
|
||||
if [ $status == "ON" ]; then
|
||||
pkill -HUP -F ${JAILDIR}/${jail}/${SSHD_PID}
|
||||
fi
|
||||
|
@ -134,6 +141,7 @@ sub_reload() {
|
|||
|
||||
sub_restart() {
|
||||
set -e
|
||||
jail=$1
|
||||
check_jail $jail
|
||||
$0 stop $jail
|
||||
$0 start $jail
|
||||
|
@ -141,8 +149,9 @@ sub_restart() {
|
|||
|
||||
sub_key() {
|
||||
set -e
|
||||
jail=$1
|
||||
keyfile=$2
|
||||
check_jail $jail
|
||||
keyfile=$3
|
||||
if [ -n "$keyfile" ]; then
|
||||
set_key $jail $keyfile
|
||||
else
|
||||
|
@ -152,9 +161,10 @@ sub_key() {
|
|||
|
||||
sub_port() {
|
||||
set -e
|
||||
jail=$1
|
||||
port=$2
|
||||
check_jail $jail
|
||||
port=$3
|
||||
pre_port=`get_port $jail`
|
||||
pre_port=$(get_port $jail)
|
||||
if [ -z $port ]; then
|
||||
echo "$pre_port"
|
||||
else
|
||||
|
@ -165,19 +175,21 @@ sub_port() {
|
|||
|
||||
sub_status() {
|
||||
set -e
|
||||
jail=$1
|
||||
check_jail $jail
|
||||
inc=`check_inc jail`
|
||||
status=`check_jail_on $jail`
|
||||
port=`get_port $jail`
|
||||
inc=$(check_inc $jail)
|
||||
status=$(check_jail_on $jail)
|
||||
port=$(get_port $jail)
|
||||
echo "$jail : $status ($port) -> $inc"
|
||||
}
|
||||
|
||||
sub_inc() {
|
||||
for jail in `ls -1 $CONFDIR`; do
|
||||
date=$(date +"%Y-%m-%d-%H")
|
||||
for jail in $(ls -1 $CONFDIR); do
|
||||
echo -n "hard copy $jail begins at : " >> $LOGFILE
|
||||
/bin/date +"%d-%m-%Y ; %H:%M" >> $LOGFILE
|
||||
mkdir -p ${INCDIR}${jail}
|
||||
cp -alx ${JAILDIR}/${jail}/ ${INCDIR}${jail}/$DATE
|
||||
cp -alx ${JAILDIR}/${jail}/ ${INCDIR}${jail}/$date
|
||||
echo -n "hard copy $i ends at : " >> $LOGFILE
|
||||
/bin/date +"%d-%m-%Y ; %H:%M" >> $LOGFILE
|
||||
done #| tee -a $LOGFILE | mail -s "[info] EvoBackup - create incs" $MYMAIL
|
||||
|
@ -192,30 +204,29 @@ sub_rm() {
|
|||
|
||||
# list non-obsolete inc backups
|
||||
for j in $( cat $CONFDIR$i ); do
|
||||
MYDATE=$( echo $j | cut -d. -f1 )
|
||||
BEFORE=$( echo $j | cut -d. -f2 )
|
||||
date -d "$(date $MYDATE) $BEFORE" "+%Y-%m-%d"
|
||||
date=$( echo $j | cut -d. -f1 )
|
||||
before=$( echo $j | cut -d. -f2 )
|
||||
date -d "$(date $date) $before" "+%Y-%m-%d"
|
||||
done > "$TMPDIR"$i.keep
|
||||
|
||||
# delete obsolete inc backups
|
||||
for j in $( grep -v -f "$TMPDIR"$i.keep "$TMPDIR"$i.files ); do
|
||||
echo -n "Delete $i/$j begins at : " >> $LOGFILE
|
||||
/bin/date +"%d-%m-%Y ; %H:%M" >> $LOGFILE
|
||||
cd $INCDIR$i
|
||||
[ -n "$j" ] && rsync -a --delete $EMPTYDIR/ $j*
|
||||
[ -n "$j" ] && rmdir $j* && touch /tmp/evobackup-rm.txt
|
||||
echo -n "Delete $i/$j ends at : " >> $LOGFILE
|
||||
/bin/date +"%d-%m-%Y ; %H:%M" >> $LOGFILE
|
||||
echo -n "Delete $i/$j begins at : " >> $LOGFILE
|
||||
/bin/date +"%d-%m-%Y ; %H:%M" >> $LOGFILE
|
||||
cd $INCDIR$i
|
||||
[ -n "$j" ] && rsync -a --delete $EMPTYDIR/ $j*
|
||||
[ -n "$j" ] && rmdir $j* && touch /tmp/evobackup-rm.txt
|
||||
echo -n "Delete $i/$j ends at : " >> $LOGFILE
|
||||
/bin/date +"%d-%m-%Y ; %H:%M" >> $LOGFILE
|
||||
done
|
||||
done #| tee -a $LOGFILE | ( [ -e "/tmp/evobackup-rm.txt" ] && mail -s "[info] EvoBackup - purge incs" $MYMAIL && rm /tmp/evobackup-rm.txt )
|
||||
|
||||
done #| tee -a $LOGFILE | ( [ -e "/tmp/evobackup-rm.txt" ] && mail -s "[info] EvoBackup - purge incs" $MYMAIL && rm /tmp/evobackup-rm.txt )
|
||||
rm -rf $TMPDIR $EMPTYDIR
|
||||
}
|
||||
|
||||
check_jail() {
|
||||
jail=$1
|
||||
if [ ! -d ${JAILDIR}/${jail} ]; then
|
||||
echo "$jail doesn't exits !" >/dev/stderr
|
||||
echo "$jail doesn't exits !" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
@ -224,7 +235,7 @@ check_jail_on() {
|
|||
jail=$1
|
||||
status="OFF"
|
||||
if [ -f ${JAILDIR}/${jail}/${SSHD_PID} ]; then
|
||||
pid=`cat ${JAILDIR}/${jail}/${SSHD_PID}`
|
||||
pid=$(cat ${JAILDIR}/${jail}/${SSHD_PID})
|
||||
ps -p $pid > /dev/null
|
||||
if [ $? == 0 ]; then
|
||||
status="ON "
|
||||
|
@ -239,8 +250,8 @@ check_inc() {
|
|||
jail=$1
|
||||
inc="0"
|
||||
if [ -f ${CONFDIR}/${jail} ]; then
|
||||
day=`grep -c "day" ${CONFDIR}/${jail}`
|
||||
month=`grep -c "month" ${CONFDIR}/${jail}`
|
||||
day=$(grep -c "day" ${CONFDIR}/${jail})
|
||||
month=$(grep -c "month" ${CONFDIR}/${jail})
|
||||
inc="${day}/${month}"
|
||||
fi
|
||||
echo $inc
|
||||
|
@ -248,7 +259,7 @@ check_inc() {
|
|||
|
||||
get_port() {
|
||||
jail=$1
|
||||
port=`grep -E "Port [0-9]+" ${JAILDIR}/${jail}/${SSHD_CONFIG}|grep -oE "[0-9]+"`
|
||||
port=$(grep -E "Port [0-9]+" ${JAILDIR}/${jail}/${SSHD_CONFIG}|grep -oE "[0-9]+")
|
||||
echo $port
|
||||
}
|
||||
|
||||
|
@ -279,56 +290,62 @@ set_key() {
|
|||
cat $keyfile > ${JAILDIR}/${jail}/${AUTHORIZED_KEYS}
|
||||
chmod 600 ${JAILDIR}/${jail}/${AUTHORIZED_KEYS}
|
||||
else
|
||||
echo "Keyfile $keyfile dosen't exist !"
|
||||
echo "Keyfile $keyfile dosen't exist !" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
subcommand=$1
|
||||
jail=$2
|
||||
case $subcommand in
|
||||
"" | "-h" | "--help")
|
||||
sub_help
|
||||
;;
|
||||
"inc" | "rm")
|
||||
pkill -f /run/bkctl.pid #| mail -s "[warn] EvoBackup - purge incs interrupted" $MYMAIL
|
||||
rm -f /run/bkctl.pid
|
||||
sub_${subcommand} $@ &
|
||||
echo $! > /run/bkctl.pid
|
||||
;;
|
||||
"init" | "key" | "port")
|
||||
if [ -z $jail ]; then
|
||||
sub_help
|
||||
exit 1
|
||||
fi
|
||||
sub_${subcommand} $@
|
||||
;;
|
||||
"start" | "stop" | "reload" | "restart")
|
||||
if [ -z $jail ]; then
|
||||
sub_help
|
||||
exit 1
|
||||
fi
|
||||
if [ $jail = "all" ]; then
|
||||
for jail in `ls $JAILDIR`; do
|
||||
$0 ${subcommand} $jail
|
||||
done
|
||||
else
|
||||
sub_${subcommand} $@
|
||||
fi
|
||||
;;
|
||||
"status")
|
||||
if [ -z $jail ]; then
|
||||
for jail in `ls $JAILDIR`; do
|
||||
$0 status $jail
|
||||
done
|
||||
else
|
||||
sub_${subcommand} $@
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
shift
|
||||
echo "Error: '$subcommand' is not a known subcommand." >&2
|
||||
echo " Run '$ProgName --help' for a list of known subcommands." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
main() {
|
||||
mkdir -p $CONFDIR $JAILDIR $INCDIR
|
||||
subcommand=$1
|
||||
jail=$2
|
||||
option=$3
|
||||
case $subcommand in
|
||||
"" | "-h" | "--help")
|
||||
sub_help
|
||||
;;
|
||||
"inc" | "rm")
|
||||
pkill -f /run/bkctl.pid #| mail -s "[warn] EvoBackup - purge incs interrupted" $MYMAIL
|
||||
rm -f /run/bkctl.pid
|
||||
sub_${subcommand} $jail &
|
||||
echo $! > /run/bkctl.pid
|
||||
;;
|
||||
"init" | "key" | "port")
|
||||
if [ -z $jail ]; then
|
||||
sub_help
|
||||
exit 1
|
||||
fi
|
||||
sub_${subcommand} $jail $option
|
||||
;;
|
||||
"start" | "stop" | "reload" | "restart")
|
||||
if [ -z $jail ]; then
|
||||
sub_help
|
||||
exit 1
|
||||
fi
|
||||
if [ $jail = "all" ]; then
|
||||
for jail in $(ls $JAILDIR); do
|
||||
$0 ${subcommand} $jail
|
||||
done
|
||||
else
|
||||
sub_${subcommand} $jail
|
||||
fi
|
||||
;;
|
||||
"status")
|
||||
if [ -z $jail ]; then
|
||||
for jail in $(ls $JAILDIR); do
|
||||
$0 status $jail
|
||||
done
|
||||
else
|
||||
sub_${subcommand} $jail
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
shift
|
||||
echo "Error: '$subcommand' is not a known subcommand." >&2
|
||||
sub_help
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
# Defaults for bkctl command (evobackup)
|
||||
# sourced by /usr/sbin/bkctl or /usr/local/sbin/bkctl
|
||||
|
||||
CONFDIR=/etc/evobackup/
|
||||
JAILDIR=/backup/jails/
|
||||
INCDIR=/backup/incs/
|
||||
TPLDIR=/usr/share/evobackup/
|
||||
LOGFILE=/var/log/evobackup.log
|
||||
DATE=$(date +"%Y-%m-%d-%H")
|
||||
MYMAIL=jdoe@example.com
|
||||
SSHD_PID=/var/run/sshd.pid
|
||||
SSHD_CONFIG=/etc/ssh/sshd_config
|
||||
AUTHORIZED_KEYS=/root/.ssh/authorized_keys
|
14
install.sh
14
install.sh
|
@ -2,7 +2,9 @@
|
|||
|
||||
dir=`dirname $0`
|
||||
|
||||
cp $dir/evobackup.conf /etc/default/evobackup
|
||||
if [ ! -f /etc/default/evobackup ]; then
|
||||
install -m 0644 -v $dir/tpl/evobackup.conf /etc/default/evobackup
|
||||
fi
|
||||
source /etc/default/evobackup
|
||||
|
||||
grep -q usr /etc/fstab
|
||||
|
@ -10,9 +12,9 @@ if [ $? == 0 ]; then
|
|||
mount -o remount,rw /usr
|
||||
fi
|
||||
|
||||
mkdir -p $TPLDIR
|
||||
cp $dir/etc/* $TPLDIR
|
||||
cp $dir/bkctl /usr/local/sbin/
|
||||
mkdir -m 0755 -p $TPLDIR
|
||||
cp -v $dir/tpl/* $TPLDIR
|
||||
install -m 0755 -v $dir/bkctl /usr/local/sbin/
|
||||
|
||||
crontab -l|grep -q bkctl
|
||||
if [ $? != 0 ]; then
|
||||
|
@ -21,13 +23,13 @@ fi
|
|||
|
||||
dpkg -l sysvinit >/dev/null
|
||||
if [ $? == 0 ]; then
|
||||
cp $dir/evobackup /etc/init.d/evobackup
|
||||
install -m 0755 -v $dir/tpl/evobackup /etc/init.d/evobackup
|
||||
insserv evobackup
|
||||
fi
|
||||
|
||||
dpkg -l systemd >/dev/null
|
||||
if [ $? == 0 ] ; then
|
||||
#cp evobackup@.service /etc/systemd/system/evobackup@.service
|
||||
cp $dir/evobackup /etc/init.d/evobackup
|
||||
install -m 0755 -v $dir/tpl/evobackup /etc/init.d/evobackup
|
||||
systemctl enable evobackup
|
||||
fi
|
||||
|
|
|
@ -9,9 +9,6 @@
|
|||
# Short-Description: Backup manager using rsync and OpenSSH chroot.
|
||||
### END INIT INFO
|
||||
|
||||
set -e
|
||||
. /etc/default/evobackup
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
bkctl start all
|
12
tpl/evobackup.conf
Normal file
12
tpl/evobackup.conf
Normal file
|
@ -0,0 +1,12 @@
|
|||
# Defaults for bkctl command (evobackup)
|
||||
# sourced by /usr/sbin/bkctl or /usr/local/sbin/bkctl
|
||||
|
||||
CONFDIR='/etc/evobackup/'
|
||||
JAILDIR='/backup/jails/'
|
||||
INCDIR='/backup/incs/'
|
||||
TPLDIR='/usr/local/share/evobackup/'
|
||||
LOGFILE='/var/log/evobackup.log'
|
||||
MYMAIL='jdoe@example.com'
|
||||
SSHD_PID='/var/run/sshd.pid'
|
||||
SSHD_CONFIG='/etc/ssh/sshd_config'
|
||||
AUTHORIZED_KEYS='/root/.ssh/authorized_keys'
|
Loading…
Reference in a new issue