Aller au contenu

anklume

Framework déclaratif de compartimentalisation d'infrastructure.

Isolation avec Incus (LXC/KVM) + nftables, sur n'importe quel Linux. Provisioning des instances via Ansible (intégré, optionnel pour l'utilisateur).

graph LR
    A[domains/*.yml] -->|anklume apply| B[Incus]
    A -->|anklume apply| C[Ansible]
    B --> D[Projets]
    B --> E[Réseaux]
    B --> F[Instances LXC/VM]
    C --> G[Provisioning]

    style A fill:#6366f1,color:#fff
    style B fill:#3b82f6,color:#fff
    style C fill:#8b5cf6,color:#fff

Principe

Décrivez vos domaines en YAML. Lancez anklume apply all. Obtenez des environnements isolés et reproductibles.

# domains/pro.yml
description: "Environnement professionnel"
trust_level: semi-trusted

machines:
  dev:
    description: "Développement"
    type: lxc
    roles: [base, dev-tools]

  desktop:
    description: "Bureau KDE"
    type: lxc
    gpu: true
    roles: [base, desktop]

Démarrage rapide

# Installer AnKLuMe et ses dépendances
git clone https://github.com/jmchantrein/AnKLuMe.git
cd AnKLuMe/host
less quickstart.sh        # lire avant d'exécuter
sudo ./quickstart.sh

# Créer un projet
anklume init mon-infra
cd mon-infra

# Déployer
anklume apply all

# Vérifier
anklume status

Guide d'installation détaillé

Fonctionnalités

Fonctionnalité Description
Isolation par domaines Un projet Incus + sous-réseau + nftables par domaine
PSOT stateless Réconciliation sans state file — YAML + Incus = source de vérité
GPU passthrough Accès exclusif ou partagé au GPU (Ollama, STT, LLM)
Provisioning Ansible Rôles embarqués + rôles custom utilisateur
Snapshots automatiques Pré/post-apply, rollback destructif
Nesting Incus Conteneurs dans conteneurs (5 niveaux validés)
Réseau nftables Drop-all par défaut, politiques déclaratives
Push-to-talk STT Dictée vocale via Speaches (KDE Wayland)
Portails fichiers Transfert hôte ↔ conteneur sans compromettre l'isolation
Golden images Publier des instances comme images réutilisables

Architecture

graph TB
    subgraph Hôte Linux
        CLI[CLI Typer]
        Engine[Engine Python]
        Prov[Provisioner Ansible]
    end

    subgraph Incus
        subgraph "Domaine admin"
            A1[admin-mgmt]
        end
        subgraph "Domaine pro"
            P1[pro-dev]
            P2[pro-desktop]
        end
        subgraph "Domaine ai-tools"
            AI1["gpu-server 🎮"]
        end
    end

    NFT[nftables]

    CLI --> Engine
    Engine -->|subprocess| Incus
    Engine --> Prov
    Prov -->|ansible-playbook| Incus
    NFT -.->|isolation| Incus

    style CLI fill:#6366f1,color:#fff
    style Engine fill:#3b82f6,color:#fff
    style Prov fill:#8b5cf6,color:#fff
    style NFT fill:#ef4444,color:#fff