Découverte de Promox (installation et utilisation)

Je cherchais un moyen pour faire un nas maison avec du vieux matériel informatique. Je pensais me tourner vers des solutions comme openmediavault ou trunas. Puis récemment, j’ai entendu parler de proxmox qui est un hyperviseur qui me permettra de faire plusieurs containers ou vm. je me suis dit que je vais essayer cette solution pour avoir tout un tas de service plus tard (ex portainer; homeassitant etc…) ma seule limite la mémoire ram (même si j’utiliserai principalement des containers lxc).

Article long
Je vous préviens d’avance, mon article est super long,sans aucun doute le plus long de mon blog

Le but de ce tuto est de vous aider à appréhender proxmox. La doc n’étant pas super ; disons que je vais faire une synthèse de tout ce que j’ai trouvé sur le net et youtube et le recracher de façon digeste. Je ferai à la fin une petite synthèse de comment je compte configurer proxmox (il se peut que je dise des bêtises; mais toutes les méthodes fonctionnent).

Avant de commencer, je vais commencer par un petit avertissement. Sachez qu’il faut être un peu à l’aise avec la ligne de commande (enfin , pas forcément expert) car tout n’est pas faisable à partir de l’interface proxmox. Donc si vous avez de l’urticaire à l’idée d’utiliser la ligne de commande ; passer votre chemin.

Donc au menu ; je vais vous montrer l’installation ; l’accès à l’interface, comment créer une vm et un container. Ensuite, je vous montrerai comment connecter à un autre disque durs avec et sans zfs.Enfin, je vous montrerai ce que je vais faire personnellement.

Alors C’est quoi proxmox

Proxmox c’est un hyperviseur (logiciel équivalent hyper v;vmware;open nebula;xen server; XCP-ng etc… ) open source gratuit, mais aussi payant (cela donne accès au forum et d’autre fonctionnalité). Il permet de faire des machines virtuelles ainsi que des container lxc.

La config

Il vous faudra un pc (une tour) perso, j’ai pris un i5 avec 32go de ram (c’est peut-être beaucoup pour un serveur). Sachez qu’on peut faire fonctionner proxmox sur un vieil ordi (il faut que le processeur supporte la virtualisation). Un vieux pentium et 4 go ram permet de faire tourner proxmox +2 debian vm par exemple ou plusieurs containers lxc (solution à previlégier). Au niveau des disques durs, il faut un disque pour l’install proxmox, et si vous voulez utiliser zfs (zraid) 3 disques supplémentaires.

l’installation

Il faudra au préalable flasher une clef usb (balena etcher) avec l’iso de proxmox VE puis allez dans le bios pour permettre de démarrer sur la clef usb. il faudra aussi activer la virtualisation.

Lancer la clef et vous arrivez sur l’interface grub

Vous arrivez sur un accord de license cliquer sur agree.

Vous choisissez dans quel disque ; vous voulez installer proxmox ;mais attention ; l’os prendra l’intégralité du disque.

Choisissez votre localisation

Mettez votre mot de passe (ce mot de passe servira à se connecter à l’interface de proxmox) et une adresse e-mail 

Dans hostname mettez pve.labo (par exemple)

Ensuite, mettez une adresse ip.celle-ci servira à vous connecter à l’hyperviseur. Cliquer sur next.

Vous aurez un récapitulatif de ce que vous avez entré précédemment et cliquer sur install.

Partie admin

Taper l’adresse ip:8006 que vous avez mis à l’installation.

Vous aurez un message qui vous dira que le site est dangereux ; don’t worry et faite une exception

De toute façon ; c’est vous qui l’avez installé donc relax

En login taper root et ajouter votre mot de passe.

Ensuite, vous aurez une modale pour vous inviter à prendre proxmox enterprise (comme je l’ai dit précédemment, ce n’est pas une obligation).

Voici l’interface de proxmox; belle bête n’est-ce pas?

Les choses que vous utiliserez :

