Aller au contenu principal

Installation de Proxmox

En tant qu'administrateur système, je me retrouve souvent confronté à un défi de taille : pouvoir travailler sur mes environnements de virtualisation, même lorsque je suis en déplacement. La mobilité est devenue un aspect essentiel de mon travail et il est important pour moi de disposer d'outils qui s'adaptent à cette nécessité. C'est ici qu'interviennent Vagrant.

L'association de Proxmox et Vagrant crée un duo puissant, permettant de déployer rapidement des environnements virtualisés, peu importe où je me trouve : dans le train, à l'hotel, dans une conférence...

Prérequis

Avant de plonger dans l'installation de Proxmox avec Vagrant, il est important de s'assurer que votre système répond à certains prérequis. Ces prérequis sont essentiels pour garantir une expérience fluide et sans encombre tout au long du processus d'installation et d'utilisation.

  1. Ressources système : Assurez-vous que votre machine dispose d'un CPU avec 8 cœurs au minimum, d'au moins 16 Go de RAM et de suffisamment d'espace disque (100 Go minimum recommandé). La virtualisation demande des ressources, et une machine puissante garantira de meilleures performances.

  2. Vagrant : La dernière version de Vagrant doit être installée sur votre système. Vagrant est un outil de création et de gestion d'environnements de développement virtuels. Il est facile à installer et compatible avec de multiples systèmes d'exploitation.

  3. Hyperviseur compatible : Proxmox VE nécessite un hyperviseur pour la virtualisation. Vous pouvez utiliser des solutions telles que VirtualBox ou VMware. Assurez-vous que l'hyperviseur est installé et correctement configuré sur votre machine.

Écriture du Vagrantfile

Maintenant que notre environnement Vagrant est prêt, passons à l'étape suivante : créer une machine virtuelle où sera installé Proxmox. Voici le code :

Vagrant.configure("2") do |config|
  config.vm.box = "generic/debian12"
  config.vm.provider "libvirt" do |lv|
    lv.cpus = "6"
    lv.memory = "6096"
  end
  config.vm.synced_folder '.', '/vagrant', disabled: true
  config.vm.network :private_network, ip: "192.168.3.10"
  config.vm.hostname = "proxmox"
  config.vm.network :forwarded_port, guest: 8006, host: 8006
end

Ce Vagrantfile est assez basique puisqu'il instancie une simple VM en utilisation un box debian12 avec des ressources suffisantes. Adaptez les valeurs lv.cpus et lv.memory à votre configuration.

J'ajoute une seconde carte réseau, avec une adresse IP fixe, indispensable au bon fonctionnement de Proxmox. La première servant à Vagrant.

Reste plus qu'à détailler le script d'installation.

Mise au point du Script d'Installation de Proxmox

Après avoir configuré notre environnement Vagrant avec Debian 12, il est temps de procéder à l'installation de Proxmox 8. Je vais détailler comment je m'y suis pris pour installer Proxmox sur une distribution Debian existante. Je me suis basé sur la documentation officielle.

Mise au point de l'installation

Connectez-vous à votre machine virtuelle Debian 12 via SSH ou en utilisant l'interface Vagrant. Vous pouvez le faire avec les commandes suivantes :

vagrant ssh
sudo su -

Une fois connecté, il est conseillé de modifier le fichier /ets/hosts. Exécutez les commandes suivantes pour mettre à jour votre système :

cat > /etc/hosts << EOF
127.0.0.1       localhost

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.3.10    proxmox.robert.local proxmox
EOF

Il faut aussi modifier certaines valeurs des paramètres du kernel :

cat > /etc/sysctl.d/proxmox.conf << EOF
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.ip_forward=1
EOF

Et on les applique :

sysctl -p /etc/sysctl.d/proxmox.conf

Pour éviter de laisser faire Proxmox, je vais créer un bridge vmbr0 :

cat > /etc/network/interfaces << EOF

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
        dns-nameserver 4.2.2.1
        dns-nameserver 4.2.2.2
        dns-nameserver 208.67.220.220
        pre-up sleep 2

iface eth1 inet manual

