80 lines
2.3 KiB
Text
80 lines
2.3 KiB
Text
|
#!/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
|