fix(anywhere): upstream les correctifs faits en local sur le VPS

- gerbil-wg0-ensure.nix : supprime wg0 sans adresse avant le demarrage de gerbil, sinon plus aucun trafic ne passe dans le tunnel newt.
- vaultwarden-mcp commente : son secret vit dans secrets/tower.yml, illisible sur anywhere, ce qui cassait setupSecrets a chaque activation.
- zitadel/steps retire : le secret etait chiffre en type:int, refuse par sops-install-secrets ; l'instance est deja initialisee.
This commit is contained in:
Hermes Agent
2026-10-18 15:00:14 -04:00
parent aadebcc0fd
commit 0ef3a16fd9
3 changed files with 44 additions and 9 deletions
+2 -1
View File
@@ -25,6 +25,7 @@
# ../../services/oxicloud
../../services/zitadel
../../services/pangolin
../../services/pangolin/gerbil-wg0-ensure.nix
../../services/wireguard
# ../../services/tailscale # desactive 26/09: exige le secret sops tailscale/auth_key (absent de secrets/anywhere.yml). Reactiver avec le mesh.
../../services/headscale
@@ -33,7 +34,7 @@
../../services/stalwart
../../services/droplify
../../services/hermes
../../services/vaultwarden-mcp
# ../../services/vaultwarden-mcp # secret sops secrets/tower.yml, illisible sur ce VPS : cassait setupSecrets
];
# Gateway hermes coupé sur le VPS : inerte (pas de token Matrix/Discord,
+30
View File
@@ -0,0 +1,30 @@
# Garantit que wg0, l'interface qui porte les clients newt, a bien son adresse
# à chaque démarrage de gerbil.
#
# Pourquoi : gerbil n'applique l'adresse de wg0 que s'il crée l'interface
# lui-même. Si une wg0 résiduelle existe au moment de son démarrage, il la
# réutilise telle quelle (log "WireGuard interface wg0 already exists") et
# l'interface reste sans adresse, donc sans route pour le sous-réseau des
# clients newt (100.89.128.0/24). Les poignées de main WireGuard continuent de
# passer, elles ne dépendent pas de l'adressage, mais plus aucun octet de
# données ne circule : Traefik n'atteint plus aucune cible (504 sur tous les
# domaines servis par le tunnel) et newt déclare la connexion morte toutes les
# ~3 minutes.
#
# Le workaround amont de nixpkgs (ExecStartPost de gerbil, script
# gerbil-wg0-fix-script) fait exactement ce nettoyage, mais une seule fois par
# machine : il est gardé par le marqueur /var/lib/pangolin/config/wg0, présent
# depuis avril, donc inerte depuis. Ici le contrôle est rejoué à chaque
# démarrage, sans marqueur ni redémarrage de l'unité.
{ pkgs, lib, ... }: {
systemd.services.gerbil.serviceConfig.ExecStartPre = lib.mkForce (lib.getExe (pkgs.writeShellApplication {
name = "gerbil-wg0-drop-unaddressed";
runtimeInputs = [ pkgs.coreutils pkgs.iproute2 ];
text = ''
if ip link show wg0 >/dev/null 2>&1 && ! ip -4 addr show wg0 | grep -q 'inet '; then
echo "wg0 présente sans adresse : suppression avant le démarrage de gerbil" >&2
ip link delete wg0
fi
'';
}));
}
+12 -8
View File
@@ -13,12 +13,17 @@
group = "keys";
};
# Pour le mot de passe admin : le module NixOS n'a pas de stepsPasswordFile,
# mais steps ne tourne qu'une seule fois (fresh install).
# On l'exclut du nix store via un fichier steps séparé injecté par sops.
"zitadel/steps" = {
key = "zitadel_steps";
};
# "zitadel/steps" retiré le 12/10/2026 : le secret pointait sur
# zitadel_steps, chiffré en type:int dans secrets/anywhere.yml, ce que
# sops-install-secrets refuse ("the value of key '' is not a string"). Il
# faisait donc échouer tout le setupSecrets du VPS, donc l'activation
# entière : aucun secret n'était écrit (master key absente, zitadel en
# boucle de crash) et le switch retournait en erreur.
#
# Un steps YAML ne sert qu'à la première initialisation d'une instance, or
# celle-ci est déjà initialisée (base "zitadel" existante). Pour repartir
# d'une instance neuve : chiffrer le YAML des steps en type:str et remettre
# extraStepsPaths = [ config.sops.secrets."zitadel/steps".path ].
};
users.users.zitadel.extraGroups = ["keys"];
@@ -45,8 +50,7 @@
enable = true;
masterKeyFile = config.sops.secrets."zitadel/master_key".path;
# steps injecté via fichier sops plutôt qu'inline dans le nix store
extraStepsPaths = [config.sops.secrets."zitadel/steps".path];
# extraStepsPaths retiré : voir le commentaire sur sops.secrets ci-dessus.
settings = {
Port = 2080;