Browse Source

Fix non-TTY envs + local repositories as option + better failure management

master
Guillaume REMBERT 7 years ago
parent
commit
b689d08384
10 changed files with 195 additions and 94 deletions
  1. +3
    -3
      README
  2. +54
    -16
      cfg/sw/eurybox.conf
  3. +20
    -20
      sw/src/eurybox.functions.backup
  4. +9
    -5
      sw/src/eurybox.functions.check
  5. +1
    -1
      sw/src/eurybox.functions.create
  6. +1
    -2
      sw/src/eurybox.functions.euryboxctrl
  7. +40
    -19
      sw/src/eurybox.functions.tools
  8. +12
    -8
      sw/src/eurybox.functions.update
  9. +50
    -18
      sw/src/eurybox.functions.vm
  10. +5
    -2
      sw/src/exploitation_center/core/update/eurybox_update

+ 3
- 3
README View File

@@ -1,7 +1,7 @@
-------------------------------
Project: EuryBOX
Version: 1.0.0
Date: 2016/04/02
Status: beta
-------------------------------
Author(s):
Guillaume REMBERT
@@ -53,8 +53,8 @@ FIXME: TBD / Features, supported platforms, etc
-------------------------------
\ cfg (ConFiGuration): configuration files
-------------------------------
\ hw (HardWare): TBD
\ sw (SoftWare): TBD
\ hw (HardWare): physical configuration elements
\ sw (SoftWare): logical configuration elements
-------------------------------
\ doc (DOCumentation): documentation
-------------------------------


+ 54
- 16
cfg/sw/eurybox.conf View File

@@ -1,6 +1,14 @@
#!/bin/bash
#EuryBOX configuration file

#Script has to be run with sudo permissions
#To be run from crontab:
#/etc/sudoers ==> #Defaults requiretty
#/etc/sudoers ==> #Defaults !visiblepw
#crontab -e ==> * * * * * flock -n /eurybox-install-dir/update.lock -c /eurybox-install-dir/sw/src/exploitation_center/core/update/eurybox_update >> /eurybox-install-dir/update.log 2>&1



###################################
### SCRIPT EXECUTION PARAMETERS ###
###################################
@@ -11,15 +19,19 @@ EURYBOX_CORPORATE="My Corporate"
#Can be: debug, verbose, info, warning or error
EURYBOX_LOG_LEVEL="info"
#Max retry on failure before stopping execution
EURYBOX_MAX_RETRY_ON_FAILURE="5"
EURYBOX_MAX_RETRY_ON_FAILURE="10"
#Errors temporisation time between trials (in seconds)
EURYBOX_ERROR_TEMPORISATION_TIME="5"
#Network calls timeout (in seconds)
EURYBOX_NETWORK_TIMEOUT="1"
EURYBOX_NETWORK_TIMEOUT="2"
#Version
EURYBOX_VERSION="1.0"

#Folder used for temporary operations
EURYBOX_TMP_FOLDER="/tmp/bkp"



##############################
### ENVIRONMENT PARAMETERS ###
##############################
@@ -49,22 +61,19 @@ EURYBOX_SERVICES=(
[1,PORT]="22"
[1,USER]="root"
[1,OS]="openbsd5"
# [1,DISK]="/vm_storage/images/gw001m_dvd.iso"
## [1,SERV]="GATEWAY"
## [1,TYPE]="pf"
[1,DISK]=""
[2,NAME]="srv001m"
[2,HOST]="srv001m.$EURYBOX_DOMAIN"
[2,PORT]="22"
[2,USER]="root"
[2,OS]="centos7"
# [2,DISK]="/vm_storage/images/srv001m_hdd1.qcow2 /vm_storage/images/srv001m_hdd2.qcow2 /home/vm_store/service001b.qcow2"
## [2,SERV]="DHCP"
## [2,TYPE]="dhcpd"
[2,DISK]="/isos_store/additionnaldisk1.iso /isos_store/additionnaldisk2.iso"
)

#Services number (linked to the number of parameters per service)
#Should not have to be changed
EURYBOX_SERVICES_NUMBER=`expr ${#EURYBOX_SERVICES[@]} / 5`
EURYBOX_SERVICES_NUMBER=`expr ${#EURYBOX_SERVICES[@]} / 6`



#########################
@@ -86,7 +95,7 @@ EURYBOX_BACKUP_LOW_CRITICAL_LEVEL="20000000"

#Post-Backup Commands