auto vmbr0
iface vmbr0 inet static
        address 192.168.3.10/24
        bridge-ports eth1
        bridge-stp off
        bridge-fd 0
EOF

On peut ensuite ajouter le dépôt Proxmox à la liste de sources APT. Exécutez les commandes suivantes :

echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg

Ces commandes ajoutent le dépôt Proxmox et importent la clé GPG pour garantir l'authenticité des paquets.

Avec le dépôt en place, nous allons mettre à jour le système :

apt update -y && apt full-upgrade -y

On peut installer enfin Proxmox :

apt install -y proxmox-ve ksm-control-daemon locales-all chrony libguestfs-tools

J'installe quelques packages supplémentaires à ceux recommandés. Par exemple ksm-control-daemon installe KSM (Kernel Samepage Merging) qui permet de combiner plusieurs pages de mémoire identiques en une seule page, pour économiser de la mémoire.

Le package libguestfs-tools installe un ensemble d'outils pour créer, accéder et modifier des images de disque virtuel. Ces outils vont nous servir à manipuler les systèmes de fichiers et les configurations des templates de machines virtuelles Proxmox.

On nettoie le système :

apt remove linux-image-amd64 'linux-image-6.1*' os-prober -y

On reboot pour terminer :

reboot

Au bout de quelques secondes, vous devriez pouvoir accéder à Proxmox de nouveau.

Accès à l'Interface Web

Une fois la VM redémarrée, vous pouvez accéder à l'interface web de Proxmox en ouvrant un navigateur et en saisissant l'adresse IP de la VM suivie de :8006. Par exemple, https://192.168.3.10:8006.

curl -v -k -L https://192.168.3.10:8006

...

   <script type="text/javascript" src="/proxmoxlib.js?ver=v4.1.3-t1700730770"></script>
    <script type="text/javascript" src="/pve2/js/pvemanagerlib.js?ver=8.1.3"></script>
    <script type="text/javascript" src="/pve2/ext6/locale/locale-en.js?ver=7.0.0"></script>

    <script type="text/javascript">
    if (typeof(PVE) === 'undefined') PVE = {};
    Ext.History.fieldid = 'x-history-field';
    Ext.onReady(function() { Ext.create('PVE.StdWorkspace');});
    </script>

  </head>
  <body>
    <!-- Fields required for history management -->
    <form id="history-form" class="x-hidden">
    <input type="hidden" id="x-history-field"/>
    </form>
  </body>
</html>
* Connection #0 to host 192.168.3.10 left intact

Le script définitif

Pour éviter de répéter ces tâches à chaque fois que vous voudrez faire cette installation, voici un script complet (enfin presque, il manque la copie du certificat) :

!#/usr/bin/env bash
export DEBIAN_FRONTEND=noninteractive
cat > /etc/hosts << EOF
127.0.0.1       localhost

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.3.10    devbox1
EOF
cat > /etc/sysctl.d/proxmox.conf << EOF
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.ip_forward=1
EOF
cat > /etc/network/interfaces << EOF

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
        dns-nameserver 4.2.2.1
        dns-nameserver 4.2.2.2
        dns-nameserver 208.67.220.220
        pre-up sleep 2

iface eth1 inet manual

auto vmbr0
iface vmbr0 inet static
        address 192.168.3.10/24
        bridge-ports eth1
        bridge-stp off
        bridge-fd 0
EOF
echo "deb [arch=amd64] http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
apt update -y && apt full-upgrade -y
apt install -y proxmox-ve ksm-control-daemon locales-all chrony libguestfs-tools
rm -f /etc/apt/sources.list.d/pve-install-repo.list
sysctl -p /etc/sysctl.d/proxmox.conf
apt remove linux-image-amd64 'linux-image-6.1*' os-prober -y

Dans le Vagrantfile, il faut ajouter le provisionner shell :

Vagrant.configure("2") do |config|
  config.vm.box = "generic/debian12"
  config.vm.provider "libvirt" do |lv|
    lv.cpus = "6"
    lv.memory = "6096"
  end
  config.vm.synced_folder '.', '/vagrant', disabled: true
  config.vm.network :private_network, ip: "192.168.3.10"
  config.vm.hostname = "devbox1"
  config.vm.network :forwarded_port, guest: 8006, host: 8006
  config.vm.provision :shell do |shell|
    shell.path = "provision.sh"
  end