Dans datacenter

  • storage : Qui permet de faire des directory qui permettront de stocker vm container snapshot etc..
  • permission: c’est l’endroit ou vous créez un utilisateur

En cliquant sur pve

  • shell:le petit écran noir ou il faudra taper des commandes (une petite astuce pour faire un copier coller ctrl+shift+v)
  • update: c’est là où vous pouvez faire des updates
  • disks: si vous créer un zraid c’est par là qu’il faudra passer

En cliquant sur local (pve)

  • C’est l’endroit où on peut stocker les backup, iso, les template de container. Vous verrez que cette partition est très petite et pour mettre des backup ce n’est pas l’idéal, mais il y a moyen de changer ça ; mais il faudra passer par beaucoup de ligne de commande.

En cliquant sur local lvm (pve)

  • À cet endroit seront stockés le disque de vm et des containers qui sont créés au moment de la construction de la vm ou des containers

Sachez que vous pourrez créer d’autres emplacements pour stocker les vm et container.

Chose à faire après installation.

Mise à jours

Sur pve cliquer sur repositories et désactiver les deux dépôt enterprise en cliquant sur disable

Ensuite il faudra cliquer sur add et dans le menu déroulant mettre no-subscription pour ajouter le dépôt et avoir les mise à jour

Ensuite cliquer sur refresh et upgrade pour faire la mise à jours

Créer des users

On va créer un user linux pam d’abord via le shell donc pve->shell et on tape les commandes suivantes.

adduser nomdeluser
#nomdeluser par exemple anakin
adduser nomdeluser sudo
#ça va ajouter par exemple anakin au group sudo

Maintenant il est temps de créer l’user sur l’interface. donc on va dans datacenter->permission et users

On remet le nom de l’user qu’on a choisi. le realm est linux pam; on ne peut pas choisir de groupe, car on ne l’a pas créé.

Petit aparté sur le realm. Vous pouvez voir qu’on peut utiliser linux pve. La petite différence c’est l’utilisateur pve ne sera lié qu’à l’interface du système. D’après ce que j’ai compris; ça ne sert que dans le cas de cluster (plusieurs serveurs aka ordi relié à proxmox) et vous n’avez pas la possibilité de vous connecter en ssh.

Maintenant on crée un groupe en cliquant sur group et add

Je lui donne le nom admin

À ce groupe; je vais lui donner des permissions admin en cliquant sur permission.

Le path sera / . Le groupe sera le nom que j’ai donné précédemment et rôle sera administrator.

Il me manque plus qu’à associer mon groupe à l’utilisateur en allant sur users, en cliquant sur mon utilisateur et en cliquant sur edit

On clique sur group pour ajouter admin.

Désactiver l’accès root via ssh

Pour securiser il faut créer une clefs ssh , mais il faudra les générer avant sur votre machine.


ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa_pve01
#On copie les clefs sur le serveur
ssh-copy-id -i ~/.ssh/id_rsa_pve01 anakin@ipdeproxmox
#Pour se connecter il faudra taper soit
ssh anakin@ipdeproxmox
#Mais il faudra taper le mot de passe de la clef au moins une fois 
#plus simple sans mot de passe
ssh -i ~/.ssh/id_rsa_pve01 anakin@ipdeproxmox
#par la suite taper ssh anakin@ipdeproxmox il se connectera directement

Empecher d’autres machines à se connecter à ssh; il faudra éditer le fichier suivant.

nano /etc/ssh/sshd_config.d/custom.conf
#changer permitrootlogin à no
PermitRootLogin no
# taper
PasswordAuthentication no
PubkeyAuthentication no
PermitEmptyPasswords no
# on peut changer le port par exemple 2424 (pas une obligation mais fortement #recommandé) dans ce cas pour se connecter la premiere fois: 
#ssh -i ~/.ssh/id_rsa_pve01 anakin@ipdeproxmox-p 2424 
Port 2424

Match User gdc Address votreadresseip
PubkeyAuthentication yes

Pour appliquer

systemctl restart sshd

Pour basculer par la suite en root; taper quand vous serez connecté en ssh

