<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://agora.nasqueron.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ptdradmin</id>
	<title>Nasqueron Agora - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://agora.nasqueron.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ptdradmin"/>
	<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/Special:Contributions/Ptdradmin"/>
	<updated>2026-04-25T00:43:49Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.0-alpha</generator>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/Anubis&amp;diff=2196</id>
		<title>Operations grimoire/Anubis</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/Anubis&amp;diff=2196"/>
		<updated>2026-02-06T18:08:28Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Anubis&#039;&#039;&#039; is a proxy to filter out AI scrapers requests. It will allow sites like [[DevCentral]] to stop to serve heavy traffic for LLM model training.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Challenges ==&lt;br /&gt;
We want to stop scraping traffic, but let legitimate traffic pass (e.g. CLI requests from Conduit).&lt;br /&gt;
&lt;br /&gt;
Anubis is used by a lot of similar software forges from open-source projects: [https://anubis.techaro.lol/docs/user/known-instances Anubis known instances], but it&#039;s unclear if someone already succeed to configure it for Phabricator.&lt;br /&gt;
&lt;br /&gt;
It&#039;s our current field of investigation by Doba Gui and Dereckson.&lt;br /&gt;
&lt;br /&gt;
At Wikimedia, Andrew Kostka (WMDE) has some experience deploying it, apparently for Wikibase products.&lt;br /&gt;
&lt;br /&gt;
== Implementation (by Doba Gui) ==&lt;br /&gt;
=== Isolation via UNIX Sockets ===&lt;br /&gt;
To avoid port conflicts (especially the default metrics port 9000), every instance is configured to use UNIX sockets for both traffic and metrics:&lt;br /&gt;
* &#039;&#039;&#039;Main socket:&#039;&#039;&#039; `/run/anubis/{{ instance }}.sock`&lt;br /&gt;
* &#039;&#039;&#039;Metrics socket:&#039;&#039;&#039; `/run/anubis/{{ instance }}-metrics.sock`&lt;br /&gt;
&lt;br /&gt;
=== Dynamic Configuration ===&lt;br /&gt;
The Salt states resolve the target application&#039;s port from the `docker_containers` pillar. In `anubis_instances`, we define the target:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
anubis_instances:&lt;br /&gt;
  devcentral:&lt;br /&gt;
    target:&lt;br /&gt;
      service: phabricator&lt;br /&gt;
      container: devcentral&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Provisioning and Vault ===&lt;br /&gt;
Anubis API and Dashboard keys are provisioned in &#039;&#039;&#039;Vault&#039;&#039;&#039; using a helper script [scripts/fix_anubis_devcentral.sh](cci:7://file:///C:/Users/Gui%20Martinien/Downloads/operations-main/operations-main/scripts/fix_anubis_devcentral.sh:0:0-0:0) and retrieved by Salt during deployment.&lt;br /&gt;
&lt;br /&gt;
== Current work ==&lt;br /&gt;
* Doba deployed an experimental run manually on Dwellers to figure how we can build and configure Anubis&lt;br /&gt;
* Work to deploy Anubis with Salt: [https://devcentral.nasqueron.org/D3908 D3908]&lt;br /&gt;
&lt;br /&gt;
== Troubleshoot ==&lt;br /&gt;
=== Each site must have its own Anubis instance ===&lt;br /&gt;
If you serve to protect two different domains, you need two Anubis instances, one per domain.&lt;br /&gt;
&lt;br /&gt;
In December, we noticed strange errors about challenges not found trying to fire the same instance for two different targets from the same domain.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [https://anubis.techaro.lol/ Anubis website]&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Dev_zone/Create_devserver_access/fr&amp;diff=2187</id>
		<title>Dev zone/Create devserver access/fr</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Dev_zone/Create_devserver_access/fr&amp;diff=2187"/>
		<updated>2026-02-04T11:10:07Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Guide complet : Configuration de l&#039;accès devserver avec Git et Arcanist =&lt;br /&gt;
&lt;br /&gt;
Ce guide explique comment configurer votre environnement de développement pour contribuer au projet Operations.&lt;br /&gt;
&lt;br /&gt;
== 1. Création du dossier de travail ==&lt;br /&gt;
&lt;br /&gt;
Créez un dossier sur votre PC Windows pour organiser tous les fichiers du projet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
C:\STAGE 2025&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est dans ce dossier que vous allez ranger tout ce qui concerne le projet Operations.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 2. Récupération et clonage du dépôt Operations ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 Récupération de l&#039;URL du dépôt ===&lt;br /&gt;
&lt;br /&gt;
Rendez-vous sur la page du dépôt :&lt;br /&gt;
* https://devcentral.nasqueron.org/source/operations/&lt;br /&gt;
&lt;br /&gt;
Copiez l&#039;URL Git pour pouvoir cloner le projet.&lt;br /&gt;
&lt;br /&gt;
=== 2.2 Clonage du dépôt ===&lt;br /&gt;
&lt;br /&gt;
Ouvrez PowerShell et placez-vous dans votre dossier :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
cd &amp;quot;C:\STAGE 2025&amp;quot;&lt;br /&gt;
git clone https://devcentral.nasqueron.org/source/operations.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Git crée un dossier &amp;lt;code&amp;gt;operations&amp;lt;/code&amp;gt; avec tous les fichiers du projet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 3. Gestion de Git et création de branche dans WSL ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 Se placer dans le dossier du projet ===&lt;br /&gt;
&lt;br /&gt;
Depuis WSL (Ubuntu), placez-vous dans le dossier du projet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt/c/STAGE\ 2025/operations&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.2 Création d&#039;une nouvelle branche ===&lt;br /&gt;
&lt;br /&gt;
Créez une nouvelle branche pour vos modifications :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git switch -c feature/add-gui-user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avertissement|Si la branche existe déjà, Git affichera :&lt;br /&gt;
&amp;lt;code&amp;gt;fatal: a branch named &#039;feature/add-gui-user&#039; already exists&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans ce cas, basculez simplement sur la branche existante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git switch feature/add-gui-user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 4. Modifications dans les fichiers du dépôt ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 Vérification de l&#039;emplacement des fichiers ===&lt;br /&gt;
&lt;br /&gt;
Vérifiez où se trouvent les vrais fichiers &amp;lt;code&amp;gt;users.sls&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;groups.sls&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -la pillar/core/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Important|Les vrais fichiers sont dans &amp;lt;code&amp;gt;pillar/core/&amp;lt;/code&amp;gt;, pas dans &amp;lt;code&amp;gt;operations/pillar/core/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 4.2 Ajout de votre utilisateur dans users.sls ===&lt;br /&gt;
&lt;br /&gt;
Ouvrez le fichier avec VS Code :&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
pillar/core/users.sls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajoutez votre utilisateur dans la section &amp;lt;code&amp;gt;shellusers:&amp;lt;/code&amp;gt; par ordre alphabétique :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
ptdradmin:&lt;br /&gt;
  fullname: Doba Gui&lt;br /&gt;
  ssh_keys:&lt;br /&gt;
    - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAFtlR4OeXNHfJXNrvrLeU9nGu7ufcxc38xUGqlwiY5L doba.guimartinien@gmail.com&lt;br /&gt;
  uid: 1001&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 Ajout de votre compte dans groups.sls ===&lt;br /&gt;
&lt;br /&gt;
Ouvrez également le fichier :&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
pillar/core/groups.sls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajoutez-vous dans le groupe &amp;lt;code&amp;gt;nasqueron&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
shellgroups:&lt;br /&gt;
  Members:&lt;br /&gt;
    - ptdradmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
nasqueron-dev-docker:&lt;br /&gt;
  Members:&lt;br /&gt;
    - ptdradmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
nasquenautes:&lt;br /&gt;
  Members:&lt;br /&gt;
    - ptdradmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 5. Commit des modifications ==&lt;br /&gt;
&lt;br /&gt;
=== 5.1 Suppression des fichiers créés par erreur ===&lt;br /&gt;
&lt;br /&gt;
Si vous avez créé des fichiers vides dans &amp;lt;code&amp;gt;operations/&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf operations/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 Ajout des bons fichiers ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git add pillar/core/users.sls pillar/core/groups.sls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 Commit des changements ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git commit -m &amp;quot;Create new account for Doba Gui&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.4 Vérification du commit ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git show HEAD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifiez que vous voyez seulement les lignes que vous avez vraiment modifiées.&lt;br /&gt;
&lt;br /&gt;
=== 5.5 Modification du dernier commit (si nécessaire) ===&lt;br /&gt;
&lt;br /&gt;
Si vous avez corrigé des fichiers après le commit :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git commit --amend&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 6. Premier essai de arc diff (échec - arc n&#039;existe pas) ==&lt;br /&gt;
&lt;br /&gt;
Essayez de lancer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erreur attendue :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
arc: command not found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut installer Arcanist.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 7. Installation d&#039;Arcanist avec WSL ==&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi installer Arcanist ? ===&lt;br /&gt;
&lt;br /&gt;
Arcanist (ou &amp;lt;code&amp;gt;arc&amp;lt;/code&amp;gt;) est l&#039;outil officiel de ligne de commande pour interagir avec Phabricator, le système de revue de code utilisé par le projet Operations.&lt;br /&gt;
&lt;br /&gt;
* Il permet de créer, mettre à jour et soumettre des révisions (&amp;lt;code&amp;gt;arc diff&amp;lt;/code&amp;gt;) directement depuis votre environnement local&lt;br /&gt;
* Il gère les linters et les tests automatiques configurés par le projet avant l&#039;envoi de modifications&lt;br /&gt;
* Sans Arcanist, vous ne pouvez pas soumettre vos changements pour revue ni intégrer les vérifications automatiques du projet&lt;br /&gt;
&lt;br /&gt;
=== 7.1 Mise à jour d&#039;Ubuntu ===&lt;br /&gt;
&lt;br /&gt;
Avant d&#039;installer quoi que ce soit :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.2 Installation des dépendances ===&lt;br /&gt;
&lt;br /&gt;
Arcanist a besoin de PHP et Git :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install -y php-cli php-curl php-xml php-mbstring git curl unzip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.3 Téléchargement d&#039;Arcanist ===&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un dossier pour Arcanist :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p ~/phabricator&lt;br /&gt;
cd ~/phabricator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Téléchargement des fichiers :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/phacility/arcanist.git&lt;br /&gt;
git clone https://github.com/phacility/libphutil.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.4 Rendre arc accessible partout ===&lt;br /&gt;
&lt;br /&gt;
Pour ne pas devoir écrire tout le chemin :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ln -s ~/phabricator/arcanist/bin/arc /usr/local/bin/arc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si le cache Bash ne reconnaît pas la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hash -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.5 Vérification de l&#039;installation ===&lt;br /&gt;
&lt;br /&gt;
Test de la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note|Une erreur sur shellcheck-linter peut apparaître, mais la version devrait s&#039;afficher. Répondre &amp;quot;y&amp;quot; pour continuer.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 8. Deuxième essai de arc diff (échec - authentification requise) ==&lt;br /&gt;
&lt;br /&gt;
Retournez dans le projet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt/c/STAGE\ 2025/operations&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erreur attendue :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
YOU NEED TO AUTHENTICATE TO CONTINUE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut installer le certificat.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 9. Authentification Arcanist ==&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi exécuter arc install-certificate ? ===&lt;br /&gt;
&lt;br /&gt;
Cette commande permet d&#039;associer votre environnement local à votre compte Phabricator via un token sécurisé.&lt;br /&gt;
&lt;br /&gt;
* Elle est nécessaire pour que Arcanist puisse créer, mettre à jour et soumettre vos révisions (&amp;lt;code&amp;gt;arc diff&amp;lt;/code&amp;gt;) sur le serveur Phabricator&lt;br /&gt;
* Sans ce certificat, Arcanist ne peut pas authentifier vos commandes et toutes les opérations de soumission de code échoueront&lt;br /&gt;
* Le token est spécifique à votre compte et doit être généré depuis l&#039;interface web de Phabricator&lt;br /&gt;
&lt;br /&gt;
=== 9.1 Installation du certificat ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc install-certificate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suivez le lien fourni, récupérez le token API et collez-le dans le terminal. Arcanist est maintenant connecté à votre compte.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 10. Troisième essai de arc diff (échec - shellcheck-linter manquant) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arc vous demande de choisir la branche de référence, choisissez &amp;lt;code&amp;gt;origin/main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nouvelle erreur :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Failed to load library at location &amp;quot;shellcheck-linter&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 11. Installation de shellcheck-linter ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/phabricator&lt;br /&gt;
git clone https://github.com/pinterest/arcanist-linters.git shellcheck-linter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 12. Quatrième essai de arc diff (échec - linter invalide) ==&lt;br /&gt;
&lt;br /&gt;
Retournez dans le projet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt/c/STAGE\ 2025/operations&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nouvelle erreur :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Linter &#039;shell&#039; specifies invalid type &#039;shellcheck&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le type &amp;lt;code&amp;gt;shellcheck&amp;lt;/code&amp;gt; n&#039;est pas reconnu.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 13. Correction du linter shellcheck ==&lt;br /&gt;
&lt;br /&gt;
Ouvrez &amp;lt;code&amp;gt;.arclint&amp;lt;/code&amp;gt; avec VS Code et modifiez :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Avant :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;shell&amp;quot;: {&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;shellcheck&amp;quot;,&lt;br /&gt;
  &amp;quot;include&amp;quot;: [&amp;quot;(\\.sh$)&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Après :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;shell&amp;quot;: {&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
  &amp;quot;include&amp;quot;: [&amp;quot;(\\.sh$)&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avertissement|Ne pas commiter ce changement, c&#039;est juste pour que ça fonctionne localement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternative :&#039;&#039;&#039; Bypass des tests si nécessaire :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff --nolint&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 14. Cinquième essai de arc diff (échec - problème CRLF) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arc détecte 1,011 fichiers modifiés. C&#039;est un problème de fins de ligne Windows/Linux.&lt;br /&gt;
&lt;br /&gt;
=== 14.1 Correction des problèmes de fins de ligne ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git config --global core.autocrlf input&lt;br /&gt;
git restore .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avertissement|Assurez-vous d&#039;être bien dans &amp;lt;code&amp;gt;/mnt/c/STAGE\ 2025/operations&amp;lt;/code&amp;gt; avant d&#039;exécuter ces commandes.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 15. Sixième essai de arc diff (succès !) ==&lt;br /&gt;
&lt;br /&gt;
=== 15.1 Vérification de l&#039;état de Git ===&lt;br /&gt;
&lt;br /&gt;
Pour vous assurer qu&#039;il n&#039;y a pas de fichiers non suivis :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Résultat attendu :&#039;&#039;&#039; Aucun fichier non commité ne doit apparaître.&lt;br /&gt;
&lt;br /&gt;
=== 15.2 Lancement d&#039;Arcanist ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arc vous demande si vous voulez amend les changements dans &amp;lt;code&amp;gt;.arclint&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Do you want to amend these 1 change(s) to the current commit? [y/N] y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis il vous demande si vous voulez utiliser le message sauvegardé :&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Do you want to use this message? [Y/n] Y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 15.3 Remplissage des informations de révision ===&lt;br /&gt;
&lt;br /&gt;
L&#039;éditeur (nano) s&#039;ouvre avec les informations à remplir :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Summary: Ajout de Doba Gui comme user et dans le groupe core&lt;br /&gt;
Test Plan: Vérification de la syntaxe YAML et des informations utilisateur&lt;br /&gt;
Reviewers: dereckson&lt;br /&gt;
Subscribers:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 15.4 Sauvegarde dans nano ===&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Sauvegarder le fichier :&#039;&#039;&#039;&lt;br /&gt;
#* Appuyez sur &#039;&#039;&#039;Ctrl + O&#039;&#039;&#039; (la lettre O, pas zéro)&lt;br /&gt;
#* Nano vous demandera le nom du fichier → appuyez sur &#039;&#039;&#039;Entrée&#039;&#039;&#039; pour garder le même&lt;br /&gt;
# &#039;&#039;&#039;Quitter nano :&#039;&#039;&#039;&lt;br /&gt;
#* Appuyez sur &#039;&#039;&#039;Ctrl + X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Après ça, vous retournez dans votre terminal et &amp;lt;code&amp;gt;arc diff&amp;lt;/code&amp;gt; continuera le processus.&lt;br /&gt;
&lt;br /&gt;
=== 15.5 Pour mettre à jour une révision existante ===&lt;br /&gt;
&lt;br /&gt;
Si vous voulez mettre à jour une révision existante (ex. : D3888) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff --update D3888&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 16. Vérification finale ==&lt;br /&gt;
&lt;br /&gt;
Vérifiez que tout est propre :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aucun fichier ne doit rester non commité.&lt;br /&gt;
&lt;br /&gt;
Assurez-vous que votre révision contient bien vos modifications :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Succès|À ce stade, votre révision est prête à être relue par votre reviewer.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Résumé des problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Problème !! Solution&lt;br /&gt;
|-&lt;br /&gt;
| Fichiers vides dans operations/ || &amp;lt;code&amp;gt;rm -rf operations/&amp;lt;/code&amp;gt; puis travailler dans &amp;lt;code&amp;gt;pillar/core/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Cache Bash pour arc || &amp;lt;code&amp;gt;hash -r&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Authentification manquante || &amp;lt;code&amp;gt;arc install-certificate&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Bibliothèque shellcheck-linter manquante || Cloner dans &amp;lt;code&amp;gt;~/phabricator/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Erreur linter shellcheck || Changer &amp;lt;code&amp;gt;&amp;quot;type&amp;quot;: &amp;quot;shellcheck&amp;quot;&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;&amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;.arclint&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Problème CRLF/LF || &amp;lt;code&amp;gt;git config --global core.autocrlf input&amp;lt;/code&amp;gt; puis &amp;lt;code&amp;gt;git restore .&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Points importants à retenir ==&lt;br /&gt;
&lt;br /&gt;
Avertissement|&lt;br /&gt;
* &#039;&#039;&#039;Toutes les commandes Git et Arcanist doivent être exécutées dans &amp;lt;code&amp;gt;/mnt/c/STAGE\ 2025/operations&amp;lt;/code&amp;gt;, et non dans &amp;lt;code&amp;gt;~/phabricator&amp;lt;/code&amp;gt;.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Ne pas commiter les modifications du fichier &amp;lt;code&amp;gt;.arclint&amp;lt;/code&amp;gt; (changement de shellcheck en text).&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Les vrais fichiers sont dans &amp;lt;code&amp;gt;pillar/core/&amp;lt;/code&amp;gt;, pas dans &amp;lt;code&amp;gt;operations/pillar/core/&amp;lt;/code&amp;gt;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributor guide]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Internship guide]]&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Dev_zone/Configuration_IRC_Ops_tmux_WeeChat&amp;diff=2186</id>
		<title>Dev zone/Configuration IRC Ops tmux WeeChat</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Dev_zone/Configuration_IRC_Ops_tmux_WeeChat&amp;diff=2186"/>
		<updated>2026-02-03T16:23:13Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: Configuration IRC Ops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Configuration IRC Ops – tmux + WeeChat sur Eglide =&lt;br /&gt;
&lt;br /&gt;
== Objectif ==&lt;br /&gt;
Ce guide décrit la mise en place d’une configuration exacte, fonctionnelle et recommandée pour le travail d’exploitation (ops) via IRC, en utilisant tmux + WeeChat sur Eglide.&lt;br /&gt;
&lt;br /&gt;
Cette configuration permet :&lt;br /&gt;
* une connexion IRC persistante ;&lt;br /&gt;
* aucune perte de messages ;&lt;br /&gt;
* une traçabilité correcte des échanges opérationnels ;&lt;br /&gt;
* une utilisation fiable en environnement distant.&lt;br /&gt;
&lt;br /&gt;
Elle est conforme aux pratiques professionnelles des équipes ops.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 1. Pré-requis système (Eglide) ==&lt;br /&gt;
&lt;br /&gt;
=== Hypothèses ===&lt;br /&gt;
* Accès SSH valide à Eglide ;&lt;br /&gt;
* Système Linux standard (Debian/Ubuntu) ;&lt;br /&gt;
* Droits utilisateur normaux avec accès sudo.&lt;br /&gt;
&lt;br /&gt;
=== Connexion SSH ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh &amp;lt;user&amp;gt;@eglide.nasqueron.org&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 2. Installation des outils requis ==&lt;br /&gt;
&lt;br /&gt;
=== Installation de tmux ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install -y tmux&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation de WeeChat ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install -y weechat weechat-plugins&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vérification des versions ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tmux -V&lt;br /&gt;
weechat --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 3. Création d’une session tmux persistante ==&lt;br /&gt;
&lt;br /&gt;
Créer une session tmux dédiée à IRC :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tmux new -s irc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cette session reste active même après une déconnexion SSH.&lt;br /&gt;
&lt;br /&gt;
=== Commandes tmux essentielles ===&lt;br /&gt;
* Détacher la session : &amp;lt;code&amp;gt;Ctrl+b&amp;lt;/code&amp;gt; puis &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;&lt;br /&gt;
* Reprendre la session :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tmux attach -t irc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 4. Lancement de WeeChat dans tmux ==&lt;br /&gt;
&lt;br /&gt;
Depuis la session tmux :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
weechat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WeeChat devient alors l’interface IRC principale.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 5. Configuration du serveur Libera.Chat (TLS obligatoire) ==&lt;br /&gt;
&lt;br /&gt;
Dans WeeChat, exécuter **exactement** les commandes suivantes.&lt;br /&gt;
&lt;br /&gt;
=== Ajout du serveur Libera.Chat ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/server add libera irc.libera.chat/6697 -tls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activation explicite de TLS ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/set irc.server.libera.ssl on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Connexion automatique (recommandée) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/set irc.server.libera.autoconnect on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 6. Connexion au serveur ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/connect libera&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Résultat attendu ===&lt;br /&gt;
* Message de bienvenue Libera.Chat ;&lt;br /&gt;
* Aucune erreur SSL/TLS.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 7. Rejoindre les canaux requis ==&lt;br /&gt;
&lt;br /&gt;
=== Canal principal opérations ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/join #nasqueron-ops&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Canal secondaire existant ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/join #wolfplex&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 8. Configuration minimale recommandée (lisibilité ops) ==&lt;br /&gt;
&lt;br /&gt;
=== Activation des horodatages ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/set weechat.look.buffer_time_format &amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mise en évidence des mentions ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/set weechat.look.highlight on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Augmentation de l’historique ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/set weechat.history.max_buffer_lines_number 10000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 9. Gestion du pseudonyme IRC ==&lt;br /&gt;
&lt;br /&gt;
Changer de pseudonyme :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/nick VotrePseudo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039; : utiliser le même pseudonyme partout (IRC, commits, discussions ops) afin d’assurer la cohérence d’identité.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 10. Enregistrement NickServ (fortement recommandé) ==&lt;br /&gt;
&lt;br /&gt;
=== Enregistrement du pseudonyme ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/msg NickServ REGISTER motdepasse email&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Identification manuelle (si SASL non configuré) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/msg NickServ IDENTIFY motdepasse&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 11. Persistance de la configuration ==&lt;br /&gt;
&lt;br /&gt;
WeeChat sauvegarde automatiquement sa configuration.&lt;br /&gt;
&lt;br /&gt;
Forcer la sauvegarde si nécessaire :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les fichiers de configuration sont stockés dans :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
~/.weechat/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== 12. Flux de travail attendu ==&lt;br /&gt;
&lt;br /&gt;
* Connexion SSH à Eglide ;&lt;br /&gt;
* Attachement à la session tmux &amp;lt;code&amp;gt;irc&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* WeeChat déjà connecté à Libera.Chat ;&lt;br /&gt;
* Lecture du backlog ;&lt;br /&gt;
* Participation aux discussions ops ;&lt;br /&gt;
* Déconnexion SSH sans quitter IRC.&lt;br /&gt;
&lt;br /&gt;
➡️ Cette méthode garantit une **présence continue sur IRC**, standard en environnement ops.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Verdict ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Configuration validée – conforme aux pratiques professionnelles ops.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* tmux : persistance ✓&lt;br /&gt;
* WeeChat : fiabilité ✓&lt;br /&gt;
* Libera.Chat (TLS) : sécurité ✓&lt;br /&gt;
* Canaux requis : conformité ✓&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
== Évolutions possibles ==&lt;br /&gt;
&lt;br /&gt;
* Ajout de l’authentification SASL automatique ;&lt;br /&gt;
* Fourniture d’un fichier &amp;lt;code&amp;gt;weechat.conf&amp;lt;/code&amp;gt; prêt à l’emploi ;&lt;br /&gt;
* Documentation des règles implicites de communication ops sur &amp;lt;code&amp;gt;#nasqueron-ops&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Template:Note&amp;diff=2184</id>
		<title>Template:Note</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Template:Note&amp;diff=2184"/>
		<updated>2025-12-18T10:53:44Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: Created page with &amp;quot;= Installation et configuration d&amp;#039;Anubis avec Nginx =  == Vue d&amp;#039;ensemble ==  Anubis est un Web AI Firewall qui protège vos applications web contre les bots malveillants. Ce guide détaille l&amp;#039;installation complète d&amp;#039;Anubis en frontal de Nginx avec communication par socket UNIX.  === Architecture ===  &amp;lt;pre&amp;gt; Client → Nginx (HTTPS) → Anubis (socket UNIX) → Application backend &amp;lt;/pre&amp;gt;  === Prérequis ===  * Système Linux (RHEL 10, Debian, Ubuntu ou similaire) * Accès...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installation et configuration d&#039;Anubis avec Nginx =&lt;br /&gt;
&lt;br /&gt;
== Vue d&#039;ensemble ==&lt;br /&gt;
&lt;br /&gt;
Anubis est un Web AI Firewall qui protège vos applications web contre les bots malveillants. Ce guide détaille l&#039;installation complète d&#039;Anubis en frontal de Nginx avec communication par socket UNIX.&lt;br /&gt;
&lt;br /&gt;
=== Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client → Nginx (HTTPS) → Anubis (socket UNIX) → Application backend&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Prérequis ===&lt;br /&gt;
&lt;br /&gt;
* Système Linux (RHEL 10, Debian, Ubuntu ou similaire)&lt;br /&gt;
* Accès root/sudo&lt;br /&gt;
* Nginx installé et configuré&lt;br /&gt;
* Application backend fonctionnelle (ex: sur port 8080)&lt;br /&gt;
* Certificats SSL/TLS (optionnel mais recommandé)&lt;br /&gt;
&lt;br /&gt;
== Installation d&#039;Anubis ==&lt;br /&gt;
&lt;br /&gt;
=== Méthode 1 : Compilation depuis les sources (RHEL/CentOS) ===&lt;br /&gt;
&lt;br /&gt;
==== Étape 1 : Installer les dépendances ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install -y git golang nodejs npm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Étape 2 : Installer esbuild globalement ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install -g esbuild&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifier les versions installées :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
go version      # go1.25.3 ou supérieur&lt;br /&gt;
node --version  # v22.16.0 ou supérieur&lt;br /&gt;
npm --version   # 10.9.2 ou supérieur&lt;br /&gt;
esbuild --version # 0.27.2 ou supérieur&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Étape 3 : Cloner le dépôt Anubis ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /opt&lt;br /&gt;
sudo git clone https://github.com/TecharoHQ/anubis.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Étape 4 : Corriger les permissions ====&lt;br /&gt;
&lt;br /&gt;
Note| Le clonage avec sudo crée des fichiers appartenant à root. Il faut corriger cela :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown -R $USER:$USER /opt/anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Étape 5 : Installer les dépendances npm ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /opt/anubis&lt;br /&gt;
sudo npm install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Étape 6 : Générer le code et compiler ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /opt/anubis&lt;br /&gt;
rm -rf bin var           # Nettoyer les anciens builds&lt;br /&gt;
go mod download          # Télécharger les dépendances Go&lt;br /&gt;
go generate ./...        # Générer le code&lt;br /&gt;
go build -o var/anubis cmd/anubis/main.go  # Compiler&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Warning| Ces commandes doivent être exécutées &#039;&#039;&#039;sans sudo&#039;&#039;&#039; pour éviter les problèmes de permissions.&lt;br /&gt;
&lt;br /&gt;
Vérifier que le binaire a été créé :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l var/anubis&lt;br /&gt;
# Devrait afficher : -rwxr-xr-x. 1 user user 52659096 Dec 17 14:46 var/anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Étape 7 : Installer le binaire ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp var/anubis /usr/bin/anubis&lt;br /&gt;
sudo chmod 755 /usr/bin/anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifier l&#039;installation :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/bin/anubis --version&lt;br /&gt;
# Devrait afficher : Anubis devel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Méthode 2 : Installation via paquet .deb (Debian/Ubuntu) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
curl -OL https://github.com/TecharoHQ/anubis/releases/download/v1.19.1/anubis_1.19.1_linux_amd64.deb&lt;br /&gt;
sudo apt install ./anubis_1.19.1_linux_amd64.deb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration d&#039;Anubis ==&lt;br /&gt;
&lt;br /&gt;
=== Étape 1 : Créer le répertoire de configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mkdir -p /etc/anubis&lt;br /&gt;
sudo mkdir -p /run/anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 2 : Créer le fichier de configuration principal ===&lt;br /&gt;
&lt;br /&gt;
Créer &amp;lt;code&amp;gt;/etc/anubis/site.env&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo tee /etc/anubis/site.env &amp;lt;&amp;lt;EOF&lt;br /&gt;
# Écoute sur socket UNIX&lt;br /&gt;
ANUBIS_LISTEN_ADDR=/run/anubis/site.sock&lt;br /&gt;
BIND_NETWORK=unix&lt;br /&gt;
SOCKET_MODE=0666&lt;br /&gt;
&lt;br /&gt;
# Backend cible (votre application)&lt;br /&gt;
ANUBIS_BACKEND=http://127.0.0.1:8080&lt;br /&gt;
TARGET=http://127.0.0.1:8080&lt;br /&gt;
&lt;br /&gt;
# Domaine du site&lt;br /&gt;
ANUBIS_SITE_DOMAIN=example.com&lt;br /&gt;
&lt;br /&gt;
# Mode de fonctionnement&lt;br /&gt;
ANUBIS_MODE=proxy&lt;br /&gt;
&lt;br /&gt;
# Fichier de politiques&lt;br /&gt;
POLICY_FNAME=/etc/anubis/site.botPolicies.yaml&lt;br /&gt;
&lt;br /&gt;
# Niveau de difficulté du challenge (1-5)&lt;br /&gt;
DIFFICULTY=3&lt;br /&gt;
&lt;br /&gt;
# Logging&lt;br /&gt;
LOG_LEVEL=info&lt;br /&gt;
&lt;br /&gt;
# Workers&lt;br /&gt;
WORKERS=2&lt;br /&gt;
&lt;br /&gt;
# Servir robots.txt&lt;br /&gt;
SERVE_ROBOTS_TXT=true&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 3 : Créer le fichier de politiques anti-bots ===&lt;br /&gt;
&lt;br /&gt;
Créer &amp;lt;code&amp;gt;/etc/anubis/site.botPolicies.yaml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo tee /etc/anubis/site.botPolicies.yaml &amp;lt;&amp;lt;EOF&lt;br /&gt;
version: 1&lt;br /&gt;
policies:&lt;br /&gt;
  - name: default&lt;br /&gt;
    rules:&lt;br /&gt;
      - type: allow&lt;br /&gt;
        bot: human&lt;br /&gt;
      - type: challenge&lt;br /&gt;
        bot: unknown&lt;br /&gt;
        difficulty: 3&lt;br /&gt;
      - type: block&lt;br /&gt;
        bot: malicious&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 4 : Définir les permissions ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chmod 644 /etc/anubis/site.env&lt;br /&gt;
sudo chmod 644 /etc/anubis/site.botPolicies.yaml&lt;br /&gt;
sudo chown -R root:root /etc/anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration du service Systemd ==&lt;br /&gt;
&lt;br /&gt;
=== Créer le fichier de service ===&lt;br /&gt;
&lt;br /&gt;
Pour une &#039;&#039;&#039;instance unique&#039;&#039;&#039;, créer &amp;lt;code&amp;gt;/etc/systemd/system/anubis.service&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo tee /etc/systemd/system/anubis.service &amp;lt;&amp;lt;EOF&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Anubis Web AI Firewall&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
User=root&lt;br /&gt;
Group=root&lt;br /&gt;
WorkingDirectory=/opt/anubis&lt;br /&gt;
ExecStart=/usr/bin/anubis&lt;br /&gt;
Restart=always&lt;br /&gt;
RestartSec=5&lt;br /&gt;
EnvironmentFile=/etc/anubis/site.env&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour des &#039;&#039;&#039;instances multiples&#039;&#039;&#039; (plusieurs sites), créer &amp;lt;code&amp;gt;/etc/systemd/system/anubis@.service&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo tee /etc/systemd/system/anubis@.service &amp;lt;&amp;lt;EOF&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Anubis Web AI Firewall - Instance %i&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
User=root&lt;br /&gt;
Group=root&lt;br /&gt;
EnvironmentFile=/etc/anubis/%i.env&lt;br /&gt;
ExecStart=/usr/bin/anubis&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RestartSec=5&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Activer et démarrer le service ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
sudo systemctl enable anubis&lt;br /&gt;
sudo systemctl start anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour les instances multiples :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl enable anubis@site&lt;br /&gt;
sudo systemctl start anubis@site&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vérifier le statut du service ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl status anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le service devrait afficher :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
● anubis.service - Anubis Web AI Firewall&lt;br /&gt;
     Loaded: loaded&lt;br /&gt;
     Active: active (running)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vérifier les logs ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo journalctl -u anubis -f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vérifier la création du socket ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /run/anubis/site.sock&lt;br /&gt;
# Devrait afficher : srwxrw-rw- 1 root root 0 Dec 17 14:46 /run/anubis/site.sock&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tester Anubis directement ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl --unix-socket /run/anubis/site.sock http://anubis/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration de Nginx ==&lt;br /&gt;
&lt;br /&gt;
=== Étape 1 : Créer l&#039;upstream Anubis ===&lt;br /&gt;
&lt;br /&gt;
Créer &amp;lt;code&amp;gt;/etc/nginx/conf.d/anubis-upstream.conf&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo tee /etc/nginx/conf.d/anubis-upstream.conf &amp;lt;&amp;lt;EOF&lt;br /&gt;
upstream anubis_backend {&lt;br /&gt;
    server unix:/run/anubis/site.sock;&lt;br /&gt;
    keepalive 32;&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 2 : Configurer le virtual host ===&lt;br /&gt;
&lt;br /&gt;
Créer &amp;lt;code&amp;gt;/etc/nginx/sites-available/example.conf&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;/etc/nginx/conf.d/example.conf&amp;lt;/code&amp;gt; sur RHEL) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
# Redirection HTTP vers HTTPS&lt;br /&gt;
server {&lt;br /&gt;
    listen 80;&lt;br /&gt;
    listen [::]:80;&lt;br /&gt;
    server_name example.com www.example.com;&lt;br /&gt;
&lt;br /&gt;
    # Redirection permanente vers HTTPS&lt;br /&gt;
    return 301 https://$host$request_uri;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Configuration HTTPS avec Anubis&lt;br /&gt;
server {&lt;br /&gt;
    listen 443 ssl http2;&lt;br /&gt;
    listen [::]:443 ssl http2;&lt;br /&gt;
    server_name example.com www.example.com;&lt;br /&gt;
&lt;br /&gt;
    # Certificats SSL/TLS&lt;br /&gt;
    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;&lt;br /&gt;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;&lt;br /&gt;
&lt;br /&gt;
    # Paramètres SSL recommandés&lt;br /&gt;
    ssl_session_timeout 10m;&lt;br /&gt;
    ssl_session_cache shared:SSL:10m;&lt;br /&gt;
    ssl_protocols TLSv1.2 TLSv1.3;&lt;br /&gt;
    ssl_prefer_server_ciphers off;&lt;br /&gt;
    ssl_ciphers HIGH:!aNULL:!MD5;&lt;br /&gt;
&lt;br /&gt;
    # Headers de sécurité&lt;br /&gt;
    add_header X-Frame-Options DENY;&lt;br /&gt;
    add_header X-Content-Type-Options nosniff;&lt;br /&gt;
    add_header X-XSS-Protection &amp;quot;1; mode=block&amp;quot;;&lt;br /&gt;
    add_header Strict-Transport-Security &amp;quot;max-age=31536000; includeSubDomains&amp;quot; always;&lt;br /&gt;
&lt;br /&gt;
    # Timeouts adaptés à Anubis&lt;br /&gt;
    proxy_read_timeout 180s;&lt;br /&gt;
    proxy_send_timeout 180s;&lt;br /&gt;
    proxy_connect_timeout 10s;&lt;br /&gt;
&lt;br /&gt;
    # Taille maximale des uploads&lt;br /&gt;
    client_max_body_size 10M;&lt;br /&gt;
&lt;br /&gt;
    # Proxy vers Anubis&lt;br /&gt;
    location / {&lt;br /&gt;
        proxy_http_version 1.1;&lt;br /&gt;
        proxy_set_header Host $host;&lt;br /&gt;
        proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
        proxy_set_header X-Forwarded-Proto $scheme;&lt;br /&gt;
        proxy_set_header Connection &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        proxy_pass http://anubis_backend;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 3 : Activer le site (Debian/Ubuntu) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note|Sur RHEL/CentOS, le fichier dans &amp;lt;code&amp;gt;/etc/nginx/conf.d/&amp;lt;/code&amp;gt; est automatiquement actif.&lt;br /&gt;
&lt;br /&gt;
=== Étape 4 : Tester et recharger Nginx ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Tester la configuration&lt;br /&gt;
sudo nginx -t&lt;br /&gt;
&lt;br /&gt;
# Si OK, recharger Nginx&lt;br /&gt;
sudo systemctl reload nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vérification du déploiement ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Vérifier qu&#039;Anubis fonctionne ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl status anubis&lt;br /&gt;
sudo journalctl -u anubis -n 50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Vérifier le socket UNIX ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /run/anubis/site.sock&lt;br /&gt;
sudo ss -xlp | grep anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Vérifier Nginx ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl status nginx&lt;br /&gt;
sudo nginx -t&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. Test d&#039;accès via navigateur ===&lt;br /&gt;
&lt;br /&gt;
Ouvrir &amp;lt;code&amp;gt;https://example.com&amp;lt;/code&amp;gt; dans un navigateur. Vous devriez :&lt;br /&gt;
&lt;br /&gt;
# Voir le challenge Anubis si c&#039;est la première visite&lt;br /&gt;
# Être redirigé vers votre application après validation&lt;br /&gt;
# Voir le header &amp;lt;code&amp;gt;X-Anubis-Status&amp;lt;/code&amp;gt; dans les réponses HTTP&lt;br /&gt;
&lt;br /&gt;
=== 5. Test avec curl ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Test complet de la chaîne&lt;br /&gt;
curl -I https://example.com&lt;br /&gt;
&lt;br /&gt;
# Devrait retourner un code 200 ou le challenge Anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 6. Vérifier les logs en temps réel ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Logs Anubis&lt;br /&gt;
sudo journalctl -u anubis -f&lt;br /&gt;
&lt;br /&gt;
# Logs Nginx&lt;br /&gt;
sudo tail -f /var/log/nginx/access.log&lt;br /&gt;
sudo tail -f /var/log/nginx/error.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Flux des requêtes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. Client HTTPS → Nginx (port 443)&lt;br /&gt;
2. Nginx → Anubis (socket UNIX)&lt;br /&gt;
3. Anubis analyse la requête :&lt;br /&gt;
   - Fingerprint du client&lt;br /&gt;
   - Headers HTTP&lt;br /&gt;
   - Comportement&lt;br /&gt;
4. Anubis décide :&lt;br /&gt;
   - Challenge JS → Client doit résoudre&lt;br /&gt;
   - Allow → Passe au backend&lt;br /&gt;
   - Block → Requête bloquée&lt;br /&gt;
5. Backend traite la requête légitime&lt;br /&gt;
6. Backend → Anubis → Nginx → Client&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dépannage ==&lt;br /&gt;
&lt;br /&gt;
=== Le service Anubis ne démarre pas ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Vérifier les logs&lt;br /&gt;
sudo journalctl -u anubis -xe&lt;br /&gt;
&lt;br /&gt;
# Vérifier la configuration&lt;br /&gt;
cat /etc/anubis/site.env&lt;br /&gt;
&lt;br /&gt;
# Vérifier les permissions&lt;br /&gt;
ls -l /usr/bin/anubis&lt;br /&gt;
ls -ld /run/anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Le socket n&#039;est pas créé ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Vérifier que le répertoire existe&lt;br /&gt;
sudo mkdir -p /run/anubis&lt;br /&gt;
&lt;br /&gt;
# Vérifier les permissions&lt;br /&gt;
sudo chmod 755 /run/anubis&lt;br /&gt;
&lt;br /&gt;
# Redémarrer Anubis&lt;br /&gt;
sudo systemctl restart anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nginx ne peut pas se connecter au socket ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Vérifier les permissions du socket&lt;br /&gt;
ls -l /run/anubis/site.sock&lt;br /&gt;
&lt;br /&gt;
# Ajuster SOCKET_MODE dans site.env&lt;br /&gt;
SOCKET_MODE=0666&lt;br /&gt;
&lt;br /&gt;
# Redémarrer Anubis&lt;br /&gt;
sudo systemctl restart anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erreur &amp;quot;permission denied&amp;quot; lors de la compilation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Corriger la propriété des fichiers&lt;br /&gt;
sudo chown -R $USER:$USER /opt/anubis&lt;br /&gt;
&lt;br /&gt;
# Nettoyer et recompiler&lt;br /&gt;
cd /opt/anubis&lt;br /&gt;
rm -rf bin var&lt;br /&gt;
go generate ./...&lt;br /&gt;
go build -o var/anubis cmd/anubis/main.go&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erreur &amp;quot;esbuild: command not found&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Réinstaller esbuild&lt;br /&gt;
sudo npm install -g esbuild&lt;br /&gt;
&lt;br /&gt;
# Vérifier l&#039;installation&lt;br /&gt;
which esbuild&lt;br /&gt;
esbuild --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optimisations recommandées ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Cache Anubis ===&lt;br /&gt;
&lt;br /&gt;
Ajouter dans &amp;lt;code&amp;gt;/etc/anubis/site.env&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CACHE_SIZE=50000&lt;br /&gt;
CACHE_TTL=300&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Rate limiting ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
RATE_LIMIT_MODE=smart&lt;br /&gt;
FIREWALL_MODE=strict&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Nginx keepalive ===&lt;br /&gt;
&lt;br /&gt;
Dans &amp;lt;code&amp;gt;anubis-upstream.conf&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
upstream anubis_backend {&lt;br /&gt;
    server unix:/run/anubis/site.sock;&lt;br /&gt;
    keepalive 64;&lt;br /&gt;
    keepalive_requests 1000;&lt;br /&gt;
    keepalive_timeout 60s;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. Logs structurés ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LOG_LEVEL=info&lt;br /&gt;
LOG_FORMAT=json&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Maintenance ==&lt;br /&gt;
&lt;br /&gt;
=== Redémarrer Anubis ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl restart anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recharger la configuration sans interruption ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Éditer la configuration&lt;br /&gt;
sudo nano /etc/anubis/site.env&lt;br /&gt;
&lt;br /&gt;
# Redémarrer le service&lt;br /&gt;
sudo systemctl restart anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mettre à jour Anubis ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Arrêter le service&lt;br /&gt;
sudo systemctl stop anubis&lt;br /&gt;
&lt;br /&gt;
# Compiler la nouvelle version&lt;br /&gt;
cd /opt/anubis&lt;br /&gt;
git pull&lt;br /&gt;
rm -rf bin var&lt;br /&gt;
go generate ./...&lt;br /&gt;
go build -o var/anubis cmd/anubis/main.go&lt;br /&gt;
&lt;br /&gt;
# Installer le nouveau binaire&lt;br /&gt;
sudo cp var/anubis /usr/bin/anubis&lt;br /&gt;
sudo chmod 755 /usr/bin/anubis&lt;br /&gt;
&lt;br /&gt;
# Redémarrer&lt;br /&gt;
sudo systemctl start anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sauvegarder la configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo tar czf anubis-config-backup-$(date +%Y%m%d).tar.gz /etc/anubis/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sécurité ==&lt;br /&gt;
&lt;br /&gt;
=== Durcissement du service ===&lt;br /&gt;
&lt;br /&gt;
Éditer &amp;lt;code&amp;gt;/etc/systemd/system/anubis.service&amp;lt;/code&amp;gt; et ajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
NoNewPrivileges=true&lt;br /&gt;
PrivateTmp=true&lt;br /&gt;
ProtectSystem=strict&lt;br /&gt;
ProtectHome=true&lt;br /&gt;
ReadWritePaths=/run/anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Firewall ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Bloquer l&#039;accès direct au backend&lt;br /&gt;
sudo firewall-cmd --permanent --add-rich-rule=&#039;rule family=&amp;quot;ipv4&amp;quot; source address=&amp;quot;0.0.0.0/0&amp;quot; port port=&amp;quot;8080&amp;quot; protocol=&amp;quot;tcp&amp;quot; reject&#039;&lt;br /&gt;
sudo firewall-cmd --reload&lt;br /&gt;
&lt;br /&gt;
# Ou avec iptables&lt;br /&gt;
sudo iptables -A INPUT -p tcp --dport 8080 -s 127.0.0.1 -j ACCEPT&lt;br /&gt;
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Instances multiples ==&lt;br /&gt;
&lt;br /&gt;
Pour gérer plusieurs sites avec Anubis :&lt;br /&gt;
&lt;br /&gt;
=== 1. Créer des configurations séparées ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp /etc/anubis/site.env /etc/anubis/site2.env&lt;br /&gt;
sudo cp /etc/anubis/site.botPolicies.yaml /etc/anubis/site2.botPolicies.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Modifier les configurations ===&lt;br /&gt;
&lt;br /&gt;
Éditer &amp;lt;code&amp;gt;/etc/anubis/site2.env&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ANUBIS_LISTEN_ADDR=/run/anubis/site2.sock&lt;br /&gt;
ANUBIS_BACKEND=http://127.0.0.1:8081&lt;br /&gt;
ANUBIS_SITE_DOMAIN=example2.com&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Démarrer l&#039;instance ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl enable anubis@site2&lt;br /&gt;
sudo systemctl start anubis@site2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. Créer l&#039;upstream Nginx correspondant ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;nginx&amp;quot;&amp;gt;&lt;br /&gt;
upstream anubis_site2 {&lt;br /&gt;
    server unix:/run/anubis/site2.sock;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Monitoring ==&lt;br /&gt;
&lt;br /&gt;
=== Métriques Anubis ===&lt;br /&gt;
&lt;br /&gt;
Anubis expose des métriques (si configuré) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Dans site.env&lt;br /&gt;
METRICS_ENABLED=true&lt;br /&gt;
METRICS_ADDR=127.0.0.1:9090&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Monitoring avec Prometheus ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
scrape_configs:&lt;br /&gt;
  - job_name: &#039;anubis&#039;&lt;br /&gt;
    static_configs:&lt;br /&gt;
      - targets: [&#039;localhost:9090&#039;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* [https://anubis.techaro.lol/docs/ Documentation officielle]&lt;br /&gt;
* [https://github.com/TecharoHQ/anubis Dépôt GitHub]&lt;br /&gt;
* [https://anubis.techaro.lol/docs/admin/configuration/ Configuration avancée]&lt;br /&gt;
&lt;br /&gt;
== Résumé des commandes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Installation&lt;br /&gt;
cd /opt&lt;br /&gt;
sudo git clone https://github.com/TecharoHQ/anubis.git&lt;br /&gt;
sudo chown -R $USER:$USER /opt/anubis&lt;br /&gt;
cd /opt/anubis&lt;br /&gt;
sudo npm install -g esbuild&lt;br /&gt;
go generate ./...&lt;br /&gt;
go build -o var/anubis cmd/anubis/main.go&lt;br /&gt;
sudo cp var/anubis /usr/bin/anubis&lt;br /&gt;
&lt;br /&gt;
# Configuration&lt;br /&gt;
sudo mkdir -p /etc/anubis /run/anubis&lt;br /&gt;
sudo nano /etc/anubis/site.env&lt;br /&gt;
sudo nano /etc/anubis/site.botPolicies.yaml&lt;br /&gt;
&lt;br /&gt;
# Service&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
sudo systemctl enable --now anubis&lt;br /&gt;
sudo systemctl status anubis&lt;br /&gt;
&lt;br /&gt;
# Nginx&lt;br /&gt;
sudo nginx -t&lt;br /&gt;
sudo systemctl reload nginx&lt;br /&gt;
&lt;br /&gt;
# Vérification&lt;br /&gt;
curl --unix-socket /run/anubis/site.sock http://anubis/&lt;br /&gt;
curl -I https://example.com&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Fr&amp;diff=2183</id>
		<title>Fr</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Fr&amp;diff=2183"/>
		<updated>2025-12-18T10:16:11Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: Created page with &amp;quot;= Documentation - Résolution d&amp;#039;erreur de build Anubis =  == Contexte == Installation et configuration d’&amp;#039;&amp;#039;&amp;#039;Anubis Web AI Firewall&amp;#039;&amp;#039;&amp;#039; sur un serveur &amp;#039;&amp;#039;&amp;#039;Red Hat Enterprise Linux 10 (RHEL 10)&amp;#039;&amp;#039;&amp;#039;.  * &amp;#039;&amp;#039;&amp;#039;Serveur :&amp;#039;&amp;#039;&amp;#039; dwellers.nasqueron.org * &amp;#039;&amp;#039;&amp;#039;Utilisateur :&amp;#039;&amp;#039;&amp;#039; ptdradmin * &amp;#039;&amp;#039;&amp;#039;Répertoire d’installation :&amp;#039;&amp;#039;&amp;#039; /opt/anubis  &amp;#039;&amp;#039;&amp;#039;Versions des outils :&amp;#039;&amp;#039;&amp;#039; * Go : 1.25.3 * Node.js : 22.16.0 * npm : 10.9.2 * esbuild : 0.27.2  == Problème rencontré == === Symptômes === # Échec d...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Documentation - Résolution d&#039;erreur de build Anubis =&lt;br /&gt;
&lt;br /&gt;
== Contexte ==&lt;br /&gt;
Installation et configuration d’&#039;&#039;&#039;Anubis Web AI Firewall&#039;&#039;&#039; sur un serveur &#039;&#039;&#039;Red Hat Enterprise Linux 10 (RHEL 10)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Serveur :&#039;&#039;&#039; dwellers.nasqueron.org&lt;br /&gt;
* &#039;&#039;&#039;Utilisateur :&#039;&#039;&#039; ptdradmin&lt;br /&gt;
* &#039;&#039;&#039;Répertoire d’installation :&#039;&#039;&#039; /opt/anubis&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Versions des outils :&#039;&#039;&#039;&lt;br /&gt;
* Go : 1.25.3&lt;br /&gt;
* Node.js : 22.16.0&lt;br /&gt;
* npm : 10.9.2&lt;br /&gt;
* esbuild : 0.27.2&lt;br /&gt;
&lt;br /&gt;
== Problème rencontré ==&lt;br /&gt;
=== Symptômes ===&lt;br /&gt;
# Échec de la génération de code (&amp;lt;code&amp;gt;go generate ./...&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Permissions refusées lors de la création de fichiers&lt;br /&gt;
* Messages : &amp;lt;code&amp;gt;permission denied&amp;lt;/code&amp;gt;&lt;br /&gt;
* Erreur : &amp;lt;code&amp;gt;./build.sh: line 48: esbuild: command not found&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Échec de la compilation (&amp;lt;code&amp;gt;go build&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Le binaire &amp;lt;code&amp;gt;/opt/anubis/var/anubis&amp;lt;/code&amp;gt; n&#039;a pas été créé&lt;br /&gt;
* Erreur : &amp;lt;code&amp;gt;pattern static/app.js: no matching files found&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Échec du démarrage du service systemd&lt;br /&gt;
* Service anubis ne peut pas démarrer&lt;br /&gt;
* Erreur : &amp;lt;code&amp;gt;Unable to locate executable &#039;/usr/bin/anubis&#039;: No such file or directory&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Erreurs détaillées ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
go generate ./...&lt;br /&gt;
&lt;br /&gt;
stringer: writing output: open droneblresponse_string.go: permission denied&lt;br /&gt;
(✗) Error [ error=failed to generate code for &amp;quot;/opt/anubis/internal/honeypot/naive/page.templ&amp;quot;: &lt;br /&gt;
    failed to write target file &amp;quot;/opt/anubis/internal/honeypot/naive/page_templ.go&amp;quot;: &lt;br /&gt;
    open /opt/anubis/internal/honeypot/naive/page_templ.go: permission denied ]&lt;br /&gt;
mkdir: cannot create directory &#039;static/js&#039;: Permission denied&lt;br /&gt;
./build.sh: line 48: esbuild: command not found&lt;br /&gt;
lib/challenge/preact/preact.go:20: running &amp;quot;./build.sh&amp;quot;: exit status 127&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
go build -o var/anubis cmd/anubis/main.go&lt;br /&gt;
&lt;br /&gt;
lib/challenge/preact/preact.go:23:12: pattern static/app.js: no matching files found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl status anubis&lt;br /&gt;
&lt;br /&gt;
× anubis.service - Anubis Web AI Firewall&lt;br /&gt;
     Active: failed (Result: exit-code)&lt;br /&gt;
    Process: 821872 ExecStart=/usr/bin/anubis (code=exited, status=203/EXEC)&lt;br /&gt;
&lt;br /&gt;
anubis.service: Unable to locate executable &#039;/usr/bin/anubis&#039;: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Analyse de la cause racine ==&lt;br /&gt;
=== Causes principales ===&lt;br /&gt;
* Conflit de permissions dû à l&#039;utilisation de &amp;lt;code&amp;gt;sudo git clone&amp;lt;/code&amp;gt;&lt;br /&gt;
* Outil &#039;&#039;esbuild&#039;&#039; manquant dans le PATH lors de l’exécution de &amp;lt;code&amp;gt;build.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Conséquences en cascade ===&lt;br /&gt;
* Génération incomplète : fichiers de code généré non créés&lt;br /&gt;
* esbuild non trouvé : bundler JavaScript inaccessible&lt;br /&gt;
* Assets manquants : fichiers JS comme &amp;lt;code&amp;gt;static/app.js&amp;lt;/code&amp;gt; non générés&lt;br /&gt;
* Compilation impossible&lt;br /&gt;
* Binaire absent : /usr/bin/anubis inexistant&lt;br /&gt;
* Service systemd en échec&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&amp;lt;folding summary=&amp;quot;Cliquez pour dérouler les étapes complètes de résolution&amp;quot;&amp;gt;&lt;br /&gt;
=== Étape 1 : Arrêter le service en échec ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl stop anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 2 : Installer esbuild globalement ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo npm install -g esbuild&lt;br /&gt;
which esbuild&lt;br /&gt;
esbuild --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 3 : Corriger la propriété des fichiers ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown -R ptdradmin:ptdradmin /opt/anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 4 : Nettoyer les artéfacts de build partiels ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /opt/anubis&lt;br /&gt;
rm -rf bin var&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 5 : Générer le code sans sudo ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
go generate ./...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* La génération doit se terminer avec succès et produire les fichiers JS :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
(✓) Complete [ updates=0 duration=2.753344ms ]&lt;br /&gt;
(✓) Complete [ updates=0 duration=4.775691ms ]&lt;br /&gt;
app.js&lt;br /&gt;
  static/app.js  20.3kb&lt;br /&gt;
⚡ Done in 12ms&lt;br /&gt;
(✓) Complete [ updates=0 duration=2.333324ms ]&lt;br /&gt;
(✓) Complete [ updates=0 duration=3.490825ms ]&lt;br /&gt;
(✓) Complete [ updates=0 duration=14.668559ms ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 6 : Compiler le binaire ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
go build -o var/anubis cmd/anubis/main.go&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 7 : Vérifier la création du binaire ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l var/anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Exemple attendu :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-rwxr-xr-x. 1 ptdradmin ptdradmin 52659096 Dec 17 14:46 var/anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 8 : Copier le binaire vers /usr/bin ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp var/anubis /usr/bin/anubis&lt;br /&gt;
sudo chmod 755 /usr/bin/anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 9 : Vérifier l&#039;installation ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/bin/anubis --version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Exemple attendu : &amp;lt;code&amp;gt;Anubis devel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 10 : Démarrer le service ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl start anubis&lt;br /&gt;
sudo systemctl status anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Statut attendu :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
● anubis.service - Anubis Web AI Firewall&lt;br /&gt;
     Loaded: loaded (/etc/systemd/system/anubis.service; enabled; preset: disabled)&lt;br /&gt;
     Active: active (running) since Wed 2025-12-17 14:46:41 UTC; 6s ago&lt;br /&gt;
   Main PID: 823482 (anubis)&lt;br /&gt;
      Tasks: 13 (limit: 203296)&lt;br /&gt;
     Memory: 15.5M (peak: 18.7M)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Étape 11 : Commandes complètes de séquence ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Arrêter le service&lt;br /&gt;
sudo systemctl stop anubis&lt;br /&gt;
&lt;br /&gt;
# S&#039;assurer que esbuild est installé&lt;br /&gt;
sudo npm install -g esbuild&lt;br /&gt;
which esbuild&lt;br /&gt;
esbuild --version&lt;br /&gt;
&lt;br /&gt;
# Corriger la propriété&lt;br /&gt;
sudo chown -R ptdradmin:ptdradmin /opt/anubis&lt;br /&gt;
&lt;br /&gt;
# Nettoyer et reconstruire&lt;br /&gt;
cd /opt/anubis&lt;br /&gt;
rm -rf bin var&lt;br /&gt;
go generate ./...&lt;br /&gt;
go build -o var/anubis cmd/anubis/main.go&lt;br /&gt;
&lt;br /&gt;
# Vérifier et installer&lt;br /&gt;
ls -l var/anubis&lt;br /&gt;
sudo cp var/anubis /usr/bin/anubis&lt;br /&gt;
sudo chmod 755 /usr/bin/anubis&lt;br /&gt;
&lt;br /&gt;
# Tester et démarrer&lt;br /&gt;
/usr/bin/anubis --version&lt;br /&gt;
sudo systemctl start anubis&lt;br /&gt;
sudo systemctl status anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/folding&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bonnes pratiques ==&lt;br /&gt;
* Ne pas utiliser &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; pour &amp;lt;code&amp;gt;git clone&amp;lt;/code&amp;gt;&lt;br /&gt;
* Installer tous les outils nécessaires globalement avant le build&lt;br /&gt;
* Séparer les opérations utilisateur et root (build vs installation)&lt;br /&gt;
* Vérifier les permissions avant de lancer le build&lt;br /&gt;
* Utiliser &amp;lt;code&amp;gt;make build&amp;lt;/code&amp;gt; si disponible&lt;br /&gt;
&lt;br /&gt;
== Structure de répertoires recommandée ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/opt/anubis/          # Code source (propriétaire: utilisateur)&lt;br /&gt;
  ├── cmd/&lt;br /&gt;
  ├── internal/&lt;br /&gt;
  ├── lib/&lt;br /&gt;
  └── var/&lt;br /&gt;
      └── anubis      # Binaire compilé&lt;br /&gt;
&lt;br /&gt;
/usr/bin/anubis       # Installation système (root)&lt;br /&gt;
/etc/anubis/          # Configuration (root)&lt;br /&gt;
  ├── site.env&lt;br /&gt;
  └── site.botPolicies.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vérifications post-installation ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo systemctl status anubis&lt;br /&gt;
sudo journalctl -u anubis -n 50&lt;br /&gt;
sudo journalctl -u anubis -f&lt;br /&gt;
sudo ss -tulpn | grep anubis&lt;br /&gt;
sudo systemctl restart anubis&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Résumé ==&lt;br /&gt;
* Problèmes : permissions incorrectes et esbuild manquant&lt;br /&gt;
* Solutions : installer esbuild globalement, corriger propriété des fichiers, reconstruire sans sudo&lt;br /&gt;
* Résultat final : le service Anubis fonctionne correctement et protège le site desk.nasqueron.org&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Documentation_ZFS&amp;diff=2181</id>
		<title>Documentation ZFS</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Documentation_ZFS&amp;diff=2181"/>
		<updated>2025-11-28T17:20:09Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: Created page with &amp;quot;= Guide Complet : Déploiement de MariaDB avec ZFS sur db-B-001 = Last updated: Friday, November 28, 2025  == Introduction == Ce guide complet explique comment configurer MariaDB avec InnoDB sur un serveur FreeBSD utilisant ZFS pour le stockage, en montant spécifiquement les datasets &amp;#039;&amp;#039;mysql-innodb-data&amp;#039;&amp;#039; et &amp;#039;&amp;#039;mysql-innodb-logs&amp;#039;&amp;#039; en dehors du répertoire &amp;#039;&amp;#039;/var/db/mysql&amp;#039;&amp;#039;.  == Prérequis == * Serveur FreeBSD 14.3 avec ZFS et MariaDB 10.11.15 installés * Pool ZFS &amp;#039;&amp;#039;arco...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Guide Complet : Déploiement de MariaDB avec ZFS sur db-B-001 =&lt;br /&gt;
Last updated: Friday, November 28, 2025&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Ce guide complet explique comment configurer MariaDB avec InnoDB sur un serveur FreeBSD utilisant ZFS pour le stockage, en montant spécifiquement les datasets &#039;&#039;mysql-innodb-data&#039;&#039; et &#039;&#039;mysql-innodb-logs&#039;&#039; en dehors du répertoire &#039;&#039;/var/db/mysql&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
* Serveur FreeBSD 14.3 avec ZFS et MariaDB 10.11.15 installés&lt;br /&gt;
* Pool ZFS &#039;&#039;arcology&#039;&#039; opérationnel avec espace disponible&lt;br /&gt;
* Accès root ou sudo&lt;br /&gt;
* Connaissances de base en administration système et ZFS&lt;br /&gt;
&lt;br /&gt;
== Architecture Cible ==&lt;br /&gt;
* Datasets ZFS dédiés pour les données et logs InnoDB&lt;br /&gt;
* Points de montage personnalisés : &#039;&#039;/mysql-innodb-data&#039;&#039; et &#039;&#039;/mysql-innodb-logs&#039;&#039;&lt;br /&gt;
* Configuration optimisée pour les performances&lt;br /&gt;
* Système de sauvegarde via snapshots ZFS&lt;br /&gt;
&lt;br /&gt;
== Fichiers de Configuration MariaDB ==&lt;br /&gt;
Sur FreeBSD avec MariaDB :&lt;br /&gt;
* **Fichier principal de configuration** : &#039;&#039;/usr/local/etc/mysql/my.cnf&#039;&#039;&lt;br /&gt;
* Fichiers complémentaires :&lt;br /&gt;
  * &#039;&#039;/usr/local/etc/my.cnf&#039;&#039; (lien symbolique vers le fichier principal)&lt;br /&gt;
  * &#039;&#039;/usr/local/etc/mysql/conf.d/server.cnf&#039;&#039; (configuration spécifique)&lt;br /&gt;
&lt;br /&gt;
== Étapes de Déploiement ==&lt;br /&gt;
&lt;br /&gt;
=== Phase 1 : Préparation de l&#039;Environnement ===&lt;br /&gt;
==== 1.1 Vérification des versions ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mysql --version&lt;br /&gt;
zpool list&lt;br /&gt;
zfs list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1.2 Création des datasets ZFS ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création avec points de montage personnalisés&lt;br /&gt;
sudo zfs create -o mountpoint=/mysql-innodb-data arcology/mysql-innodb-data&lt;br /&gt;
sudo zfs create -o mountpoint=/mysql-innodb-logs arcology/mysql-innodb-logs&lt;br /&gt;
&lt;br /&gt;
# Configuration des propriétés&lt;br /&gt;
sudo zfs set recordsize=16K arcology/mysql-innodb-data&lt;br /&gt;
sudo zfs set recordsize=128K arcology/mysql-innodb-logs&lt;br /&gt;
sudo zfs set primarycache=metadata arcology/mysql-innodb-data&lt;br /&gt;
sudo zfs set primarycache=metadata arcology/mysql-innodb-logs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 2 : Configuration des Permissions ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown -R mysql:mysql /mysql-innodb-data&lt;br /&gt;
sudo chown -R mysql:mysql /mysql-innodb-logs&lt;br /&gt;
sudo chmod -R 750 /mysql-innodb-data&lt;br /&gt;
sudo chmod -R 750 /mysql-innodb-logs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 3 : Migration des Données ===&lt;br /&gt;
==== 3.1 Arrêt du service MariaDB ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo service mysql-server stop&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3.2 Déplacement des fichiers ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv /var/db/mysql/ibdata1 /mysql-innodb-data/&lt;br /&gt;
sudo mv /var/db/mysql/ib_logfile* /mysql-innodb-logs/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3.3 Création des liens symboliques ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ln -s /mysql-innodb-data/ibdata1 /var/db/mysql/ibdata1&lt;br /&gt;
sudo ln -s /mysql-innodb-logs/ib_logfile* /var/db/mysql/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 4 : Configuration de MariaDB ===&lt;br /&gt;
==== 4.1 Modification du fichier principal ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo nano /usr/local/etc/mysql/my.cnf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajouter/modifier dans le fichier principal :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[mysqld]&lt;br /&gt;
datadir = /var/db/mysql&lt;br /&gt;
innodb_data_home_dir = /mysql-innodb-data&lt;br /&gt;
innodb_log_group_home_dir = /mysql-innodb-logs&lt;br /&gt;
innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;
skip-innodb_doublewrite&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4.2 Vérification de la configuration ====&lt;br /&gt;
Pour vérifier que le bon fichier est utilisé :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mysql --print-defaults&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4.3 Structure des fichiers de configuration ====&lt;br /&gt;
* &#039;&#039;/usr/local/etc/my.cnf&#039;&#039; → Lien symbolique vers &#039;&#039;/usr/local/etc/mysql/my.cnf&#039;&#039;&lt;br /&gt;
* &#039;&#039;/usr/local/etc/mysql/my.cnf&#039;&#039; → **Fichier principal de configuration**&lt;br /&gt;
* &#039;&#039;/usr/local/etc/mysql/conf.d/&#039;&#039; → Répertoire pour les configurations modulaires&lt;br /&gt;
&lt;br /&gt;
=== Phase 5 : Optimisation ===&lt;br /&gt;
==== 5.1 Activation de la compression ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo zfs set compression=lz4 arcology/mysql-innodb-data&lt;br /&gt;
sudo zfs set compression=lz4 arcology/mysql-innodb-logs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5.2 Autres optimisations ZFS ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Désactivation du cache flush si matériel approprié&lt;br /&gt;
sudo zfs set zfs_nocacheflush=1 arcology&lt;br /&gt;
&lt;br /&gt;
# Configuration de l&#039;ARC pour métadonnées seulement&lt;br /&gt;
sudo zfs set primarycache=metadata arcology&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 6 : Redémarrage et Vérification ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo service mysql-server start&lt;br /&gt;
sudo tail -n 20 /var/db/mysql/windriver.err&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification SQL :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SHOW VARIABLES LIKE &#039;innodb_data_home_dir&#039;;&lt;br /&gt;
SHOW VARIABLES LIKE &#039;innodb_log_group_home_dir&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 7 : Sauvegarde et Restauration ===&lt;br /&gt;
==== 7.1 Création de snapshots ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo zfs snapshot arcology/mysql-innodb-data@$(date +%Y%m%d)&lt;br /&gt;
sudo zfs snapshot arcology/mysql-innodb-logs@$(date +%Y%m%d)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 7.2 Procédure de restauration ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Arrêter MariaDB avant restauration&lt;br /&gt;
sudo service mysql-server stop&lt;br /&gt;
&lt;br /&gt;
# Restauration&lt;br /&gt;
sudo zfs rollback arcology/mysql-innodb-data@20231128&lt;br /&gt;
sudo zfs rollback arcology/mysql-innodb-logs@20231128&lt;br /&gt;
&lt;br /&gt;
# Redémarrer MariaDB&lt;br /&gt;
sudo service mysql-server start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bonnes Pratiques pour la Configuration ==&lt;br /&gt;
1. **Toujours modifier le fichier principal** : &#039;&#039;/usr/local/etc/mysql/my.cnf&#039;&#039;&lt;br /&gt;
2. Pour des configurations spécifiques, créer des fichiers dans &#039;&#039;/usr/local/etc/mysql/conf.d/&#039;&#039;&lt;br /&gt;
3. Vérifier la syntaxe après modification :&lt;br /&gt;
   &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
   sudo mysqld --verbose --help 2&amp;gt;/dev/null | head&lt;br /&gt;
   &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
4. Après modification, toujours redémarrer le service :&lt;br /&gt;
   &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
   sudo service mysql-server restart&lt;br /&gt;
   &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Résolution des Problèmes Courants ==&lt;br /&gt;
=== Problème : MariaDB ne démarre pas ===&lt;br /&gt;
* Vérifier les permissions :&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  ls -la /mysql-innodb-data&lt;br /&gt;
  ls -la /var/db/mysql/&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Consulter les logs :&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  sudo tail -n 50 /var/db/mysql/windriver.err&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Vérifier la syntaxe du fichier de configuration :&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  sudo mysql --print-defaults&lt;br /&gt;
  sudo mysqld --verbose --help 2&amp;gt;/dev/null | head&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Problème : Performances dégradées ===&lt;br /&gt;
* Vérifier la fragmentation :&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  zfs get fragmentation arcology/mysql-innodb-data&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Surveiller l&#039;utilisation mémoire :&lt;br /&gt;
  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  top&lt;br /&gt;
  &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Ajuster &#039;&#039;recordsize&#039;&#039; si nécessaire (16K pour OLTP, 128K pour les logs)&lt;br /&gt;
&lt;br /&gt;
== Commandes Utiles ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Action&lt;br /&gt;
! Commande&lt;br /&gt;
|-&lt;br /&gt;
| Vérifier l&#039;état du pool ZFS&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;zpool status arcology&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Lister les datasets&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;zfs list -t all&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Vérifier les points de montage&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;df -h | grep mysql&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Voir les propriétés d&#039;un dataset&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;zfs get all arcology/mysql-innodb-data&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Prendre un snapshot daté&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo zfs snapshot arcology/mysql-innodb-data@$(date +%Y%m%d_%H%M)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Voir les snapshots existants&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;zfs list -t snapshot&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Vérifier le fichier de configuration utilisé&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mysql --print-defaults&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Vérifier la syntaxe de configuration&lt;br /&gt;
| &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sudo mysqld --verbose --help 2&amp;gt;/dev/null | head&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;br /&gt;
=== Configuration Avancée ZFS ===&lt;br /&gt;
Pour les environnements de production, considérer :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Séparation des logs ZIL sur SSD&lt;br /&gt;
sudo zpool add arcology log /dev/ada2&lt;br /&gt;
&lt;br /&gt;
# Configuration L2ARC pour cache supplémentaire&lt;br /&gt;
sudo zpool add arcology cache /dev/ada3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exemple de Script de Sauvegarde ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Sauvegarde quotidienne des datasets MariaDB&lt;br /&gt;
POOL=&amp;quot;arcology&amp;quot;&lt;br /&gt;
DATE=$(date +%Y%m%d_%H%M)&lt;br /&gt;
&lt;br /&gt;
# Verrouillage des tables&lt;br /&gt;
mysql -e &amp;quot;FLUSH TABLES WITH READ LOCK; SYSTEM zfs snapshot $POOL/mysql-innodb-data@db_backup_$DATE; SYSTEM zfs snapshot $POOL/mysql-innodb-logs@db_backup_$DATE; UNLOCK TABLES;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vérification de la Configuration ===&lt;br /&gt;
Pour voir tous les paramètres actifs :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SHOW VARIABLES;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour voir les paramètres InnoDB spécifiques :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SHOW VARIABLES LIKE &#039;innodb%&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/NTP&amp;diff=2176</id>
		<title>Operations grimoire/NTP</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/NTP&amp;diff=2176"/>
		<updated>2025-11-28T08:48:50Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: /* FreeBSD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NTP allows to sync time. That&#039;s especially important for accurate logs and TLS certificates.&lt;br /&gt;
&lt;br /&gt;
== Recommended NTP servers ==&lt;br /&gt;
There is a CC list of servers by country. France makes sense for most servers to use the country of the datacenter where the server is located.&lt;br /&gt;
&lt;br /&gt;
== By OS ==&lt;br /&gt;
NTP is configured in core.&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ===&lt;br /&gt;
We use ntpd service. Each day, drift from NTP servers is checked by periodic &amp;lt;code&amp;gt;480.status-ntpd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We have enabled the automatic startup of the &#039;&#039;&#039;ntpd&#039;&#039;&#039; service on all FreeBSD servers to ensure continuous time synchronization. Additionally, the &#039;&#039;&#039;ntpd&#039;&#039;&#039; configuration has been adjusted to allow automatic connections to time sources, ensuring reliable updates without any manual intervention.&lt;br /&gt;
&lt;br /&gt;
For reference, see:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[https://devcentral.nasqueron.org/T2192 Default NTP configuration leads to connection refused][Default NTP configuration leads to connection refused&lt;br /&gt;
]&lt;br /&gt;
* [D3893](https://devcentral.nasqueron.org/D3893)&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
Chrony service is used.&lt;br /&gt;
&lt;br /&gt;
== Troubleshoot ==&lt;br /&gt;
=== Update leap seconds ===&lt;br /&gt;
Leap seconds file isn&#039;t maintained any more by NTP package (see [https://bugs.ntp.org/show_bug.cgi?id=3898 upstream issue])&lt;br /&gt;
&lt;br /&gt;
To update the file, run the hotfix:&lt;br /&gt;
&lt;br /&gt;
    $ salt -G &#039;os:FreeBSD&#039; state.apply hotfixes/leap-seconds.sls&lt;br /&gt;
&lt;br /&gt;
=== ntpq: read: Connection refused ===&lt;br /&gt;
Reported as {{T|2192}}. The ntpq command queries a specific NTP server, here localhost:123. If the connection can&#039;t be established, it probably means ntpd service isn&#039;t started.&lt;br /&gt;
&lt;br /&gt;
NTP status:&lt;br /&gt;
ntpq: read: Connection refused&lt;br /&gt;
&lt;br /&gt;
Solution: &amp;lt;code&amp;gt;service ntpd start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
;NTP&lt;br /&gt;
* [https://www.ntppool.org/zone/fr NTP servers in France]&lt;br /&gt;
* [https://bugs.ntp.org/show_bug.cgi?id=3898 Bug 3898] - update leap seconds file&lt;br /&gt;
;Chrony&lt;br /&gt;
* [https://chrony-project.org/ Chrony]&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/NTP&amp;diff=2173</id>
		<title>Operations grimoire/NTP</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/NTP&amp;diff=2173"/>
		<updated>2025-11-27T19:17:32Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: /* FreeBSD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NTP allows to sync time. That&#039;s especially important for accurate logs and TLS certificates.&lt;br /&gt;
&lt;br /&gt;
== Recommended NTP servers ==&lt;br /&gt;
There is a CC list of servers by country. France makes sense for most servers to use the country of the datacenter where the server is located.&lt;br /&gt;
&lt;br /&gt;
== By OS ==&lt;br /&gt;
NTP is configured in core.&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ===&lt;br /&gt;
We use ntpd service. Each day, drift from NTP servers is checked by periodic &amp;lt;code&amp;gt;480.status-ntpd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We have enabled the automatic startup of the &#039;&#039;&#039;ntpd&#039;&#039;&#039; service on all FreeBSD servers to ensure continuous time synchronization. Additionally, the &#039;&#039;&#039;ntpd&#039;&#039;&#039; configuration has been adjusted to allow automatic connections to time sources, ensuring reliable updates without any manual intervention.&lt;br /&gt;
&lt;br /&gt;
For reference, see:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [rOPS27946aeb13d1 Start ntpd](https://devcentral.nasqueron.org/rOPS27946aeb13d18e3e54b72aabf170bd66e111ca88)&lt;br /&gt;
* [D3893](https://devcentral.nasqueron.org/D3893)&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
Chrony service is used.&lt;br /&gt;
&lt;br /&gt;
== Troubleshoot ==&lt;br /&gt;
=== Update leap seconds ===&lt;br /&gt;
Leap seconds file isn&#039;t maintained any more by NTP package (see [https://bugs.ntp.org/show_bug.cgi?id=3898 upstream issue])&lt;br /&gt;
&lt;br /&gt;
To update the file, run the hotfix:&lt;br /&gt;
&lt;br /&gt;
    $ salt -G &#039;os:FreeBSD&#039; state.apply hotfixes/leap-seconds.sls&lt;br /&gt;
&lt;br /&gt;
=== ntpq: read: Connection refused ===&lt;br /&gt;
Reported as {{T|2192}}. The ntpq command queries a specific NTP server, here localhost:123. If the connection can&#039;t be established, it probably means ntpd service isn&#039;t started.&lt;br /&gt;
&lt;br /&gt;
NTP status:&lt;br /&gt;
ntpq: read: Connection refused&lt;br /&gt;
&lt;br /&gt;
Solution: &amp;lt;code&amp;gt;service ntpd start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
;NTP&lt;br /&gt;
* [https://www.ntppool.org/zone/fr NTP servers in France]&lt;br /&gt;
* [https://bugs.ntp.org/show_bug.cgi?id=3898 Bug 3898] - update leap seconds file&lt;br /&gt;
;Chrony&lt;br /&gt;
* [https://chrony-project.org/ Chrony]&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/NTP&amp;diff=2172</id>
		<title>Operations grimoire/NTP</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/NTP&amp;diff=2172"/>
		<updated>2025-11-27T19:17:02Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: /* NTP Service Configuration on FreeBSD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NTP allows to sync time. That&#039;s especially important for accurate logs and TLS certificates.&lt;br /&gt;
&lt;br /&gt;
== Recommended NTP servers ==&lt;br /&gt;
There is a CC list of servers by country. France makes sense for most servers to use the country of the datacenter where the server is located.&lt;br /&gt;
&lt;br /&gt;
== By OS ==&lt;br /&gt;
NTP is configured in core.&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ===&lt;br /&gt;
We use ntpd service. Each day, drift from NTP servers is checked by periodic &amp;lt;code&amp;gt;480.status-ntpd&amp;lt;/code&amp;gt;.&lt;br /&gt;
We have enabled the automatic startup of the &#039;&#039;&#039;ntpd&#039;&#039;&#039; service on all FreeBSD servers to ensure continuous time synchronization. Additionally, the &#039;&#039;&#039;ntpd&#039;&#039;&#039; configuration has been adjusted to allow automatic connections to time sources, ensuring reliable updates without any manual intervention.&lt;br /&gt;
&lt;br /&gt;
For reference, see:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [rOPS27946aeb13d1 Start ntpd](https://devcentral.nasqueron.org/rOPS27946aeb13d18e3e54b72aabf170bd66e111ca88)&lt;br /&gt;
* [D3893](https://devcentral.nasqueron.org/D3893)&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
Chrony service is used.&lt;br /&gt;
&lt;br /&gt;
== Troubleshoot ==&lt;br /&gt;
=== Update leap seconds ===&lt;br /&gt;
Leap seconds file isn&#039;t maintained any more by NTP package (see [https://bugs.ntp.org/show_bug.cgi?id=3898 upstream issue])&lt;br /&gt;
&lt;br /&gt;
To update the file, run the hotfix:&lt;br /&gt;
&lt;br /&gt;
    $ salt -G &#039;os:FreeBSD&#039; state.apply hotfixes/leap-seconds.sls&lt;br /&gt;
&lt;br /&gt;
=== ntpq: read: Connection refused ===&lt;br /&gt;
Reported as {{T|2192}}. The ntpq command queries a specific NTP server, here localhost:123. If the connection can&#039;t be established, it probably means ntpd service isn&#039;t started.&lt;br /&gt;
&lt;br /&gt;
NTP status:&lt;br /&gt;
ntpq: read: Connection refused&lt;br /&gt;
&lt;br /&gt;
Solution: &amp;lt;code&amp;gt;service ntpd start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
;NTP&lt;br /&gt;
* [https://www.ntppool.org/zone/fr NTP servers in France]&lt;br /&gt;
* [https://bugs.ntp.org/show_bug.cgi?id=3898 Bug 3898] - update leap seconds file&lt;br /&gt;
;Chrony&lt;br /&gt;
* [https://chrony-project.org/ Chrony]&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/NTP&amp;diff=2171</id>
		<title>Operations grimoire/NTP</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/NTP&amp;diff=2171"/>
		<updated>2025-11-27T16:45:15Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: /* NTP Service Configuration on FreeBSD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NTP allows to sync time. That&#039;s especially important for accurate logs and TLS certificates.&lt;br /&gt;
&lt;br /&gt;
== Recommended NTP servers ==&lt;br /&gt;
There is a CC list of servers by country. France makes sense for most servers to use the country of the datacenter where the server is located.&lt;br /&gt;
&lt;br /&gt;
== By OS ==&lt;br /&gt;
NTP is configured in core.&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ===&lt;br /&gt;
We use ntpd service. Each day, drift from NTP servers is checked by periodic &amp;lt;code&amp;gt;480.status-ntpd&amp;lt;/code&amp;gt;.&lt;br /&gt;
== NTP Service Configuration on FreeBSD ==&lt;br /&gt;
&lt;br /&gt;
We have enabled the automatic startup of the &#039;&#039;&#039;ntpd&#039;&#039;&#039; service on all FreeBSD servers to ensure continuous time synchronization. Additionally, the &#039;&#039;&#039;ntpd&#039;&#039;&#039; configuration has been adjusted to allow automatic connections to time sources, ensuring reliable updates without any manual intervention.&lt;br /&gt;
&lt;br /&gt;
For reference, see:&lt;br /&gt;
* [rOPS27946aeb13d1 Start ntpd](https://devcentral.nasqueron.org/rOPS27946aeb13d18e3e54b72aabf170bd66e111ca88)&lt;br /&gt;
* [D3893](https://devcentral.nasqueron.org/D3893)&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
Chrony service is used.&lt;br /&gt;
&lt;br /&gt;
== Troubleshoot ==&lt;br /&gt;
=== Update leap seconds ===&lt;br /&gt;
Leap seconds file isn&#039;t maintained any more by NTP package (see [https://bugs.ntp.org/show_bug.cgi?id=3898 upstream issue])&lt;br /&gt;
&lt;br /&gt;
To update the file, run the hotfix:&lt;br /&gt;
&lt;br /&gt;
    $ salt -G &#039;os:FreeBSD&#039; state.apply hotfixes/leap-seconds.sls&lt;br /&gt;
&lt;br /&gt;
=== ntpq: read: Connection refused ===&lt;br /&gt;
Reported as {{T|2192}}. The ntpq command queries a specific NTP server, here localhost:123. If the connection can&#039;t be established, it probably means ntpd service isn&#039;t started.&lt;br /&gt;
&lt;br /&gt;
NTP status:&lt;br /&gt;
ntpq: read: Connection refused&lt;br /&gt;
&lt;br /&gt;
Solution: &amp;lt;code&amp;gt;service ntpd start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
;NTP&lt;br /&gt;
* [https://www.ntppool.org/zone/fr NTP servers in France]&lt;br /&gt;
* [https://bugs.ntp.org/show_bug.cgi?id=3898 Bug 3898] - update leap seconds file&lt;br /&gt;
;Chrony&lt;br /&gt;
* [https://chrony-project.org/ Chrony]&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/NTP&amp;diff=2170</id>
		<title>Operations grimoire/NTP</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/NTP&amp;diff=2170"/>
		<updated>2025-11-27T16:44:14Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: /* FreeBSD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NTP allows to sync time. That&#039;s especially important for accurate logs and TLS certificates.&lt;br /&gt;
&lt;br /&gt;
== Recommended NTP servers ==&lt;br /&gt;
There is a CC list of servers by country. France makes sense for most servers to use the country of the datacenter where the server is located.&lt;br /&gt;
&lt;br /&gt;
== By OS ==&lt;br /&gt;
NTP is configured in core.&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ===&lt;br /&gt;
We use ntpd service. Each day, drift from NTP servers is checked by periodic &amp;lt;code&amp;gt;480.status-ntpd&amp;lt;/code&amp;gt;.&lt;br /&gt;
== NTP Service Configuration on FreeBSD ==&lt;br /&gt;
&lt;br /&gt;
We have enabled the automatic startup of the &#039;&#039;&#039;ntpd&#039;&#039;&#039; service on all FreeBSD servers to ensure continuous time synchronization. Additionally, the &#039;&#039;&#039;ntpd&#039;&#039;&#039; configuration has been adjusted to allow automatic connections to time sources, ensuring reliable updates without any manual intervention.&lt;br /&gt;
&lt;br /&gt;
For reference, see:&lt;br /&gt;
* [rOPS27946aeb13d18e3e54b72aabf170bd66e111ca88](https://devcentral.nasqueron.org/rOPS27946aeb13d18e3e54b72aabf170bd66e111ca88)&lt;br /&gt;
* [D3893](https://devcentral.nasqueron.org/D3893)&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
Chrony service is used.&lt;br /&gt;
&lt;br /&gt;
== Troubleshoot ==&lt;br /&gt;
=== Update leap seconds ===&lt;br /&gt;
Leap seconds file isn&#039;t maintained any more by NTP package (see [https://bugs.ntp.org/show_bug.cgi?id=3898 upstream issue])&lt;br /&gt;
&lt;br /&gt;
To update the file, run the hotfix:&lt;br /&gt;
&lt;br /&gt;
    $ salt -G &#039;os:FreeBSD&#039; state.apply hotfixes/leap-seconds.sls&lt;br /&gt;
&lt;br /&gt;
=== ntpq: read: Connection refused ===&lt;br /&gt;
Reported as {{T|2192}}. The ntpq command queries a specific NTP server, here localhost:123. If the connection can&#039;t be established, it probably means ntpd service isn&#039;t started.&lt;br /&gt;
&lt;br /&gt;
NTP status:&lt;br /&gt;
ntpq: read: Connection refused&lt;br /&gt;
&lt;br /&gt;
Solution: &amp;lt;code&amp;gt;service ntpd start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
;NTP&lt;br /&gt;
* [https://www.ntppool.org/zone/fr NTP servers in France]&lt;br /&gt;
* [https://bugs.ntp.org/show_bug.cgi?id=3898 Bug 3898] - update leap seconds file&lt;br /&gt;
;Chrony&lt;br /&gt;
* [https://chrony-project.org/ Chrony]&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Operations_grimoire/NTP&amp;diff=2169</id>
		<title>Operations grimoire/NTP</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Operations_grimoire/NTP&amp;diff=2169"/>
		<updated>2025-11-27T16:16:06Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: /* FreeBSD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NTP allows to sync time. That&#039;s especially important for accurate logs and TLS certificates.&lt;br /&gt;
&lt;br /&gt;
== Recommended NTP servers ==&lt;br /&gt;
There is a CC list of servers by country. France makes sense for most servers to use the country of the datacenter where the server is located.&lt;br /&gt;
&lt;br /&gt;
== By OS ==&lt;br /&gt;
NTP is configured in core.&lt;br /&gt;
&lt;br /&gt;
=== FreeBSD ===&lt;br /&gt;
We use ntpd service. Each day, drift from NTP servers is checked by periodic &amp;lt;code&amp;gt;480.status-ntpd&amp;lt;/code&amp;gt;.&lt;br /&gt;
 We configured the ntpd to allow it to connect automatically.  : https://devcentral.nasqueron.org/rOPS27946aeb13d18e3e54b72aabf170bd66e111ca88   or https://devcentral.nasqueron.org/D3893&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
Chrony service is used.&lt;br /&gt;
&lt;br /&gt;
== Troubleshoot ==&lt;br /&gt;
=== Update leap seconds ===&lt;br /&gt;
Leap seconds file isn&#039;t maintained any more by NTP package (see [https://bugs.ntp.org/show_bug.cgi?id=3898 upstream issue])&lt;br /&gt;
&lt;br /&gt;
To update the file, run the hotfix:&lt;br /&gt;
&lt;br /&gt;
    $ salt -G &#039;os:FreeBSD&#039; state.apply hotfixes/leap-seconds.sls&lt;br /&gt;
&lt;br /&gt;
=== ntpq: read: Connection refused ===&lt;br /&gt;
Reported as {{T|2192}}. The ntpq command queries a specific NTP server, here localhost:123. If the connection can&#039;t be established, it probably means ntpd service isn&#039;t started.&lt;br /&gt;
&lt;br /&gt;
NTP status:&lt;br /&gt;
ntpq: read: Connection refused&lt;br /&gt;
&lt;br /&gt;
Solution: &amp;lt;code&amp;gt;service ntpd start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
;NTP&lt;br /&gt;
* [https://www.ntppool.org/zone/fr NTP servers in France]&lt;br /&gt;
* [https://bugs.ntp.org/show_bug.cgi?id=3898 Bug 3898] - update leap seconds file&lt;br /&gt;
;Chrony&lt;br /&gt;
* [https://chrony-project.org/ Chrony]&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Dev_zone/Create_devserver_access/fr&amp;diff=2162</id>
		<title>Dev zone/Create devserver access/fr</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Dev_zone/Create_devserver_access/fr&amp;diff=2162"/>
		<updated>2025-11-26T14:50:45Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Guide complet : Configuration de l&#039;accès devserver avec Git et Arcanist =&lt;br /&gt;
&lt;br /&gt;
Ce guide explique comment configurer votre environnement de développement pour contribuer au projet Operations.&lt;br /&gt;
&lt;br /&gt;
== 1. Création du dossier de travail ==&lt;br /&gt;
&lt;br /&gt;
Créez un dossier sur votre PC Windows pour organiser tous les fichiers du projet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
C:\STAGE 2025&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est dans ce dossier que vous allez ranger tout ce qui concerne le projet Operations.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 2. Récupération et clonage du dépôt Operations ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 Récupération de l&#039;URL du dépôt ===&lt;br /&gt;
&lt;br /&gt;
Rendez-vous sur la page du dépôt :&lt;br /&gt;
* https://devcentral.nasqueron.org/source/operations/&lt;br /&gt;
&lt;br /&gt;
Copiez l&#039;URL Git pour pouvoir cloner le projet.&lt;br /&gt;
&lt;br /&gt;
=== 2.2 Clonage du dépôt ===&lt;br /&gt;
&lt;br /&gt;
Ouvrez PowerShell et placez-vous dans votre dossier :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
cd &amp;quot;C:\STAGE 2025&amp;quot;&lt;br /&gt;
git clone https://devcentral.nasqueron.org/source/operations.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Git crée un dossier &amp;lt;code&amp;gt;operations&amp;lt;/code&amp;gt; avec tous les fichiers du projet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 3. Gestion de Git et création de branche dans WSL ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 Se placer dans le dossier du projet ===&lt;br /&gt;
&lt;br /&gt;
Depuis WSL (Ubuntu), placez-vous dans le dossier du projet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt/c/STAGE\ 2025/operations&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.2 Création d&#039;une nouvelle branche ===&lt;br /&gt;
&lt;br /&gt;
Créez une nouvelle branche pour vos modifications :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git switch -c feature/add-gui-user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avertissement|Si la branche existe déjà, Git affichera :&lt;br /&gt;
&amp;lt;code&amp;gt;fatal: a branch named &#039;feature/add-gui-user&#039; already exists&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans ce cas, basculez simplement sur la branche existante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git switch feature/add-gui-user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 4. Modifications dans les fichiers du dépôt ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 Vérification de l&#039;emplacement des fichiers ===&lt;br /&gt;
&lt;br /&gt;
Vérifiez où se trouvent les vrais fichiers &amp;lt;code&amp;gt;users.sls&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;groups.sls&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -la pillar/core/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Important|Les vrais fichiers sont dans &amp;lt;code&amp;gt;pillar/core/&amp;lt;/code&amp;gt;, pas dans &amp;lt;code&amp;gt;operations/pillar/core/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 4.2 Ajout de votre utilisateur dans users.sls ===&lt;br /&gt;
&lt;br /&gt;
Ouvrez le fichier avec VS Code :&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
pillar/core/users.sls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajoutez votre utilisateur dans la section &amp;lt;code&amp;gt;shellusers:&amp;lt;/code&amp;gt; par ordre alphabétique :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
ptdradmin:&lt;br /&gt;
  fullname: Doba Gui&lt;br /&gt;
  ssh_keys:&lt;br /&gt;
    - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAFtlR4OeXNHfJXNrvrLeU9nGu7ufcxc38xUGqlwiY5L doba.guimartinien@gmail.com&lt;br /&gt;
  uid: 1001&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 Ajout de votre compte dans groups.sls ===&lt;br /&gt;
&lt;br /&gt;
Ouvrez également le fichier :&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
pillar/core/groups.sls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajoutez-vous dans le groupe &amp;lt;code&amp;gt;nasqueron&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
shellgroups:&lt;br /&gt;
  Members:&lt;br /&gt;
    - ptdradmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 5. Commit des modifications ==&lt;br /&gt;
&lt;br /&gt;
=== 5.1 Suppression des fichiers créés par erreur ===&lt;br /&gt;
&lt;br /&gt;
Si vous avez créé des fichiers vides dans &amp;lt;code&amp;gt;operations/&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf operations/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 Ajout des bons fichiers ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git add pillar/core/users.sls pillar/core/groups.sls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 Commit des changements ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git commit -m &amp;quot;Ajout de Doba Gui comme user et dans le groupe core&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.4 Vérification du commit ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git show HEAD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifiez que vous voyez seulement les lignes que vous avez vraiment modifiées.&lt;br /&gt;
&lt;br /&gt;
=== 5.5 Modification du dernier commit (si nécessaire) ===&lt;br /&gt;
&lt;br /&gt;
Si vous avez corrigé des fichiers après le commit :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git commit --amend&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 6. Premier essai de arc diff (échec - arc n&#039;existe pas) ==&lt;br /&gt;
&lt;br /&gt;
Essayez de lancer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erreur attendue :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
arc: command not found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut installer Arcanist.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 7. Installation d&#039;Arcanist avec WSL ==&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi installer Arcanist ? ===&lt;br /&gt;
&lt;br /&gt;
Arcanist (ou &amp;lt;code&amp;gt;arc&amp;lt;/code&amp;gt;) est l&#039;outil officiel de ligne de commande pour interagir avec Phabricator, le système de revue de code utilisé par le projet Operations.&lt;br /&gt;
&lt;br /&gt;
* Il permet de créer, mettre à jour et soumettre des révisions (&amp;lt;code&amp;gt;arc diff&amp;lt;/code&amp;gt;) directement depuis votre environnement local&lt;br /&gt;
* Il gère les linters et les tests automatiques configurés par le projet avant l&#039;envoi de modifications&lt;br /&gt;
* Sans Arcanist, vous ne pouvez pas soumettre vos changements pour revue ni intégrer les vérifications automatiques du projet&lt;br /&gt;
&lt;br /&gt;
=== 7.1 Mise à jour d&#039;Ubuntu ===&lt;br /&gt;
&lt;br /&gt;
Avant d&#039;installer quoi que ce soit :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.2 Installation des dépendances ===&lt;br /&gt;
&lt;br /&gt;
Arcanist a besoin de PHP et Git :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install -y php-cli php-curl php-xml php-mbstring git curl unzip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.3 Téléchargement d&#039;Arcanist ===&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un dossier pour Arcanist :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p ~/phabricator&lt;br /&gt;
cd ~/phabricator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Téléchargement des fichiers :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/phacility/arcanist.git&lt;br /&gt;
git clone https://github.com/phacility/libphutil.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.4 Rendre arc accessible partout ===&lt;br /&gt;
&lt;br /&gt;
Pour ne pas devoir écrire tout le chemin :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ln -s ~/phabricator/arcanist/bin/arc /usr/local/bin/arc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si le cache Bash ne reconnaît pas la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hash -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.5 Vérification de l&#039;installation ===&lt;br /&gt;
&lt;br /&gt;
Test de la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note|Une erreur sur shellcheck-linter peut apparaître, mais la version devrait s&#039;afficher. Répondre &amp;quot;y&amp;quot; pour continuer.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 8. Deuxième essai de arc diff (échec - authentification requise) ==&lt;br /&gt;
&lt;br /&gt;
Retournez dans le projet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt/c/STAGE\ 2025/operations&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erreur attendue :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
YOU NEED TO AUTHENTICATE TO CONTINUE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut installer le certificat.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 9. Authentification Arcanist ==&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi exécuter arc install-certificate ? ===&lt;br /&gt;
&lt;br /&gt;
Cette commande permet d&#039;associer votre environnement local à votre compte Phabricator via un token sécurisé.&lt;br /&gt;
&lt;br /&gt;
* Elle est nécessaire pour que Arcanist puisse créer, mettre à jour et soumettre vos révisions (&amp;lt;code&amp;gt;arc diff&amp;lt;/code&amp;gt;) sur le serveur Phabricator&lt;br /&gt;
* Sans ce certificat, Arcanist ne peut pas authentifier vos commandes et toutes les opérations de soumission de code échoueront&lt;br /&gt;
* Le token est spécifique à votre compte et doit être généré depuis l&#039;interface web de Phabricator&lt;br /&gt;
&lt;br /&gt;
=== 9.1 Installation du certificat ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc install-certificate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suivez le lien fourni, récupérez le token API et collez-le dans le terminal. Arcanist est maintenant connecté à votre compte.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 10. Troisième essai de arc diff (échec - shellcheck-linter manquant) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arc vous demande de choisir la branche de référence, choisissez &amp;lt;code&amp;gt;origin/main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nouvelle erreur :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Failed to load library at location &amp;quot;shellcheck-linter&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 11. Installation de shellcheck-linter ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/phabricator&lt;br /&gt;
git clone https://github.com/pinterest/arcanist-linters.git shellcheck-linter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 12. Quatrième essai de arc diff (échec - linter invalide) ==&lt;br /&gt;
&lt;br /&gt;
Retournez dans le projet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt/c/STAGE\ 2025/operations&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nouvelle erreur :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Linter &#039;shell&#039; specifies invalid type &#039;shellcheck&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le type &amp;lt;code&amp;gt;shellcheck&amp;lt;/code&amp;gt; n&#039;est pas reconnu.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 13. Correction du linter shellcheck ==&lt;br /&gt;
&lt;br /&gt;
Ouvrez &amp;lt;code&amp;gt;.arclint&amp;lt;/code&amp;gt; avec VS Code et modifiez :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Avant :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;shell&amp;quot;: {&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;shellcheck&amp;quot;,&lt;br /&gt;
  &amp;quot;include&amp;quot;: [&amp;quot;(\\.sh$)&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Après :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;shell&amp;quot;: {&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
  &amp;quot;include&amp;quot;: [&amp;quot;(\\.sh$)&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avertissement|Ne pas commiter ce changement, c&#039;est juste pour que ça fonctionne localement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternative :&#039;&#039;&#039; Bypass des tests si nécessaire :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff --nolint&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 14. Cinquième essai de arc diff (échec - problème CRLF) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arc détecte 1,011 fichiers modifiés. C&#039;est un problème de fins de ligne Windows/Linux.&lt;br /&gt;
&lt;br /&gt;
=== 14.1 Correction des problèmes de fins de ligne ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git config --global core.autocrlf input&lt;br /&gt;
git restore .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avertissement|Assurez-vous d&#039;être bien dans &amp;lt;code&amp;gt;/mnt/c/STAGE\ 2025/operations&amp;lt;/code&amp;gt; avant d&#039;exécuter ces commandes.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 15. Sixième essai de arc diff (succès !) ==&lt;br /&gt;
&lt;br /&gt;
=== 15.1 Vérification de l&#039;état de Git ===&lt;br /&gt;
&lt;br /&gt;
Pour vous assurer qu&#039;il n&#039;y a pas de fichiers non suivis :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Résultat attendu :&#039;&#039;&#039; Aucun fichier non commité ne doit apparaître.&lt;br /&gt;
&lt;br /&gt;
=== 15.2 Lancement d&#039;Arcanist ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arc vous demande si vous voulez amend les changements dans &amp;lt;code&amp;gt;.arclint&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Do you want to amend these 1 change(s) to the current commit? [y/N] y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis il vous demande si vous voulez utiliser le message sauvegardé :&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Do you want to use this message? [Y/n] Y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 15.3 Remplissage des informations de révision ===&lt;br /&gt;
&lt;br /&gt;
L&#039;éditeur (nano) s&#039;ouvre avec les informations à remplir :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Summary: Ajout de Doba Gui comme user et dans le groupe core&lt;br /&gt;
Test Plan: Vérification de la syntaxe YAML et des informations utilisateur&lt;br /&gt;
Reviewers: dereckson&lt;br /&gt;
Subscribers:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 15.4 Sauvegarde dans nano ===&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Sauvegarder le fichier :&#039;&#039;&#039;&lt;br /&gt;
#* Appuyez sur &#039;&#039;&#039;Ctrl + O&#039;&#039;&#039; (la lettre O, pas zéro)&lt;br /&gt;
#* Nano vous demandera le nom du fichier → appuyez sur &#039;&#039;&#039;Entrée&#039;&#039;&#039; pour garder le même&lt;br /&gt;
# &#039;&#039;&#039;Quitter nano :&#039;&#039;&#039;&lt;br /&gt;
#* Appuyez sur &#039;&#039;&#039;Ctrl + X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Après ça, vous retournez dans votre terminal et &amp;lt;code&amp;gt;arc diff&amp;lt;/code&amp;gt; continuera le processus.&lt;br /&gt;
&lt;br /&gt;
=== 15.5 Pour mettre à jour une révision existante ===&lt;br /&gt;
&lt;br /&gt;
Si vous voulez mettre à jour une révision existante (ex. : D3888) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff --update D3888&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 16. Vérification finale ==&lt;br /&gt;
&lt;br /&gt;
Vérifiez que tout est propre :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aucun fichier ne doit rester non commité.&lt;br /&gt;
&lt;br /&gt;
Assurez-vous que votre révision contient bien vos modifications :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Succès|À ce stade, votre révision est prête à être relue par votre reviewer.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Résumé des problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Problème !! Solution&lt;br /&gt;
|-&lt;br /&gt;
| Fichiers vides dans operations/ || &amp;lt;code&amp;gt;rm -rf operations/&amp;lt;/code&amp;gt; puis travailler dans &amp;lt;code&amp;gt;pillar/core/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Cache Bash pour arc || &amp;lt;code&amp;gt;hash -r&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Authentification manquante || &amp;lt;code&amp;gt;arc install-certificate&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Bibliothèque shellcheck-linter manquante || Cloner dans &amp;lt;code&amp;gt;~/phabricator/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Erreur linter shellcheck || Changer &amp;lt;code&amp;gt;&amp;quot;type&amp;quot;: &amp;quot;shellcheck&amp;quot;&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;&amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;.arclint&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Problème CRLF/LF || &amp;lt;code&amp;gt;git config --global core.autocrlf input&amp;lt;/code&amp;gt; puis &amp;lt;code&amp;gt;git restore .&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Points importants à retenir ==&lt;br /&gt;
&lt;br /&gt;
Avertissement|&lt;br /&gt;
* &#039;&#039;&#039;Toutes les commandes Git et Arcanist doivent être exécutées dans &amp;lt;code&amp;gt;/mnt/c/STAGE\ 2025/operations&amp;lt;/code&amp;gt;, et non dans &amp;lt;code&amp;gt;~/phabricator&amp;lt;/code&amp;gt;.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Ne pas commiter les modifications du fichier &amp;lt;code&amp;gt;.arclint&amp;lt;/code&amp;gt; (changement de shellcheck en text).&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Les vrais fichiers sont dans &amp;lt;code&amp;gt;pillar/core/&amp;lt;/code&amp;gt;, pas dans &amp;lt;code&amp;gt;operations/pillar/core/&amp;lt;/code&amp;gt;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contributor guide]]&lt;br /&gt;
[[Category:Reference]]&lt;br /&gt;
[[Category:Internship guide]]&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
	<entry>
		<id>https://agora.nasqueron.org/index.php?title=Dev_zone/Create_devserver_access/fr&amp;diff=2134</id>
		<title>Dev zone/Create devserver access/fr</title>
		<link rel="alternate" type="text/html" href="https://agora.nasqueron.org/index.php?title=Dev_zone/Create_devserver_access/fr&amp;diff=2134"/>
		<updated>2025-11-19T14:35:39Z</updated>

		<summary type="html">&lt;p&gt;Ptdradmin: Created page with &amp;quot;= Guide complet : Configuration de l&amp;#039;accès devserver avec Git et Arcanist =  Ce guide explique comment configurer votre environnement de développement pour contribuer au projet Operations.  == 1. Création du dossier de travail ==  Créez un dossier sur votre PC Windows pour organiser tous les fichiers du projet :  &amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt; C:\STAGE 2025 &amp;lt;/syntaxhighlight&amp;gt;  C&amp;#039;est dans ce dossier que vous allez ranger tout ce qui concerne le projet Operations....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Guide complet : Configuration de l&#039;accès devserver avec Git et Arcanist =&lt;br /&gt;
&lt;br /&gt;
Ce guide explique comment configurer votre environnement de développement pour contribuer au projet Operations.&lt;br /&gt;
&lt;br /&gt;
== 1. Création du dossier de travail ==&lt;br /&gt;
&lt;br /&gt;
Créez un dossier sur votre PC Windows pour organiser tous les fichiers du projet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
C:\STAGE 2025&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C&#039;est dans ce dossier que vous allez ranger tout ce qui concerne le projet Operations.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 2. Récupération et clonage du dépôt Operations ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 Récupération de l&#039;URL du dépôt ===&lt;br /&gt;
&lt;br /&gt;
Rendez-vous sur la page du dépôt :&lt;br /&gt;
* https://devcentral.nasqueron.org/source/operations/&lt;br /&gt;
&lt;br /&gt;
Copiez l&#039;URL Git pour pouvoir cloner le projet.&lt;br /&gt;
&lt;br /&gt;
=== 2.2 Clonage du dépôt ===&lt;br /&gt;
&lt;br /&gt;
Ouvrez PowerShell et placez-vous dans votre dossier :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
cd &amp;quot;C:\STAGE 2025&amp;quot;&lt;br /&gt;
git clone https://devcentral.nasqueron.org/source/operations.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Git crée un dossier &amp;lt;code&amp;gt;operations&amp;lt;/code&amp;gt; avec tous les fichiers du projet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 3. Gestion de Git et création de branche dans WSL ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 Se placer dans le dossier du projet ===&lt;br /&gt;
&lt;br /&gt;
Depuis WSL (Ubuntu), placez-vous dans le dossier du projet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt/c/STAGE\ 2025/operations&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3.2 Création d&#039;une nouvelle branche ===&lt;br /&gt;
&lt;br /&gt;
Créez une nouvelle branche pour vos modifications :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git switch -c feature/add-gui-user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avertissement|Si la branche existe déjà, Git affichera :&lt;br /&gt;
&amp;lt;code&amp;gt;fatal: a branch named &#039;feature/add-gui-user&#039; already exists&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans ce cas, basculez simplement sur la branche existante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git switch feature/add-gui-user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 4. Modifications dans les fichiers du dépôt ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 Vérification de l&#039;emplacement des fichiers ===&lt;br /&gt;
&lt;br /&gt;
Vérifiez où se trouvent les vrais fichiers &amp;lt;code&amp;gt;users.sls&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;groups.sls&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -la pillar/core/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Important|Les vrais fichiers sont dans &amp;lt;code&amp;gt;pillar/core/&amp;lt;/code&amp;gt;, pas dans &amp;lt;code&amp;gt;operations/pillar/core/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== 4.2 Ajout de votre utilisateur dans users.sls ===&lt;br /&gt;
&lt;br /&gt;
Ouvrez le fichier avec VS Code :&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
pillar/core/users.sls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajoutez votre utilisateur dans la section &amp;lt;code&amp;gt;shellusers:&amp;lt;/code&amp;gt; par ordre alphabétique :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
ptdradmin:&lt;br /&gt;
  fullname: Doba Gui&lt;br /&gt;
  ssh_keys:&lt;br /&gt;
    - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAFtlR4OeXNHfJXNrvrLeU9nGu7ufcxc38xUGqlwiY5L doba.guimartinien@gmail.com&lt;br /&gt;
  uid: 1001&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 Ajout de votre compte dans groups.sls ===&lt;br /&gt;
&lt;br /&gt;
Ouvrez également le fichier :&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
pillar/core/groups.sls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajoutez-vous dans le groupe &amp;lt;code&amp;gt;core&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
core:&lt;br /&gt;
  Members:&lt;br /&gt;
    - ptdradmin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 5. Commit des modifications ==&lt;br /&gt;
&lt;br /&gt;
=== 5.1 Suppression des fichiers créés par erreur ===&lt;br /&gt;
&lt;br /&gt;
Si vous avez créé des fichiers vides dans &amp;lt;code&amp;gt;operations/&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -rf operations/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 Ajout des bons fichiers ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git add pillar/core/users.sls pillar/core/groups.sls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 Commit des changements ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git commit -m &amp;quot;Ajout de Doba Gui comme user et dans le groupe core&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.4 Vérification du commit ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git show HEAD&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérifiez que vous voyez seulement les lignes que vous avez vraiment modifiées.&lt;br /&gt;
&lt;br /&gt;
=== 5.5 Modification du dernier commit (si nécessaire) ===&lt;br /&gt;
&lt;br /&gt;
Si vous avez corrigé des fichiers après le commit :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git commit --amend&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 6. Premier essai de arc diff (échec - arc n&#039;existe pas) ==&lt;br /&gt;
&lt;br /&gt;
Essayez de lancer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erreur attendue :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
arc: command not found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut installer Arcanist.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 7. Installation d&#039;Arcanist avec WSL ==&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi installer Arcanist ? ===&lt;br /&gt;
&lt;br /&gt;
Arcanist (ou &amp;lt;code&amp;gt;arc&amp;lt;/code&amp;gt;) est l&#039;outil officiel de ligne de commande pour interagir avec Phabricator, le système de revue de code utilisé par le projet Operations.&lt;br /&gt;
&lt;br /&gt;
* Il permet de créer, mettre à jour et soumettre des révisions (&amp;lt;code&amp;gt;arc diff&amp;lt;/code&amp;gt;) directement depuis votre environnement local&lt;br /&gt;
* Il gère les linters et les tests automatiques configurés par le projet avant l&#039;envoi de modifications&lt;br /&gt;
* Sans Arcanist, vous ne pouvez pas soumettre vos changements pour revue ni intégrer les vérifications automatiques du projet&lt;br /&gt;
&lt;br /&gt;
=== 7.1 Mise à jour d&#039;Ubuntu ===&lt;br /&gt;
&lt;br /&gt;
Avant d&#039;installer quoi que ce soit :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.2 Installation des dépendances ===&lt;br /&gt;
&lt;br /&gt;
Arcanist a besoin de PHP et Git :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install -y php-cli php-curl php-xml php-mbstring git curl unzip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.3 Téléchargement d&#039;Arcanist ===&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un dossier pour Arcanist :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p ~/phabricator&lt;br /&gt;
cd ~/phabricator&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Téléchargement des fichiers :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/phacility/arcanist.git&lt;br /&gt;
git clone https://github.com/phacility/libphutil.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.4 Rendre arc accessible partout ===&lt;br /&gt;
&lt;br /&gt;
Pour ne pas devoir écrire tout le chemin :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ln -s ~/phabricator/arcanist/bin/arc /usr/local/bin/arc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si le cache Bash ne reconnaît pas la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
hash -r&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 7.5 Vérification de l&#039;installation ===&lt;br /&gt;
&lt;br /&gt;
Test de la commande :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc version&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note|Une erreur sur shellcheck-linter peut apparaître, mais la version devrait s&#039;afficher. Répondre &amp;quot;y&amp;quot; pour continuer.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 8. Deuxième essai de arc diff (échec - authentification requise) ==&lt;br /&gt;
&lt;br /&gt;
Retournez dans le projet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt/c/STAGE\ 2025/operations&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erreur attendue :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
YOU NEED TO AUTHENTICATE TO CONTINUE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut installer le certificat.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 9. Authentification Arcanist ==&lt;br /&gt;
&lt;br /&gt;
=== Pourquoi exécuter arc install-certificate ? ===&lt;br /&gt;
&lt;br /&gt;
Cette commande permet d&#039;associer votre environnement local à votre compte Phabricator via un token sécurisé.&lt;br /&gt;
&lt;br /&gt;
* Elle est nécessaire pour que Arcanist puisse créer, mettre à jour et soumettre vos révisions (&amp;lt;code&amp;gt;arc diff&amp;lt;/code&amp;gt;) sur le serveur Phabricator&lt;br /&gt;
* Sans ce certificat, Arcanist ne peut pas authentifier vos commandes et toutes les opérations de soumission de code échoueront&lt;br /&gt;
* Le token est spécifique à votre compte et doit être généré depuis l&#039;interface web de Phabricator&lt;br /&gt;
&lt;br /&gt;
=== 9.1 Installation du certificat ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc install-certificate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Suivez le lien fourni, récupérez le token API et collez-le dans le terminal. Arcanist est maintenant connecté à votre compte.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 10. Troisième essai de arc diff (échec - shellcheck-linter manquant) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arc vous demande de choisir la branche de référence, choisissez &amp;lt;code&amp;gt;origin/main&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nouvelle erreur :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Failed to load library at location &amp;quot;shellcheck-linter&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 11. Installation de shellcheck-linter ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/phabricator&lt;br /&gt;
git clone https://github.com/pinterest/arcanist-linters.git shellcheck-linter&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 12. Quatrième essai de arc diff (échec - linter invalide) ==&lt;br /&gt;
&lt;br /&gt;
Retournez dans le projet :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt/c/STAGE\ 2025/operations&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nouvelle erreur :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Linter &#039;shell&#039; specifies invalid type &#039;shellcheck&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le type &amp;lt;code&amp;gt;shellcheck&amp;lt;/code&amp;gt; n&#039;est pas reconnu.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 13. Correction du linter shellcheck ==&lt;br /&gt;
&lt;br /&gt;
Ouvrez &amp;lt;code&amp;gt;.arclint&amp;lt;/code&amp;gt; avec VS Code et modifiez :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Avant :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;shell&amp;quot;: {&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;shellcheck&amp;quot;,&lt;br /&gt;
  &amp;quot;include&amp;quot;: [&amp;quot;(\\.sh$)&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Après :&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;shell&amp;quot;: {&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;,&lt;br /&gt;
  &amp;quot;include&amp;quot;: [&amp;quot;(\\.sh$)&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avertissement|Ne pas commiter ce changement, c&#039;est juste pour que ça fonctionne localement.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alternative :&#039;&#039;&#039; Bypass des tests si nécessaire :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff --nolint&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 14. Cinquième essai de arc diff (échec - problème CRLF) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arc détecte 1,011 fichiers modifiés. C&#039;est un problème de fins de ligne Windows/Linux.&lt;br /&gt;
&lt;br /&gt;
=== 14.1 Correction des problèmes de fins de ligne ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git config --global core.autocrlf input&lt;br /&gt;
git restore .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avertissement|Assurez-vous d&#039;être bien dans &amp;lt;code&amp;gt;/mnt/c/STAGE\ 2025/operations&amp;lt;/code&amp;gt; avant d&#039;exécuter ces commandes.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 15. Sixième essai de arc diff (succès !) ==&lt;br /&gt;
&lt;br /&gt;
=== 15.1 Vérification de l&#039;état de Git ===&lt;br /&gt;
&lt;br /&gt;
Pour vous assurer qu&#039;il n&#039;y a pas de fichiers non suivis :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Résultat attendu :&#039;&#039;&#039; Aucun fichier non commité ne doit apparaître.&lt;br /&gt;
&lt;br /&gt;
=== 15.2 Lancement d&#039;Arcanist ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arc vous demande si vous voulez amend les changements dans &amp;lt;code&amp;gt;.arclint&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Do you want to amend these 1 change(s) to the current commit? [y/N] y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis il vous demande si vous voulez utiliser le message sauvegardé :&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Do you want to use this message? [Y/n] Y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 15.3 Remplissage des informations de révision ===&lt;br /&gt;
&lt;br /&gt;
L&#039;éditeur (nano) s&#039;ouvre avec les informations à remplir :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Summary: Ajout de Doba Gui comme user et dans le groupe core&lt;br /&gt;
Test Plan: Vérification de la syntaxe YAML et des informations utilisateur&lt;br /&gt;
Reviewers: dereckson&lt;br /&gt;
Subscribers:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 15.4 Sauvegarde dans nano ===&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Sauvegarder le fichier :&#039;&#039;&#039;&lt;br /&gt;
#* Appuyez sur &#039;&#039;&#039;Ctrl + O&#039;&#039;&#039; (la lettre O, pas zéro)&lt;br /&gt;
#* Nano vous demandera le nom du fichier → appuyez sur &#039;&#039;&#039;Entrée&#039;&#039;&#039; pour garder le même&lt;br /&gt;
# &#039;&#039;&#039;Quitter nano :&#039;&#039;&#039;&lt;br /&gt;
#* Appuyez sur &#039;&#039;&#039;Ctrl + X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Après ça, vous retournez dans votre terminal et &amp;lt;code&amp;gt;arc diff&amp;lt;/code&amp;gt; continuera le processus.&lt;br /&gt;
&lt;br /&gt;
=== 15.5 Pour mettre à jour une révision existante ===&lt;br /&gt;
&lt;br /&gt;
Si vous voulez mettre à jour une révision existante (ex. : D3888) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff --update D3888&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 16. Vérification finale ==&lt;br /&gt;
&lt;br /&gt;
Vérifiez que tout est propre :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aucun fichier ne doit rester non commité.&lt;br /&gt;
&lt;br /&gt;
Assurez-vous que votre révision contient bien vos modifications :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
arc diff&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Succès|À ce stade, votre révision est prête à être relue par votre reviewer.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Résumé des problèmes rencontrés ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Problème !! Solution&lt;br /&gt;
|-&lt;br /&gt;
| Fichiers vides dans operations/ || &amp;lt;code&amp;gt;rm -rf operations/&amp;lt;/code&amp;gt; puis travailler dans &amp;lt;code&amp;gt;pillar/core/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Cache Bash pour arc || &amp;lt;code&amp;gt;hash -r&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Authentification manquante || &amp;lt;code&amp;gt;arc install-certificate&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Bibliothèque shellcheck-linter manquante || Cloner dans &amp;lt;code&amp;gt;~/phabricator/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Erreur linter shellcheck || Changer &amp;lt;code&amp;gt;&amp;quot;type&amp;quot;: &amp;quot;shellcheck&amp;quot;&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;&amp;quot;type&amp;quot;: &amp;quot;text&amp;quot;&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;.arclint&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Problème CRLF/LF || &amp;lt;code&amp;gt;git config --global core.autocrlf input&amp;lt;/code&amp;gt; puis &amp;lt;code&amp;gt;git restore .&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Points importants à retenir ==&lt;br /&gt;
&lt;br /&gt;
Avertissement|&lt;br /&gt;
* &#039;&#039;&#039;Toutes les commandes Git et Arcanist doivent être exécutées dans &amp;lt;code&amp;gt;/mnt/c/STAGE\ 2025/operations&amp;lt;/code&amp;gt;, et non dans &amp;lt;code&amp;gt;~/phabricator&amp;lt;/code&amp;gt;.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Ne pas commiter les modifications du fichier &amp;lt;code&amp;gt;.arclint&amp;lt;/code&amp;gt; (changement de shellcheck en text).&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Les vrais fichiers sont dans &amp;lt;code&amp;gt;pillar/core/&amp;lt;/code&amp;gt;, pas dans &amp;lt;code&amp;gt;operations/pillar/core/&amp;lt;/code&amp;gt;.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Catégorie:Documentation&lt;br /&gt;
Catégorie:Guide de contribution&lt;br /&gt;
Catégorie:Développement&lt;/div&gt;</summary>
		<author><name>Ptdradmin</name></author>
	</entry>
</feed>