PCI/GPU Passthrough sur Proxmox VE : Debian 12 (Part. 02x04)

Page content

Cet article est le troisième d’une série de cinq articles traitant de l’installation et de la configuration de VMs (Linux, Windows, macOS et BSD) en PCI Passthrough sur Proxmox VE 8.

Bien, après avoir vu comment configurer, nos premières VMs sous Windows, passons maintenant à Linux (Debian 12). Pour cette installation nous allons utiliser cloud-init, toujours dans la même logique que précédemment (avec nos installations de Windows 10 et 11), c’est-à-dire la facilitation du déploiement de nos futurs templates.

Création de notre VM Debian

On commence par la création de notre VM :

 qm create 106 \
    --name deb-106 \
    --agent 1 \
    --memory 8192 \
    --bios ovmf \
    --sockets 1 --cores 4 \
    --cpu host \
    --net0 virtio,bridge=vmbr0 \
    --scsihw virtio-scsi-single \
    --boot order='scsi0' \
    --efidisk0 local-lvm:0 \
    --ide0 local-lvm:cloudinit \
    --machine q35 \
    --hostpci0 0000:01:00,pcie=1,x-vga=1 \
    --serial0 socket \
    --vga serial0 \
    --usb0 046d:c08b,usb3=1 \
    --usb1 04ca:007d,usb3=1

Quelques précisions sur la configuration QEMU appliquée :

  • ide0 local-btrfs:cloudinit C’est notre disque Cloud-init.
  • boot order=‘scsi0’ Dans l’ordre de boot, j’ai défini notre future image Debian, en première position (nous verrons plus tard comment l’ajouter à cette config).
  • hostpci0 0000:01:00,pcie=1,x-vga=1 l’emplacement PCI de notre carte graphique.
  • vga serial0 et serial0 socket ont défini l’affichage par défaut sur la sortie de la console série (configuration par défaut pour cloud init).
  • usb0 et usb0 : correspondent aux id’s USB de mon clavier et de ma souris, que j’ai récupéré depuis l’hyperviseur avec ”lsusb”.

Import de l’image Debian pour notre VM

Récupérons notre image cloud de Debian, c’est la “generic” qu’il nous faut :

wget -P /mnt/pve/PVE1/template/iso/ https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2

On ajoute notre image disque dans notre configuration QEMU

qm set 106 --scsi0 local-lvm:0,import-from=/mnt/pve/PVE1/template/iso/debian-12-generic-amd64.qcow2

On en profite pour redimensionner notre disque, histoire d’avoir assez d’espace pour installer tous les paquets :

qm resize 106 scsi0 50G

Customisation de notre image Debian

Maintenant, nous allons pouvoir passer à l’édition de notre fichier de configuration, pour adapter notre image Debian.

En effet, l’image ne dispose pas d’interface graphique, qui plus est, ne dispose pas non plus des pilotes AMD nécessaires pour ma RX 580. Pour ce faire, il va nous falloir d’abord ajouter, de nouvelles entrées aux sources apt “contrib, non-free et non-free-firmware” nous définirons ensuite les paquets supplémentaires à installer.

Dans mon cas je vais stocker mon fichier de config dans ”/mnt/pve/PVE1/snippets”, mais c’est parce que j’ai un point de montage NFS vers mon NAS. Dans votre cas le chemin devrait être “/var/lib/vz/snippets”.

cat << EOF >> /mnt/pve/PVE1/snippets/deb12.yaml
#cloud-config

write_files:
  - path: /etc/apt/sources.list.d/non-free-contrib.list
    content: |
      deb http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware
      deb-src http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware
      deb http://security.debian.org/ bookworm-security main contrib non-free non-free-firmware
      deb-src http://security.debian.org/ bookworm-security main contrib non-free non-free-firmware
      deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware
      deb-src http://deb.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware

package_update: true
package_upgrade: true

packages:
  - qemu-guest-agent
  - vim
  - net-tools
  - htop
  - screen
  - tree
  - gnome-core
  - xserver-xorg-video-amdgpu
  - firmware-amd-graphics
  - libgl1-mesa-dri
  - libglx-mesa0
  - mesa-vulkan-drivers
  - xserver-xorg-video-all

runcmd:
  - systemctl enable qemu-guest-agent
  - systemctl start qemu-guest-agent
  - mkdir -p /etc/skel/Documents
  - mkdir -p /etc/skel/Images
  - mkdir -p /etc/skel/Vidéos
  - mkdir -p /etc/skel/Téléchargements
  - mkdir -p /etc/skel/Modèles
  - echo 'SKEL=/etc/skel' >> /etc/adduser.conf

bootcmd:
  - userdel -r -f debian
EOF

En plus de notre fichier de configuration, nous allons définir en supplément le type d’attribution IP (dhcp dans mon cas vu que je souhaite en faire un usage desktop, une IP statique ne m’intéresse pas).

qm set 106 --ipconfig0 ip=dhcp
qm set 106 --cicustom "vendor=PVE1:snippets/deb12.yaml"

Dans votre cas, pour la dernière commande, utilisez plutôt (chemin par défaut des snippets) :

qm set 106 --cicustom "vendor=local:snippets/deb12.yaml"

Premiers setup

On lance l’installation/configuration de la VM:

qm start 106

Au premier démarrage notre VM va installer tous les paquets nécessaires, vous pouvez vous en assurer depuis la console de proxmox. Une fois que vous aurez de nouveau la main sur la console, vous pouvez directement éteindre la VM et supprimer les entrées obsolètes dans la configuration QEMU.

qm shutdown 106
qm set 106 --vga none
qm set 106 --delete serial0

Conversion en template et déploiement

C’est presque fini, on passe maintenant à la conversion de notre VM fraichement configurée en template :

qm template 106

Voilà il ne vous restera plus qu’à cloner votre template Debian, et définir votre utilisateur.

qm clone 106 107 --full 1 --name deb-107

Définition des paramètres Cloud-init :

qm set 107 --ciuser USER --cipassword PASSWORD 

Vous pouvez aussi passer par l’interface web de proxmox pour configurer Cloud-init. Cliquez sur la nouvelle machine virtuelle que vous avez créée, accédez à l’onglet Cloud-Init et passer ensuite vos paramètres et c’est tout ! Vous pouvez démarrer votre nouvelle machine virtuelle.

Ressources :