su -

Si vous voulez utiliser sudo il faudra installer sudo sur le shell de l’interface proxmox.

apt-get install sudo

Création de vm

Créer une vm n’est pas une chose compliquée. Dans cet exemple, on va créer une vm xubuntu.
La première chose qu’il faudra faire est de télécharger l’image iso de xubuntu. On va sur le site de xubuntu et on cherche l’image de téléchargement. On copie juste le lien .

Maintenant, on va dans l’admin de proxmox, on va dans local(pve) et on clique sur download from url puis, on entre le lien dans url puis on clique sur query url.

Pour créer une vm, il faut entrer dans la partie admin de proxmox et cliquer create vm tout simplement.

On met l’id qu’on veut (par exemple 100 mais vous pouvez mettre 500 c’est selon votre propre convention) et un nom pour pouvoir savoir ce qui se trouve dans la vm. Puis next.

Choisir l’iso et dans type choisir linux. Cliquer sur next.

Next

Choisir la taille du volume virtuel.

pour xubuntu ça sera suffisant 1 core

1024 ça sera suffisant (2048 c’est mieux)

choisir son interface réseau

Vérifier et confirmer. En appuyant sur finish.

Sur cet vm, j’ai installé xubuntu (je ne vous montrerai pas l’installation, j’ai un article qui en parle, car l’article est très long, mais appuyer sur start pour démarrer la vm puis sur console) sauf que je n’ai pas un disque supplémentaire pour stocker mes fichiers. Je vous montrerai par la suite comment faire. Maintenant je vous montre comment créer un container lxc.

Créer des container lxc

Avant de créer les containers, je vous conseille d’aller sur pve shell et taper.

pveupdate
#gdc du futur ayant mis à jour la liste pour avoir ubuntu 24.04; j'avais une #erreur à l'installation donc utilisez plutôt cette commande
pveam update

Ça permet d’avoir les containers lxc de turnkey linux.

Ensuite, il faut télécharger un template en allant sur local ->ct templates et cliquer sur template.

Pour cet exemple, je vais prendre une ubuntu 22.04 qui est une version lts

Maintenant, je vais créer un container lxc en cliquant sur create ct (bouton bleu en haut à droite).

On met un id, un nom pour savoir ce qui se trouve dans le container et un mot de passe. pour sécuriser, vous pouvez aussi mettre une clé publique.

je choisis le template que j’ai téléchargé précédemment

Je crée le disque virtuel où sera installé le container.

1 core pour un container; c’est suffisant.

512 mo c’est amplement suffisant (voir de trop).

Pour le réseau, vous pouvez mettre ip static.Fort pratique par la suite.

Appuyé sur next.

Appuyé sur finish

Pour connecter un container, c’est comme pour les vm il y a plusieurs façons de faire.

Donc juste là c’est easy (et encore je vous montre la méthode facile );après….

Mais on va voir pour que ça soit digeste (sans garantie)

Connecter ses disques à une vm sans zfs

C’est la partie à prendre avec des pincettes. À cet endroit, les mots de tête commence donc, suivez bien. Alors attaché vos yeux parce qu’elles vont faire le voyage de leur vie.

La première méthode

Il n’y a qu’une seule méthode pour connecter une vm à un disque dur physique. toutes les autres méthodes ne marche avec des disques virtuels.

Créer une table de partitions avec fdisk

fdisk /dev/sdb
g #pour créer une table de partition gpt  
w

Créer une partition

fdisk /dev/sdb
n 
#pour créer une partition
Partition number (1-128, default 1): 
#taper entré  car c'est votre première partition
First sector (2048-7814037134, default 2048):
#taper entré car c'est votre premier secteur 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-7814037134, default 7814035455): +200G
#+200G pour ajouter une partition de 200 gigaocté
w

On crée le système de fichier

mkfs.ext4 -b 4096 /dev/sdb1

Ensuite dans l’administration de proxmox, on va sur pve; shell et on tape la commande suivante

