Synchronisation difficile / récupérer les chunks

Il semble que la synchronisation de Duniter pose souvent problème :

Pour contourner une partie du problème, je sers les chunks sur datajune, ce qui permet de les récupérer indépendamment de Duniter pour faire une synchronisation locale. Je mets à jour ces fichiers manuellement de temps en temps, vous pouvez les récupérer avec un script comme celui-ci [edit : fichier commenté ligne par ligne pour expliquer] :

#!/usr/bin/env bash

# url used to guess the current block. You can open it
# in a browser to see the result
DUNITER_URL="https://duniter.coinduf.eu/blockchain/current/"
# url used to download the chunks. You can open it in
# a browser to see the content of this folder
DATAJUNE_URL="https://files.datajune.coinduf.eu/chunks/"
# number of the first chunk to download.
# Change it to match your needs
START=0
# reads the current block and takes its number
CURRENT=$(curl -s $DUNITER_URL | jq -r ".number")
# divides current block number by the size of a chunk
END=$(expr $CURRENT / 250 - 1)

# prints a message telling which chunks are going to be downloaded
echo "copying chunks $START to $END"
# download the range of chunk files between START and END
curl -sSOJ ${DATAJUNE_URL}chunk_[$START-$END]-250.json
# prints a message telling it's finished
echo "done"

Cela peut également servir à des personnes qui souhaitent travailler sur les données de la blockchain sans nœud Duniter.


6 « J'aime »

On debian 9 you should change line 1 to:

#!/bin/bash

And install jq package:

apt-get install jq

1 « J'aime »

I get this error:

copying blocks 190 to 180
curl: (3) [globbing] bad range in column 50
done

You are trying to download the chunks from START (190) to END (180). The current block (CURRENT) is deduced by request to DUNITER_URL which gives the END chunk. If you want to download from the first chunk, change START to 0. I thought this code was easy enough to read to be modified to match your needs but I should comment it a bit :smiley:

Tu devrais utiliser la commande générique /usr/bin/env qui fonctionne où que soit placé bash :

#!/usr/bin/env bash

English : If you have problem with bash path, use the above env command.

Elle peut s’utiliser pour n’importe quel commande comme python par exemple :

#!/usr/bin/env python

En espérant que env soit bien dans /usr/bin dans toutes les distros… :wink:

1 « J'aime »

Tu peux rappeler comment on fait une sync locale ?
Je pensais faire ainsi auparavant mais ça ne semble plus fonctionner:

./target/release/duniter sync ../chunks/

Status: CANNOT_CONNECT_TO_REMOTE_FOR_SYNC

1 « J'aime »

J’ai déplacé datajune. Les données sont maintenant séparées du site et sont sur https://files.datajune.coinduf.eu/chunks/

@poka tu utilises quelle version de Duniter ? Moi ça marche avec la 1.7. Mais tu utilises sûrement une pré-version de la 1.9. À voir…

Et oui je suis en 1.9-dev, c’est peut être ça je ne sais pas.

Le --help ne t’aide pas ?

Non.
J’ai pu sync à distance finalement donc pour moi c’est bon.
Je ne suis pas sûr que ce soit très utile de débuguer 1.9 de toute manière, je pense être le seul à m’en servir, à jamais … ^^

Petit update : j’ai maintenant automatisé Datajune qui met à jour les données quotidiennement

image

(il en va de même pour toutes les données qui en découlent, par exemple les plots du nombre membre https://files.datajune.coinduf.eu/plots/members.png)

1 « J'aime »

Ca m’étonne que personne ne s’en soit rendu compte depuis le temps, mais il y a une erreur ligne 15 du script, ce n’est pas un modulo mais bien une division qu’il faut faire.

END=$(expr $CURRENT % 250)

par

END=$(expr $CURRENT / 250 - 1)

Je sais d’où vient l’erreur, en Julia c’est ainsi:

x ÷ y integer divide x / y, truncated to an integer

Mais pas en bash (ni en python).

Je comprenais pas pourquoi il s’arrêtait à la tranche 225.
Un détail qui fait toute la différence ^^

Autre méthode moins élégante qui fonctionne tout aussi bien (plus besoin de la variable $CURRENT):

END=$(curl -sSJ https://files.datajune.coinduf.eu/chunks/ | grep ".json" | awk -F 'chunk_' '{ print $2 }' | awk -F- '{ print $1 }' | sort -V | tail -n1)

Sinon j’ai trouvé mon problème cité quelques messages plus haut, il faut tout simplement spécifier le chemin absolu du répertoire chunks, et non relatif…

1 « J'aime »