#!/usr/bin/env bash set -eu synopsis() { cat << EOF Usage : `basename $0` [-h] system EOF } help() { cat << EOF `basename $0` arrête le système (la sauvegarde est effectuée). `synopsis` -h : affiche cette aide Retourne 1 en cas d'erreur. EOF } usage() { synopsis exit 1 } args() { local opt while getopts "h" opt; do case $opt in h) help; exit 0;; ?) usage;; esac done shift $(($OPTIND - 1)) [ $# -ne 1 ] && usage GUEST_NAME="$1" if echo $GUEST_NAME | grep -q '/'; then error "$GUEST_NAME est un nom de système invalide" fi } haltSystemTgz() { local r=0 for i in 1 2 3; do if vdn-alive $GUEST_NAME; then echo "Save $GUEST_NAME..." set +e vdn-save $GUEST_NAME r=$((r+$?)) set -e if [ $? -eq 0 ]; then break fi #sleep 1 fi done #sleep 2 if [ $r = 0 ]; then vdn-kill $GUEST_NAME || error "Échec de l'arrêt de $GUEST_NAME" else return 1 fi #return $r } # Programme principal VDN_PATH=$(readlink -f $(dirname $0)/..); . $VDN_PATH/bin/functions.sh args "$@" loadGuestVars $GUEST_NAME if [ ! -e $GUEST_PATH ]; then error "Le système $GUEST_NAME n'existe pas !" fi case "$MODE" in tgz|tgz2) haltSystemTgz;; cow|direct|overlay) vdn-ssh root@$GUEST_NAME poweroff;; *) error "Mode : \"$MODE\" invalide !";; esac