ls -n /dev/disk/by-id/
#On trouve une ligne du genre ata-ST4000DM004-2U9104_ZFN4JPER-part
qm set 101 -scsi1 /dev/disk/by-id/ata-ST4000DM004-2U9104_ZFN4JPER-part
#101 c'est l'id de la vm
#Scsi1 ça créera un deuxième disque
# /dev/disk/by-id/(nom du disque récuperer sur le disque)

Deuxième méthode

Préalablement, il faudra faire fdisk pour créer la partition

monter un disque

cd /mnt
sudo mkdir share
sudo mount /dev/sdb1 /mnt/share
sudo nano /etc/mtab 
#recuperé la derniere ligne
sudo nano /etc/fstab 
#et on ajoute la ligne
/dev/sdb1 /mnt/share ext4 rw,relatime,data=ordered 0 0

sudo mount -a

Dans l’admin proxmox on va sur datcenter->storage on clique sur add et on choisit directory

Pour ajouter; il faut cliquer sur sa vm; hardware; on clique sur add et on choisi hardisk.Dans content vous pouvez tous mettre (soyons fou) (vous pouvez ne pas mettre iso et container template).

Dans ce cas-là, le volume est totalement virtuel. Dans storage; choisissez datastock. Ça vous permetra de choisir le format de volume (raw,qcow2,vmdk) mais aussi de ne pas stocker le volume sur le disque ou est installé promox.

connecter un mount point dans un container(sans zfs)

1 ère méthode

C’est la seule méthode pour connecter un container à un disque physique

Il faudra faire un fdisk un dossier et une directory regarder dans cet parti vm (1ere sans la parti qm set et deuxieme methode) et il faudra taper ceci (à cause du unprevileged container)

chown 101000:101000 /mnt/share

Par exemple, on fait une directory /mnt/share et on le connecte a notre container ID 101

solutions 2

nano /etc/pve/lxc/101.conf
# et on ajoute la ligne mp0: /mnt/share,mp=/shared

ou 

Taper la commande

pct set 101 -mp0 /mnt/share,mp=/shared

Ce que ça va faire c’est monter un dossier shared dans le container qui pointera vers votre disque physique share.

Exemple pour vous en convaincre

wget http://ftp.free.fr/mirrors/ftp.xubuntu.com/releases/22.04/release/xubuntu-22.04.3-desktop-amd64.iso /mnt/share

Ouvrez thunar et faite ctrl+l et entrez ceci (cet methode ne mache pas avec l’explorateur windows ;sur linux on peut faire du sftp directement dans l’explorateur de fichier)

ssh://root@ipproxmox
#ipproxmox c'est l'ip pour vous connecter exemple 192.168.1.26
# on peut voir la même chose avec l'ip du container;mais au préalable il #faudra créer un user dans le container et le dossier à observer sera /shared
adduser nomuser
adduser nomuser sudo
#c'est pour ajouter nomuser au groupe sudo du container
ssh://nomuser@ipcontainer

et que je vais sur /mnt/share vous verrez plein de fichiers

Vous verrez le fichier telechargé ainsi que les dossier ou sont mis les image backup etc….

Deuxième méthode

Il faudra faire un fdisk un dossier et une directory regarder dans cet parti vm (1ere sans la parti qm set et deuxieme methode)

On va sur notre container 101 puis Resources et cliquer sur add mount point

Ça créera un volume virtuel dans le dossier /shared/image du container .

zfs

zfs agit un peu comme un raid . Personnellement ; j’utiliserai zraid qui fonctionne comme un raid5. En cas de problème sur un disque, je garde l’intégrité de mes données. Toutefois, si vous avez une config avec moins 8 go de RAM; Abandonner zfs et utilisé les méthodes sans zfs (edit:apparement c’est faisable sur des petites config,mais je le déconseille quand même).