#Backup targets (in addition to services attached disks backup and additionnal disks from config)
#Backup targets (in addition to services attached disks and optionnal additionnal disks from config)
EURYBOX_BACKUP_TARGETS=(
# [0]="/var/log"
# [1]="/etc"
@@ -144,26 +153,45 @@ EURYBOX_BACKUP_DESTINATION=(
[PASSWORD]="MyStrongFTPPassword"
)



##########################
### RESTORE PARAMETERS ###
##########################

#Restore target configuration
#Can be: interactive
#interactive => prompt from shell for restore target
EURYBOX_RESTORE_PARAMETERS_ACQUISITION="interactive"

#Restore type
#Can be: cloned_vm, cloned_full, full
#cloned_vm => restore vm(s) from archive as is
#cloned_full => restore hv as vm(s) from archive as is
#full => restore hv as vm(s) and refresh configurations elements
EURYBOX_RESTORE_TYPE="cloned_vm"

#Restore mode
#Can be: safe/fast
#safe => verify archive to ensure recovery process security
#fast => disable some verifications on archive to speedup recovery speed
EURYBOX_RESTORE_MODE="safe"



#########################
### UPDATE PARAMETERS ###
#########################
declare -A EURYBOX_UPDATE_LOCAL_REPOSITORIES

#Activation of local repositories update
#Can be: true/false
EURYBOX_UPDATE_LOCAL_REPOSITORIES_ACTIVATED="true"

#Local repositories storage path
EURYBOX_UPDATE_LOCAL_REPOSITORIES_PATH="/home/local_repositories"

#Target repositories
#NB: URI scheme follow rsync conventions / read rsync man to get all details
EURYBOX_UPDATE_LOCAL_REPOSITORIES=(
[1,NAME]="centos7"
@@ -178,18 +206,20 @@ EURYBOX_UPDATE_LOCAL_REPOSITORIES=(
[4,NAME]="archlinux"
[4,ARCH]="x86_64"
[4,URI]="fooo.biz::archlinux/"
[5,NAME]="ubuntu16"
[5,ARCH]="amd64"
[5,URI]="archive.ubuntu.com::ubuntu/dists/xenial/"
[5,NAME]="ubuntu"
[5,ARCH]=""
[5,URI]="archive.ubuntu.com::ubuntu/"
[6,NAME]="fedora24"
[6,ARCH]="x86_64"
[6,URI]="fr2.rpmfind.net::linux/fedora/linux/releases/24/"
[7,NAME]="debian8"
[7,ARCH]="arm64"
[7,URI]="ftp.fr.debian.org::debian/dists/jessie/"
[7,NAME]="debian"
[7,ARCH]=""
[7,URI]="ftp.fr.debian.org::debian/"
)
EURYBOX_UPDATE_LOCAL_REPOSITORIES_NUMBER=`expr ${#EURYBOX_UPDATE_LOCAL_REPOSITORIES[@]} / 3`



###############################
### EXEC COMMAND PARAMETERS ###
###############################
@@ -205,3 +235,11 @@ EURYBOX_EXEC_COMMANDS=(
[2,OS]="all"
)
EURYBOX_EXEC_COMMANDS_NUMBER=`expr ${#EURYBOX_EXEC_COMMANDS[@]} / 2`


#TODO: ADD HOSTED SERVICE CONFIGURATION MANAGEMENT
## [1,SERV]="GATEWAY"
## [1,TYPE]="pf"
## [2,SERV]="DHCP"
## [2,TYPE]="dhcpd"


+ 20
- 20
sw/src/eurybox.functions.backup View File

@@ -76,9 +76,9 @@ eurybox_backup_mount_target ()
STATUS=$?
if [[ !($STATUS -eq 0) ]]
then
eurybox_display_message warning BACKUP "Backup target $BKP_PROTOCOL server unreacheable on host $BKP_HOST / port $BKP_PORT - trying to contact again in 5 seconds - error $STATUS\n$NB_TRY_LEFT left"
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
sleep 5
eurybox_display_message warning BACKUP "Backup target $BKP_PROTOCOL server unreacheable on host $BKP_HOST / port $BKP_PORT - trying to contact again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
else
eurybox_display_message debug BACKUP "Backup target $BKP_PROTOCOL server reached on host $BKP_HOST / port $BKP_PORT"
case $BKP_PROTOCOL in
@@ -87,9 +87,9 @@ eurybox_backup_mount_target ()
STATUS=$?
if [[ !($STATUS -eq 0) ]]
then
eurybox_display_message warning BACKUP "Backup target NFS server not registred on destination - trying to contact again in 5 seconds - error $STATUS:\n$NFS_OUT\n$NB_TRY_LEFT left"
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
sleep 5
eurybox_display_message warning BACKUP "Backup target NFS server not registred on destination - trying to contact again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS:\n$NFS_OUT\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
else
eurybox_display_message debug BACKUP "Backup target $BKP_PROTOCOL server reached on host $BKP_HOST / port $BKP_PORT\n$NFS_OUT"
MOUNT_OUT=`sudo mount $MOUNT_OPTIONS $EURYBOX_MNT_NFS_OPTIONS -o proto=tcp,port=${BKP_PORT} -t $BKP_TYPE ${BKP_HOST}:${BKP_DEST} ${BKP_MOUNT} 2>&1`
@@ -97,8 +97,8 @@ eurybox_backup_mount_target ()
if [[ !($STATUS -eq 0) ]]
then
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message warning BACKUP "Backup target NFS mount failed and target folder is empty - trying to mount again in 5 seconds - error $STATUS:\n$MOUNT_OUT\n$NB_TRY_LEFT left"
sleep 5
eurybox_display_message warning BACKUP "Backup target NFS mount failed and target folder is empty - trying to mount again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS:\n$MOUNT_OUT\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
fi
fi
;;
@@ -108,9 +108,9 @@ eurybox_backup_mount_target ()
STATUS=$?
if [[ !($STATUS -eq 0) ]]
then
eurybox_display_message warning BACKUP "Backup SSH server unreacheable on host $BKP_HOST / port $BKP_PORT - trying to contact again in 5 seconds - error $STATUS:\n$SSH_OUT\n$NB_TRY_LEFT left"
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
sleep 5
eurybox_display_message warning BACKUP "Backup SSH server unreacheable on host $BKP_HOST / port $BKP_PORT - trying to contact again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS:\n$SSH_OUT\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
else
eurybox_display_message debug BACKUP "Backup target $BKP_PROTOCOL server reached on host $BKP_HOST / port $BKP_PORT\n$SSH_OUT"
MOUNT_OUT=`sshfs $EURYBOX_MNT_SSHFS_OPTIONS -p $BKP_PORT ${BKP_USER}@${BKP_HOST}:${BKP_DEST} ${BKP_MOUNT} 2>&1`
@@ -118,8 +118,8 @@ eurybox_backup_mount_target ()
if [[ !($STATUS -eq 0) ]]
then
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message warning BACKUP "Backup target SSHFS mount failed - trying to mount again in 5 seconds - error $STATUS:\n$MOUNT_OUT\n$NB_TRY_LEFT left"
sleep 5
eurybox_display_message warning BACKUP "Backup target SSHFS mount failed - trying to mount again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS:\n$MOUNT_OUT\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
fi
fi
;;
@@ -129,9 +129,9 @@ eurybox_backup_mount_target ()
STATUS=$?
if [[ !($STATUS -eq 0) ]]
then
eurybox_display_message warning BACKUP "Backup target $BKP_PROTOCOL server unreacheable on host $BKP_HOST / port $BKP_PORT - trying to contact again in 5 seconds - error $STATUS:\n$FTP_OUT\n$NB_TRY_LEFT left"
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
sleep 5
eurybox_display_message warning BACKUP "Backup target $BKP_PROTOCOL server unreacheable on host $BKP_HOST / port $BKP_PORT - trying to contact again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS:\n$FTP_OUT\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
else
eurybox_display_message debug BACKUP "Backup target $BKP_PROTOCOL server reached on host $BKP_HOST / port $BKP_PORT\n$FTP_OUT"
MOUNT_OUT=`sudo curlftpfs $EURYBOX_MNT_FTPFS_OPTIONS ftp://${BKP_USER}:${BKP_PASSWORD}@${BKP_HOST}:${BKP_PORT}${BKP_DEST} ${BKP_MOUNT} 2>&1`
@@ -139,8 +139,8 @@ eurybox_backup_mount_target ()
if [[ !($STATUS -eq 0) ]]
then
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message warning BACKUP "Backup target FTPFS mount failed - trying to mount again in 5 seconds - error $STATUS:\n$MOUNT_OUT\n$NB_TRY_LEFT left"
sleep 5
eurybox_display_message warning BACKUP "Backup target FTPFS mount failed - trying to mount again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS:\n$MOUNT_OUT\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
fi
fi
;;
@@ -153,9 +153,9 @@ eurybox_backup_mount_target ()
STATUS=$?
if [[ !($STATUS -eq 0) ]]
then
eurybox_display_message warning BACKUP "Backup target ${BKP_PART} not found - trying to detect device again in 5 seconds - error $STATUS:\n$PART_OUT\n$NB_TRY_LEFT left"
eurybox_display_message warning BACKUP "Backup target ${BKP_PART} not found - trying to detect device again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS:\n$PART_OUT\n$NB_TRY_LEFT left"
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
sleep 5
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
else
eurybox_display_message message BACKUP "Backup device partition ${BKP_PART} detected"
eurybox_display_message debug BACKUP "Partition detection command output:\n$PART_OUT"
@@ -163,9 +163,9 @@ eurybox_backup_mount_target ()
STATUS=$?
if [[ !($STATUS -eq 0) ]]
then
eurybox_display_message warning BACKUP "Backup target ${BKP_PART} mount failed - trying to mount partition again in 5 seconds - error $STATUS:\n$MOUNT_OUT\n$NB_TRY_LEFT left"
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
sleep 5
eurybox_display_message warning BACKUP "Backup target ${BKP_PART} mount failed - trying to mount partition again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS:\n$MOUNT_OUT\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
fi
fi
;;
@@ -270,8 +270,8 @@ eurybox_backup_umount_target ()
if [[ !($STATUS -eq 0) ]]
then
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message warning BACKUP "Backup target unmount failed and target folder is not empty. Trying to unmount again in 5 seconds - error $STATUS\n$UMOUNT_OUT\n$NB_TRY_LEFT left"
sleep 5
eurybox_display_message warning BACKUP "Backup target unmount failed and target folder is not empty. Trying to unmount again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS\n$UMOUNT_OUT\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
fi
;;
* )


+ 9
- 5
sw/src/eurybox.functions.check View File

@@ -95,7 +95,7 @@ eurybox_check_configuration ()
eurybox_display_message message CHECK "Hypervisor: ${EURYBOX_HYPERVISOR[*]}"
for ((EURYBOX_SERVICES_NUM=1;EURYBOX_SERVICES_NUM<=$EURYBOX_SERVICES_NUMBER;EURYBOX_SERVICES_NUM++));
do
eurybox_display_message message CHECK "Target service: host:${EURYBOX_SERVICES[$EURYBOX_SERVICES_NUM,HOST]}, name: ${EURYBOX_SERVICES[$EURYBOX_SERVICES_NUM,NAME]}, ssh user: ${EURYBOX_SERVICES[$EURYBOX_SERVICES_NUM,USER]}, ssh port: ${EURYBOX_SERVICES[$EURYBOX_SERVICES_NUM,PORT]}, OS: ${EURYBOX_SERVICES[$EURYBOX_SERVICES_NUM,OS]}, disks: ${EURYBOX_SERVICES[$EURYBOX_SERVICES_NUM,DISK]}"
eurybox_display_message message CHECK "Target service: host:${EURYBOX_SERVICES[$EURYBOX_SERVICES_NUM,HOST]}, name: ${EURYBOX_SERVICES[$EURYBOX_SERVICES_NUM,NAME]}, ssh user: ${EURYBOX_SERVICES[$EURYBOX_SERVICES_NUM,USER]}, ssh port: ${EURYBOX_SERVICES[$EURYBOX_SERVICES_NUM,PORT]}, OS: ${EURYBOX_SERVICES[$EURYBOX_SERVICES_NUM,OS]}, additional disks: ${EURYBOX_SERVICES[$EURYBOX_SERVICES_NUM,DISK]}"
done
eurybox_display_message debug CHECK "Services number: $EURYBOX_SERVICES_NUMBER"
fi
@@ -154,6 +154,7 @@ eurybox_check_configuration ()
eurybox_display_message error CHECK "Bad hypervisor type: ${EURYBOX_HYPERVISOR[TYPE]}"
;;
esac
EURYBOX_RSYNC_OPTIONS="-azHmS --timeout=$EURYBOX_NETWORK_TIMEOUT"
EURYBOX_SSH_OPTIONS="-oPasswordAuthentication=no -oConnectTimeout=$EURYBOX_NETWORK_TIMEOUT -oConnectionAttempts=$EURYBOX_MAX_RETRY_ON_FAILURE"
EURYBOX_NMAP_OPTIONS="--host-timeout $EURYBOX_NETWORK_TIMEOUT --max-retries $EURYBOX_MAX_RETRY_ON_FAILURE"
EURYBOX_LS_OPTIONS="-x"
@@ -163,6 +164,7 @@ eurybox_check_configuration ()
case $EURYBOX_LOG_LEVEL in
debug )
set -xv
EURYBOX_RSYNC_OPTIONS+=" -v"
EURYBOX_SSH_OPTIONS+=" -oLogLevel=debug"
EURYBOX_NMAP_OPTIONS+=" -d9 -v3"
EURYBOX_LS_OPTIONS+=" -a"
@@ -173,6 +175,7 @@ eurybox_check_configuration ()
;;
verbose )
set -v
EURYBOX_RSYNC_OPTIONS+=" -v"
EURYBOX_SSH_OPTIONS+=" -oLogLevel=verbose"
EURYBOX_NMAP_OPTIONS+=" -d0 -v2"
EURYBOX_LS_OPTIONS+=" -l"
@@ -201,13 +204,14 @@ eurybox_check_configuration ()
EURYBOX_MNT_SSHFS_OPTIONS+=" -oLogLevel=error"
;;
esac
eurybox_display_message debug CHECK "ssh options: $EURYBOX_SSH_OPTIONS"
eurybox_display_message debug CHECK "nmap options: $EURYBOX_NMAP_OPTIONS"
eurybox_display_message debug CHECK "ftpfs mount options: $EURYBOX_MNT_FTPFS_OPTIONS"
eurybox_display_message debug CHECK "ls options: $EURYBOX_LS_OPTIONS"
eurybox_display_message debug CHECK "virsh options: $EURYBOX_VIRSH_OPTIONS"
eurybox_display_message debug CHECK "nfs mount options: $EURYBOX_MNT_NFS_OPTIONS"
eurybox_display_message debug CHECK "nmap options: $EURYBOX_NMAP_OPTIONS"
eurybox_display_message debug CHECK "rsync options: $EURYBOX_RSYNC_OPTIONS"
eurybox_display_message debug CHECK "ssh options: $EURYBOX_SSH_OPTIONS"
eurybox_display_message debug CHECK "sshfs mount options: $EURYBOX_MNT_SSHFS_OPTIONS"
eurybox_display_message debug CHECK "ftpfs mount options: $EURYBOX_MNT_FTPFS_OPTIONS"
eurybox_display_message debug CHECK "virsh options: $EURYBOX_VIRSH_OPTIONS"
}

