Paillasse/openstack/images/construire-paillasse-debian.sh

82 lines
3.6 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# Construit l'image Glance `paillasse-debian`, à lancer sur le serveur Syllabus
# (a besoin d'Internet pour télécharger l'image cloud officielle et les
# paquets, et de /dev/kvm pour que virt-customize aille vite).
#
# Usage : sudo bash construire-paillasse-debian.sh
#
# Ne supprime jamais une image existante toute seule (règle 3 : suppression =
# accord explicite d'Adam) : s'arrête si `paillasse-debian` existe déjà.
set -euo pipefail
DOSSIER_SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# lycee.sql est copié ici par Ansible (ansible/roles/images/), à côté du
# script, pour ne pas avoir besoin d'un clone complet du dépôt sur le serveur.
LYCEE_SQL="$DOSSIER_SCRIPT/lycee.sql"
URL_BASE="https://cloud.debian.org/images/cloud/bookworm/latest"
IMAGE_BASE="debian-12-genericcloud-amd64.qcow2"
export OS_CLIENT_CONFIG_FILE=/etc/kolla/clouds.yaml
export OS_CLOUD=kolla-admin
export PATH=/opt/kolla-venv/bin:$PATH
if openstack image show paillasse-debian >/dev/null 2>&1; then
echo "L'image « paillasse-debian » existe déjà dans Glance." >&2
echo "Supprime-la toi-même si tu veux la reconstruire (openstack image delete paillasse-debian) : Claude ne le fait pas automatiquement." >&2
exit 1
fi
TRAVAIL=$(mktemp -d)
trap 'rm -rf "$TRAVAIL"' EXIT
echo "== Téléchargement de l'image cloud Debian 12 officielle =="
curl -fsSL -o "$TRAVAIL/SHA512SUMS" "$URL_BASE/SHA512SUMS"
curl -fsSL -o "$TRAVAIL/$IMAGE_BASE" "$URL_BASE/$IMAGE_BASE"
echo "== Vérification de la somme SHA512 =="
(cd "$TRAVAIL" && grep " $IMAGE_BASE\$" SHA512SUMS | sha512sum -c -)
IMAGE_TRAVAIL="$TRAVAIL/paillasse-debian.qcow2"
cp "$TRAVAIL/$IMAGE_BASE" "$IMAGE_TRAVAIL"
echo "== Préparation des fichiers à copier dans l'image =="
mkdir -p "$TRAVAIL/copie/labs/07" "$TRAVAIL/copie/paquets"
cp "$LYCEE_SQL" "$TRAVAIL/copie/labs/07/lycee.sql"
echo "== Téléchargement du paquet tree (lab 02 : installation hors ligne) =="
apt-get update -qq
(cd "$TRAVAIL/copie/paquets" && apt-get download tree)
echo "== Personnalisation avec virt-customize =="
# Remarque sur `tree` : volontairement absent de --install. Le lab 02 demande
# à l'élève de l'installer lui-même depuis /opt/paquets/ ; il serait sans
# intérêt pédagogique s'il était déjà présent (contrairement à ce que
# suggérait une première lecture de paillasse-contenus/README.md).
#
# cloud-init est retiré : les réseaux de lab n'ont ni DHCP ni service de
# métadonnées joignable (pas de routeur), donc cloud-init ne ferait
# qu'attendre inutilement à chaque démarrage. La correction automatique passe
# par l'agent QEMU (guest-exec), pas par cloud-init/user-data.
virt-customize -a "$IMAGE_TRAVAIL" \
--install sudo,qemu-guest-agent,iproute2,iputils-ping,traceroute,tcpdump,dnsutils,curl,netcat-openbsd,openssl,nano,vim,htop,nginx,mariadb-server,frr \
--run-command 'useradd -m -s /bin/bash -G sudo eleve' \
--password 'eleve:password:eleve' \
--run-command 'systemctl enable serial-getty@ttyS0.service' \
--run-command 'systemctl disable nginx mariadb frr' \
--run-command 'apt-get purge -y cloud-init && rm -rf /etc/cloud /var/lib/cloud' \
--run-command 'mkdir -p /opt/labs/07' \
--copy-in "$TRAVAIL/copie/labs/07/lycee.sql:/opt/labs/07" \
--copy-in "$TRAVAIL/copie/paquets:/opt"
echo "== Import dans Glance =="
openstack image create "paillasse-debian" \
--disk-format qcow2 --container-format bare \
--property hw_qemu_guest_agent=yes \
--property hw_rng_model=virtio \
--property os_type=linux \
--file "$IMAGE_TRAVAIL"
openstack image show paillasse-debian -c id -c status -c size -c properties
echo "== Terminé =="