23/10/2023 à 19h30 - Slash, la soirée tech d'ARN

Compte-rendu :

Présent⋅es :

  • Chris
  • Optogram
  • Irina
  • gabjy

Excusé⋅es :

  • Gaut

:pen: Ordre du jour

  • IPV6 sur la VM test Proxmox ?

Rappels : https://forum.arn-fai.net/t/suite-proxmox/8082/2

Installation d’une VM en ligne de commande :

  • Outil de génération de VM simplifié : apt-get install cloud-init

  • Récupérer une image sur le site de Debian : wget https://cdimage.debian.org/cdimage/cloud/bullseye/latest/debian-11-genericcloud-amd64.qcow2

  • Créer une machine virtuelle avec ses paramètres : qm create 104 --name debian11-test --memory 2048 --net0 virtio,bridge=vmbr0
    Descriptif : qm create [ID de la machine virtuelle] --name [Nom de la machine virtuelle] --memory [Quantité de mémoire vive] --net0 virtio,bridge=[interface réseau de la machine]

  • Importer le fichier système de machine virtuelle prêt à l’emploi : qm importdisk 104 debian-11-genericcloud-amd64.qcow2 local-zfs
    Descriptif : qm importdisk [ID de la machine virtuelle] [Nom de l'image précédemment téléchargée] [Système de fichiers proxmox]

  • Associer le disque à la machine virtuelle : qm set 104 --scsihw virtio-scsi-pci --scsi0 local-zfs:vm-104-disk-0
    Descriptif : qm set [ID de la machine virtuelle] --scsihw virtio-scsi-pci --scsi0 [Système de fichiers proxmox]:vm-[ID de la machine virtuelle]-disk-0

  • Modifier l’interface entre le disque virtuel et la machine : qm set 104 --ide2 local-zfs:cloudinit
    Descriptif : qm set [ID de la machine virtuelle] --ide2 [Système de fichiers proxmox]:cloudinit

  • Définir le disque de démarrage de la machine virtuelle : qm set 104 --boot c --bootdisk scsi0
    Descriptif : qm set [ID de la machine virtuelle] --boot c --bootdisk scsi0

  • Associer la sortie vidéo en ligne de commande à Proxmox : qm set 104 --serial0 socket --vga serial0
    Descriptif : qm set [ID de la machine virtuelle] --serial0 socket --vga serial0

  • Définir l’adresse IP et la passerelle de la machine virtuelle : qm set 104 --ipconfig0 ip=89.234.141.83/24,gw= 169.254.42.1
    Descriptif : qm set [ID de la machine virtuelle] --ipconfig0 ip=[Adresse IP]/24,gw=[Passerelle]

  • Redimensionner le disque virtuel : qm resize 104 scsi0 30G
    Descriptif : qm resize [ID de la machine virtuelle] scsi0 [Taille du stockage en soustrayant la taille donnée à la création]

  • Démarrer la machine virtuelle : qm start 104
    Descriptif : qm start [ID de la machine virtuelle]

  • Créer un premier utilisateur sur la machine virtuelle : qm set 104 --ciuser arn
    Descriptif : qm set [ID de la machine virtuelle] --ciuser [Nom de l'utilisateur]

  • Changer les serveurs DNS de la machine virtuelle : qm set 104 --nameserver="80.67.169.12 80.67.169.40"
    Descriptif : qm set [ID de la machine virtuelle] --nameserver="[Serveur DNS 1] [Serveur DNS 2]"

  • Redémarrer et appliquer les changements aux paramètres Cloud-Init : qm stop 104 & qm start 104
    Descriptif : qm stop [ID de la machine virtuelle] & qm start [ID de la machine virtuelle]

  • Se connecter au terminal de la machine virtuelle : qm terminal 104
    Descriptif : qm terminal [ID de la machine virtuelle]

Documentation complète : https://pve.proxmox.com/wiki/Cloud-Init_Support

Et là, c’est parti en cacahuètes

  • Récupérer l’interface réseau : ip a a 169.254.42.1 dev tap104i0
    Descriptif : ip a a [Adresse IP] dev [interface réseau]

  • Vérifier que la machine est bien démarrée : qm status 104
    Descriptif : qm status [ID de la machine virtuelle]

  • Afficher la liste des machines : qm list

Proposition de script

#!/usr/bin/env bash#
set -euo pipefail

usage(){
>&2 cat << EOF
Usage: $0 --name NAME --memory MEMORY --disk DISK --ipv4 IPV4 [--ipv6 IPV6] [--nameserver NAMESERVER] [--user USER] 
EOF
exit 1
}

args=$(getopt -a -o hn:m:d:4:6:r:u: --long help,name:,memory:,disk:,ipv4:,ipv6:,nameserver:,user: -- "$@")
if [[ $? -gt 0 ]]; then
  usage
fi
eval set -- ${args}
while :do
  case $1 in
    -h | --help)    usage      ; shift   ·
    -n | --name)   name=${2:-2048}    ; shift 2  ;;
    -m | --memory)    memory=${2:-2048}     ; shift 2  ;;
    -d | --disk)   disk=$((${2:-15} - 2))   ; shift 2 ;;
    -4 | --ipv4)   ipv4=$2   ; shift 2 ;;
    -6 | --ipv6)   ipv6=$2   ; shift 2 ;;
    -r | --nameserver)   nameserver=${2:-80.67.169.12 80.67.169.40}   ; shift 2 ;;
    -u | --user)   user=${2:-arn}   ; shift 2 ;;

# -- means the end of the arguments; drop this, and break out of the while loop
--) shift; break ;;
*) >&2 echo Unsupported option: $1
usage ;;
esacdone

if [[ $# -eq 0 ]]; then
  usage
fi

next_id=$(pvesh get /cluster/nextid)
qm create $next_id --name $name --memory $memory --net0 virtio,bridge=vmbr0
qm importdisk $next_id /root/debian-11-genericcloud-amd64.qcow2 local-zfs
qm set $next_id --scsihw virtio-scsi-pci --scsi0 local-zfs:vm-$next_id-disk-0
qm set $next_id --ide2 local-zfs:cloudinit
qm set $next_id --boot c --bootdisk scsi0
qm set $next_id --serial0 socket --vga serial0
qm set $next_id --ipconfig0 ip=${ipv4}/32,gw=169.254.42.1
qm resize $next_id scsi0 ${disk}G
qm set $next_id --nameserver "$nameserver"
qm set $next_id --ciuser "$user"
qm set $next_id --cipassword
qm start $next_id
ip a a 169.254.42.1 dev tap${next_id}i0
1 « J'aime »