#Desc: verify the archive ECCF and try to repair it


+ 1
- 1
sw/src/eurybox.functions.create View File

@@ -85,7 +85,7 @@ eurybox_create_archive_tar ()
fi
if [[ !($STATUS -eq 0) ]]
then
eurybox_display_message error CREATE "Archive creation failed - error: $STATUS:\n$TAR_OUT"
eurybox_display_message warning CREATE "Archive creation failed - error: $STATUS:\n$TAR_OUT"
else
eurybox_display_message message CREATE "Archive creation - OK"
eurybox_display_message debug CREATE "Tar command output:\n$TAR_OUT"


+ 1
- 2
sw/src/eurybox.functions.euryboxctrl View File

@@ -13,8 +13,6 @@ euryboxctrl_check_all_vm_halted ()

euryboxctrl_check_all_services_halted ()
{
#Check that no vm at all are still running
## EURYBOX_VM_NAME=`sudo virsh $EURYBOX_VIRSH_OPTIONS list | awk '(NR>2) && ($0 != "") {print $2}'`
local EURYBOX_VM_NAME
#Check that no services vm are still running
for ((EURYBOX_SERVICES_NUM=EURYBOX_SERVICES_NUMBER;EURYBOX_SERVICES_NUM>=1;EURYBOX_SERVICES_NUM--));
@@ -99,6 +97,7 @@ euryboxctrl_create_sign ()

euryboxctrl_discover_available_archives ()
{
local LNAME
#Mount backup target
eurybox_display_message message EURYBOXCTRL "Mounting backup origin"
eurybox_backup_mount_target


+ 40
- 19
sw/src/eurybox.functions.tools View File

@@ -64,47 +64,68 @@ eurybox_display_message ()
debug )
if [[ $EURYBOX_LOG_LEVEL = "debug" || $EURYBOX_LOG_LEVEL = "verbose" ]]
then
tput setb 0
tput setaf 6
if [ -t 1 ]
then
tput setb 0
tput setaf 6
fi
printf "$NOW [EURYBOX][$CATEGORY][DEBUG] %b\n" "$MESSAGE"
fi
;;
message )
if [[ $EURYBOX_LOG_LEVEL = "debug" || $EURYBOX_LOG_LEVEL = "info" || $EURYBOX_LOG_LEVEL = "verbose" ]]
then
tput setb 0
tput setaf 2
if [ -t 1 ]
then
tput setb 0
tput setaf 2
fi
printf "$NOW [EURYBOX][$CATEGORY][INFO] %b\n" "$MESSAGE"
fi
;;
warning )
if [[ $EURYBOX_LOG_LEVEL = "debug" || $EURYBOX_LOG_LEVEL = "info" || $EURYBOX_LOG_LEVEL = "verbose" || $EURYBOX_LOG_LEVEL = "warning" ]]
then
tput setb 0
tput setaf 1
if [ -t 1 ]
then
tput setb 0
tput setaf 1
fi
printf "$NOW [EURYBOX][$CATEGORY][WARNING] %b\n" "$MESSAGE"
fi
;;
error )
if [[ $EURYBOX_LOG_LEVEL = "debug" || $EURYBOX_LOG_LEVEL = "info" || $EURYBOX_LOG_LEVEL = "verbose" || $EURYBOX_LOG_LEVEL = "warning" || $EURYBOX_LOG_LEVEL = "error" ]]
then
tput setb 0
tput setaf 1
printf "$NOW [EURYBOX][$CATEGORY][ERROR] %b\n" "$MESSAGE"
tput setb 0
tput sgr0
printf "Stopping script execution\n"
exit 1
if [ -t 1 ]
then
tput setb 0
tput setaf 1
fi
printf "$NOW [EURYBOX][$CATEGORY][ERROR] %b\n" "$MESSAGE"
if [ -t 1 ]
then
tput setb 0
tput sgr0
fi
printf "Stopping script execution\n"
exit 1
fi
;;
* )
tput sgr0
* )
if [ -t 1 ]
then
tput sgr0
fi
printf "$NOW [EURYBOX][SYNTAX][ERROR] Bad log level message. Stopping script execution\n"
exit 1
;;
esac
tput setb 0
tput sgr0
if [ -t 1 ]
then
tput setb 0
tput sgr0
fi
}

