proxmox:template
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| proxmox:template [2026/06/02 16:46] – root | proxmox:template [2026/06/04 13:48] (Version actuelle) – root | ||
|---|---|---|---|
| Ligne 2: | Ligne 2: | ||
| <code bash> | <code bash> | ||
| + | mkdir -p / | ||
| + | |||
| + | # 1. Le fichier de déploiement des CAs (Yubikey + emergency concaténées) | ||
| + | scp ton-poste: | ||
| + | |||
| + | # 2. Le KRL initial vide (signé par ta CA Yubikey sur ton poste) | ||
| + | scp ton-poste:/ | ||
| + | |||
| + | # 3. Configuration sshd | ||
| + | cat > / | ||
| + | # === MIS SSH CA Configuration === | ||
| + | TrustedUserCAKeys / | ||
| + | RevokedKeys / | ||
| + | PasswordAuthentication no | ||
| + | KbdInteractiveAuthentication no | ||
| + | PubkeyAuthentication yes | ||
| + | PermitRootLogin no | ||
| + | EOF | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | # | ||
| + | # / | ||
| + | # Construit la golden image MIS Debian 13 avec CA SSH intégrée | ||
| + | # Compatible avec tous types de storage Proxmox (local, lvm, lvm-thin, zfs, etc.) | ||
| + | set -euo pipefail | ||
| + | |||
| + | # ===================== | ||
| # Variables | # Variables | ||
| - | VMID=9000 | + | # ===================== |
| + | VMID=9013 | ||
| DEBVER=13 | DEBVER=13 | ||
| - | STORAGE=zfs-ssd-pool | + | DEBCODENAME=" |
| - | IMG=debian-${DEBVER}-genericcloud-amd64.qcow2 | + | STORAGE=" |
| + | BRIDGE=" | ||
| + | IMG="debian-${DEBVER}-genericcloud-amd64.qcow2" | ||
| + | IMG_URL=" | ||
| + | TEMPLATE_NAME=" | ||
| + | PROVISIONING_DIR="/ | ||
| - | # Téléchargement | + | # ===================== |
| + | # Sanity checks | ||
| + | # ===================== | ||
| + | echo ">>> | ||
| + | for f in \ | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | [[ -f " | ||
| + | done | ||
| + | |||
| + | echo ">>> | ||
| + | if ! pvesm status --storage " | ||
| + | echo " | ||
| + | echo " | ||
| + | pvesm status | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # Vérifier que le storage accepte les images de VM | ||
| + | STORAGE_CONTENT=$(pvesm status --storage " | ||
| + | if ! pvesm status -content images | awk ' | ||
| + | echo " | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | if qm status ${VMID} &>/ | ||
| + | echo " | ||
| + | read -p " | ||
| + | echo | ||
| + | [[ ! $REPLY =~ ^[Yy]$ ]] && exit 1 | ||
| + | qm destroy ${VMID} --purge | ||
| + | fi | ||
| + | |||
| + | # ===================== | ||
| + | # Téléchargement | ||
| + | # ===================== | ||
| cd /tmp | cd /tmp | ||
| - | wget https:// | + | [[ -f "${IMG}" ]] && rm " |
| + | echo ">>> | ||
| + | wget -q --show-progress " | ||
| - | # Optionnel mais utile : installer qemu-guest-agent dans l' | + | # ===================== |
| - | apt install -y libguestfs-tools | + | # Préparation libguestfs |
| - | virt-customize -a ${IMG} --install qemu-guest-agent | + | # ===================== |
| - | virt-customize | + | apt-get install |
| + | |||
| + | # ===================== | ||
| + | # Customisation de l' | ||
| + | # ===================== | ||
| + | echo ">>> | ||
| + | |||
| + | virt-customize -a "${IMG}" \ | ||
| + | | ||
| + | | ||
| + | \ | ||
| + | --run-command ' | ||
| + | --run-command 'echo " | ||
| + | --run-command 'chmod 0440 / | ||
| + | \ | ||
| + | --copy-in " | ||
| + | --copy-in " | ||
| + | --copy-in " | ||
| + | --run-command 'chown root:root / | ||
| + | --run-command 'chmod 0644 / | ||
| + | \ | ||
| + | --run-command 'sed -i " | ||
| + | --run-command 'sed -i " | ||
| + | --run-command 'sed -i " | ||
| + | \ | ||
| + | --timezone Europe/ | ||
| + | \ | ||
| + | --run-command ' | ||
| + | --run-command ' | ||
| + | --truncate / | ||
| + | --run-command 'rm -f / | ||
| + | 2>&1 | grep -v " | ||
| + | |||
| + | echo ">>> | ||
| + | |||
| + | # ===================== | ||
| + | # Création de la VM template | ||
| + | # ===================== | ||
| + | echo ">>> | ||
| - | # Création VM template | ||
| qm create ${VMID} \ | qm create ${VMID} \ | ||
| - | --name | + | --name |
| --memory 2048 --cores 2 \ | --memory 2048 --cores 2 \ | ||
| - | --net0 virtio, | + | --net0 virtio, |
| - | --scsihw virtio-scsi-pci \ | + | --scsihw virtio-scsi-single |
| --ostype l26 \ | --ostype l26 \ | ||
| - | --agent enabled=1, | + | --agent enabled=1, |
| + | --cpu host | ||
| - | # Import du disque | + | # ===================== |
| - | qm importdisk ${VMID} ${IMG} | + | # Import du disque |
| - | qm set ${VMID} --scsi0 | + | # ===================== |
| + | echo ">>> | ||
| - | # Disque cloud-init | + | qm importdisk |
| - | qm set ${VMID} | + | |
| - | # Boot order + console série | + | # Récupération du volid réel tel que Proxmox l'a créé |
| + | # (la syntaxe diffère entre local, lvm, zfs, etc. donc on parse la config) | ||
| + | DISK_VOLID=$(qm config ${VMID} | awk -F': ' '/ | ||
| + | |||
| + | if [[ -z " | ||
| + | echo " | ||
| + | qm config ${VMID} | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | echo ">>> | ||
| + | |||
| + | # Attache le disque en scsi0 | ||
| + | qm set ${VMID} --scsi0 " | ||
| + | |||
| + | # ===================== | ||
| + | # Disque cloud-init (sur le même storage que le disque principal) | ||
| + | # ===================== | ||
| + | qm set ${VMID} --ide2 " | ||
| + | |||
| + | # ===================== | ||
| + | # Boot order + console série | ||
| + | # ===================== | ||
| qm set ${VMID} --boot order=scsi0 | qm set ${VMID} --boot order=scsi0 | ||
| qm set ${VMID} --serial0 socket --vga serial0 | qm set ${VMID} --serial0 socket --vga serial0 | ||
| + | # ===================== | ||
| + | # Tags + description | ||
| + | # ===================== | ||
| + | qm set ${VMID} --tags " | ||
| + | |||
| + | qm set ${VMID} --description " | ||
| + | |||
| + | Build date : $(date -u +%Y-%m-%d) | ||
| + | Storage | ||
| + | |||
| + | Includes : | ||
| + | - mis-admin user (accès via cert SSH MIS CA) | ||
| + | - MIS Users CA installée (/ | ||
| + | - KRL configuré (/ | ||
| + | - qemu-guest-agent, | ||
| + | - Hardening SSH (no password, no root, no kbd-interactive) | ||
| + | - Timezone Europe/ | ||
| + | |||
| + | Recovery (pas de break-glass dans la VM) : | ||
| + | - Console : qm terminal < | ||
| + | - Montage disque : guestmount -d < | ||
| + | |||
| + | # ===================== | ||
| # Conversion en template | # Conversion en template | ||
| + | # ===================== | ||
| + | echo ">>> | ||
| qm template ${VMID} | qm template ${VMID} | ||
| + | |||
| + | # ===================== | ||
| + | # Cleanup | ||
| + | # ===================== | ||
| + | rm -f "/ | ||
| + | |||
| + | # ===================== | ||
| + | # Résumé | ||
| + | # ===================== | ||
| + | echo "" | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo "" | ||
| + | echo " | ||
| + | qm config ${VMID} | ||
| + | echo "" | ||
| + | echo "Pour déployer une nouvelle VM cliente :" | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo "" | ||
| </ | </ | ||
proxmox/template.1780418788.txt.gz · Dernière modification : de root
