Aller au contenu principal

Configuration, déploiement et dépannage

Mise en service d'une consigne​

1. Central​

bash scripts/docker-project.sh up central-saturn central-venus
# Saturn : http://localhost:8130 gRPC : 9130
# Venus : http://localhost:8135

Le port 9130 doit être publié (docker-compose.central.yml) et joignable depuis le réseau des nodes.

2. SMTP​

Depuis Venus (Consignes → Email SMTP) ou via l'API (voir Saturn). Pour Gmail : smtp.gmail.com, port 587, STARTTLS, mot de passe d'application (pas le mot de passe du compte). Utiliser ensuite Envoyer un email de test.

3–4. Node​

/etc/leukos/node.json (extrait) :

{
"grpc": { "enabled": true, "bind": "0.0.0.0", "port": 9080 },
"central": { "saturn_grpc": "192.168.0.12:9130", "saturn_http": "http://192.168.0.12:8130" },
"consigne": { "layout_path": "/etc/leukos/consigne.json", "lockers": [] }
}

/etc/leukos/consigne.json décrit le mur (numéros et positions des portes) ; il est lu à la fois par l'IHM et par le daemon. Modèle : nodes/ui/config/consigne.example.json.

5. Déploiement des binaires​

L'image BusyBox n'a pas de sftp-server : scp échoue, on transfère par flux SSH.

T=.build/buildroot/output/target/usr/bin
H=supervisor@192.168.0.9

ssh $H 'cat > /tmp/leukos-node.new' < $T/leukos-node
ssh $H 'cat > /tmp/leukos-consigne.new' < $T/leukos-consigne
ssh $H 'cat > /tmp/leukos-ui.new' < $T/leukos-ui
sha256sum $T/leukos-node $T/leukos-consigne $T/leukos-ui
ssh $H 'sha256sum /tmp/leukos-*.new' # doit être identique
ssh $H 'cat > /tmp/S93leukos-consigne.new' \
< nodes/os/board/leukos/rpi3plus/rootfs-overlay/etc/init.d/S93leukos-consigne

ssh $H 'set -e; TS=$(date +%Y%m%d-%H%M%S)
sudo -n cp /usr/bin/leukos-node /usr/bin/leukos-node.bak.$TS
sudo -n cp /usr/bin/leukos-consigne /usr/bin/leukos-consigne.bak.$TS 2>/dev/null || true
sudo -n cp /usr/bin/leukos-ui /usr/bin/leukos-ui.bak.$TS
sudo -n /etc/init.d/S90leukos-node stop
sudo -n /etc/init.d/S93leukos-consigne stop || true
sudo -n install -m 0755 /tmp/leukos-node.new /usr/bin/leukos-node
sudo -n install -m 0755 /tmp/leukos-consigne.new /usr/bin/leukos-consigne
sudo -n install -m 0755 /tmp/S93leukos-consigne.new /etc/init.d/S93leukos-consigne
sudo -n install -m 0755 /tmp/leukos-ui.new /usr/bin/leukos-ui
sudo -n /etc/init.d/S90leukos-node start
sudo -n /etc/init.d/S93leukos-consigne start
sudo -n /etc/init.d/S91leukos-ui restart'
attention

Toujours vérifier le hash avant install : un transfert interrompu peut produire un binaire vide et empêcher l'IHM de démarrer.

6–8. Vérifications​

# Sur le node
curl -s localhost:8080/consigne/status
# → "enabled":true, "last_sync_channel":"grpc", "last_sync_error":""
# vérifier aussi : ps | grep leukos-consigne

# Sur le central
curl -s localhost:8130/api/consignes
# → online:true, last_channel:"grpc"

Sécurité​

Facteurs d'authentification au retrait​

Dans Consigne → Configuration, un opérateur disposant de consignes:write peut activer le QR à usage unique et/ou le PIN. Il faut conserver au moins un facteur actif. Le PIN est dérivé avec PBKDF2-HMAC-SHA256 (600 000 itérations), jamais journalisé en clair, et les vérifications sont bloquées après cinq échecs. L'enrôlement d'une personne requiert la validation explicite d'un opérateur habilité.

La vérification faciale reste indisponible et son switch est désactivé tant qu'une caméra, un moteur de comparaison 1:1 et un contrôle de vivacité n'ont pas été intégrés et évalués. Ne pas traiter le nom ou l'email comme une preuve biométrique.

Les mutations d'administration node nécessitent une clé aléatoire partagée de 256 bits :

  • Saturn : PICKUP_MANAGEMENT_KEY dans le fichier local ignoré par Git config/env/dev/central-saturn.local (permissions 0600). Compose charge ce fichier s'il existe; ne jamais mettre la valeur dans le fichier env versionné.
  • Node : /etc/leukos/pickup-management.key, propriétaire root:root, permissions 0600. Installer la même valeur de manière sécurisée sur chaque node concerné.
  • Production : fournir la clé via le gestionnaire de secrets du déploiement, sans la stocker dans le dépôt ni dans les journaux.
SujetMesure
Code de retraitGénéré par crypto/rand, 8 car. ; seul sha256 stocké (PostgreSQL et SQLite)
Usage uniqueLe colis passe à picked_up ; un second scan renvoie Code inconnu ou déjà utilisé
PINPBKDF2-HMAC-SHA256, sel aléatoire, blocage après cinq échecs ; aucune valeur claire dans les logs
Gestion des facteursClé de gestion 256 bits, séparée du dépôt, protégée par permissions système
Mot de passe SMTPStocké côté Saturn, jamais renvoyé par l'API (pass_set) ; à saisir via Venus, pas dans le dépôt
InjectionsRequêtes SQL paramétrées (Postgres + SQLite), échappement HTML des emails, validation des adresses
Taille des requêtesMaxBytesReader côté Saturn, 64 Kio max côté LocalApi
TransportgRPC/REST en clair sur le LAN : prévoir WireGuard (S89wireguard) ou mTLS si le réseau n'est pas de confiance

Dépannage​

SymptômeCause probableAction
Consigne absente de VenusMode non activé ou Saturn injoignable/consigne/status : enabled, last_sync_error
last_sync_channel: "rest"Port 9130 non joignablePublier 9130:9130, vérifier le pare-feu
node_delivery: failedgRPC du node désactivé ou node éteintgrpc.enabled: true dans node.json ; le retry Saturn relivre automatiquement
email_status: failedSMTP non configuré / authentification refuséeVoir email_error, tester depuis Email SMTP
Scan sans effetFocus perdu ou lecteur sans suffixe EntréeApplication Scanner de l'accueil pour vérifier la lecture
Mode consigne désactivé au scanInterrupteur coupéConfiguration → Consignes
actuator: "none"Casier sans relay / lock_pluginCompléter consigne.lockers dans node.json
Événements datés de 1970 sur le nodeHorloge non synchronisée (pas de NTP)Saturn remplace par l'heure de réception ; configurer chronyd

Logs utiles​

docker logs leukos-central-saturn 2>&1 | grep -i consigne
ssh supervisor@192.168.0.9 'sudo -n sqlite3 /var/lib/leukos/node.db \
"SELECT id,level,kind,message,sent FROM consigne_events ORDER BY id DESC LIMIT 20;"'