Virtualiser NixOS sur Proxmox VE

Guide d'installation de NixOS sur Proxmox VE

Virtualiser NixOS sur Proxmox VE
nixos proxmox proxmoxve pve immutable immuable

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).

Repository statistics - Repology
Multiple package repositories analyzer

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.

Download Nix / 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 :

Configuration Collection - NixOS Wiki

C'est tout pour aujourd'hui, see yaaaaa!!!!!!

NixOS, quand la programmation fonctionnelle rencontre Linux | Connect - Editions Diamond
NixOS est une distribution basée sur le gestionnaire de paquets Nix et dont toute la configuration se fait à partir d’un fichier. Nous verrons que NiXOS permet de gérer son système de manière reproductible, avec des mises à jour atomiques et des rollbacks, des espaces utilisateurs, l’installation si…