#Desc: echo detected archives, sorted by name, year and month
@@ -283,9 +304,9 @@ eurybox_exec_ssh_command ()
eurybox_display_message message TOOLS "Command execution - OK: $CMD"
eurybox_display_message debug TOOLS "Command execution output:\n$CMD_OUT"
else
eurybox_display_message warning TOOLS "Command execution failed - trying again in 5 seconds - error $STATUS:\n$CMD_OUT\n$NB_TRY_LEFT left"
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
sleep 5
eurybox_display_message warning TOOLS "Command execution failed - trying again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS:\n$CMD_OUT\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
fi
done
if [[ $NB_TRY_LEFT -eq 0 ]]


+ 12
- 8
sw/src/eurybox.functions.update View File

@@ -40,12 +40,13 @@ eurybox_update_hv ()
EURYBOX_HV_UPDATED=1
else
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message debug UPDATE "Hypervisor update failed - trying again - error $STATUS:\n$UPDATE_OUT\n$NB_TRY_LEFT left"
eurybox_display_message debug UPDATE "Hypervisor update failed - trying again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS:\n$UPDATE_OUT\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
fi
done
if [[ $NB_TRY_LEFT -eq 0 ]]
then
eurybox_display_message error UPDATE "Hypervisor update failed - no success after $EURYBOX_MAX_RETRY_ON_FAILURE attempts - error $STATUS:\n${UPDATE_OUT}"
eurybox_display_message warning UPDATE "Hypervisor update failed - no success after $EURYBOX_MAX_RETRY_ON_FAILURE attempts - error $STATUS:\n${UPDATE_OUT}"
else
eurybox_display_message message UPDATE "Hypervisor update OK"
eurybox_display_message debug UPDATE "Update command output:\n$UPDATE_OUT"
@@ -95,7 +96,8 @@ eurybox_update_vm ()
EURYBOX_VM_UPDATED=1
else
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message debug UPDATE "VM $NAME update failed - trying again - error $STATUS:\n$UPDATE_OUT\n$NB_TRY_LEFT left"
eurybox_display_message debug UPDATE "VM $NAME update failed - trying again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds - error $STATUS:\n$UPDATE_OUT\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
fi
done
if [[ $NB_TRY_LEFT -eq 0 ]]
@@ -130,11 +132,11 @@ eurybox_update_local_repository ()
URI=${EURYBOX_UPDATE_LOCAL_REPOSITORIES[${REPO_NUM},URI]}
eurybox_display_message message UPDATE "Updating repository : $NAME - arch: $ARCH - uri: $URI"
MKDIR_OUT=`sudo mkdir -p ${REPO_PATH}/${NAME}/${ARCH}`
UPDATE_OUT=`sudo sh -c "rsync -avzHm --include=**${ARCH}** --include=*/ --exclude=* $URI ${REPO_PATH}/${NAME}/${ARCH}" 2>&1`
UPDATE_OUT=`sudo sh -c "rsync $EURYBOX_RSYNC_OPTIONS --include=**${ARCH}** --include=*/ --exclude=* $URI ${REPO_PATH}/${NAME}/${ARCH}" 2>&1`
STATUS=$?
if [[ $STATUS -eq 0 ]]
then
eurybox_display_message message UPDATE "Local repository $NAME - $URI - clone OK"
eurybox_display_message debug UPDATE "Local repository $NAME - $URI - Clone OK"
eurybox_display_message debug UPDATE "Mkdir command output:\n$MKDIR_OUT"
eurybox_display_message debug UPDATE "Clone command output:\n$UPDATE_OUT"
#TODO:MAC MASK
@@ -142,7 +144,8 @@ eurybox_update_local_repository ()
STATUS=$?
if [[ $STATUS -eq 0 ]]
then
eurybox_display_message message UPDATE "Local repository $NAME - MAC permissions change OK"
eurybox_display_message debug UPDATE "Local repository $NAME - MAC permissions change OK"
eurybox_display_message message UPDATE "Local repository $NAME - $URI - Update OK"
REPO_UPDATED_NUM=$(( ${REPO_UPDATED_NUM} + 1 ))
else
if [[ $REPO_ERRORS = "" ]]
@@ -169,14 +172,15 @@ eurybox_update_local_repository ()
EURYBOX_REPO_UPDATED=1
else
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message debug UPDATE "Local repositories update failed - trying again\n$NB_TRY_LEFT left"
eurybox_display_message debug UPDATE "Local repositories update failed - trying again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds\n$NB_TRY_LEFT left"
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
fi
fi
done
done
if [[ $NB_TRY_LEFT -eq 0 ]]
then
eurybox_display_message error UPDATE "Local repositories update failed - no success after $EURYBOX_MAX_RETRY_ON_FAILURE attempts - persistent errors:\n${REPO_ERRORS}"
eurybox_display_message warning UPDATE "Local repositories update failed - no success after $EURYBOX_MAX_RETRY_ON_FAILURE attempts - persistent errors:\n${REPO_ERRORS}"
else
eurybox_display_message message UPDATE "Local repositories update success"
fi


