#!/bin/bash -e # root dir configuration RISOTTO_DIR="/var/lib/risotto" RISOTTO_IMAGE_DIR="$RISOTTO_DIR/images" # image configuration IMAGE_BASE_RISOTTO_BASE_DIR="$RISOTTO_IMAGE_DIR/image_bases" rm -f $IMAGE_BASE_RISOTTO_BASE_DIR*.build ls /var/lib/risotto/images_files/ | while read image; do if [ -d /var/lib/risotto/images_files/"$image" ]; then echo echo "Install image $image" /usr/local/sbin/build_image "$image" fi done rm -f $IMAGE_BASE_RISOTTO_BASE_DIR*.build MACHINES="" for nspawn in $(ls /etc/systemd/nspawn/*.nspawn); do nspawn_file=$(basename $nspawn) machine=${nspawn_file%.*} MACHINES="$MACHINES$machine " MACHINE_MACHINES_DIR="/var/lib/machines/$machine" echo "Install machine $machine" SHA_MACHINE="$RISOTTO_DIR/configurations/sha/$machine".sha content=$(cat $SHA_MACHINE) IMAGE_NAME_RISOTTO_IMAGE_NAME=${content##* } diff -q "$IMAGE_NAME_RISOTTO_IMAGE_NAME".sha "$SHA_MACHINE" || ( machinectl stop $machine while true; do machinectl status "$machine" > /dev/null 2>&1 || break sleep 1 done rm -rf "$MACHINE_MACHINES_DIR" mkdir "$MACHINE_MACHINES_DIR" cd "$MACHINE_MACHINES_DIR" tar xf "$IMAGE_NAME_RISOTTO_IMAGE_NAME" cp -a "$IMAGE_NAME_RISOTTO_IMAGE_NAME".sha "$SHA_MACHINE" ) done machinectl start $MACHINES STARTED="" DEGRADED="" found=true idx=0 while [ $found = true ]; do found=false echo "tentative $idx" for machine in $MACHINES; do if ! echo $STARTED | grep -q " $machine "; then status=$(machinectl -q shell $machine /usr/bin/systemctl is-system-running || true) if echo "$status" | grep -q degraded; then STARTED="$STARTED $machine " DEGRADED="$DEGRADED $machine" elif echo "$status" | grep -q running; then STARTED="$STARTED $machine " else found=true echo "status actuel de $machine : $status" fi fi done sleep 2 idx=$((idx+1)) if [ $idx = 60 ]; then break fi done retcode=0 for machine in $DEGRADED; do echo echo "========= $machine" machinectl -q shell $machine /usr/bin/systemctl --state=failed --no-legend --no-pager retcode=1 done exit $retcode