Virtualiser NixOS sur Proxmox VE
Guide d'installation de NixOS sur Proxmox VE

Au sommaire :
- 1-Qu'est-ce que NixOS ?
- 2-Création d'une machine virtuelle.
- 3-Préparation du disque dur.
- 4-Déclarer un état désiré.
1-Qu'est-ce que NixOS ?
Pour simplifier, NixOS est l'équivalent de Terraform dans le monde des distributions de bureau mais il est plus que ça. Il est à la fois :
- Un gestionnaire de paquets qui peut-être installé sur n'importe quelle distribution Linux.
- Une distribution (sujet de ce tutoriel).
- Un langage de programmation.
Il permet d'installer plusieurs versions d'un même logiciel, d'effectuer des mises à jour atomiques, de faire des retours en arrière (rollback), de gérer son système à partir d'un fichier déclaratif et d'obtenir une reproductibilité du système, chose impossible à obtenir sur une distribution Linux traditionnelle.
Je tient à remercier un ancien collègue de travail (Santiago, si tu me lis) qui m'a fait découvrir cette distribution et de m'avoir fait voir le futur de l'informatique, l'immuabilité. Je me souvient la première fois que j'ai découvert NixOS.





Bon j'arrête. À noter (je suis le premier surpris) que le dépôt "nixpkgs stable 22.05" comporte plus de 72.000 paquets, soit plus que AUR (69367) ou Ubuntu et Debian (32.000 paquets environs).

Je vous partage également l'avis de Chris Titus Tech qui dis carrément que le gestionnaire de paquet de NixOS est le meilleur qui sois.
C'est pas tout ça mais comment utiliser NixOS ? C'est ce que nous allons voir ensemble.
2-Création d'une machine virtuelle
Téléchargez l'ISO sur le site de NixOS.

Le lien direct : https://channels.nixos.org/nixos-22.05/latest-nixos-plasma5-x86_64-linux.iso
Ensuite, copiez l'ISO sur votre serveur Proxmox VE.
Note : je reprend la procédure de RHEL9, c'est 100% identique.

Cliquez sur "create VM".

Note : Pensez à cocher la case "Advanced" pour avoir plus d'options disponibles.
General
- Choisissez un VMID disponible et un nom

OS
- Storage : Sélectionnez l'image ISO d'Ubuntu Server.
- Guest OS : laissez par défaut.

System
- Graphic card : choisissez SPICE,
- SCSI Controller : laissez par défaut (c'est le meilleur choix possible en terme de performance),
- BIOS et Machine : laissez Seabios et i440fx par défaut,
- Cliquez bien sur Qemu Agent pour que PVE puisse envoyer des commandes à la machine virtuelle et recevoir des informations,

Disks
- Bus/Device : laissez par défaut,
- Storage : choisissez "local-lvm" pour un provisionnement dynamique,
- Disk size (GiB) : laissez par défaut (vous pourrez l'étendre par la suite),
Ici, deux options sont à cocher :
- SSD emulation : indique à l'OS qu'il démarre sur un SSD et non sur un disque rotatif,
- Discard : active le TRIM.

CPU
- Socket : laissez par défaut,
- Cores : Sélectionnez le nombre de cores que vous souhaiter,
- Type : dans le cas de RJEL9, choisissez "host" sinon un kernel panic se déclenchera avec le mode par défaut,

- Memory (MiB) : Choisissez la mémoire que vous souhaitez allouer à votre machine virtuelle (c'est 2048 Mib par défaut),

- Bridge : le pont par défaut du serveur,
- Firewall : le pare-feu de Proxmox VE (iptable) activé par défaut,
- Model : VirtIO est installé d'office dans les distributions Linux et vous permettra de profiter des gains de performance dû à la para-virtualisation.

Vérifiez que tout est correct puis finalisez la création de la machine virtuelle.

Optimisations
Dans les options de la machine virtuelle, pensez toujours à décocher l'option "Use tablet for pointer" qui dans le cadre d'un serveur est inutile et consomme beaucoup de ressources.

3-Préparation du disque dur
Changez le mot de passe du compte root (demo dans l'exemple)
Passez ensuite en compte root.
sudo su
Configurez le clavier en français.
loadkeys fr
Formatez le disque /dev/sda au préalable avec cfdisk.
cfdisk /dev/sda
- Partition Linux Boot (1M),
- Partition Linux Swap (je met l'équivalent de la mémoire vive, 2g/4G/8G) nommé /dev/sda1,
- Partition principale nommé /dev/sda2,
Validez par "write" puis quittez.
Ensuite, activez le swap de /dev/sda2
mkswap -L swap /dev/sda2 && swapon /dev/sda2
Formatez la partition principale /dev/sda3 en ext4
mkfs.ext4 -L nixos /dev/sda3
Montez la partition /dev/sda3
mount /dev/sda3 /mnt
4-Déclarer un état désiré
Avec la commande nixos-generate, générerez un fichier de configuration à la racine du point de montage.
nixos-generate-config --root /mnt
Puis éditez le fihcier de configuration avec nano.
nano /mnt/etc/nixos/configuration.nix
Je vous conseille de :
- Faire un copier-coller du modèle de référence.
- Supprimez le avec la commande "rm /mnt/etc/nixos/configuration.nix"
- Copier ma configuration qui se trouve juste en dessous avec "nano /mnt/etc/nixos/configuration.nix".
{ config, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
];
# Pour cet exemple, la machine virtuelle boot en "legacy"
# Boot sur le disque /dev/sda
boot.loader.grub.enable = true;
boot.loader.grub.version = 2;
boot.loader.grub.device = "/dev/sda";
# Nom d'hôte
networking.hostName = "nixos";
# Horloge interne
time.timeZone = "Europe/Paris";
# DHCP désactivé de manière globale
# DHCP activé su l'interface enp1s0 (vérifiez le nom de votre interface au préalable.
networking.useDHCP = false;
networking.interfaces.enp1s0.useDHCP = true;
# Options liés à xserver et le bureau plasma
services.xserver.enable = true;
services.xserver.displayManager.sddm.enable = true;
services.xserver.desktopManager.plasma5.enable = true;
# Activation du son et de pulseaudio
sound.enable = true;
hardware.pulseaudio.enable = true;
# ajoutez votre nom et un mot de passe initial (patrick pour l'exemple)
users.users.patrick = {
isNormalUser = true;
initialPassword = "010203040506";
extraGroups = [ "wheel" ];
};
# installation des paquets. Voir la liste des paquets disponibls
# Lien : https://search.nixos.org/packages
environment.systemPackages = with pkgs; [
vim
brave
filezilla
onlyoffice-bin
gimp
shotcut
thunderbird
kodi
rocketchat-desktop
openfortivpn
element-desktop
vlc
packer
terraform
vagrant
aws
azure-cli
vscodium
remmina
virt-manager
];
# Activation de l'agent gpg et du protocole SSH
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
# Activation des services de OpenSSH et qemu-guest-agent
services.openssh.enable = true;
services.qemuGuest.enable = true;
# Version de NixOS concerné
system.stateVersion = "22.05"; # Did you read the comment?
}
Dés que vous avez apportés vos modifications, tapez la commande suivante :
nixos-install

L'installation va s'effectuer. À la fin, on vous demandera de changer le mot de passe root et lorsque ce sera fait, tapez "sudo reboot" et explorez les possibilités immenses de NixOS.
Sachez que ce tutoriel explore à peine l'étendue des possibilités de NixOS. SI vous voulez avoir des exemples de configurations reproductibles, voici le lien qui recense tout les dépôts github :
C'est tout pour aujourd'hui, see yaaaaa!!!!!!