+ 50
- 18
sw/src/eurybox.functions.vm View File

@@ -102,6 +102,7 @@ eurybox_vm_shutdown_acpi ()
{
local NAME=$1
local STATUS
local VIRSH_OUT
#Waiting for the VM to be stopped
local EURYBOX_VM_NAME
local EURYBOX_VM_STATE=1
@@ -116,29 +117,44 @@ eurybox_vm_shutdown_acpi ()
else
if [[ $EURYBOX_VM_STOPPED -eq 0 ]]
then
sudo virsh $EURYBOX_VIRSH_OPTIONS shutdown $NAME
VIRSH_OUT=`sudo virsh $EURYBOX_VIRSH_OPTIONS shutdown $NAME 2>&1`
STATUS=$?
if [[ !($STATUS -eq 0) ]]
then
eurybox_display_message warning VM "Error on vm $NAME stop - trying again in 5 seconds / $NB_TRY_LEFT left"
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message debug VM "VM $NAME - stop failed - error $STATUS:\n$VIRSH_OUT\nTrying again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds / $NB_TRY_LEFT left"
else
EURYBOX_VM_STOPPED=1
eurybox_display_message message VM "Successfully initiated vm $NAME stop - waiting for vm poweroff"
eurybox_display_message message VM "Successfully initiated VM $NAME stop - waiting for vm poweroff"
NB_TRY_LEFT=$EURYBOX_MAX_RETRY_ON_FAILURE
fi
else
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message debug VM "VM $NAME - still running - trying again in 5 seconds / $NB_TRY_LEFT left"
eurybox_display_message debug VM "VM $NAME - still running - trying again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds / $NB_TRY_LEFT left"
fi
sleep 5
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
fi
done
if [[ $NB_TRY_LEFT -eq 0 ]]
then
eurybox_display_message error VM "VM $NAME - stop failed - VM still running after $EURYBOX_MAX_RETRY_ON_FAILURE: $EURYBOX_VM_NAME"
eurybox_display_message warning VM "VM $NAME - ACPI stop failed - VM still running after $EURYBOX_MAX_RETRY_ON_FAILURE:\n$EURYBOX_VM_NAME\n error $STATUS:\n$VIRSH_OUT\nForcing stop"
VIRSH_OUT=`sudo virsh $EURYBOX_VIRSH_OPTIONS destroy $NAME 2>&1`
STATUS=$?
if [[ !($STATUS -eq 0) ]]
then
eurybox_display_message error VM "VM $NAME - forced stop failed - error $STATUS:\n$VIRSH_OUT"
else
eurybox_display_message message VM "Successfully initiated VM $NAME forced stop"
EURYBOX_VM_NAME=`sudo virsh $EURYBOX_VIRSH_OPTIONS list | awk '{ if ($2 == name) {print $2} }' name=$NAME 2>&1`
if [[ -z "$EURYBOX_VM_NAME" ]]
then
eurybox_display_message message VM "VM $NAME - forced stop OK"
else
eurybox_display_message error VM "VM $NAME - forced stop failed - VM still running:\n$EURYBOX_VM_NAME"
fi
fi
else
eurybox_display_message message VM "VM $NAME - stop OK"
eurybox_display_message message VM "VM $NAME - ACPI stop OK"
fi
}

