20 Jul 2022, 00:00

Gestion des onduleurs sous Linux : NUT

Ressources en vrac

Doc debian-fr.xyz
Doc officielle Debian
Doc ArchLinux
Doc Ubuntu, un peu vieille
https://ignace72.eu/utiliser-un-onduleur-eaton-sur-gnu-linux.html

Présentation

NUT (Network UPS Tools) est un ensemble de logiciels qui servent à surveiller les onduleurs et réagir à leur état. Il y’a :

  • le démon nut-driver (commande upsdrvctl) qui communique avec l’onduleur
  • le démon nut-server (commande upsd) qui permet de répondre à des requêtes (locales ou réseau)

Ces 2 démons doivent être lancés sur le poste qui communique en USB avec l’onduleur.

  • le logiciel upsc qui va interroger les démons upsd (en local ou sur d’autres postes)
  • le démon upsmon qui permet d’interroger différents démons upsd et lancer des alertes

Dépôt git du projet

Dans l’exemple ici, il y’a un seul pc qui contrôlera NUT et qui sera relié à l’onduleur ; on ignore donc toutes les configurations réseau.
L’onduleur utilisé est un Eaton Ellipse ECO 800.

Install de NUT et vérification du branchement de l’onduleur

apt install nut
sous Debian.
C’est un paquet virtuel qui dépend de nut-client et nut-server.
nut-client contient entre autres les exécutables upsc, upscmd, upsmon.
nut-server contient entre autre upsd, upsdrvctl.

Brancher l’onduleur via USB.
lsusb donne :
Bus 006 Device 005: ID 0463:ffff MGE UPS Systems UPS

On peut vérifier que le fichier appartient bien au groupe nut (adapter les chiffres au résultat ci-dessus) :
ls -l /dev/bus/usb/006/005

Pilote de l’onduleur

sudo nano /etc/nut/ups.conf

Chaque onduleur doit être défini sous la forme

[upsname]
       driver = <drivername>
       port = <portname>

avec éventuellement d’autres options facultatives. On peut mettre auto pour le port. Le champ desc semble être là pour mettre une description plus complète commentaire).

Pour identifier la liste des pilotes en fonction du matériel, consulter cette page.
Pour un Eaton Ellipse Eco 800, c’est usbhid-ups. Si on clique sur le nom du pilote, on accède à ses otions de configuration.

On peut aussi tester la commande nut-scanner, qui renvoie un bloc de configuration auto-detecté (+ d’infos avec sudo).

Cela me donne le bloc suivant à ajouter à la fin du fichier :

[eaton800]
    driver = usbhid-ups
    port = auto
    desc = "Eaton Ellipse ECO 800"

Lancement

On peut vérifier en lançant manuellement :
sudo upsdrvctl start eaton800

Le processus sera visible via
ps aux | grep usbhid

On peut lancer le service
sudo service nut-driver start
mais visiblement, si le service nut-server n’est pas en route, il quitte au bout de quelques secondes.

Configuration du démon upsd

Celui-ci sert à mettre les informations de l’onduleur à disposition de clients.

Lancement manuel

À fin de compréhension et de debug. On peut lancer upsd manuellement avec le chemin
/usr/lib/nut/upsd
La commande upsd intégrée dans le path (/usr/sbin/) est un script qui va lancer la commande ci-dessus uniquement si la configuration du fichier upsd.conf autorise le lancement.

Si on a l’erreur Can't connect to UPS [...] au lancement, c’est probablement que le processus driver (upsdrvctl) n’est pas lancé.
Sinon on doit avoir Connected to UPS [...]

On peut vérifier le bon lancement du processus via
ps aux | grep upsd | grep nut

Lancement via service

Cette méthode permettra le démarrage automatique de l’ensemble des services nut.
sudo nano /etc/nut/nut.conf
mettre MODE=standalone

On démarre le service :
sudo service nut-server start

Utilisateur

Il faut définir (au moins) un utilisateur dans upsd car une authentification sera nécessaire pour effectuer certaines commandes, notamment celles d’upscmd qui permettent de contrôler l’onduleur (bip, extinction etc).

Pour ceci,
sudo nano /etc/nut/upsd.users et ajouter à la fin un bloc par utilisateur, de type :

