82 lines
3.6 KiB
Bash
82 lines
3.6 KiB
Bash
|
|
#!/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é =="
|