#!/bin/bash -e TLS_SERVER=$1 if [ -z "$TLS_SERVER" ]; then echo "$0 nom_tls_server" exit 1 fi DO_NOT_START=$2 REBOOT_EVERY_MONDAY=$3 # 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" if [ -z "$1" ]; then rm -f $IMAGE_BASE_RISOTTO_BASE_DIR*.build fi mkdir -p /var/log/risotto ls /var/lib/risotto/images_files/ | while read image; do if [ -d /var/lib/risotto/images_files/"$image" ]; then echo echo "Install image $image" | tee -a /var/log/risotto/update_images.log /usr/local/sbin/build_image "$image" || echo "PROBLEME" | tee -a /var/log/risotto/update_images.log fi done idx=0 if [ -z "$DO_NOT_START" ]; then machinectl reboot "$TLS_SERVER" || machinectl start "$TLS_SERVER" while true; do status=$(machinectl -q shell "$TLS_SERVER" /usr/bin/systemctl is-system-running 2>/dev/null || echo "not started") if echo "$status" | grep -q degraded || echo "$status" | grep -q running; then break fi idx=$((idx+1)) if [ $idx = 60 ]; then echo "le serveur $TLS_SERVER n'a pas encore redémarré" break fi sleep 2 done fi 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" IMAGE_NAME_RISOTTO_IMAGE_NAME="$(cat $RISOTTO_DIR/machines_informations/$machine.image)" MACHINE_INFO="$RISOTTO_DIR/machines_informations/" VERSION_MACHINE="$MACHINE_INFO/$machine.version" if [ -n "$REBOOT_EVERY_MONDAY" ] && [ "$(date +%u)" = 1 ]; then # update TLS certificate every monday, so stop container machinectl stop "$machine" 2> /dev/null || true while true; do machinectl status "$machine" > /dev/null 2>&1 || break sleep 1 done fi if [ ! -d "$MACHINE_MACHINES_DIR/etc" ]; then rm -f "$VERSION_MACHINE" fi diff -q "$RISOTTO_IMAGE_DIR/$IMAGE_NAME_RISOTTO_IMAGE_NAME".version "$VERSION_MACHINE" &> /dev/null || ( echo "Reinstall machine $machine" machinectl stop "$machine" 2> /dev/null || true while true; do machinectl status "$machine" > /dev/null 2>&1 || break sleep 1 done rm -rf "$MACHINE_MACHINES_DIR" mkdir "$MACHINE_MACHINES_DIR" cp -a --reflink=auto "$RISOTTO_IMAGE_DIR/$IMAGE_NAME_RISOTTO_IMAGE_NAME/"* "$MACHINE_MACHINES_DIR" cp -a --reflink=auto "$RISOTTO_IMAGE_DIR/$IMAGE_NAME_RISOTTO_IMAGE_NAME".version "$VERSION_MACHINE" ) done if [ -z "$DO_NOT_START" ]; then echo "start $MACHINES" machinectl start $MACHINES sleep 5 journalctl -n 100 --no-pager diagnose fi exit 0