[myadmin]
        password = mypass
        #allowfrom = localhost
        actions = SET
        actions = FSD
        instcmds = all
        upsmon master

Détail des options : man upsd.users
(ou https://linux.die.net/man/5/upsd.users )
Actuellement (2022), fsd (forced shutdown) et set (définir des variables sur l’onduleur) sont les 2 seules actions.
instcmds sont les options disponibles dans upscmd -l.

Logiciels clients

upsrw ??

upscmd

upscmd permet de s’adresser directement à l’onduleur.

upscmd -l eaton800
pour voir les commandes supportées par l’onduleur (par exemple contrôler le bip, forcer l’extinction etc)

upscmd eaton800 command:enable
pour lancer la commande en question sur l’onduleur

Sur mon Ellipse ECO 800, il semlble que beeper.disable n’ait pas d’effet, et que load.off et shutdown aient le même effet : couper les prises de courant de l’onduleur ET éteindre l’onduleur, le rendant injoignable sans rallumage manuel de l’onduleur.

upsc

upsc permet de s’adresser à un démon upsd.

upsc -L [host]
pour lister tous les onduleurs détectés sur host ; si l’host n’est pas spécifié, c’est localhost.

Si on a le message d’erreur Error: Connection failure: Cannot assign requested address, c’est que upsc n’arrive pas à communiquer avec upsd ; soit que ce dernier n’est pas lancé, soit qu’il n’accepte pas la requête (voir dans ce cas la directive LISTEN du fichier upsd.conf, même s’il me semble qu’il n’est pas nécessaire de la configurer si tout se fait en local sur 1 seul poste).

upsc eaton800[@host]
pour voir les données actuelles de l’onduleur ; on peut quérir un seul attribut en le mentionnant ; par exemple
upsc eaton800 ups.status
qui peut être OL (OnLine, sur secteur), OB (OnBattery)
ou encore upsc eaton800 battery.charge

Si non a l’erreur Error: Driver not connected, c’est que upsc arrive à communiquer avec upsd, mais que upsd n’arrive pas à communiquer avec le pilote (par exemple processus pilote qui a été tué).

Si prise USB débranchée -> “Error: Data stale”

Monitoring automatique - upsmon

upsmon est le composant qui va surveiller l’état de l’onduleur, et lancer des actions selon l’état (surt batterie, batterie critique etc).
On définit au moins 1 onduleur à surveiller :

sudo nano /etc/nut/upsmon.conf

Le fichier documente chaque section.
Il faut une ligne MONITOR par onduleur ; par exemple
MONITOR eaton800@localhost 1 myadmin mypass master

Le “1” correspond au nombre d’alims qui sont alimentés par l’onduleur en question ; pour la plupart des pcs standard, qui n’ont qu’une seule alim, ce sera 1.

On peut toutefois entrer “0” si le pc surveille l’onduleur mais n’est pas branché dessus ; il effectuera les actions d’alerte (mail etc.) mais ne s’éteindra pas en cas de batterie critique. En ca cas, il faut aussi définir la variable MINSUPPLIES à 0 (pour déclarer que le poste peut fonctionner sans aucun onduleur).

master & slave

En général, un poste branché sur l’onduleur ET capable de communiquer avec lui sera considéré comme master ;
Un poste branché sur l’onduleur mais sans communication de données sera considéré comme slave.

En action automatique, un poste master ne s’éteindra que lorsque tous les slaves seront éteints.

NOTIFYCMD

https://networkupstools.org/docs/user-manual.chunked/ar01s07.html

Toujours dans upsmon.conf, on peut définir la commande appelée pour informer l’admin lorsqu’un événement se produit (coupure courant, batterie faible etc). C’est le paramètre NOTIFYCMD.

Cette commande ne sera exécutée que pour les alertes possédant le flag EXEC !! (voir plus bas)

Ce peut être un script custom, ou bien le planificateur intégré à NUT (upssched). Le message de l’événement sera envoyé à cet exécutable en tant que 1er et seul argument.

Penser aux droits d’accès ! La commande sera exécutée par l’utilisateur nut (sur Debian), il doit pouvoir y accéder en exécution.

NOTIFYMSG

Permet de personnaliser le message associé à chaque alerte.

NOTIFYFLAGS

Définit le type d’actions à effectuer pour chaque type d’alerte. Il y’a :

  • WALL : prévient chaque utilisateur sur le système
  • SYSLOG : inscrit dans le syslog
  • EXEC : lance la commande définie à NOTIFYCMD
  • IGNORE : ne rien faire

Il faut noter FLAG+FLAG+FLAG, par exemple
EXEC+SYSLOG+WALL

Lancement via service

sudo service nut-client start

GUI

nut-monitor
nut-cgi (interface web)

Journaux et contrôle des services

Voir les journaux de nut-driver (upsdrvctl) :

sudo journalctl -u nut-driver
sudo service nut-driver status

Voir les journaux de nut-server (upsd) :

sudo journalctl -u nut-server
sudo service nut-server status

Voir les journaux de nut-client (nut-monitor, upsmon) :

sudo journalctl -u nut-monitor
sudo service nut-monitor status
sudo service nut-client status

sudo service ups-monitor ??

29 May 2022, 00:00

Notes sur locate

La commande locate est fournie par plusieurs paquets, notamment mlocate puis plocate, qui prennent notamment en charge l’option de configuration PRUNENAMES.

L’installation du paquet crée une tache cron dans /etc/cron.daily. On peut la désactiver via chmod -x /etc/cron.daily/mlocate ou chmod -x /etc/cron.daily/plocate.

locate -i pour ne pas prendre la casse en compte.

Pour voir tous les fichiers indexés, on peut faire un locate /.

23 May 2022, 00:00

FTP - passif ou actif

Très bonne lecture : http://slacksite.com/other/ftp.html

En succint :

FTP utilise 2 canaux de communication : commande (C) et données (D). FTP n’utilise que du TCP, jamais d’UDP.

Mode actif

En mode actif, le client contacte le serveur via le canal C. Le serveur est alors autorisé à lui répondre via le même canal.

Le serveur contacte ensuite le client sur le canal D. (le serveur initie la connexion, il est actif).
Le client n’ayant “rien demandé” sur ce canal, le message est très probablement rejeté (par le pare-feu ou routeur du client).

Mode passif

Pour palier à ce problème, lorsque le client initie la connexion sur le canal C, il dit “PASV” (un genre de “j’ai besoin qui tu sois passif, tu n’arriveras pas à me joindre sinon”).
Le serveur crée alors une nouvelle “ouverture” pour le canal D, dont il informe le client, et c’est à nouveau le client qui initie la connexion sur le canal D.

Le serveur est passif, en ceci qu’il n’est à l’origine d’aucune connexion.

Plus de détails

En mode actif, les ports des canaux C et D par défaut sont :

  • serveur : 21 et 20
  • client : 2 ports random >1023 (N et N+1)

Côté serveur, il me semble que seul le port 21 a besoin d’être ouvert dans le pare-feu/routeur.

A compléter

En mode passif, il faut définir une fourchette de ports qui pourront être utilisés par le serveur pour recevoir des connexions (apparemment 1 port par connexion pourrait ne pas suffire).
Il faut ouvrir ces ports dans le pare-feu/routeur.

Une explication de pourquoi le serveur n’utilise pas le port 20 en mode passif.
En gros, dans le canal de données, rien n’identifie le client à part le port utilisé.

31 Jan 2022, 00:00

Notes sur find

Suivre les liens symboliques

Par défaut, find voit les liens symboliques comme des fichiers. Pour qu’il considère la cible du lien et non le lien lui-même, il faut utiliser find -L.

Éxécuter une ou plusieurs commandes sur les résultats

-exec echo {} \; pour une commande (ici echo)
-exec echo {} \; -exec touch {} \; - exec cat {} \; pour plusieurs commandes.

Trouver des dates de modification dans le futur

Si une arborescence contient des fichiers dont la date de modification est dans le futur, on peut utiliser -mmin -0,01 pour trouver les fichiers dont la date de modification est plus récente que 0,01 minutes (soit moins d’une seconde) :
find ./ -mmin -0,01

On peut modifier cette date avec touch (avec -exec)

Trouver les liens symboliques

Source

find ./ -type l

Trouver les liens durs

Source

find -type f -links +1 pour lister les fichiers dont les inodes sont référencés plus d’une fois (ces autres références peuvent être en dehors du répertoire dans lequel est lancé find) . Pour ensuite voir les différents fichiers qui référencent le même inode qu’un fichier précis, on peut faire find -samefile ./my-file.

Trouver les dossiers vides

find ./ -type d -empty
find /path/to/data/ -type d -empty -print -delete pour les supprimer

03 Dec 2021, 00:00

Virtualisation

https://wiki.debian.org/KVM
https://www.how2shout.com/linux/how-to-install-and-configure-kvm-on-debian-11-bullseye-linux/

Pour voir si le processeur possède les extensions matérielles nécessaires pour la virtualisation matérielle :
grep -E --color '(vmx|svm)' /proc/cpuinfo

Qu’est-ce que c’est ?

kvm - QEMU

kvm est un hyperviseur type 1, en espace noyau, sous forme de module noyau pour Linux (intégré au noyau depuis la version 2.6.20). Il permet l’accès aux instructions processeur de virtualisation (Intel-VT ou AMD-V).

QEMU est un émulateur de PC (ou hyperviseur de type 2) : il simule du matériel (disques, RAM etc) pour un système invité. Grâce à kvm, il peut mettre à disposition le processeur physique, pour des performances quasi-natives.

L’un n’a pas besoin de l’autre (kvm peut servir à faire tourner une appli Linux sans OS complet, via containerization, et QEMU peut faire tourner un OS virtuel en émulant complètement un processeur), mais c’est en binôme qu’ils fonctionnent le mieux.

Pour voir si une VM utilise kvm , il faut trouver le PID de la VM, puis entrer la commande strings /proc/<PID>/cmdline|grep kvm. Si oui, on peut y lire “-enable-kvm” ou “accel=kvm”.

Il y’a un module noyau nommé kqemu, qui visait à améliorer les performances de qemu, mais celui-ci a été rendu obsolète par kvm. Son seul avantage potentiel est qu’il fournissait une accélération (logicielle) sur les processeurs ne disposant pas des extensions de virtualisation (mais en ce cas, Virtualbox reste aujourd’hui une solution correcte), si l’invité et l’hôte sont sous la même architecture.

Le paquet qemu-user permet de faire tourner un OS compilé pour une architecure différente du processeur physique ?

libvirt, virsh, virt-install, virt-manager

libvirt est une bibliothèque qui permet de gérer les machines virtuelles. Elle peut aussi se connecter à plusieurs hyperviseurs, dont kvm/QEMU, mais aussi Xen par exemple.

virt-install est une interface en ligne de commande pour simplifier la création de VM.

virsh est une interface en ligne de commande pour interagir avec libvirt, et donc créer, supprimer, modifier, démarrer, arrêter etc. les VMs.

virt-manager est une interface graphique pour interagir avec libvirt (même rôle que virsh, mais en GUI).

virtio

Il me semble que c’est un protocole/une interface pour mettre le matériel de l’hôte à disposition des invités, avec le moins de latence possible. Ces périphériques virtuels nécessitent des pilotes spécifiques, sans quoi ils ne seront pas disponibles, au moins sous Windows. On peut trouver ces pilotes sur cette page.
En montant l’ISO en tant que lecteur CD lors de l’installation de Windows, on peut installer les pilotes pour le contrôleur de disque, à la volée (il faut choisir le dossier qui contient directement les pilotes, il n’y a pas de récursivité).

Virtualbox

C’est simplement un émulateur. Il est plutôt simple d’utilisation, peut être utilisé par un utilisateur non privilégié, mais n’a pas de performances folles.

Xen

Hyperviseur de type 1.

kvm - QEMU

Installation

kvm est déjà présent dans le noyau par défaut. Pour installer QEMU sous Debian Bullseye : sudo apt install qemu-system-x86.
Pour installer virt-manager : sudo apt install virt-manager. Installera automatiquement qemu.

Connexion system ou session

https://blog.wikichoon.com/2016/01/qemusystem-vs-qemusession.html

QEMU peut être utilisé avec une connexion système, ou avec une connexion session.

La connexion système permet l’accès complet à toutes les ressources ; libvirtd est lancé en tant que root, les VMs en tant qu’utilisateur qemu. L’accès d’un utilisateur simple est géré via polkit. On peut ajouter le user au groupe libvirt pour lui permettre un accès aux ressources sans avoir à s’authentifier en root.
La configuration de libvirt est dans /etc/libvirt/.

La connexion session est spécifique à l’utilisateur. Tout est exécuté par l’utilisateur simple. Les configurations/pools sont stockés dans le $HOME. Cependant le réseau accessible par défaut est lent, et peu flexible (difficile à rendre accessible depuis l’extérieur). À voir avec qemu-bridge-helper pour accéder à un pont réseau (créé au préalable par l’admin) ?
La configuration de libvirt est stockée dans $HOME/.config/libvirt.

Détacher souris/clavier de la VM

Par défaut, c’est la combinaison L-Ctrl + L-Alt.

Connexion via SSH

On peut gérer les VMs d’un serveur distant via ssh. Pour ceci, via virsh : virsh --connect qemu+ssh://root@example.com/system.
Via virt-manager, il faut ajouter une connexion, et entrer l’URI qemu+ssh://root@example/system.

En ce cas, il faudra entrer certains chemins manuellement (par exemple pour définir un chemin vers un ISO ou un fichier qcow2), le bouton “Parcourir” étant grisé.

Processeur

La configuration par défaut est de “Copier la configuration du processeur de l’hôte”. Il me semble que ça donne des performances très moyennes. Il vaut mieux décocher cette case et choisir le mode host-passthrough. De même, la détection automatique de la topologie ne me donnait pas de très bons résultats. En choisissant une topologie manuelle, ça fonctionne bien mieux.
Socket : nombre de processeurs physiques sur la MB (1 dans la plupart des cas)
Coeurs : nombre de core du CPU
Chaînes : nombre de thread de chaque core

Périphériques USB ?

Réseau

Le réseau par défaut est un réseau en NAT, et il ne démarre pas automatiquement.
Si on veut bridger une VM à une carte réseau, il faut d’abord créer le pont au niveau système ; il ne semble pas possible de bridger la VM directement à l’interface physique.

Disques

Si connexion à qemu:///system, les pools de stockage (emplacement des fichiers image de disque dur) sont définis dans /etc/libvirt/storage/ et celui par défaut pointe sur /var/lib/libvirt/images/. Les définitions de VMs (fichier XML) sont rangées dans /etc/libvirt/qemu/.

Si connexion à qemu:///session, les pools de stockage dont définis dans $HOME/.config/libvirt/storage/ et celui par défaut pointe vers $HOME/.local/share/libvirt/images/. Les définitions de VMs sont rangées dans $HOME/.config/libvirt/qemu/.

Les images sont au format qcow2.
Il est possible d’utiliser directement un périphérique de type block. Pour ceci, il faut éditer le fichier XML.

Virtualbox

L’avantage principal que je vois est le fait de pouvoir ponter facilement et à la volée la carte réseau virtuelle et n’importe quelle carte réseau (physique, pont ou virtuelle, genre tap0 ), sans préparer le réseau auparavant.

USB

Pour pouvoir passer les périphériques USB à l’invité, l’utilisateur qui lance VBox doit faire partie du groupe vboxusers :
sudo adduser $(whoami) vboxusers

Pour gérer l’USB2 / USB3 , il faut l’extension pack :
sudo apt install virtualbox-ext-pack

On peut passer les périphériques à la volée, via clic-droit sur l’icône USB en bas à droite de la fenêtre de la VM.

16 Apr 2021, 00:00

Reprendre la copie interrompu d'un fichier

Si la copie d’un fichier a été interrompue, on peut la reprendre avec rsync --append (qui va bêtement reprendre si le fichier de destination est plus petit que le fichier source) ou rsync --append-verify (qui va vérifier que les données pré-existantes sont bien les mêmes sur la source et la destination).

13 Apr 2021, 00:00

Désactiver les dépôts de sécurité pour live-build

Si l’on construit une image live de Debian en se basant sur une version non stable (testing ou sid), les dépôts de sécurité ne sont pas encore existants. lb build ou lb chroot vont donc planter avec une erreur de type “E: The repository ‘http://security.debian.org bullseye/updates Release’ does not have a Release file.”.

Pour éviter ceci, avant l’étape qui pose problème (ici chroot), on peut aller éditer le fichier config/chroot et passer l’entrée LB_SECURITY="true" à “false”.

10 Apr 2021, 00:00

Tester le débit entre 2 machines sous Linux

Source

Sur les 2 machines :
apt install iperf

Sur le serveur :
iperf -s

Sur le client :
iperf -c SERVER_IP

Par défaut, cela transmet du client vers le serveur (upload) pendant 10s. Ce temps peut se controler avec le paramètre -t num_sec.

08 Nov 2020, 00:00

Monitoring des disques sous Linux

Un peu de lecture ici.

iotop

sudo apt install iotop
sudo iotop

Permet de voir, à la manière de top, l’activité I/O des disques par processus. Ne distingue toutefois pas sur quel disque l’activité se produit.

dstat

sudo apt install dstat
dstat pour avoir un aperçu général.
dstat -d -D total,sdk,md0 pour n’afficher que les infos relatives aux disques (-d), et surveiller l’ensemble des I/O dans une colonne (-D total), /dev/sdk dans un autre (-D sdk)et /dev/md0 dans une autre (-D md0).

iostat

sudo apt install sysstat
iostat pour avoir des infos générales depuis le boot.
iostat -y 1 2 pour avoir des infos uniquement dans l’intervalle temporel spécifié ; ici : 1s, analyse répétée 2 fois (1 2). Si le 2e chiffre n’est pas spécifié, l’analyse sera faite en boucle.
iostat -d pour n’inclure que l’info relative aux disques.
iostat -p sdk,md0 pour n’inclure que l’info relative à ces périphériques.
iostat -t pour inclure le timestamp

En cumulant ces options, et avec l’utilisation de watch, on tombe sur un truc comme ça :
watch -t -n 0.1 iostat -p sdk,md0 -d -t -y 1 1

nmon

sudo apt install nmon
nmon puis presser la touche d

06 Nov 2020, 00:00

Eth2 - Prysm via Docker

Exemple de docker-compose (pour Medalla)

Très très très inspiré de ça : https://github.com/stefa2k/prysm-docker-compose

version: "3.6"

x-logging: &logging
        logging:
                driver: "json-file"
                options:
                        max-file: "10"
                        max-size: "100m"

services:

        medalla-prysm-beacon:
                stop_grace_period: 1m
                container_name: medalla-prysm-beacon
                image: gcr.io/prysmaticlabs/prysm/beacon-chain:${PRYSM_DOCKER_TAG}
                hostname: medalla-prysm-beacon
                command: --config-file=/config/beacon.yaml 
#               --p2p-max-peers=1000
                ports:
                        - 4000:4000
                        - 13000:13000/tcp
                        - 12000:12000/udp
                volumes:
                        - ./config/beacon.yaml:/config/beacon.yaml:ro
                        - ${VOLUMES_PATH}/prysm/beacon:/data
                <<: *logging
        medalla-prysm-validator:
                stop_grace_period: 1m
                tty: true
                stdin_open: true
                container_name: medalla-prysm-validator
                image: gcr.io/prysmaticlabs/prysm/validator:${PRYSM_DOCKER_TAG}
                hostname: medalla-prysm-validator
                depends_on:
                        - medalla-prysm-beacon
                command: --config-file=/config/validator.yaml
                volumes:
                        - ./config/validator.yaml:/config/validator.yaml:ro
                        - ${VOLUMES_PATH}/prysm/validator:/wallet
                <<: *logging

# I use a custom defined network
networks:
  default:
    external:
      name: eth_net

Les fichiers de config :

beacon.yaml

############################################################
##
## Read up on parameters on
## https://docs.prylabs.network/docs/prysm-usage/parameters/
##
############################################################

datadir: /data

###############
# Base settings
medalla: true
accept-terms-of-use: true
# p2p-max-peers: 1000

#######################
# Connectivity settings 
p2p-host-ip: ""
p2p-host-dns: ""

rpc-host: 0.0.0.0
monitoring-host: 0.0.0.0

# disable scan of local network
p2p-denylist: ["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","100.64.0.0/10","169.254.0.0/16"]

# changing this also needs to be changed in docker-compose.yaml !
p2p-tcp-port: 13000

# enable db backup endpoint
enable-db-backup-webhook: true

##############################
# Connection to eth1 chain container
http-web3provider: http://goerlichain-hostname:8546
web3provider: ws://goerlichain-hostname:8546

validator.yaml :

############################################################
##
## Read up on parameters on
## https://docs.prylabs.network/docs/prysm-usage/parameters/
##
############################################################

##############
# Connectivity
beacon-rpc-provider: prysm-beacon-hostname:4000
monitoring-host: 0.0.0.0

##############
# Base settings
medalla: true
accept-terms-of-use: true

#####################################
# Validator accounts & key management
wallet-dir: /wallet

###########
# Fun Stuff
graffiti: "My funky graffiti !"

#############
# Performance
dev: true
block-batch-limit: 512
head-sync: true         

Usage général

Pour exécuter une instance du validateur pour gérer les fichiers (en adaptant les chemins de volumes) :

docker run --rm -it -v ./config/validator.yaml:/config/validator.yaml -v ${VOLUMES_PATH}/testnets/medalla/prysm/validator:/wallet --config-file=/config/validator.yaml

On peut ensuite choisir les commandes Prysm ; par exemple :

  • help , qui affiche l’aide
  • accounts
  • wallet

On peut spécifier des drapeaux à la suite de cette commande, mais ils doivent être placés après les commandes de prysm.

Dans ma configuration, je ne sauvegarde le mot de passe nul part sur le disque ; il faut donc le fournir au lancement du validateur ; je recommande donc la comande suivante pour démarrer le validateur :
docker-compose up -d && docker attach medalla-prysm-validator, puis quitter avec Ctrl+P - Ctrl+Q.

Pour lire les logs de la beacon chain, et pouvoir les filtrer par exemple via grep, il faut rediriger la sortie d’erreur vers la sortie standard :
docker logs medalla-prysm-beacon 2>&1 | grep Synced

wallet

Le wallet représente l’ensemble des fichiers gérés par Prysm. On a un seul wallet à la fois. Il peut être de type “importé” ou déterministe (“HD”), ou avec signature distante, mais je ne traite pas ce cas ici.

Un wallet HD va recréer les clés en fonction de la graine fournie/générée ; C’est pratique, mais le validateur (exposé en permanence à Internet) est en possession de la graine, c’est à dire de la possibilité d’accéder aux clés de validations, mais également aux clés de retrait qui permettent de récupérer l’ETH2 ; d’où le risque de sécurité.
Les fichiers seront stockés dans le dossier “derived”.

Un wallet importé va pouvoir traiter, 1 par 1, les fichiers fournis via la command import (voir la section accounts). On peut donc générer nos clés de manière externe (par exemple via eth2-deposit-cli, (ou via ethdo ?)), et n’exposer que les clés de validation, d’où la sécurité augmentée.
Les fichiers seront stockés dans le dossier “direct”.

Si les dossiers “derived” et “direct” existent tous les 2, le validateur ne démarrera pas.

Les commandes :

  • wallet create : permet de créer un nouveau wallet, en choisissant son type ; échouera si un wallet est déjà présent à l’emplacement indiqué
  • edit-config : permet de modifier la configuration d’un wallet HD uniquement
  • recover : pour recréer un wallet HD dont on a déjà la graine
  • help : self-explaining

accounts

Un account représente un validateur, une paire de clés. On peut avoir plusieurs validateurs actifs en même temps. On peut rajouter un ou plusieurs validateurs aux validateurs déjà actifs.

Les commandes :

  • create : crée un nouveau validateur ; implique wallet create si aucun wallet n’existe dans le dossier spécifié
  • delete : permet de supprimer un ou plusieurs validateurs
  • list : permet de lister les validateurs actuellement actifs dans Prysm
  • backup : self-explaining. Exporte clés de validation ET clés de retrait si elles sont présentes dans Prysm
  • import : permet d’ajouter une clé de validateur déjà existante. Semble ne rien faire si le wallet est de type HD ; implique la création d’un wallet de type importé si aucun wallet n’existe. On doit spécifier un dossier qui contient les fichiers keystore, et taper les mots de passe ; les mots de passe peuvent être différents pour chaque keystore, il faut alors les entrer au fur et à mesure de l’importation
  • voluntary-exit : permet de quitter le pool de validateurs. Il est impossible de recommencer à valider avec ces clés, et impossible de retirer ses ethers avant la phase 1, voire la phase 2.
  • help : self-explaining