Refactoring
This commit is contained in:
parent
9f10f9bc52
commit
d663f4591d
97
bkctl
97
bkctl
|
@ -1,24 +1,23 @@
|
||||||
#!/bin/bash
|
#!/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)
|
id=$(id -u)
|
||||||
if [ $id != 0 ]; then
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f /etc/default/evobackup ]; then
|
if [ -f /etc/default/evobackup ]; then
|
||||||
source /etc/default/evobackup
|
source /etc/default/evobackup
|
||||||
else
|
else
|
||||||
echo "Error, you need /etc/default/evobackup !"
|
echo "Error, you need /etc/default/evobackup !" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p $CONFDIR $JAILDIR $INCDIR
|
|
||||||
|
|
||||||
ProgName=$(basename $0)
|
|
||||||
|
|
||||||
sub_help(){
|
sub_help(){
|
||||||
echo "Usage: $ProgName <subcommand> [options]"
|
echo "Usage: bkctl <subcommand> [options]"
|
||||||
echo "Subcommands:"
|
echo "Subcommands:"
|
||||||
echo " init <jailname>"
|
echo " init <jailname>"
|
||||||
echo " start <jailname>"
|
echo " start <jailname>"
|
||||||
|
@ -32,11 +31,12 @@ sub_help(){
|
||||||
echo " rm"
|
echo " rm"
|
||||||
echo ""
|
echo ""
|
||||||
echo "For help with each subcommand run:"
|
echo "For help with each subcommand run:"
|
||||||
echo "$ProgName <subcommand> -h|--help"
|
echo "bkctl <subcommand> -h|--help"
|
||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
sub_init() {
|
sub_init() {
|
||||||
|
jail=$1
|
||||||
mkdir -p ${JAILDIR}/${jail}
|
mkdir -p ${JAILDIR}/${jail}
|
||||||
umask 022
|
umask 022
|
||||||
|
|
||||||
|
@ -71,14 +71,19 @@ sub_init() {
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
echo "...OK"
|
echo "...OK"
|
||||||
|
|
||||||
|
if [ ! -f ${CONFDIR}/$jail ]; then
|
||||||
|
install -m 0640 -v ${TPLDIR}/inc.tpl ${CONFDIR}/$jail
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
sub_start() {
|
sub_start() {
|
||||||
set -e
|
set -e
|
||||||
|
jail=$1
|
||||||
check_jail $jail
|
check_jail $jail
|
||||||
status=`check_jail_on $jail`
|
status=$(check_jail_on $jail)
|
||||||
if [ $status == "ON" ]; then
|
if [ $status == "ON" ]; then
|
||||||
echo "Jail $jail already running !"
|
echo "Jail $jail already running !" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
mount -t proc proc-chroot ${JAILDIR}/${jail}/proc/
|
mount -t proc proc-chroot ${JAILDIR}/${jail}/proc/
|
||||||
|
@ -105,14 +110,15 @@ sub_start() {
|
||||||
|
|
||||||
sub_stop() {
|
sub_stop() {
|
||||||
set -e
|
set -e
|
||||||
|
jail=$1
|
||||||
check_jail $jail
|
check_jail $jail
|
||||||
status=`check_jail_on $jail`
|
status=$(check_jail_on $jail)
|
||||||
if [ $status == "OFF" ]; then
|
if [ $status == "OFF" ]; then
|
||||||
echo "Jail $jail is not running !"
|
echo "Jail $jail is not running !" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
pid=`cat ${JAILDIR}/${jail}/${SSHD_PID}`
|
pid=$(cat ${JAILDIR}/${jail}/${SSHD_PID})
|
||||||
ps --ppid $pid -o pid=| while read conn; do
|
for conn in $(ps --ppid $pid -o pid=); do
|
||||||
kill $conn
|
kill $conn
|
||||||
done
|
done
|
||||||
kill $pid
|
kill $pid
|
||||||
|
@ -125,8 +131,9 @@ sub_stop() {
|
||||||
|
|
||||||
sub_reload() {
|
sub_reload() {
|
||||||
set -e
|
set -e
|
||||||
|
jail=$1
|
||||||
check_jail $jail
|
check_jail $jail
|
||||||
status=`check_jail_on $jail`
|
status=$(check_jail_on $jail)
|
||||||
if [ $status == "ON" ]; then
|
if [ $status == "ON" ]; then
|
||||||
pkill -HUP -F ${JAILDIR}/${jail}/${SSHD_PID}
|
pkill -HUP -F ${JAILDIR}/${jail}/${SSHD_PID}
|
||||||
fi
|
fi
|
||||||
|
@ -134,6 +141,7 @@ sub_reload() {
|
||||||
|
|
||||||
sub_restart() {
|
sub_restart() {
|
||||||
set -e
|
set -e
|
||||||
|
jail=$1
|
||||||
check_jail $jail
|
check_jail $jail
|
||||||
$0 stop $jail
|
$0 stop $jail
|
||||||
$0 start $jail
|
$0 start $jail
|
||||||
|
@ -141,8 +149,9 @@ sub_restart() {
|
||||||
|
|
||||||
sub_key() {
|
sub_key() {
|
||||||
set -e
|
set -e
|
||||||
|
jail=$1
|
||||||
|
keyfile=$2
|
||||||
check_jail $jail
|
check_jail $jail
|
||||||
keyfile=$3
|
|
||||||
if [ -n "$keyfile" ]; then
|
if [ -n "$keyfile" ]; then
|
||||||
set_key $jail $keyfile
|
set_key $jail $keyfile
|
||||||
else
|
else
|
||||||
|
@ -152,9 +161,10 @@ sub_key() {
|
||||||
|
|
||||||
sub_port() {
|
sub_port() {
|
||||||
set -e
|
set -e
|
||||||
|
jail=$1
|
||||||
|
port=$2
|
||||||
check_jail $jail
|
check_jail $jail
|
||||||
port=$3
|
pre_port=$(get_port $jail)
|
||||||
pre_port=`get_port $jail`
|
|
||||||
if [ -z $port ]; then
|
if [ -z $port ]; then
|
||||||
echo "$pre_port"
|
echo "$pre_port"
|
||||||
else
|
else
|
||||||
|
@ -165,19 +175,21 @@ sub_port() {
|
||||||
|
|
||||||
sub_status() {
|
sub_status() {
|
||||||
set -e
|
set -e
|
||||||
|
jail=$1
|
||||||
check_jail $jail
|
check_jail $jail
|
||||||
inc=`check_inc jail`
|
inc=$(check_inc $jail)
|
||||||
status=`check_jail_on $jail`
|
status=$(check_jail_on $jail)
|
||||||
port=`get_port $jail`
|
port=$(get_port $jail)
|
||||||
echo "$jail : $status ($port) -> $inc"
|
echo "$jail : $status ($port) -> $inc"
|
||||||
}
|
}
|
||||||
|
|
||||||
sub_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
|
echo -n "hard copy $jail begins at : " >> $LOGFILE
|
||||||
/bin/date +"%d-%m-%Y ; %H:%M" >> $LOGFILE
|
/bin/date +"%d-%m-%Y ; %H:%M" >> $LOGFILE
|
||||||
mkdir -p ${INCDIR}${jail}
|
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
|
echo -n "hard copy $i ends at : " >> $LOGFILE
|
||||||
/bin/date +"%d-%m-%Y ; %H:%M" >> $LOGFILE
|
/bin/date +"%d-%m-%Y ; %H:%M" >> $LOGFILE
|
||||||
done #| tee -a $LOGFILE | mail -s "[info] EvoBackup - create incs" $MYMAIL
|
done #| tee -a $LOGFILE | mail -s "[info] EvoBackup - create incs" $MYMAIL
|
||||||
|
@ -192,9 +204,9 @@ sub_rm() {
|
||||||
|
|
||||||
# list non-obsolete inc backups
|
# list non-obsolete inc backups
|
||||||
for j in $( cat $CONFDIR$i ); do
|
for j in $( cat $CONFDIR$i ); do
|
||||||
MYDATE=$( echo $j | cut -d. -f1 )
|
date=$( echo $j | cut -d. -f1 )
|
||||||
BEFORE=$( echo $j | cut -d. -f2 )
|
before=$( echo $j | cut -d. -f2 )
|
||||||
date -d "$(date $MYDATE) $BEFORE" "+%Y-%m-%d"
|
date -d "$(date $date) $before" "+%Y-%m-%d"
|
||||||
done > "$TMPDIR"$i.keep
|
done > "$TMPDIR"$i.keep
|
||||||
|
|
||||||
# delete obsolete inc backups
|
# delete obsolete inc backups
|
||||||
|
@ -208,14 +220,13 @@ sub_rm() {
|
||||||
/bin/date +"%d-%m-%Y ; %H:%M" >> $LOGFILE
|
/bin/date +"%d-%m-%Y ; %H:%M" >> $LOGFILE
|
||||||
done
|
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
|
rm -rf $TMPDIR $EMPTYDIR
|
||||||
}
|
}
|
||||||
|
|
||||||
check_jail() {
|
check_jail() {
|
||||||
jail=$1
|
jail=$1
|
||||||
if [ ! -d ${JAILDIR}/${jail} ]; then
|
if [ ! -d ${JAILDIR}/${jail} ]; then
|
||||||
echo "$jail doesn't exits !" >/dev/stderr
|
echo "$jail doesn't exits !" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -224,7 +235,7 @@ check_jail_on() {
|
||||||
jail=$1
|
jail=$1
|
||||||
status="OFF"
|
status="OFF"
|
||||||
if [ -f ${JAILDIR}/${jail}/${SSHD_PID} ]; then
|
if [ -f ${JAILDIR}/${jail}/${SSHD_PID} ]; then
|
||||||
pid=`cat ${JAILDIR}/${jail}/${SSHD_PID}`
|
pid=$(cat ${JAILDIR}/${jail}/${SSHD_PID})
|
||||||
ps -p $pid > /dev/null
|
ps -p $pid > /dev/null
|
||||||
if [ $? == 0 ]; then
|
if [ $? == 0 ]; then
|
||||||
status="ON "
|
status="ON "
|
||||||
|
@ -239,8 +250,8 @@ check_inc() {
|
||||||
jail=$1
|
jail=$1
|
||||||
inc="0"
|
inc="0"
|
||||||
if [ -f ${CONFDIR}/${jail} ]; then
|
if [ -f ${CONFDIR}/${jail} ]; then
|
||||||
day=`grep -c "day" ${CONFDIR}/${jail}`
|
day=$(grep -c "day" ${CONFDIR}/${jail})
|
||||||
month=`grep -c "month" ${CONFDIR}/${jail}`
|
month=$(grep -c "month" ${CONFDIR}/${jail})
|
||||||
inc="${day}/${month}"
|
inc="${day}/${month}"
|
||||||
fi
|
fi
|
||||||
echo $inc
|
echo $inc
|
||||||
|
@ -248,7 +259,7 @@ check_inc() {
|
||||||
|
|
||||||
get_port() {
|
get_port() {
|
||||||
jail=$1
|
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
|
echo $port
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,13 +290,16 @@ set_key() {
|
||||||
cat $keyfile > ${JAILDIR}/${jail}/${AUTHORIZED_KEYS}
|
cat $keyfile > ${JAILDIR}/${jail}/${AUTHORIZED_KEYS}
|
||||||
chmod 600 ${JAILDIR}/${jail}/${AUTHORIZED_KEYS}
|
chmod 600 ${JAILDIR}/${jail}/${AUTHORIZED_KEYS}
|
||||||
else
|
else
|
||||||
echo "Keyfile $keyfile dosen't exist !"
|
echo "Keyfile $keyfile dosen't exist !" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
mkdir -p $CONFDIR $JAILDIR $INCDIR
|
||||||
subcommand=$1
|
subcommand=$1
|
||||||
jail=$2
|
jail=$2
|
||||||
|
option=$3
|
||||||
case $subcommand in
|
case $subcommand in
|
||||||
"" | "-h" | "--help")
|
"" | "-h" | "--help")
|
||||||
sub_help
|
sub_help
|
||||||
|
@ -293,7 +307,7 @@ case $subcommand in
|
||||||
"inc" | "rm")
|
"inc" | "rm")
|
||||||
pkill -f /run/bkctl.pid #| mail -s "[warn] EvoBackup - purge incs interrupted" $MYMAIL
|
pkill -f /run/bkctl.pid #| mail -s "[warn] EvoBackup - purge incs interrupted" $MYMAIL
|
||||||
rm -f /run/bkctl.pid
|
rm -f /run/bkctl.pid
|
||||||
sub_${subcommand} $@ &
|
sub_${subcommand} $jail &
|
||||||
echo $! > /run/bkctl.pid
|
echo $! > /run/bkctl.pid
|
||||||
;;
|
;;
|
||||||
"init" | "key" | "port")
|
"init" | "key" | "port")
|
||||||
|
@ -301,7 +315,7 @@ case $subcommand in
|
||||||
sub_help
|
sub_help
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
sub_${subcommand} $@
|
sub_${subcommand} $jail $option
|
||||||
;;
|
;;
|
||||||
"start" | "stop" | "reload" | "restart")
|
"start" | "stop" | "reload" | "restart")
|
||||||
if [ -z $jail ]; then
|
if [ -z $jail ]; then
|
||||||
|
@ -309,26 +323,29 @@ case $subcommand in
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if [ $jail = "all" ]; then
|
if [ $jail = "all" ]; then
|
||||||
for jail in `ls $JAILDIR`; do
|
for jail in $(ls $JAILDIR); do
|
||||||
$0 ${subcommand} $jail
|
$0 ${subcommand} $jail
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
sub_${subcommand} $@
|
sub_${subcommand} $jail
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
"status")
|
"status")
|
||||||
if [ -z $jail ]; then
|
if [ -z $jail ]; then
|
||||||
for jail in `ls $JAILDIR`; do
|
for jail in $(ls $JAILDIR); do
|
||||||
$0 status $jail
|
$0 status $jail
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
sub_${subcommand} $@
|
sub_${subcommand} $jail
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
shift
|
shift
|
||||||
echo "Error: '$subcommand' is not a known subcommand." >&2
|
echo "Error: '$subcommand' is not a known subcommand." >&2
|
||||||
echo " Run '$ProgName --help' for a list of known subcommands." >&2
|
sub_help
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
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`
|
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
|
source /etc/default/evobackup
|
||||||
|
|
||||||
grep -q usr /etc/fstab
|
grep -q usr /etc/fstab
|
||||||
|
@ -10,9 +12,9 @@ if [ $? == 0 ]; then
|
||||||
mount -o remount,rw /usr
|
mount -o remount,rw /usr
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p $TPLDIR
|
mkdir -m 0755 -p $TPLDIR
|
||||||
cp $dir/etc/* $TPLDIR
|
cp -v $dir/tpl/* $TPLDIR
|
||||||
cp $dir/bkctl /usr/local/sbin/
|
install -m 0755 -v $dir/bkctl /usr/local/sbin/
|
||||||
|
|
||||||
crontab -l|grep -q bkctl
|
crontab -l|grep -q bkctl
|
||||||
if [ $? != 0 ]; then
|
if [ $? != 0 ]; then
|
||||||
|
@ -21,13 +23,13 @@ fi
|
||||||
|
|
||||||
dpkg -l sysvinit >/dev/null
|
dpkg -l sysvinit >/dev/null
|
||||||
if [ $? == 0 ]; then
|
if [ $? == 0 ]; then
|
||||||
cp $dir/evobackup /etc/init.d/evobackup
|
install -m 0755 -v $dir/tpl/evobackup /etc/init.d/evobackup
|
||||||
insserv evobackup
|
insserv evobackup
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dpkg -l systemd >/dev/null
|
dpkg -l systemd >/dev/null
|
||||||
if [ $? == 0 ] ; then
|
if [ $? == 0 ] ; then
|
||||||
#cp evobackup@.service /etc/systemd/system/evobackup@.service
|
#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
|
systemctl enable evobackup
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -9,9 +9,6 @@
|
||||||
# Short-Description: Backup manager using rsync and OpenSSH chroot.
|
# Short-Description: Backup manager using rsync and OpenSSH chroot.
|
||||||
### END INIT INFO
|
### END INIT INFO
|
||||||
|
|
||||||
set -e
|
|
||||||
. /etc/default/evobackup
|
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
start)
|
start)
|
||||||
bkctl start all
|
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