222 lines
5.7 KiB
Markdown
222 lines
5.7 KiB
Markdown
# NETbian
|
|
|
|
NETbian est un outil de provisioning pour **Debian 13** base sur une architecture **profiles + roles**.
|
|
|
|
Chaque **profil** compose une suite de **roles fonctionnels**. Un role regroupe au meme endroit :
|
|
|
|
- ses paquets
|
|
- sa configuration APT eventuelle
|
|
- ses actions d'installation
|
|
- sa configuration systeme
|
|
- ses actions finales eventuelles
|
|
|
|
Le projet est pense pour rester **idempotent** : un second passage doit converger vers l'etat attendu au lieu de casser la machine.
|
|
|
|
## Profils disponibles
|
|
|
|
- `cli`
|
|
- `server`
|
|
- `desktop`
|
|
- `devel`
|
|
|
|
Les profils sont definis dans `profiles/` et peuvent etre listes avec :
|
|
|
|
```bash
|
|
./run.sh --list-profiles
|
|
```
|
|
|
|
## Roles disponibles
|
|
|
|
Le depot contient actuellement les roles suivants :
|
|
|
|
- `base`
|
|
- `codium`
|
|
- `desktop`
|
|
- `devel`
|
|
- `docker`
|
|
- `firewall`
|
|
- `server`
|
|
- `zram`
|
|
|
|
Ils peuvent etre listes avec :
|
|
|
|
```bash
|
|
./run.sh --list-roles
|
|
```
|
|
|
|
## Structure du depot
|
|
|
|
```text
|
|
netbian/
|
|
├── run.sh
|
|
├── roles.sh
|
|
├── lib.sh
|
|
├── profiles/
|
|
│ ├── cli.sh
|
|
│ ├── desktop.sh
|
|
│ ├── devel.sh
|
|
│ └── server.sh
|
|
├── roles/
|
|
│ ├── base/
|
|
│ ├── codium/
|
|
│ ├── desktop/
|
|
│ ├── devel/
|
|
│ ├── docker/
|
|
│ ├── firewall/
|
|
│ ├── server/
|
|
│ └── zram/
|
|
└── config/
|
|
```
|
|
|
|
## Convention d'un role
|
|
|
|
Un role peut contenir les fichiers suivants :
|
|
|
|
- `packages.list` : paquets du role
|
|
- `repo.sh` : ajout de depots / cles APT
|
|
- `install.sh` : installation specifique
|
|
- `config.sh` : configuration systeme
|
|
- `run.sh` : actions finales du role
|
|
- `l10n.packages` : mappings de paquets localises
|
|
- `rules.<suffix>.list` : regles declaratives UFW pour le role firewall
|
|
|
|
Tous ces fichiers sont **optionnels**. Le moteur execute uniquement ceux qui existent.
|
|
|
|
## Profils fournis
|
|
|
|
### `cli`
|
|
|
|
Provisioning minimal en ligne de commande :
|
|
|
|
```bash
|
|
ROLE_ORDER=(base zram)
|
|
```
|
|
|
|
### `server`
|
|
|
|
Machine orientee services :
|
|
|
|
```bash
|
|
ROLE_ORDER=(base firewall server zram docker)
|
|
```
|
|
|
|
### `desktop`
|
|
|
|
Poste utilisateur graphique :
|
|
|
|
```bash
|
|
ROLE_ORDER=(base desktop firewall zram)
|
|
```
|
|
|
|
### `devel`
|
|
|
|
Poste de developpement :
|
|
|
|
```bash
|
|
ROLE_ORDER=(base desktop firewall zram docker codium devel)
|
|
```
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
git clone https://git.netig.net/netig/netbian.git
|
|
cd netbian
|
|
sudo ./run.sh --profile devel
|
|
```
|
|
|
|
## Utilisation
|
|
|
|
```text
|
|
Usage: run.sh [options]
|
|
Options:
|
|
-p, --profile <server|desktop|devel|cli> Profile to install (required)
|
|
-l, --lang <code> Language code if translations are needed (e.g. fr, es, de)
|
|
--config <path> Config file path (default: /etc/netbian.conf)
|
|
--list-profiles List available profiles and exit
|
|
--list-roles List available roles and exit
|
|
-h, --help Show this help
|
|
```
|
|
|
|
Exemples :
|
|
|
|
```bash
|
|
sudo ./run.sh --profile server
|
|
sudo ./run.sh --profile devel --lang fr
|
|
sudo ./run.sh --config /root/netbian.conf --profile desktop
|
|
NETBIAN_PROFILE=server sudo -E ./run.sh
|
|
./run.sh --list-profiles
|
|
./run.sh --list-roles
|
|
```
|
|
|
|
## Configuration
|
|
|
|
`run.sh` lit et met a jour un fichier de configuration shell simple, par defaut :
|
|
|
|
```text
|
|
/etc/netbian.conf
|
|
```
|
|
|
|
Variables gerees actuellement :
|
|
|
|
```bash
|
|
profile=devel
|
|
lang=fr
|
|
```
|
|
|
|
Priorite de resolution :
|
|
|
|
1. options CLI (`--profile`, `--lang`, `--config`)
|
|
2. variables d'environnement (`NETBIAN_PROFILE`, `NETBIAN_LANG`, `NETBIAN_CONFIG_FILE`)
|
|
3. fichier de configuration cible
|
|
4. absence de valeur -> erreur si `profile` reste non defini
|
|
|
|
Le meme chemin de configuration est ensuite reutilise par `roles.sh`.
|
|
|
|
## Logs d'execution
|
|
|
|
NETbian utilise des logs simples pour le moteur d'orchestration :
|
|
|
|
- `[RUN]` : etape lancee
|
|
- `[OK]` : etape executee avec succes
|
|
- `[SKIP]` : etat deja conforme ou etape vide
|
|
- `[INFO]` : information de progression
|
|
- `[WARN]` : situation non bloquante
|
|
|
|
Les scripts de roles peuvent aussi ecrire leurs propres messages metier, mais la recommandation est d'utiliser les helpers centralises pour garder des traces homogenes.
|
|
|
|
## Choix d'architecture pour un niveau infra mature
|
|
|
|
- **Firewall centralise** : seules les listes `roles/firewall/rules.*.list` definissent les ouvertures UFW.
|
|
- **Validation stricte** : les roles, manifests et le fichier de configuration sont verifies avant execution.
|
|
- **Resume de run** : `roles.sh` imprime un recapitulatif des roles, etapes executees, sautees et en echec.
|
|
- **Precedence explicite** : la resolution de la configuration est documentee et stable.
|
|
|
|
## Particularites importantes
|
|
|
|
- `run.sh` exige les droits `root`.
|
|
- Le projet verifie qu'il tourne sur **Debian 13**.
|
|
- Un test reseau HTTP est effectue avant provisioning en utilisant `curl` puis `wget`.
|
|
- Le role `firewall` applique des regles `ufw` a partir de fichiers declaratifs.
|
|
- Le role `server` ecrit une configuration SSH dediee puis tente de recharger `ssh` / `sshd` si le service existe.
|
|
- Le role `codium` installe VSCodium, ses extensions et la configuration utilisateur si un utilisateur cible est detecte.
|
|
- Les paquets localises eventuels sont ajoutes a partir de la variable `lang` de la configuration active.
|
|
|
|
## Validation rapide
|
|
|
|
Avant livraison, au minimum :
|
|
|
|
```bash
|
|
bash -n run.sh roles.sh lib.sh roles/*/*.sh profiles/*.sh
|
|
./run.sh --list-profiles
|
|
./run.sh --list-roles
|
|
```
|
|
|
|
Pour une validation production complete, il reste recommande de tester le provisioning sur une **Debian 13 fraiche** pour verifier le comportement reel des roles et des services.
|
|
|
|
|
|
## Resume d execution
|
|
|
|
- `Steps executed` compte les etapes ayant effectue une action.
|
|
- `Steps skipped` compte les etapes entierement conformes ou sautees par l'orchestrateur.
|
|
- `Skip events` compte tous les messages `[SKIP]` emis pendant l'execution.
|