Les épisodes :
Preface
Après avoir mis en place le réseau, nous allons installer le système
d’exploitation.
Pour cela, j’utilise un mini-PC NiPoGi, un équivalent de NUC doté des
caractéristiques suivantes :
- CPU : AMD Ryzen 7 3750H (4 cœurs / 8 threads)
- RAM : 16 Go
- Disque : 512 Go
Cette configuration est idéale pour héberger un petit serveur proposant divers services.
Cherchant une solution de virtualisation simple et flexible, j’ai opté pour NixOS depuis octobre 2022. Bien que Proxmox soit un excellent outil, je privilégie un contrôle total sur l’hôte.
NixOS est une distribution immuable, permettant de figer les versions du
système, comme le font pyproject.toml
en Python ou package.json
en
JavaScript. Sa force réside dans sa capacité à revenir à une version stable en
cas de mise à jour défectueuse.
Installation
Avec 6 à 10 ordinateurs (anciens et récents) à gérer chez moi, unifier leurs configurations sous NixOS me semble être une solution idéale. C’est pourquoi je l’utilise également pour mes serveurs.
C’est pour cette raison que j’utiliserais NixOS pour configurer mes serveurs.
Pour faciliter cette démarche, j’ai créé le projet nix-homelab, qui propose :
- Une installation simplifiée de NixOS via un CD personnalisé.
- Un partitionnement automatique des disques grâce à l’excellent disko.
- L’installation centralisée de logiciels pour tous les utilisateurs (system wide).
- Une gestion personnalisée des logiciels par utilisateur (home manager)
- La réutilisation de configurations communes pour chaque machine installée.
Les étapes
Dans
l’épisode précédent,
j’ai réservé la plage réseau
192.168.x.16/28
pour les hyperviseurs. La première adresse disponible est 16
, et notre hôte
sera donc nommé hype16
.
Pour installer NixOS, j’utilise un Zalman ZM-VE350 (un boîtier disque dur capable d’émuler un lecteur CD-ROM) et exécute les commandes suivantes depuis mon ordinateur portable :
# Clone le projet
git clone git@github.com:badele/nix-homelab.git
cd nix-homelab
# Entre dans un environnement immuable NixOS
nix develop
# Initialise le hote (création des crédentials)
just nixos-init-host hype16
# Installe NixOS
just nixos-install
# Commit du travail
git add .
git commit -m "feat: add new hype16 host"
git push
Résumé de la configuration
Je vais détailler les sections du fichier de configuration hosts/hype16
Modules communs
Les modules suivants sont importés pour la configuration :
- Gestion du matériel.
- Partitionnement via
disko
. - Création des utilisateurs système.
- Installation des paquets communs.
imports = [
# Host and hardware configuration
./hardware-configuration.nix
./disks.nix
../../nix/modules/nixos/host.nix
# Users
../root.nix
../badele.nix
# Commons
../../nix/nixos/features/commons
../../nix/nixos/features/homelab
../../nix/nixos/features/system/containers.nix
# Roles
../../nix/nixos/roles # Automatically load service from <host.modules> sectionn from `homelab.json` file
];
Configuration du démarrage et du système de fichiers
- boot UEFI
- support systeme de fichier BTRFS
- Support de l’IP forwarding sur toutes les cartes
boot = {
kernelParams = [ "mem_sleep_default=deep" ];
supportedFilesystems = [ "btrfs" ];
loader.grub = {
enable = true;
efiSupport = true;
efiInstallAsRemovable = true;
};
kernel.sysctl."net.ipv4.conf.all.forwarding" = true;
};
Le réseau
La configuration réseau reprend les VLANs définis dans l’épisode précédent. Le
port ether9
du routeur Mikrotik est configuré avec les VLANs LAN
, ADM
, et
DMZ
.
- Désactvation du support IPv6
- Activation des VLANs depuis la carte ethernet
enp1s0
(tagged) - Création des interfaces des bridges et attributions des IPs pour les connecter avec les futurs containers/VMs (tagged)
- Définition de la gateway et DNS pour l’ensemble des interfaces
networking = {
enableIPv6 = false;
hostName = "hype16";
useDHCP = false;
vlans = {
vlandmz = { id = 32; interface = "enp1s0"; };
vlanadm = { id = 240; interface = "enp1s0"; };
};
interfaces = {
brlan = { ipv4.addresses = [{ address = "192.168.254.16"; prefixLength = 24; }]; };
bradm = { ipv4.addresses = [{ address = "192.168.240.16"; prefixLength = 24; }]; };
brdmz = { ipv4.addresses = [{ address = "192.168.32.16"; prefixLength = 24; }]; };
};
bridges = {
brlan = { interfaces = [ "enp1s0" ]; };
bradm = { interfaces = [ "vlanadm" ]; };
brdmz = { interfaces = [ "vlandmz" ]; };
};
defaultGateway = "192.168.254.254";
nameservers = [ "89.2.0.1" "89.2.0.2" ];
};
Vérification
Je vais m’assurez que hype16
a accès aux réseaux des VLANs LAN
, ADM
,
DMZ
. Pour cela je vais pinger les adresses des VLANs du routeur .253
PING 192.168.254.253 (192.168.254.253) 56(84) octets de données.
64 octets de 192.168.254.253 : icmp_seq=1 ttl=64 temps=0.416 ms
PING 192.168.240.253 (192.168.240.253) 56(84) octets de données.
64 octets de 192.168.240.253 : icmp_seq=1 ttl=64 temps=0.672 ms
PING 192.168.32.253 (192.168.32.253) 56(84) octets de données.
64 octets de 192.168.32.253 : icmp_seq=1 ttl=64 temps=0.288 ms
Le système est opérationnel. Dans le prochain épisode, je testerai un nouvel hyperviseur : Incus.
Sources
- Site webs
- IA
- openai
- Reformulation des phrases
- Correction des fautes d’orthographe
- openai
Pas de commentaire