L’autre souci que j’ai avec zfs c’est que même si ce format doit être fait avec openzfs. Le problème est que zfs a été créé par sun microsystem racheté par oracle. Le problème, c’est que cette société a des tendances patent troll. Donc, on peut avoir un problème dans le futur. Il suffit de voir l’avis de linus torvald pour se faire une idée. (voilà, j’ai jeté ma petite crotte de nez sur oracle). Mais j’ai déjà vu que trunas utilise ce système de fichiers ; donc faisant confiance.

Créer un pool ne pose pas de souci majeur (ça se fait graphiquement) ni créer un dataset ou un volume (une simple commande suffit).

Créer pool zfs

Avant de commencer; il faut créer un pool zfs. pour ce faire il faut cliquer pve->disk et zfs

Ensuite, il faut cliquer sur create zfs

Pour le réglage,data, ça sera le nom du pool. Au niveau du raid level c’est raidz (c’est l’equivalent d’un raid 5 d’où 3 disques supplémentaire) par la suite il faudra créer des dataset ou un volume zfs .

Créer dataset, volume et configuration

Créer dataset

Maintenant qu’on a créé un pool, on peut créer un dataset en faisant

zfs create data/premierdataset
#pour supprimmer
zfs destroy data/premierdataset

On peut aussi limiter la taille des dataset

zfs set refquota=5g data/premierdataset

Créer un volume

Pour créer un volume il faut faire ceci

zfs create -s -V 5G data/premiervolume
#sans l'option -s le volume raw aura 5go d'office 
#pour le detruire
zfs destroy data/premiervolume

Le lien ci-dessous, vous montrera l’essentiel des commandes pour faire des volume ou dataset zfs

https://groupe-sii.github.io/cheat-sheets/openzfs/index.html

Connecter un volume ou un dataset à une vm (avec zfs)

Pour ajouter un dataset

Il faut créer une directory en allant datacenter->storage->add directory

Donné un nom (id) et directory /data/nomdudataset (dans l’exemple vmctback) dans content je sélectionne disk image, container, vzdump backup et snippets

Première méthode

Cliquer sur la vm ->storage->add->harddisk

On choisit son répertoire dans storage taille de disque et le format (raw qemu ou vmdk)

Le disque sera virtuel.

Deuxième méthode


Tout en ligne de commande. On crée un volume zfs on le formate en ext4 un fdisk pour connaitre la partition et on ajoute ça dans hardware. Pour taper ces commandes; il faut aller sur pve et cliquer sur shell.

zfs create -s -V 5G data/voltest
fdisk -l
#si c'est votre premier volume vous devriez avoir /dev/zd0 le deuxième #devrait être /dev/zd16 (pouquoi? 🤔)
mkfs.ext4 /dev/zvol/data/voltest
qm set 500 -scsi1 /dev/zd0

Connecter un dataset ou un volume à un container (avec zfs)

1 ere methode

Cet methode connecte directement un dataset à un container.

On crée un dataset et on lui aloue si on veut 5gigas

zfs create data/datatest
zfs set refquota=5g data/datatest

On crée un mount point

pct set 100 --mp0 /data/datatest,mp=/media

Pour pouvoir mettre des données dans le dataset (sinon les authorisation seront nobody nogroup).le chown ; c’est à cause de unprvileged container.

chown 101000:101000 /data/datasettest

Il ne faudra oublier créer un user dans le container

https://itsembedded.com/sysadmin/proxmox_bind_unprivileged_lxc/
https://pve.proxmox.com/wiki/Unprivileged_LXC_containers

2 eme methode

Allez sur votre container et clique sur ressource et cliquer sur add

Ça fera un disque virtuel

Ce que je pense faire

Un petit schéma pour commencer

Je vais utiliser zfs en zraid;créer 4 dataset sans limite de taille. il y aura:

  • Un dataset ou seront stocké mes container qui seront connecté à un disque raw dans le repertory data/diskcont. Concretement par exemple je crée 2 container. Un qui sert pour un serveur dlna avec l’id 100 et un container 101 ou je met jellyfin ces deux container seront stocké dans le dataset data/datacont.

Créer un dataset :

zfs create data/datacont 
zfs create data/diskcont