@@ -155,6 +171,7 @@ eurybox_vm_shutdown_ssh ()
local STATUS
local EURYBOX_VM_NAME
local SSH_OUT
local VIRSH_OUT
local NB_TRY_LEFT=$EURYBOX_MAX_RETRY_ON_FAILURE
while [[ ( $EURYBOX_VM_STATE -eq 1 ) && !( $NB_TRY_LEFT -eq 0 ) ]]
do
@@ -169,25 +186,40 @@ eurybox_vm_shutdown_ssh ()
STATUS=$?
if [[ !($STATUS -eq 0) ]]
then
eurybox_display_message warning VM "VM $NAME - stop failed - trying again in 5 seconds:\n$SSH_OUT\n$NB_TRY_LEFT left"
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message debug VM "VM $NAME - SSH stop failed - trying again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds:\n$SSH_OUT\n$NB_TRY_LEFT left"
else
EURYBOX_VM_STOPPED=1
eurybox_display_message message VM "Successfully initiated vm $NAME stop - waiting for vm poweroff"
eurybox_display_message debug VM "Successfully initiated vm $NAME stop - waiting for vm poweroff"
NB_TRY_LEFT=$EURYBOX_MAX_RETRY_ON_FAILURE
fi
else
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message debug VM "VM $NAME - still running - trying again in 5 seconds:\n$EURYBOX_VM_NAME\n$NB_TRY_LEFT left"
eurybox_display_message debug VM "VM $NAME - still running - trying again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds:\n$EURYBOX_VM_NAME\n$NB_TRY_LEFT left"
fi
sleep 5
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
fi
done
if [[ $NB_TRY_LEFT -eq 0 ]]
then
eurybox_display_message error VM "VM $NAME - stop failed - VM still running after $EURYBOX_MAX_RETRY_ON_FAILURE:\n$EURYBOX_VM_NAME"
eurybox_display_message warning VM "VM $NAME - SSH stop failed - VM still running after $EURYBOX_MAX_RETRY_ON_FAILURE:\n$EURYBOX_VM_NAME\n error $STATUS:\n$SSH_OUT\nForcing stop"
VIRSH_OUT=`sudo virsh $EURYBOX_VIRSH_OPTIONS destroy $NAME 2>&1`
STATUS=$?
if [[ !($STATUS -eq 0) ]]
then
eurybox_display_message error VM "VM $NAME - forced stop failed - error $STATUS:\n$VIRSH_OUT"
else
eurybox_display_message message VM "Successfully initiated VM $NAME forced stop"
EURYBOX_VM_NAME=`sudo virsh $EURYBOX_VIRSH_OPTIONS list | awk '{ if ($2 == name) {print $2} }' name=$NAME 2>&1`
if [[ -z "$EURYBOX_VM_NAME" ]]
then
eurybox_display_message message VM "VM $NAME - forced stop OK"
else
eurybox_display_message error VM "VM $NAME - forced stop failed - VM still running:\n$EURYBOX_VM_NAME"
fi
fi
else
eurybox_display_message message VM "VM $NAME - stop OK"
eurybox_display_message message VM "VM $NAME - SSH stop OK"
fi
}

