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).
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.
- Installation
- Partie admin
- Chose à faire après installation
- Création de vm
- Créer des container lxc
- Connecter ses disques à une vm sans zfs
- Connecter un mount point dans un container(sans zfs)
- ZFS
- Créer pool zfs
- Créer dataset, volume et configuration
- Connecter un volume ou un dataset à une vm (avec zfs)
- Connecter un dataset ou un volume à un container (avec zfs)
- Ce que je pense faire
- Les soucis rencontrés
- Sources
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
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).
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
À 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….
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
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
Astuce pour augmenté le disque pour vos backup (si vous avez un seul disque)
Autres sources