Ajouter une directory datacont et diskcont

Créer un container 100 et 101

Faire un mount point sur le 100 pour stocké ses fichiers

Pour communiquer entre le container 100 et 101 il faudra mettre cette ligne de commande.

pct set 101 -mp0 testvol:100/vm-100-disk-1.raw,mp=/mnt/media

si on veut enlever disque virt ou unitilisé
nano /etc/pve/lxc/100.conf

Cette ligne de commande permet de connecter directement le conatainer 101 aux deuxiemes disques du container 100 ou sont stocké les fichiers et sera montés sur /mnt/media

Si vous faite une erreur vous pouvez éditer le fichier 101 conf

nano /etc/pve/lxc/101.conf
#et enlevez la ligne commençant par mp0
mp0: diskcont:100/vm-100-disk-0.raw,/mnt/media,backup=1,size=160G
  • Un dataset data/datavm ou seront stocké mes vm .Ces vm seront connecté au même disque raw dans le repertory data/diskvm ce qui permet un partage direct sans passer par le réseau.

Créer un dataset

zfs create data/datavm
zfs create data/diskvm

Ajouter une directory datavm et diskvm

Créer une vm 500 et 501

Ajouter un disque durs sur la vm 500 en faisant add->hard-disk

Pour communiquer entre la vm 500 et 501 il faudra mettre cette ligne de commande.

qm set 502 -scsi1 diskvm:501/vm-501-disk-1.raw

Commme sur les container Si vous faite une erreur vous pouvez éditer le fichier 501 conf

nano /etc/pve/qemu-server/501.conf

  • les disques vm et ct seront synchronisé avec rsync ou samba (samba pas encore sure).Le truc à savoir; c’est que vous pouvez connecter directement un disque de virtuel (raw ) entre container mais pas entre un container et une vm.Je vais quand même voir si j’ai réellement besoin de vm .Sachant qu’avec les container on peut faire la même chose qu’une vm et que ça utilise beaucoup moins de ressource qu’une vm (16mo pour une ubuntu au repos).

À priori cette solution fonctionne ; mais il faudra voir dans le temps s’il n’y a pas de conflit en écriture.

Les soucis rencontrés

Un souci que j’ai rencontré s’est passé après que j’ai effacé un pool. Quand j’ai recréé un pool, j’avais le message suivant: proxmox failed to start import zfs pool {pool name}

Malgré ce message proxmox fonctionne ; du moins en apparence, car j’ai eu plein de petits soucis qui en découle.

Je n’arrivais pas à installer une vm debian (erreurs à l’installation); quand j’allais sur la vm le propriétaire et le group était nobody. La solution temporaire que j’ai trouvée, c’est créer des users et de changer le propriétaire du dataset avec le nom utilisateur (chose impossible avec un volume zfs).

chown nonmuser:nomuser data/nomdudataset 

La solution définitive sera de taper ces lignes

systemctl disable zfs-import@<poolname>.service
zpool set cachefile=/etc/zfs/zpool.cache <poolname>

Sources:

Réinstallation proxmox

https://www.thomas-krenn.com/en/wiki/ZFS_Pool_Import_-_Proxmox_single_host_reinstall_without_full_backup

Si vous avez un message failed to import zfs pool au démarrage (si vous effacez sauvagement votre zfs pool)

https://forum.proxmox.com/threads/proxmox-failed-to-start-import-zfs-pool-pool-name.117379/
Connecter un nas à un container lxc
https://www.youtube.com/watch?v=DMPetY4mX-c

Passer un disque physique dans proxmox

https://www.youtube.com/watch?v=U-UTMuhmC1U

Astuce pour augmenté le disque pour vos backup (si vous avez un seul disque)

https://youtu.be/_u8qTN3cCnQ?si=P2UzatJJ2IujIv_U&t=886

Autres sources

https://www.youtube.com/watch?v=xKhWRMj5Nrc

https://www.youtube.com/watch?v=Yw8QMrTHCw4

Comments are closed.