@@ -224,8 +256,8 @@ eurybox_vm_start ()
VM_OUT=`sudo virsh $EURYBOX_VIRSH_OPTIONS list | awk '{ if ($2 == name) {print $2} }' name=$NAME 2>&1`
if [[ -z "$VM_OUT" ]]
then
eurybox_display_message warning VM "Error on vm $NAME start - trying again in 5 seconds:\n$VIRSH_OUT\n$NB_TRY_LEFT left"
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message debug VM "Error on vm $NAME start - trying again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds:\n$VIRSH_OUT\n$NB_TRY_LEFT left"
else
eurybox_display_message debug VM "VM $NAME already running - waiting for network contact"
EURYBOX_VM_STARTED=1
@@ -238,16 +270,16 @@ eurybox_vm_start ()
fi
else
NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 ))
eurybox_display_message debug VM "VM $NAME - still unreachable - trying again in 5 seconds\n$EURYBOX_VM_AVAILABLE\n$NB_TRY_LEFT left"
eurybox_display_message debug VM "VM $NAME - still unreachable - trying again in ${EURYBOX_ERROR_TEMPORISATION_TIME} seconds\n$EURYBOX_VM_AVAILABLE\n$NB_TRY_LEFT left"
fi
sleep 5
sleep ${EURYBOX_ERROR_TEMPORISATION_TIME}
fi
done
if [[ $NB_TRY_LEFT -eq 0 ]]
then
eurybox_display_message error VM "VM $NAME - start failed - no network contact after $EURYBOX_MAX_RETRY_ON_FAILURE"
eurybox_display_message warning VM "VM $NAME - start failed - no network contact after $EURYBOX_MAX_RETRY_ON_FAILURE:\n${EURYBOX_VM_AVAILABLE}"
else
eurybox_display_message debug VM "VM $NAME - start OK"
eurybox_display_message message VM "VM $NAME - start OK"
fi
}


+ 5
- 2
sw/src/exploitation_center/core/update/eurybox_update View File

@@ -42,8 +42,11 @@ eurybox_display_message message STATUS "$EURYBOX_CORPORATE update script started
#Make sure all VM are started
euryboxctrl_start_services

#Update local repository
euryboxctrl_update_local_repository
if [[ ${EURYBOX_UPDATE_LOCAL_REPOSITORIES_ACTIVATED} = "true" ]]
then
#Update local repository
euryboxctrl_update_local_repository
fi

#Update the physical machine
euryboxctrl_update_hypervisor


Loading…
Cancel
Save