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 Likes

On debian 9 you should change line 1 to:

#!/bin/bash

And install jq package:

apt-get install jq

2 Likes

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 Like

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

2 Likes

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 Like

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 Like

Salut !
Du coup, une fois que l’on a récupéré les chunks, c’est quoi la commande pour faire une synchronisation locale SVP ? :slight_smile:
Merci pour vos retours.

1 Like

Je sais plus, je crois qu’il faut donner le chemin absolu vers les données commençant par un /

Sur Dunitrust il y avait une option --localsync mais je pense qu’elle n’est pas sur Duniter.

2 Likes

en fait de mémoire j’avais résolu ce problème simplement en faisant mv ../chunks/ . puis ./target/release/duniter sync chunks/

quelque chose comme ça, une histoire de path, pas besoin d’options particulières pour la sync locale.

mais je pense qu’il vaut mieux concentrer nos énergies sur duniter 1.9 en mode docker: Dockerisation duniter 1.9 - #39 by aya

Il est possible que des choses fonctionnent mieux qu’en 1.8 car l’oxydation à progressé en 1.9, ce n’est pas juste GVA.

Et puis Docker, c’est la vie.

2 Likes

Oui, c’est bien ça.

1 Like

Ok ok, merci à tous les trois pour vos retours, on va voir comment on va faire, c’est pour installer Duniter sur un petit server qu’on loue mais qui n’est pas très véloce, la sync ne va jamais au bout pour l’instant… je vais voir si @ji_emme se sent d’installer la version Docker.

1 Like

Il est aussi possible de copier directement le dossier duniter_default d’un autre nœud déjà synchro.

2 Likes

ah bah oui encore mieux ça pour dépanner

1 Like

Merci ! C’est une bonne idée également :slight_smile: