#!/bin/bash #EuryBOX update functions file #Desc: update hypervisor #1 arg required: operating_system eurybox_update_hv () { local UPDATE_OUT local OS=$1 local EURYBOX_HV_UPDATED=0 local NB_TRY_LEFT=$EURYBOX_MAX_RETRY_ON_FAILURE while [[ ( $EURYBOX_HV_UPDATED -eq 0 ) && !( $NB_TRY_LEFT -eq 0 ) ]] do case $OS in fedora20|fedora21|centos7|redhat7|centos6|redhat6|centos5|redhat5 ) UPDATE_OUT=`sudo yum -y update 2>&1` ;; fedora22|fedora23|fedora24 ) UPDATE_OUT=`sudo dnf -y update 2>&1` ;; debian6|debian7|debian8|ubuntu12|ubuntu14|ubuntu16 ) UPDATE_OUT=`sudo apt-get -y update && apt-get -y upgrade 2>&1` ;; openbsd5 ) UPDATE_OUT=`echo "Not Implemented Yet"` ;; gentoo ) UPDATE_OUT=`sudo emerge --sync && sudo emerge -uDU --with-bdeps=y @world && sudo emerge -av --depclean && sudo emerge --update --newuse --deep @world && sudo revdep-rebuild -v 2>&1` ;; archlinux ) UPDATE_OUT=`sudo pacman -Syy && sudo pacman -Su 2>&1` ;; * ) eurybox_display_message error UPDATE "OS unknown : $OS" ;; esac STATUS=$? if [[ $STATUS -eq 0 ]] then EURYBOX_HV_UPDATED=1 else NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 )) 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 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" fi } #Desc: update vm #5 args required: vm_name vm_host vm_user vm_ssh_port operating_system eurybox_update_vm () { local UPDATE_OUT local NAME=$1 local HOST=$2 local USER=$3 local PORT=$4 local OS=$5 local EURYBOX_VM_UPDATED=0 local NB_TRY_LEFT=$EURYBOX_MAX_RETRY_ON_FAILURE while [[ ( $EURYBOX_VM_UPDATED -eq 0 ) && !( $NB_TRY_LEFT -eq 0 ) ]] do case $OS in fedora20|fedora21|centos7|redhat7|centos6|redhat6|centos5|redhat5 ) UPDATE_OUT=`ssh $EURYBOX_SSH_OPTIONS -p $PORT $USER@$HOST "yum -y update" 2>&1` ;; fedora22|fedora23|fedora24 ) UPDATE_OUT=`ssh $EURYBOX_SSH_OPTIONS -p $PORT $USER@$HOST "dnf -y update" 2>&1` ;; debian6|debian7|debian8|ubuntu12|ubuntu14|ubuntu16 ) UPDATE_OUT=`ssh $EURYBOX_SSH_OPTIONS -p $PORT $USER@$HOST "apt-get -y update && apt-get -y upgrade" 2>&1` ;; openbsd5 ) UPDATE_OUT=`echo "Not Implemented Yet"` ;; gentoo ) UPDATE_OUT=`ssh $EURYBOX_SSH_OPTIONS -p $PORT $USER@$HOST "emerge --sync && emerge -uDU --with-bdeps=y @world && emerge -av --depclean && emerge --update --newuse --deep @world && revdep-rebuild -v" 2>&1` ;; archlinux ) UPDATE_OUT=`ssh $EURYBOX_SSH_OPTIONS -p $PORT $USER@$HOST "pacman -Syy && pacman -Su" 2>&1` ;; * ) eurybox_display_message error UPDATE "OS unknown : $OS" ;; esac STATUS=$? if [[ $STATUS -eq 0 ]] then EURYBOX_VM_UPDATED=1 else NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 )) 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 ]] then eurybox_display_message error UPDATE "VM $NAME - update failed - no success after $EURYBOX_MAX_RETRY_ON_FAILURE attempts - error $STATUS:\n${UPDATE_OUT}" else eurybox_display_message message UPDATE "VM $NAME - update OK" eurybox_display_message debug UPDATE "Update command output:\n$UPDATE_OUT" fi } #Desc: update local repository #1 arg required: operating_system eurybox_update_local_repository () { local UPDATE_OUT local REPO_UPDATED_NUM local REPO_ERRORS local REPO_PATH=${EURYBOX_UPDATE_LOCAL_REPOSITORIES_PATH} local OS=$1 local EURYBOX_REPO_UPDATED=0 local NB_TRY_LEFT=$EURYBOX_MAX_RETRY_ON_FAILURE eurybox_display_message message UPDATE "Updating local repositories" while [[ ( $EURYBOX_REPO_UPDATED -eq 0 ) && !( $NB_TRY_LEFT -eq 0 ) ]] do REPO_UPDATED_NUM=0 REPO_ERRORS="" for (( REPO_NUM=1;REPO_NUM<=${EURYBOX_UPDATE_LOCAL_REPOSITORIES_NUMBER};REPO_NUM++ )) do NAME=${EURYBOX_UPDATE_LOCAL_REPOSITORIES[${REPO_NUM},NAME]} ARCH=${EURYBOX_UPDATE_LOCAL_REPOSITORIES[${REPO_NUM},ARCH]} 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 $EURYBOX_RSYNC_OPTIONS --include=**${ARCH}** --include=*/ --exclude=* $URI ${REPO_PATH}/${NAME}/${ARCH}" 2>&1` STATUS=$? if [[ $STATUS -eq 0 ]] then 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 UPDATE_OUT=`sudo chmod -R 500 ${REPO_PATH}/${NAME}/${ARCH} 2>&1` STATUS=$? if [[ $STATUS -eq 0 ]] then 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 = "" ]] then REPO_ERRORS="${NAME}:\n${UPDATE_OUT}" else REPO_ERRORS="${REPO_ERRORS}\n\n${NAME}:\n${UPDATE_OUT}" fi eurybox_display_message debug UPDATE "Local repository $NAME MAC permissions change failed - trying others - error $STATUS:\n$UPDATE_OUT" fi else if [[ $REPO_ERRORS = "" ]] then REPO_ERRORS="${NAME}:\n${UPDATE_OUT}" else REPO_ERRORS="${REPO_ERRORS}\n\n${NAME}:\n${UPDATE_OUT}" fi eurybox_display_message debug UPDATE "Local repository $NAME clone failed - trying others - error $STATUS:\n$UPDATE_OUT" fi if [[ $REPO_NUM -eq ${EURYBOX_UPDATE_LOCAL_REPOSITORIES_NUMBER} ]] then if [[ $REPO_UPDATED_NUM -eq ${EURYBOX_UPDATE_LOCAL_REPOSITORIES_NUMBER} ]] then EURYBOX_REPO_UPDATED=1 else NB_TRY_LEFT=$(( $NB_TRY_LEFT - 1 )) 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 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 } ##TODO: SCRIPT AUTO DEPLOY LOCAL REPOS IN SERVICES VM