<style>
h1 {
    color: #FF6347 !important;
}

h2 {
    color: #FFA500 !important;
}
    
h3 {
    color: #9ACD32 !important;    
}
    
h4 {
    text-decoration: underline;
    color: #87CEEB !important;
}
</style>

<div style="display: flex; gap: 5rem; align-items: center">

![](https://blog.stephane-robert.info/img/nixos-logo.webp =200x)
    
![](https://polytech.grenoble-inp.fr/uas/polytech/LOGO/logo_inp_polytech_2023grenoble.png =500x)

![](https://upload.wikimedia.org/wikipedia/fr/b/ba/Logo_LIG.png)

</div>



# Tests d‚Äôinfrastructures avec nixos - Rapport Final

## Rapport
### Notre Equipe
#### De Polytech :
* Ana GELEZ - Chef de projet
* Dorian MOUNIER - d√©veloppeur
* Mathis GRANGE - d√©veloppeur
* Elise DUPONT - d√©veloppeuse

#### Du LIG (Laboratoire d'informatique de Grenoble):
* Olivier RICHARD - responsable
* Quentin Guilloteau - debuggeur √† distance

### Contexte et outils

#### Nix

Nix est un langage de programmation permettant d‚Äôinstaller et de configurer des logiciels. C'est aussi un gestionnaire de paquets pour les syst√®mes GNU/Linux. Ce gestionnaire a de nombreux avantages : 

* Reproductibilit√© : Les paquets sont construits √† partir de sources avec des d√©pendances fig√©es ce qui garantit des installations identiques √† chaque fois.
* Fiabilit√© : L'installation d'un paquet n'affecte jamais les autres paquets install√©s.
* Isolation : Chaque paquet est encapsul√© dans son propre environnement, ce qui permet d'installer plusieurs versions du m√™me paquet simultan√©ment.
* D√©clarativit√© : La configuration du syst√®me est d√©clarative, ce qui facilite la gestion, la maintenance et la transparence du syst√®me.

#### NixOS
NixOS est le syst√®me d'exploitation bas√© sur Nix. Ce syst√®me d'exploitation a tous les avantages du gestionnaire de paquet Nix en plus des suivants : 

* Mises √† jour fiables : Les mises √† jour sont appliqu√©es de mani√®re atomique ce qui les emp√™che de corrompre le syst√®me.
* R√©trogradation : Les retours en arri√®re apr√®s une installation sont simples.
* Encapsulation : On peut cr√©er des environnements utilisateur ou des logiciels isol√©s.
* Grand choix de paquets: NixOS propose un large choix de paquets, y compris des logiciels populaires et des outils de d√©veloppement.

#### NixOS-Compose
NixOS-Compose est un outil d√©velopp√© au LIG permettant la cr√©ation de syst√®mes NixOS pr√©-configur√©s. Il va permettre de r√©duire la charge des syst√®mes distribu√©s √©ph√©m√®res et d'√©tendre l'utilisation de NixOS sur d'autre supports comme par exemple les machines virtuelles.

![](https://cdn.discordapp.com/attachments/805803410493538324/1216783917424836608/nixosCompose.png?ex=6601a554&is=65ef3054&hm=b2b04862015742e8c446d24b921c82ae95cd7c120744ec72ad84b652d790a970&)

#### Nixpkgs et Nur-Kapack
Nixpkgs et NUR sont des d√©p√¥ts de paquets Nix. Ils sont utilis√©s
massivement par le gestionnaire de paquets, en tant que collection de paquets et logiciels installables par les utilisateurs poss√©dant Nix. 

#### Grid'5000

Grid'5000 est un r√©seau europ√©en de machines disponibles pour la recherche. Nous avons pu en r√©server une ou plusieurs pour un temps donn√© et d√©ployer nos compositions Nix dessus. Les machines sont nettoy√©es une fois leur utilisation termin√©e. 

Ceci avait plusieurs objectifs, premi√®rement faire un test √† plus grande √©chelle avec des machines plus performantes et la possibilit√© de lancer sur plus de noeuds. De plus, le d√©ploiement sur l'outil est un peu diff√©rent en vue de l'architecture, compar√© aux tests sur nos machines. Enfin, notre projet sera utilis√© principalement sur cet outil donc il est essentiel de tester chacune de nos compositions sur Grid'5000.

#### Github 

Nous utilisons Github pour le versionning et la mise en commun du code ainsi que Github Actions pour compiler la documentation et la d√©ployer en ligne. Nous avons √©galement utilis√© les "Issues" de Github afin de noter les prochaines √©tapes √† faire ainsi que les probl√®mes actuels. Nous nous sommes aussi servi du service Kanban int√©gr√© √† Github car notre projet se pr√™tait
tr√®s bien aux m√©thodes agiles : nous avions des sprints d'une semaine avec des points chaque lundi avec le porteur du projet, au cours desquels nous faisions un point sur notre avanc√© et nous revoyions nos objectifs. 

### Composition

Notre projet consiste √† r√©aliser des configurations NixOS, appel√©es compositions, et √† les tester. Une composition est une pile de logiciels configur√©s pour fonctionner ensemble que l'on va mettre √† disposition dans un syst√®me NixOS pour une utilisation dans la recherche.

Voici un sch√©ma des fichiers contenus dans une petite composition:

![](https://cdn.discordapp.com/attachments/805803410493538324/1216784697229836298/Capture_decran_du_2024-03-06_09-53-39.png?ex=6601a60e&is=65ef310e&hm=bf6362b3c81d4cc9e4cd967ceb7d012e0cea6f85d2ddfe13c612a42617069b93&)

Le fichier le plus important est `compositon.nix`. C'est ici qu'on configure notre syst√®me. Par exemple, si on veut faire tourner une machine avec le serveur web Nginx, on peut √©crire cette composition :

```nix,=
{ pkgs, lib, ... }:
{
  roles = {
    server = { pkgs, config, lib, ... }: {
      services.nginx.enable = true;
    }
  };
}
```

On utilise ensuite l'outil `nxc` (abbr√©viation de NixOS-Compose) pour lancer notre composition sur notre machine (dans une machine virtuelle), et la tester. Une fois qu'elle fonctionne comme on le souhaite, on la teste sur Grid'5000.

### Objectifs du projet

Voici le WBS du projet. On observe les t√¢ches r√©alis√©es et celles qui restent √† faire pour la suite du projet. Nous avions comme objectif de r√©aliser des compositions et de les tester.

![](https://cdn.discordapp.com/attachments/805803410493538324/1217500770207924344/BSW_final.svg?ex=660440f3&is=65f1cbf3&hm=fd60274b59ad2835faed895ad639b43a60e78f37b733f28e3a5405e58965f9d7&)

### Composition Opensearch

Notre projet principal √©tait de r√©aliser plusieurs compositions utilisant Opensearch. L'objectif √©tait de combiner ce logiciel √† un collecteur de donn√©es comme Vector ou Colmet ainsi qu'√† une interface de visualisation de ces donn√©es, Opensearch Dashboards. Opensearch Dashboards permet d'afficher les donn√©es r√©cup√©r√©es par le collecteur sous forme de graphes.
Dans notre cas, les donn√©es collect√©es sont des logs, c'est-√†-dire des journaux informatiques d'un syst√®me en fonctionnement.

![](https://cdn.discordapp.com/attachments/1200028901792022628/1214860978722963487/Capture_decran_du_2024-03-06_10-03-30.png?ex=65faa674&is=65e83174&hm=1129f91c979efe7dd72b15296c041c902e317c92d38aca32d107262d6e79d31e&)

Nous avons r√©alis√© et test√© plusieurs formes de compositions. Tout d'abord utilisant un seul noeud, c'est-√†-dire que tout les logiciels fonctionnent sur la m√™me machine. Puis avec pusieurs noeuds afin de r√©partir la charge et d'adapter le syst√®me √† une utilisation sur des grands volumes de donn√©es.

Voici une composition en multi-noeud que nous avons r√©alis√©:

![](https://cdn.discordapp.com/attachments/1200028901792022628/1214872646928437248/Capture_decran_du_2024-03-06_10-49-48.png?ex=65fab152&is=65e83c52&hm=c67f4eae038fa2c23f2ace94936d4d3e77f57240d410278d173ba35af42136ad&)

### Composition K3S

<img src="https://blog.stephane-robert.info/img/logo-k3s.png" style="float: right; margin: 1em 2em" />

K3S est une version simplifi√©e et all√©g√©e de Kubernetes, tout en offrant les fonctionnalit√©s principales d'orchestration de conteneurs. Une version minimale √©tait d√©j√† propos√©e dans une ancienne version de NixOS-Compose. Notre objectif √©tait de tester cette derni√®re et si besoin, de l'adapter aux nouvelles versions de Nix, NixOS et NixOS-Compose. Ainsi que de r√©aliser des tests sur Grid'5000. Nous avons pour cela cr√©√© une documentation pour faciliter une future utilisation de notre projet.

### Documentation g√©n√©rale et sp√©cifique


Nous avons cr√©√© une documentation qui pr√©sente le fonctionnement du projet, les erreurs fr√©quentes, comment lancer les compositions, etc. qui permet de comprendre et reprendre notre projet sans devoir refaire le travail de recherche et de compr√©hension que nous avons d√©j√† effectu√©.

La documentation est mise en ligne automatiquement √† chaque changement, √† l'adresse suivante¬†: <https://elegaanz.github.io/nixos-compose-test/>

Voici un exemple pour le d√©but de la page d√©di√©e √† Grid'5000 :

![](https://cdn.discordapp.com/attachments/1200028901792022628/1217043091291377805/Capture_decran_du_2024-03-12_10-33-29.png?ex=660296b4&is=65f021b4&hm=695a28d5b3bb882f26a0e2d4b02245014662cd0d9d5e474d0a7b0dfb8f806654&)


### Projets annexes
Pour le bon d√©roulement de notre projet, nous avons √©t√© amen√©s √† contribuer √† d'autres projets annexes.

#### oar-team/nur-kapack : 
Nous avons mis √† jour le paquet Colmet et ses d√©pendances pour r√©soudre des bugs et lui permettre de fonctionner dans nos compositions.

#### oar-team/colmet : 
Nous avons r√©solu un bug avec les versions r√©centes de ZeroMQ.

#### oar-team/nixos-compose : 
Nous avons r√©solu un bug de compatibilit√© avec les Linux non-NixOS et chang√© de configuration pour avoir une meilleure utilisation du cache de compilation.

### Suivi de Projet

Nous avons utilis√© Gantt pour planifier notre projet et pr√©voire le temps qu'il nous faudrait pour r√©aliser nos t√¢ches. 

#### L√©gende :
* <span style="color: #800080; background-color: #800080;">teste</span> : D√©couverte Nix, NixOS et NixOS-compose
* <span style="color: #4682B4; background-color: #4682B4;">teste</span> : Compositions r√©alis√©es
* <span style="color: #42CD32; background-color: #42CD32;">teste</span> : Tests r√©alis√©s
* <span style="color: #FF8C00;background-color: #FF8C00;">teste</span> : Gestion de projet
* <span style="color: #FF0000; background-color: #FF0000;">teste</span> : Parties optionnelles non r√©alis√©es
* üî¥ : Soutenances

#### Gantt : 
![](https://cdn.discordapp.com/attachments/805803410493538324/1217104006233587742/Test_dinfrastuctures_avec_NixOS.png?ex=6602cf6f&is=65f05a6f&hm=b10a798d7428f1587445742b630c930b2b8feeb236e99e43ff9a54eed3926457&)


### M√©triques Logicielles
Nous avons r√©alis√© 75 commits en tout.

```
===============================================================================
 Language            Files        Lines         Code     Comments       Blanks
===============================================================================
 JSON                    3            3            3            0            0
 Nix                    10          718          217          474           27
 TOML                    1            6            6            0            0
-------------------------------------------------------------------------------
 Markdown               13          427            0          289          138
 |- BASH                 6           43           30           12            1
 |- Nix                  1            1            1            0            0
 (Total)                            471           31          301          139
===============================================================================
 Total                  27         1154          226          763          165
===============================================================================
```

## Glossaire

* Noeud Grid'5000 : Machine disponible sur le r√©seau Grid'5000

* Composition : Ensemble de fichiers d√©crivant un syst√®me NixOS avec un assemblage de logiciels et leurs configurations

* Machine virtuelle : Ordinateur simul√© qui peut ex√©cuter son propre syst√®me d'exploitation et ses propres applications, cr√©√© √† l'int√©rieur d'un ordinateur physique √† l'aide d'un logiciel de virtualisation.

## Bibliographie


#### NixOS

* **Moteur de recherche pour nixpkgs et les options NixOS:** https://search.nixos.org/packages
* **Tutoriel installation de nix:** https://zero-to-nix.com/start/install
* **Wiki NixOS:** https://nixos.wiki/wiki/Main_Page
* **NixOS & Flakes Book:** https://nixos-and-flakes.thiscute.world/introduction/
* **Fonction de la biblioth√®que standard:** https://teu5us.github.io/nix-lib.html
* **Github nur-kapack:** https://github.com/oar-team/nur-kapack
   
#### NixOS-compose

* Quentin Guilloteau, Jonathan Bleuzen, Millian Poquet, Olivier Richard. **Painless Transposition of Reproducible Distributed Environments with NixOS Compose** CLUSTER 2022 - IEEE International Conference on Cluster Computing, Sep 2022, Heidelberg, Germany. pp.1-12. ‚ü®hal-03723771v2‚ü©
* **Tutoriel "en travaux" (√† jour mais incomplet):** https://nixos-compose.gitlabpages.inria.fr/nixos-compose/index.html
* **Tutoriel "pas en travaux" (pas √† jour mais plus complet):** https://nixos-compose.gitlabpages.inria.fr/tuto-nxc/01_intro.html
  
#### Autres
* **Documentation opensearch et opensearch-dashboard:** https://opensearch.org/docs/latest/
* **Package Colmet + documentation:** https://github.com/oar-team/colmet
* **Documentation K3S:** https://docs.k3s.io/