end

Connexion Sécurisée à Proxmox

Ça fonctionne, mais il faut installer un certificat pour que la connexion en https fonctionne, indispensable pour utiliser terraform.

Génération et installation d'un certificat auto-signé

Comme à mon habitude je vais utiliser mkcert que j'ai documenté ici. Important, réalisez toutes les opérations décrites dans ce guide, car il faut ajouter le certificat racine sur votre machine !

mkcert 'proxmox.robert.local' localhost 127.0.0.1 ::1

Created a new certificate valid for the following names
- "proxmox.robert.local"
- "localhost"
- "127.0.0.1"
- "::1"

The certificate is at "./proxmox.robert.local+3.pem" and the key at "./proxmox.robert.local+3-key.pem" ✅

It will expire on 27 March 2026 🗓

Nous allons les transférer dans la configuration de Proxmox :

scp proxmox.robert.local+3.pem root@192.168.3.10:/etc/pve/nodes/devbox1/pveproxy-ssl.pem
scp proxmox.robert.local-key.pem root@192.168.3.10:/etc/pve/nodes/devbox1/pveproxy-ssl.key

On se connecte à la box Vagrant et on redémarre le service :

vagrant ssh
sudo systemctl restart pveproxy.service

Déconnectez-vous et on reteste sans l'option -k de curl qui bypass le contrôle de connexion sécurisée :

curl -v -L https://proxmox.robert.local:8006

...

  </head>
  <body>
    <!-- Fields required for history management -->
    <form id="history-form" class="x-hidden">
    <input type="hidden" id="x-history-field"/>
    </form>
  </body>
</html>
* Connection #0 to host proxmox.robert.local left intact

Nickel Chrome

Configuration SSH pour se Connecter à Proxmox

Pour pouvoir utiliser Terraform pour provisionner des ressources, il faut autoriser la connexion ssh avec le compte root. Pour cela, il faut éditer le fichier de configuration et mettre la valeur PermitRootLogin yes :

vagrant ssh
sudo vi /etc/ssh/sshd_config

Déconnectez-vous et éditez le fichier de configuration du client ssh :

vi ~/.ssh/config

Ajoutez cette ligne :

Host proxmox.robert.local
        User root

Idem, ajoutez cette ligne dans votre fichier /etc/hosts :

192.168.3.10    proxmox.robert.local

On teste :

ssh proxmox.robert.local

You have new mail.
Last login: Tue Dec 26 13:06:48 2023 from 192.168.3.1
root@proxmox:~# ...

Conclusion

Avec les étapes que nous avons suivies, votre environnement Proxmox 8 est désormais opérationnel sur une machine virtuelle Debian 12 gérée par Vagrant. Cette configuration vous ouvre la porte à une multitude de possibilités dans le domaine de la virtualisation et de la gestion des conteneurs.

Un des avantages de cette installation est la possibilité d'utiliser Terraform pour instancier et gérer des ressources sur Proxmox. Terraform, un outil d'Infrastructure as Code (IaC), permet de déployer et de gérer l'infrastructure de manière automatisée et reproductible. Pour en savoir plus sur l'utilisation de Terraform avec Proxmox, je vous invite à consulter ce guide détaillé : Utiliser Terraform avec Proxmox.

Il est également intéressant de noter que ce processus d'installation n'est pas seulement limité aux machines virtuelles. Les mêmes étapes et configurations peuvent être appliquées pour installer Proxmox sur un mini-PC fonctionnant sous Debian 12, en adaptant certains fichiers de configuration. Cela rend cette solution particulièrement polyvalente, que vous souhaitiez l'implémenter dans un environnement virtuel ou sur du matériel physique.

De plus, nous explorerons prochainement l'utilisation de l'inventaire dynamique Ansible avec Proxmox. Ansible est un outil puissant pour l'automatisation de la configuration et la gestion de l'infrastructure et l'inventaire dynamique est un moyen efficace de gérer les ressources virtualisées de manière flexible et scalable.