Added AI rules file, apkgs folder, update-nixpkgs.sh script. Updated documentation.
This commit is contained in:
@@ -0,0 +1,66 @@
|
|||||||
|
# Règles du Projet : nixos-infra
|
||||||
|
|
||||||
|
## Contexte Technique
|
||||||
|
**Stack :** NixOS 25.11, agenix, bash, SSH, Proxmox VE, LXC, KVM, IPv4, IPv6
|
||||||
|
**Environnement :** VSCodium (VSCode) sur Debian 13 + extension Continue poru l'IA, bash, SSH, Gitea, IPv4, IPv6
|
||||||
|
**Package Manager :** Nix
|
||||||
|
**Style :** Privilégier la modularité, dans la philosophie Unix. Utilisation de bash pour les tâches d'exploitation, avec un fallback sur python si bash devient impossible à maintenir.
|
||||||
|
**Tests :** Test Driven Development dans la mesure du possible.
|
||||||
|
**Matériels :** ordinateurs de bureau X86-64, un vieux Dell T62°, un vieux Dell T330, un Rpi 3B
|
||||||
|
|
||||||
|
## Conventions de Code
|
||||||
|
**Nommage :** camelCase pour les variables, PascalCase pour les composants et types. Majuscules et "_" pour les variables d'environnement shell.
|
||||||
|
**Types :** N/A
|
||||||
|
**Imports :** N/A
|
||||||
|
**Formatage :**
|
||||||
|
- Utiliser exclusivement `alejandra` ou `nixfmt-rfc-style`. Ne jamais laisser de trailing whitespaces.
|
||||||
|
- Préférer `inherit` pour les variables de même nom.
|
||||||
|
- Utiliser `with lib;` ou `with builtins;` avec parcimonie à l'intérieur des fonctions, mais préférer les chemins explicites pour la clarté.
|
||||||
|
- Toujours déclarer les arguments en début de fichier : `{ config, pkgs, lib, ... }:`.
|
||||||
|
**Modularité :** Chaque service doit être encapsulé dans un module avec une option `enable` (ex: `services.mon-service.enable = true;`).
|
||||||
|
|
||||||
|
## Architecture & Dossiers
|
||||||
|
**Architecture :**
|
||||||
|
Le but est de permettre le déploiement et la maintenance de services d'infrastructure réseau et applicatifs
|
||||||
|
(DNS, serveur de dépôts git, gestionnaire de mots de passe, file server, backup server, reverse proxy,
|
||||||
|
workstations, etc.). Le dépôt git contient l'ensemble des fichiers permettant de configurer et installer
|
||||||
|
n'importe quelle machine du parc (images d'OS, fichiers de configuration et scripts de déploiemente et maintenance).
|
||||||
|
En cible, reconstruire l'ensemble du parc doit être possible depuis une workstation Linux (pas forcément NixOS) sur lequel ce dépôt aura été cloné.
|
||||||
|
|
||||||
|
**Dossiers :**
|
||||||
|
- `/nixos-infra/hosts/servers` : Configurations spécifiques de chaque serveur (.nix, lxc.config).
|
||||||
|
- `/nixos-infra/hosts/workstations` : Configurations spécifiques de chaque station de travail (.nix, lxc.config).
|
||||||
|
- `/nixos-infra/modules/machine-types` : Modules Nix standardisant les différents types d'hotes (hyperviseur, VM, LXC, stations, etc.).
|
||||||
|
- `/nixos-infra/modules/services` : Modules Nix standardisant les différents services d'infrastructure réseau (DNS, etc.).
|
||||||
|
- `/nixos-infra/modules/user-profiles` : Modules Nix standardisant les différents profils d'utilisateurs (admin, dev, burautique, etc.).
|
||||||
|
- `/nixos-infra/overlays` : Overlays Nix (dernier recours).
|
||||||
|
- `/nixos-infra/pkgs` : Paquets personnalisés non présents dans Nixpkgs.
|
||||||
|
- `/nixos-infra/lib` : Fonctions utilitaires Nix.
|
||||||
|
- `/nixos-infra/scripts` : Scripts d'exploitation et de helpers.
|
||||||
|
|
||||||
|
Le point d'entrée pour chaque machine est hosts/<servers|workstations>/\<hostname>/configuration.nix.
|
||||||
|
|
||||||
|
## Gestion des Secrets
|
||||||
|
**Interdiction Formelle :** Ne JAMAIS écrire de mot de passe, clé d'API ou token en clair dans les fichiers `.nix`.
|
||||||
|
**Outil :** Utiliser **agenix**.
|
||||||
|
|
||||||
|
## Instructions NixOS
|
||||||
|
1. Ne pas utiliser les flakes Nix.
|
||||||
|
2. Toujours vérifier si une option (https://search.nixos.org/options), un paquetage (https://search.nixos.org/packages) ou une fonction (https://noogle.dev/) avant de l'inventer.
|
||||||
|
3. Ne pas supposer que la workstation utilisée est elle-même sous NixOS. L'environnement de développement est sous Debian Trixie jusqu'à ce que le projet soit complètement auto-porteur. Néanmoins, le paquetage "nix-bin" est installé pour disposer des binaires de Nix.
|
||||||
|
4. Utiliser nix-isntantiate pour vérifier la syntaxe et l'évaluation des fichiers Nix:
|
||||||
|
```
|
||||||
|
nix-instantiate --parse chemin/vers/fichier.nix # Vérifie la syntaxe
|
||||||
|
nix-instantiate --eval -E 'import ./hosts/machine/configuration.nix {}' # Vérifie l'évaluation
|
||||||
|
```
|
||||||
|
|
||||||
|
## Instructions Spécifiques (Guidelines)
|
||||||
|
1. Ne **jamais** exposer de mot de passe, de clef API ou tout secret en clair. Utiliser les mécanismes de gestion/protection de secrets appropriés au contexte.
|
||||||
|
2. Privilégier les clefs SSH pour l'authentification aux systèmes.
|
||||||
|
3. Signaler les éventuelles incohérences de pratiques au sein du projet ou avec les bonnes pratiques.
|
||||||
|
|
||||||
|
## Préférences de Réponses
|
||||||
|
- Langue : Français. Le code reste en Anglais.
|
||||||
|
- Style : Technique, concis, orienté "Infrastructure as Code".
|
||||||
|
- Toujours expliquer brièvement *pourquoi* une option NixOS spécifique a été choisie (référence aux options officielles).
|
||||||
|
- Me signaler si et quand il aura été difficile ou impossible de respecter les instructions fournies dans .ai-rules.md .
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
let
|
||||||
|
spec = builtins.fromJSON (builtins.readFile ./nixpkgs.json);
|
||||||
|
in
|
||||||
|
import (builtins.fetchTarball {
|
||||||
|
url = "https://github.com/NixOS/nixpkgs/archive/${spec.rev}.tar.gz";
|
||||||
|
sha256 = spec.sha256;
|
||||||
|
})
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"url": "https://github.com/NixOS/nixpkgs/archive/755f5aa91337890c432639c60b6064bb7fe67769.tar.gz",
|
||||||
|
"rev": "755f5aa91337890c432639c60b6064bb7fe67769",
|
||||||
|
"sha256": "1lmn8dicfwmsfdaiw18xjjys78bal6yjy3a41j02my7kw0wlb76a"
|
||||||
|
}
|
||||||
Executable
+27
@@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Met à jour le commit de référence pour Nixpkgs
|
||||||
|
|
||||||
|
BRANCH="nixos-25.11"
|
||||||
|
REPO="https://github.com/NixOS/nixpkgs"
|
||||||
|
JSON_FILE="$(dirname "$0")/../pkgs/nixpkgs.json"
|
||||||
|
|
||||||
|
echo "Récupération du dernier commit sur $BRANCH..."
|
||||||
|
REV=$(git ls-remote $REPO refs/heads/$BRANCH | cut -f1)
|
||||||
|
|
||||||
|
if [ -z "$REV" ]; then
|
||||||
|
echo "Erreur : Impossible de récupérer le commit."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Calcul du hash (cela peut prendre un moment)..."
|
||||||
|
SHA256=$(nix-prefetch-url --unpack "https://github.com/NixOS/nixpkgs/archive/$REV.tar.gz")
|
||||||
|
|
||||||
|
cat <<EOF > "$JSON_FILE"
|
||||||
|
{
|
||||||
|
"url": "https://github.com/NixOS/nixpkgs/archive/$REV.tar.gz",
|
||||||
|
"rev": "$REV",
|
||||||
|
"sha256": "$SHA256"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "Succès ! Nixpkgs est maintenant épinglé au commit : $REV"
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Usage: create-lxc.sh --proxmox-server SERVER --user= --identity FIEL [--config-file LXC_CONFIG_FILE]
|
||||||
|
|
||||||
|
# Parse command line arguments using docopts
|
||||||
|
|
||||||
|
# Connect to Proxmox VE server using provided credentials
|
||||||
|
|
||||||
|
# Create LXC container with provided configuration
|
||||||
|
|
||||||
|
# Configuration can be provided via stdin or a file
|
||||||
|
|
||||||
|
# Fail if both stdin and file are provided
|
||||||
|
|
||||||
|
# Example usage:
|
||||||
|
# cat lxc-config.conf | ./create-lxc.sh --proxmox-server=192.168.1.1 --username=admin --password=password
|
||||||
|
# or
|
||||||
|
# ./create-lxc.sh --proxmox-server=192.168.1.1 --username=admin --password=password --config-file=lxc-config.conf
|
||||||
|
|
||||||
|
# Example lxc-config.conf:
|
||||||
|
# lxc.network.type: veth
|
||||||
|
# lxc.network.link: eth0
|
||||||
|
# lxc.network.flags: up
|
||||||
|
# lxc.network.hwaddr: 00:16:3e:xx:xx:xx
|
||||||
|
# lxc.network.ipv4: 192.168.1.100/24
|
||||||
|
# lxc.network.ipv4.gateway: 192.168.1.1
|
||||||
|
# lxc.network.ipv6: 2001:db8::100/64
|
||||||
|
# lxc.network.ipv6.gateway: 2001:db8::1
|
||||||
|
|
||||||
|
# Parse command line arguments using docopts
|
||||||
|
|
||||||
|
# Connect to Proxmox VE server using provided credentials
|
||||||
|
|
||||||
|
# Create LXC container with provided configuration
|
||||||
|
|
||||||
|
# Configuration can be provided via stdin or a file
|
||||||
|
|
||||||
|
# Fail if both stdin and file are provided
|
||||||
|
|
||||||
|
# Example usage:
|
||||||
|
# cat lxc-config.conf | ./create-lxc.sh --proxmox-server=192.168.1.1 --username=admin --password=password
|
||||||
|
# or
|
||||||
|
# ./create-lxc.sh --proxmox-server=192.168.1.1 --username=admin --password=password --config-file=lxc-config.conf
|
||||||
|
|
||||||
|
# Example lxc-config.conf:
|
||||||
|
# lxc.network.type: veth
|
||||||
|
# lxc.network.link: eth0
|
||||||
|
# lxc.network.flags: up
|
||||||
|
# lxc.network.hwaddr: 00:16:3e:xx:xx:xx
|
||||||
|
# lxc.network.ipv4: 192.168.1.100/24
|
||||||
|
# lxc.network.ipv4.gateway: 192.168.1.1
|
||||||
|
# lxc.network.ipv6: 2001:db8::100/64
|
||||||
|
# lxc.network.ipv6.gateway: 2001:db8::1
|
||||||
Reference in New Issue
Block a user