Soucis pour avoir un Duniter Squid/Indexer (GDev) fonctionnel en ARM64

En suivant la documentation j’ai cherché pour les images en ARM64; je n’en ai pas vu sur Docker Hub pour

  • h30x/duniter-squid-hasura
  • h30x/duniter-squid

Du coup j’ai récupéré le code source
J’ai switcher vers le dernier tag 0.2.8 et tenté de builder les images

image duniter-squid-hasura

docker build --no-cache -t duniter-squid-hasura:0.2.8-arm64 -f Dockerfile.Hasura .
=> Pas de soucis

image duniter-squid

Soucis avec les ./input/*

Première chose, ce n’est vraiment pas clair qu’il faut aller populer le répertoire ./input/ avec les fichiers de configuration avant de créer l’image - je résume rapidement comment j’ai populé:

J’ai repris les fichiers dans ./input/fake et les ai copiés dans ./input/

Je me suis connecté sur mon noeud duniter v2s gdev archive et j’ai exécuté la commande pour générer le gdev.json puis récupérer le fichier dans les sources dans ./input/ également

Au final, j’ai ces fichies disponibles:

input
├── README.md
├── block_hist.json
├── cert_hist.json
├── fake
│   ├── block_hist.json
│   ├── cert_hist.json
│   ├── genesis.json
│   └── tx_hist.json
├── gdev.json
├── genesis.json
└── tx_hist.json

Soucis avec le build

docker build --no-cache -t duniter-squid:0.2.8-arm64 -f Dockerfile .
=> Plante à cause de Python manquant
# logs partiels:
=> [input 2/2] COPY /input/ input/                                                           0.1s
 => [deps 2/3] COPY package.json pnpm-lock.yaml .                                             0.1s
 => [squid  2/10] COPY --from=input /squid/input input                                        0.0s
 => ERROR [deps 3/3] RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod    5.9s
 => [squid  3/10] COPY assets assets                                                          0.1s
 => [squid  4/10] COPY db db                                                                  0.1s
 => [squid  5/10] COPY schema.graphql .                                                       0.0s
------
...
5.219 .../node_modules/bufferutil install: gyp ERR! stack Error: Could not find any Python installation to use
...

Je résume également, au final, j’ai dû ajouter les packages python3 make gcc g++ dans le Dockerfile à la racine du repo duniter-squid:

# --- node 20 base image
FROM node:20-alpine AS node
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"

# Add Python and build dependencies - docker build crashes otherwise when run from ARM64 computer...
RUN apk add --no-cache python3 make gcc g++

#... reste du fichier

Avec ce changement là, le build se termine correctement.

Soucis restant lors du démarrage du stack docker compose

Après tout ceci, il me reste un problème avec le service “processor” du docker compose (lié à cette image duniter-squid):

J’ai bien forcé la suppression des volumes pour relancer le stack docker compose proprement, mais le service “processor” crash au démarrage avec ces derniers logs (j’ai supprimé avec ... les choses qui semblent se répéter sinon c’est trop long)

...
processor-1  | {"level":2,"time":1732448465637,"ns":"sqd:processor:mapping","msg":"There are 8 wallets from genesis and 2 additional wallets from tx history"}
processor-1  | {"level":2,"time":1732448465637,"ns":"sqd:processor:mapping","msg":"   (total 10)"}
processor-1  | {"level":2,"time":1732448465641,"ns":"sqd:processor:mapping","msg":"Saving v1 transaction history and comments"}
processor-1  | {"level":2,"time":1732448465641,"ns":"sqd:processor:mapping","msg":"Flushing changes to storage, this can take a while..."}
processor-1  | {"level":2,"time":1732448465644,"ns":"sqd:processor:mapping","msg":"(about ~5 minutes for all g1 history and genesis data)"}
processor-1  | {"level":5,"time":1732448465676,"ns":"sqd:processor","err":{"stack":"QueryFailedError: null value in column \"expire_on\" of relation \"cert\" violates not-null constraint
    at PostgresQueryRunner.query (/squid/node_modules/.pnpm/typeorm@0.3.20_ioredis@5.4.1_pg@8.13.1/node_modules/typeorm/driver/postgres/PostgresQueryRunner.js:219:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async InsertQueryBuilder.execute (/squid/node_modules/.pnpm/typeorm@0.3.20_ioredis@5.4.1_pg@8.13.1/node_modules/typeorm/query-builder/InsertQueryBuilder.js:106:33)
    at async StoreWithCache.insert (/squid/node_modules/.pnpm/@subsquid+typeorm-store@1.5.1_@subsquid+big-decimal@1.0.0_typeorm@0.3.20_ioredis@5.4.1_pg@8.13.1_/node_modules/@subsquid/typeorm-store/lib/store.js:88:17)
    at async /squid/node_modules/.pnpm/@belopash+typeorm-store@1.5.0_@subsquid+typeorm-config@4.1.1_typeorm@0.3.20_ioredis@5.4.1_pg@_cp67c72w5wtyb7ybut47zqag7u/node_modules/@belopash/typeorm-store/lib/store.js:219:21","query":"INSERT INTO \"cert\"(\"id\", \"is_active\", \"created_on\", \"updated_on\", \"expire_on\", \"issuer_id\", \"receiver_id\", \"created_in_id\", \"updated_in_id\") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9), ($10, $11, $12, $13, $14, $15, $16, $17, $18), ... ($262, $263, $264, $265, $266, $267, $268, $269, $270)","parameters":["genesis-cert_2-1",true,0,0,null,"genesis-identity_2","genesis-identity_1","genesis-event_0","genesis-event_0", ... "genesis-cert_5-6",true,0,0,null,"genesis-identity_5","genesis-identity_6","genesis-event_0","genesis-event_0"],"driverError":{"stack":"error: null value in column \"expire_on\" of relation \"cert\" violates not-null constraint
    at /squid/node_modules/.pnpm/pg@8.13.1/node_modules/pg/lib/client.js:535:17
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async PostgresQueryRunner.query (/squid/node_modules/.pnpm/typeorm@0.3.20_ioredis@5.4.1_pg@8.13.1/node_modules/typeorm/driver/postgres/PostgresQueryRunner.js:184:25)
    at async InsertQueryBuilder.execute (/squid/node_modules/.pnpm/typeorm@0.3.20_ioredis@5.4.1_pg@8.13.1/node_modules/typeorm/query-builder/InsertQueryBuilder.js:106:33)
    at async StoreWithCache.insert (/squid/node_modules/.pnpm/@subsquid+typeorm-store@1.5.1_@subsquid+big-decimal@1.0.0_typeorm@0.3.20_ioredis@5.4.1_pg@8.13.1_/node_modules/@subsquid/typeorm-store/lib/store.js:88:17)
    at async /squid/node_modules/.pnpm/@belopash+typeorm-store@1.5.0_@subsquid+typeorm-config@4.1.1_typeorm@0.3.20_ioredis@5.4.1_pg@_cp67c72w5wtyb7ybut47zqag7u/node_modules/@belopash/typeorm-store/lib/store.js:219:21","length":299,"name":"error","severity":"ERROR","code":"23502","detail":"Failing row contains (genesis-cert_2-1, t, 0, 0, null, genesis-identity_2, genesis-identity_1, genesis-event_0, genesis-event_0).","schema":"public","table":"cert","column":"expire_on","file":"execMain.c","line":"1977","routine":"ExecConstraints"},"length":299,"severity":"ERROR","code":"23502","detail":"Failing row contains (genesis-cert_2-1, t, 0, 0, null, genesis-identity_2, genesis-identity_1, genesis-event_0, genesis-event_0).","schema":"public","table":"cert","column":"expire_on","file":"execMain.c","line":"1977","routine":"ExecConstraints"}}

Du coup, là je ne vois plus quoi faire pour débloquer la situation…

Peut-être que mes fichiers d’input mentionnés plus haut amènent à cette erreur-ci ?

1 Like

Il y a le script scripts/download_genesis.sh qui s’occupe de faire ça.
Au démarrage du conteneur processeur, il s’occupe de lancer ce script avec la commande sqd process:prod (qui appelle download-genesis ?), qui est dans le docker-compose.yml qui appelle la commande dans commands.json. Du coup tu n’as pas à effectuer une action manuelle, autre que démarrer les conteneurs. C’est du moins ce que j’ai vécu en mettant en place l’indexeur. Je ne suis pas entièrement sûr des détails, mais ça me semble être plus ou moins ce comportement.

1 Like

J’avais tenté de faire le build sans changer les inputs (donc aucun input copié dans l’image)

J’avais un plantage pendant le démarrage du service “processor” qui mentionnait qu’il manquait un fichier dans /input/. Donc je ne pense pas que la commande de démarrage récupère ces fichiers (ou bien ça a raté dans mon cas)

Je vais tenter d’exécuter le scripts/download_genesis.sh que tu as mentionné pour récupérer les fichiers d’inputs avant de faire l’image, on verra ce que ça donne.

1 Like

Le script semble avoir fonctionné, j’ai recréé l’image et relancé le docker compose.

J’ai de nouveau une erreur (différente) au démarrage du service “processor” :

{"level":5,"time":1732460569600,"ns":"sqd:processor","err":{"stack":"SyntaxError: Unterminated string in JSON at position 195647177
    at JSON.parse (<anonymous>)
    at saveGenesis (/squid/lib/genesis/genesis.js:56:27)
    at /squid/lib/main.js:21:45
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async TypeormDatabaseWithCache.performUpdates (/squid/node_modules/.pnpm/@belopash+typeorm-store@1.5.0_@subsquid+typeorm-config@4.1.1_typeorm@0.3.20_ioredis@5.4.1_pg@_cp67c72w5wtyb7ybut47zqag7u/node_modules/@belopash/typeorm-store/lib/database.js:45:13)
    at async /squid/node_modules/.pnpm/@subsquid+typeorm-store@1.5.1_@subsquid+big-decimal@1.0.0_typeorm@0.3.20_ioredis@5.4.1_pg@8.13.1_/node_modules/@subsquid/typeorm-store/lib/database.js:84:13
    at async EntityManager.transaction (/squid/node_modules/.pnpm/typeorm@0.3.20_ioredis@5.4.1_pg@8.13.1/node_modules/typeorm/entity-manager/EntityManager.js:73:28)
    at async TypeormDatabaseWithCache.submit (/squid/node_modules/.pnpm/@subsquid+typeorm-store@1.5.1_@subsquid+big-decimal@1.0.0_typeorm@0.3.20_ioredis@5.4.1_pg@8.13.1_/node_modules/@subsquid/typeorm-store/lib/database.js:164:24)
    at async Runner.withProgressMetrics (/squid/node_modules/.pnpm/@subsquid+util-internal-processor-tools@4.1.1/node_modules/@subsquid/util-internal-processor-tools/lib/runner.js:215:22)
    at async Runner.handleFinalizedBlocks (/squid/node_modules/.pnpm/@subsquid+util-internal-processor-tools@4.1.1/node_modules/@subsquid/util-internal-processor-tools/lib/runner.js:140:9)"}}

Peut être qu’un des fichiers json récupérés par le script est problématique…

Ou peut-être que c’est lié à un module Node.js qui se comporte différemment sur ARM64.

Je viens de regarder les fichiers que le script à récupéré.

Le fichier block_hist.json est incomplet et se termine mal:

...
  {
    "height": 590152,
    "timestamp": 1672827827,
    "hash": "000000050AA2827B36F1841567AF2FDA74981087109C9596EA0A72376EB349

J’ai tenté de relancer le téléchargement du fichier et il a été un peu plus loin, mais toujours pas un fichier complet.

curl https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/131675/artifacts/release/block_hist.json -o ./input/block_hist_try2.json

J’ai adapté le fichier block_hist.json pour supprimer la dernière entrée partielle et terminer le fichier json correctement.

J’ai recréé l’image docker et redémarré.

J’ai une erreur différente de celle du début…

duniter-v2s-gdev-squid-processor  | query: INSERT INTO "migrations"("timestamp", "name") VALUES ($1, $2) -- PARAMETERS: [1730814191993,"EnumsMigration1730814191993"]
duniter-v2s-gdev-squid-processor  | Migration EnumsMigration1730814191993 has been  executed successfully.
duniter-v2s-gdev-squid-processor  | query: COMMIT
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523830753,"ns":"sqd:commands","msg":"PROCESS:PROD"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523831907,"ns":"sqd:processor","msg":"processing blocks from 0"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523831907,"ns":"sqd:processor","msg":"using chain RPC data source"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523831928,"ns":"sqd:processor","msg":"prometheus metrics are served at port 43085"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523832397,"ns":"sqd:processor:mapping","msg":"Handling v1 block history"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523833683,"ns":"sqd:processor:mapping","msg":"-700000"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523835030,"ns":"sqd:processor:mapping","msg":"-600000"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523836374,"ns":"sqd:processor:mapping","msg":"-500000"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523837809,"ns":"sqd:processor:mapping","msg":"-400000"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523839109,"ns":"sqd:processor:mapping","msg":"-300000"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523840439,"ns":"sqd:processor:mapping","msg":"-200000"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523842893,"ns":"sqd:processor:mapping","msg":"-100000"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523843392,"ns":"sqd:processor:mapping","msg":"Saving v1 block history"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523858800,"ns":"sqd:processor:mapping","msg":"Loading genesis file"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523862952,"ns":"sqd:processor:mapping","msg":"Saving data from genesis file"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732523864086,"ns":"sqd:processor:mapping","msg":"Process cert history"}
duniter-v2s-gdev-squid-processor  | {"level":5,"time":1732523865261,"ns":"sqd:processor","err":{"stack":"TypeError: Cannot set properties of undefined (setting 'eventsCount')
    at createFakeEvent (/squid/lib/genesis/genesis.js:50:27)
    at saveGenesis (/squid/lib/genesis/genesis.js:319:21)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async /squid/lib/main.js:21:13
    at async TypeormDatabaseWithCache.performUpdates (/squid/node_modules/.pnpm/@belopash+typeorm-store@1.5.0_@subsquid+typeorm-config@4.1.1_typeorm@0.3.20_ioredis@5.4.1_pg@_cp67c72w5wtyb7ybut47zqag7u/node_modules/@belopash/typeorm-store/lib/database.js:45:13)
    at async /squid/node_modules/.pnpm/@subsquid+typeorm-store@1.5.1_@subsquid+big-decimal@1.0.0_typeorm@0.3.20_ioredis@5.4.1_pg@8.13.1_/node_modules/@subsquid/typeorm-store/lib/database.js:84:13
    at async EntityManager.transaction (/squid/node_modules/.pnpm/typeorm@0.3.20_ioredis@5.4.1_pg@8.13.1/node_modules/typeorm/entity-manager/EntityManager.js:73:28)
    at async TypeormDatabaseWithCache.submit (/squid/node_modules/.pnpm/@subsquid+typeorm-store@1.5.1_@subsquid+big-decimal@1.0.0_typeorm@0.3.20_ioredis@5.4.1_pg@8.13.1_/node_modules/@subsquid/typeorm-store/lib/database.js:164:24)
    at async Runner.withProgressMetrics (/squid/node_modules/.pnpm/@subsquid+util-internal-processor-tools@4.1.1/node_modules/@subsquid/util-internal-processor-tools/lib/runner.js:215:22)
    at async Runner.handleFinalizedBlocks (/squid/node_modules/.pnpm/@subsquid+util-internal-processor-tools@4.1.1/node_modules/@subsquid/util-internal-processor-tools/lib/runner.js:140:9)"}}
duniter-v2s-gdev-squid-processor exited with code 1

Personne qui s’y connais avec Duniter Squid pour débloquer ?

J’ai finalement réussi à corriger mon image ARM64 en récupérant l’image h30x/duniter-squid:latest (en architecture linux/amd64)

J’ai extrait les fichiers de cette image pour récupérer les fichiers *.json dans /squid/input

J’ai recréé mon image avec ces fichiers; et maintenant mon processor semble avoir bien démarré :smiley:

duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732528330837,"ns":"sqd:processor:mapping","msg":"(about ~5 minutes for all g1 history and genesis data)"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732528616699,"ns":"sqd:processor:mapping","msg":"Genesis flushed"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732528616699,"ns":"sqd:processor:mapping","msg":"====================="}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732528616699,"ns":"sqd:processor:mapping","msg":"Starting blockchain indexing with 7 smiths, 8481 members and 35840 accounts!"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732528616805,"ns":"sqd:processor","msg":"9 / 4054357, rate: 0 blocks/sec, mapping: 0 blocks/sec, 0 items/sec, eta: 47454h 29m"}
duniter-v2s-gdev-squid-processor  | {"level":2,"time":1732528621812,"ns":"sqd:processor","msg":"919 / 4054357, rate: 175 blocks/sec, mapping: 253 blocks/sec, 760 items/sec, eta: 6h 26m"}

Ce serais bien de trouver un moyen plus stable pour récupérer les fichiers json d’input sous ARM64 (sans obliger à builder en local en dehors de docker pour exécuter la commande sqd download-genesis)

Peut-être que si j’avais tenté de builder et exécuter sqd download-genesis à la place du script scripts/download_genesis.sh les fichiers auraient été corrects ?

Edit: J’ai push les images ARM64 de la version actuelle si d’autres personnes veulent les utiliser (sur docker hub)

  • nicolas80/duniter-squid
  • nicolas80/duniter-squid-hasura
1 Like

Quel a été la source du problème au final ?
Le fait de construire l’image sur ARM, en particulier pour récupérer les données de base, tel le gensis ?

1 Like

2 soucis:

  • Impossible de faire le docker build pour duniter-squid sans l’ajout des packages python3 make gcc g++ => Il faudrait éventuellement l’ajouter dans le fichier Dockerfile dans les sources si ça peut être confirmé par un dev de duniter-squid
  • Pas clair qu’il faut avoir les bons fichiers de configuration *.json dans le répertoire input dans les sources avant de créer l’image duniter-squid et impossibilité de récupérer des fichiers valables juste avec le script scripts/download_genesis.sh (raison pour laquelle j’ai extrait ces fichiers depuis l’image docker en linux/amd64)
2 Likes

Ok, en comparant nos deux installations, je comprends que les données sont embarquées dans le conteneur, car j’ai utilisé l’image pré-construite. Tu as dû construire les images et tu as rencontré ces problèmes.

2 Likes

Tout d’abord, merci d’être la première personne à faire ça !!! :pray:
J’écris la doc pour les gens qui la lisent, donc au début juste pour moi et ensuite j’ai absolument besoin de retours pour l’améliorer. Effectivement, pas d’ARM pour l’instant, il faut construire l’image docker.

Je note, il faudra compléter le fichier readme correspondant : input · main · nodes / duniter-squid · GitLab. En attendant @moul a partiellement répondu :

Pour donner un peu de contexte, l’indexeur embarque des données du genesis du réseau, mais également de l’historique du réseau précédent (type historique de transactions, qui ne figurent pas dans le genesis). Ces données étant volumineuses (> 300 Mo) et dépendantes du réseau, elles ne sont pas dans le dépôt, mais téléchargées avec la commande sqd download-genesis.
Quand on développe sur l’indexeur, on peut vouloir développer sur une blockchain “vierge” d’où les données “fake”. Et à l’avenir, quand on aura plusieurs réseaux live (gdev, gtest, g1), on aura besoin de fournir des images avec des données différentes.

Là je vois pas trop d’où ça peut venir :thinking:. C’est vraiment le Dockerfile que j’utilise, donc j’imagine que le problème est en amont, peut-être une différence entre l’image node:20-alpine pour amd et arm ? Ou une fuite via le cache pnpm ? Il faudrait qu’un expert docker comme @Pini nous aide sur ce point :wink:

Il semblerait que des modifications faites dans le code du genesis soit incompatibles avec un genesis “non gdev”. En gros, là tu essayes de démarrer un indexeur avec des données de dev mais je n’ai pas testé ce scénario depuis un moment puisque je ne bosse plus qu’avec des données de prod. Pour ces données, les certifications du genesis ont toute une date d’expiration explicite, alors que Duniter permettait d’avoir une date d’expiration implicite.

Les commandes sont dans le fichier commands.json, voici la commande process:prod : commands.json · main · nodes / duniter-squid · GitLab. Et non, elle ne télécharge pas les données, celles-ci sont directement incluses dans l’image docker. Ça permet de profiter du système de layer de docker car les données genesis ne changeront jamais pour un même réseau (sauf si on ajoute des données historiques non présentes jusqu’alors).

Je pense que ton hypothèse est la bonne. Il y a un problème de téléchargement du fichier d’historique de transactions. Peut-être une configuration du GitLab qui est devenue plus agressive et empêche les trop gros téléchargements (@immae ça te semble crédible ?). En attendant qu’on corrige ça, j’ai mis en ligne mon dossier input, c’est ipfs://QmV86v94y1661LnfCXu2EGgY52ZApxrb2LshEZVWqSGHGv. Tu peux le récupérer avec ipfs get ce qui devrait être rapide si mon nœud datapod.coinduf.eu (passerelle pagu.re) est dans tes pairs. Tu peux aussi récupérer uniquement le fichier block_hist.json (ipfs://QmdcxHXEQRWAfogJ67hvdxbP5RyZhPPxD79iXvgRos8wXd, 222 Mo).

Ça correspond à cette ligne de code

// make sure the block has event
block.eventsCount = 1

C’est normal car ton fichier d’historique de bloc est incomplet. Donc en gros, duniter-squid essaye de définir une propriété pour un bloc qui n’est pas présent dans ton fichier. En gros il s’attend à avoir tous les blocs v1 prévus, sans exception. Il plante à cause de données incohérentes.

Bonne idée. C’est une bonne manière de prendre les données là où elles sont. À l’avenir j’aimerais pouvoir servir toutes les données importantes via IPFS pour assurer l’intégrité et la réplication, plutôt que de reposer uniquement sur la CI GitLab et les artefacts qui pèsent très lourd et sont pas forcément faciles à gérer.

Oui, tout à fait. Tu as identifié un point qui a posé problème plusieurs fois jusque là. C’est un peu fragile de reposer uniquement sur le gitlab, il faut trouver quelque chose de plus robuste ou configurer gitlab pour répondre à ce besoin (conservation des artefacts, configuration nginx pour le téléchargement de gros fichiers.


Très bonne conclusion ! Je découperais en trois points :

  • ajout des packages python3 make gcc g++ → je suis perplexe, je ne comprends pas bien d’où ils viennent chez moi, il faudrait de l’aide de quelqu’un qui connaît bien docker
  • pas clair qu’il faut avoir les bons fichiers de configuration *.json dans le répertoire input dans les sources avant de créer l’image duniter-squid → ça peut se régler avec la documentation, et en précisant bien que l’indexeur embarque des données genesis qui doivent correspondre au réseau auquel il veut se connecter
  • impossibilité de récupérer des fichiers valables juste avec le script scripts/download_genesis.sh → il faut trouver une manière plus robuste de partager les fichiers genesis

J’espère que j’ai répondu à la plupart des questions, merci beaucoup pour tes contributions, ça aide vraiment à corriger des trucs dont j’étais actuellement le seul utilisateur (avec @poka à un moment aussi), c’est indispensable !

3 Likes

Ces dépendances sont liées au build ARM. Une dépendance pre-built de Node.js doit être manquante pour ARM64, du coup, il faut que tu construises des dépendances.
Je n’ai pas eu de souci à construire l’image sur une archi 64 bits.

duniter-squid (main)> podman build .
[1/5] STEP 1/4: FROM node:20-alpine AS node
Resolved "node" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/node:20-alpine...
Getting image source signatures
Copying blob 8914c989fa61 done   | 
Copying blob da9db072f522 done   | 
Copying blob 30587b71ea04 done   | 
Copying blob 3671e96da1f9 done   | 
Copying config 55555d39b9 done   | 
Writing manifest to image destination
[1/5] STEP 2/4: ENV PNPM_HOME="/pnpm"
--> 0f5beb68426e
[1/5] STEP 3/4: ENV PATH="$PNPM_HOME:$PATH"
--> 8e2a18cb3716
[1/5] STEP 4/4: RUN corepack enable
--> c94e4c65e8ec
[2/5] STEP 1/4: FROM c94e4c65e8ec63fce448b2f718a18205e272488381ac01fa07b06f978bfa493f AS deps
[2/5] STEP 2/4: WORKDIR /squid
--> 1e3df49a2e3b
[2/5] STEP 3/4: COPY package.json pnpm-lock.yaml .
--> 08c34481a5b6
[2/5] STEP 4/4: RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod
! Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-9.14.2.tgz
! The local project doesn't define a 'packageManager' field. Corepack will now add one referencing pnpm@9.14.2+sha512.6e2baf77d06b9362294152c851c4f278ede37ab1eba3a55fda317a4a17b209f4dbb973fb250a77abc463a341fcb1f17f17cfa24091c4eb319cda0d9b84278387.
! For more details about this field, consult the documentation at https://nodejs.org/api/packages.html#packagemanager

Lockfile is up to date, resolution step is skipped
Progress: resolved 1, reused 0, downloaded 0, added 0
Packages: +183
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 183, reused 0, downloaded 121, added 120
Progress: resolved 183, reused 0, downloaded 182, added 182
Progress: resolved 183, reused 0, downloaded 183, added 183, done
.../es5-ext@0.10.64/node_modules/es5-ext postinstall$  node -e "try{require('./_postinstall')}catch(e){}" || exit 0
.../node_modules/bufferutil install$ node-gyp-build
.../node_modules/utf-8-validate install$ node-gyp-build
.../es5-ext@0.10.64/node_modules/es5-ext postinstall: Done
.../node_modules/utf-8-validate install: Done
.../node_modules/bufferutil install: Done

dependencies:
+ @belopash/typeorm-store 1.5.0
+ @subsquid/commands 2.3.1
+ @subsquid/ss58 2.0.2
+ @subsquid/substrate-data-raw 1.2.0
+ @subsquid/substrate-processor 8.5.1
+ @subsquid/substrate-runtime 2.0.0
+ @subsquid/typeorm-migration 1.3.0
+ @subsquid/typeorm-store 1.5.1
+ @subsquid/util-internal 3.2.0
+ bs58 6.0.0
+ dotenv 16.4.5
+ multiformats 9.9.0
+ node-fetch 3.3.2
+ pg 8.13.0
+ typeorm 0.3.20

devDependencies: skipped

Done in 2.6s
--> 32cd92929fd5
[3/5] STEP 1/6: FROM 32cd92929fd563a473103aa453785d4df44c2c79227b26986757f816b43ff0b3 AS builder
[3/5] STEP 2/6: WORKDIR /squid
--> 0aaff096777f
[3/5] STEP 3/6: COPY tsconfig.json .
--> fd992c49d674
[3/5] STEP 4/6: COPY src src
--> 901afaa8d95c
[3/5] STEP 5/6: RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install
Lockfile is up to date, resolution step is skipped
Progress: resolved 1, reused 0, downloaded 0, added 0
Packages: +218
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 218, reused 0, downloaded 143, added 143
Progress: resolved 218, reused 0, downloaded 218, added 218, done
.../node_modules/utf-8-validate install$ node-gyp-build
.../node_modules/@apollo/protobufjs postinstall$ node scripts/postinstall
.../node_modules/@apollo/protobufjs postinstall$ node scripts/postinstall
.../node_modules/@apollo/protobufjs postinstall: Done
.../node_modules/@apollo/protobufjs postinstall: Done
.../node_modules/utf-8-validate install: Done

devDependencies:
+ @subsquid/openreader 5.2.0
+ @subsquid/substrate-metadata-explorer 3.2.0
+ @subsquid/substrate-typegen 8.1.0
+ @subsquid/typeorm-codegen 2.0.2
+ @types/js-yaml 4.0.9
+ @types/node 22.5.5
+ copyfiles 2.4.1
+ js-yaml 4.1.0
+ typescript 5.6.2

Done in 2.2s
--> d92fdcc62606
[3/5] STEP 6/6: RUN pnpm build

> squid@0.2.7 build /squid
> rm -rf lib && tsc

--> cd774821fa00
[4/5] STEP 1/3: FROM c94e4c65e8ec63fce448b2f718a18205e272488381ac01fa07b06f978bfa493f AS input
[4/5] STEP 2/3: WORKDIR /squid
--> Using cache 1e3df49a2e3b99b167927636ce99979bffa15338ad5e1794f385adaac41aa5f5
--> 1e3df49a2e3b
[4/5] STEP 3/3: COPY /input/ input/
--> 79764266beee
[5/5] STEP 1/16: FROM c94e4c65e8ec63fce448b2f718a18205e272488381ac01fa07b06f978bfa493f AS squid
[5/5] STEP 2/16: WORKDIR /squid
--> Using cache 1e3df49a2e3b99b167927636ce99979bffa15338ad5e1794f385adaac41aa5f5
--> 1e3df49a2e3b
[5/5] STEP 3/16: COPY --from=input /squid/input input
--> 5e30734000bb
[5/5] STEP 4/16: COPY assets assets 
--> c334b095a4d8
[5/5] STEP 5/16: COPY db db
--> fb4931c5af9c
[5/5] STEP 6/16: COPY schema.graphql .
--> 3381739068db
[5/5] STEP 7/16: COPY --from=deps /squid/node_modules node_modules
--> cd532625f3a6
[5/5] STEP 8/16: COPY --from=builder /squid/lib lib
--> 9078065b5b14
[5/5] STEP 9/16: COPY /scripts/ scripts/
--> 2940ad6e5722
[5/5] STEP 10/16: COPY commands.json .
--> ca5f524a4207
[5/5] STEP 11/16: RUN npm i -g @subsquid/commands && mv $(which squid-commands) /usr/local/bin/sqd

added 51 packages in 2s

14 packages are looking for funding
  run `npm fund` for details
npm notice
npm notice New minor version of npm available! 10.8.2 -> 10.9.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v10.9.1
npm notice To update run: npm install -g npm@10.9.1
npm notice
--> c08acff59ff9
[5/5] STEP 12/16: ENV GENESIS_FILE="./input/gdev.json"
--> ef9052ccac24
[5/5] STEP 13/16: ENV HIST_GEN_FILE="./input/genesis.json"
--> ad1322568978
[5/5] STEP 14/16: ENV HIST_BLOCK_FILE="./input/block_hist.json"
--> 48438d89c1d8
[5/5] STEP 15/16: ENV HIST_TX_FILE="./input/tx_hist.json"
--> 77c5fdca00d2
[5/5] STEP 16/16: ENV HIST_CERT_FILE="./input/cert_hist.json"
[5/5] COMMIT
--> 61a4d753ac12
61a4d753ac124e567a4736a325b26f26a41d9e3128e3cc6a306cd23db8f9e559

Peux-tu donner des logs plus précis, pour voir quel paquet·s Node.js requière des dépendances de build ?

1 Like

En comparant ce que j’ai téléchargé avec le script :

du -hs input/*
192M	input/block_hist.json
24M	input/cert_hist.json
16K	input/fake
20M	input/gdev.json
8.9M	input/genesis.json
4.0K	input/README.md
112M	input/tx_hist.json

et les artifacts sur GitLab :

il me semble qu’uniquement block_hist.json n’a pas la bonne taille.

1 Like

Oui, c’est le téléchargement de ce fichier la qui pose problème avec le script.

Je n’ai pas compris avec la discussion d’où venait le fichier. Est-ce un fichier surveillé par git qui n’est pas téléchargeable / téléchargé correctement ? Ou bien un fichier annexe venant de la CI ?

Voici le log que j’ai quand je build duniter-squid (Dockerfile) en ARM64 sans l’ajout des dépendances:

duniter-squid ARM64 docker build error
docker build --no-cache -t duniter-squid:0.2.8-arm64 -f Dockerfile .
[+] Building 9.6s (14/24)                                                                                                     docker:default
 => [internal] load build definition from Dockerfile                                                                                    0.0s
 => => transferring dockerfile: 1.73kB                                                                                                  0.0s
 => [internal] load metadata for docker.io/library/node:20-alpine                                                                       1.2s
 => [internal] load .dockerignore                                                                                                       0.0s
 => => transferring context: 82B                                                                                                        0.0s
 => [node 1/2] FROM docker.io/library/node:20-alpine@sha256:b5b9467fe7b33aad47f1ec3f6e0646a658f85f05c18d4243024212a91f3b7554            1.7s
 => => resolve docker.io/library/node:20-alpine@sha256:b5b9467fe7b33aad47f1ec3f6e0646a658f85f05c18d4243024212a91f3b7554                 0.0s
 => => sha256:8f1d53739e4f8ee3a8e28d9f0aeb0b4a99d4dbf55f6cc53431817f348c7f00c3 6.22kB / 6.22kB                                          0.0s
 => => sha256:11bd006db9caad22b8e19fcf5ca2107522720cd2705cbb893bc1348053a2f561 42.17MB / 42.17MB                                        0.5s
 => => sha256:1abae2601f82309e203a85f017a9f577690efe42a76cf4fd6362314533f7b0cc 1.39MB / 1.39MB                                          0.3s
 => => sha256:50c614424faf5d9b2c7d684bf6b8f90c6def352a11de2d5e6d24c96bffa49858 445B / 445B                                              0.3s
 => => sha256:b5b9467fe7b33aad47f1ec3f6e0646a658f85f05c18d4243024212a91f3b7554 7.67kB / 7.67kB                                          0.0s
 => => sha256:b793e2d077f19ecc31e3f94e910207f18e6a97f8c7bab81077265f58682a3df0 1.72kB / 1.72kB                                          0.0s
 => => extracting sha256:11bd006db9caad22b8e19fcf5ca2107522720cd2705cbb893bc1348053a2f561                                               0.9s
 => => extracting sha256:1abae2601f82309e203a85f017a9f577690efe42a76cf4fd6362314533f7b0cc                                               0.0s
 => => extracting sha256:50c614424faf5d9b2c7d684bf6b8f90c6def352a11de2d5e6d24c96bffa49858                                               0.0s
 => [internal] load build context                                                                                                       0.0s
 => => transferring context: 577.23kB                                                                                                   0.0s
 => [node 2/2] RUN corepack enable                                                                                                      0.7s
 => [deps 1/3] WORKDIR /squid                                                                                                           0.0s
 => [input 2/2] COPY /input/ input/                                                                                                     0.1s
 => [deps 2/3] COPY package.json pnpm-lock.yaml .                                                                                       0.1s
 => [squid  2/10] COPY --from=input /squid/input input                                                                                  0.0s
 => ERROR [deps 3/3] RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod                                              5.9s
 => [squid  3/10] COPY assets assets                                                                                                    0.1s
 => [squid  4/10] COPY db db                                                                                                            0.1s
 => [squid  5/10] COPY schema.graphql .                                                                                                 0.0s
------
 > [deps 3/3] RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod:
0.528 ! Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-9.14.2.tgz
1.169 ! The local project doesn't define a 'packageManager' field. Corepack will now add one referencing pnpm@9.14.2+sha512.6e2baf77d06b9362294152c851c4f278ede37ab1eba3a55fda317a4a17b209f4dbb973fb250a77abc463a341fcb1f17f17cfa24091c4eb319cda0d9b84278387.
1.170 ! For more details about this field, consult the documentation at https://nodejs.org/api/packages.html#packagemanager
1.170
1.860 Lockfile is up to date, resolution step is skipped
1.902 Progress: resolved 1, reused 0, downloaded 0, added 0
1.971 Packages: +183
1.971 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2.910 Progress: resolved 183, reused 0, downloaded 66, added 56
3.912 Progress: resolved 183, reused 0, downloaded 152, added 152
4.820 Progress: resolved 183, reused 0, downloaded 183, added 183, done
4.936 .../es5-ext@0.10.64/node_modules/es5-ext postinstall$  node -e "try{require('./_postinstall')}catch(e){}" || exit 0
4.953 .../node_modules/bufferutil install$ node-gyp-build
4.963 .../node_modules/utf-8-validate install$ node-gyp-build
5.046 .../es5-ext@0.10.64/node_modules/es5-ext postinstall: Done
5.146 .../node_modules/bufferutil install: gyp info it worked if it ends with ok
5.147 .../node_modules/bufferutil install: gyp info using node-gyp@10.2.0
5.149 .../node_modules/bufferutil install: gyp info using node@20.18.1 | linux | arm64
5.150 .../node_modules/utf-8-validate install: gyp info it worked if it ends with ok
5.151 .../node_modules/utf-8-validate install: gyp info using node-gyp@10.2.0
5.152 .../node_modules/utf-8-validate install: gyp info using node@20.18.1 | linux | arm64
5.211 .../node_modules/bufferutil install: gyp ERR! find Python
5.211 .../node_modules/bufferutil install: gyp ERR! find Python Python is not set from command line or npm configuration
5.211 .../node_modules/bufferutil install: gyp ERR! find Python Python is not set from environment variable PYTHON
5.212 .../node_modules/bufferutil install: gyp ERR! find Python checking if "python3" can be used
5.212 .../node_modules/bufferutil install: gyp ERR! find Python - executable path is ""
5.212 .../node_modules/bufferutil install: gyp ERR! find Python - "" could not be run
5.212 .../node_modules/bufferutil install: gyp ERR! find Python checking if "python" can be used
5.213 .../node_modules/bufferutil install: gyp ERR! find Python - executable path is ""
5.215 .../node_modules/bufferutil install: gyp ERR! find Python - "" could not be run
5.215 .../node_modules/bufferutil install: gyp ERR! find Python
5.215 .../node_modules/bufferutil install: gyp ERR! find Python **********************************************************
5.215 .../node_modules/bufferutil install: gyp ERR! find Python You need to install the latest version of Python.
5.215 .../node_modules/bufferutil install: gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
5.215 .../node_modules/bufferutil install: gyp ERR! find Python you can try one of the following options:
5.215 .../node_modules/bufferutil install: gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
5.215 .../node_modules/bufferutil install: gyp ERR! find Python (accepted by both node-gyp and npm)
5.215 .../node_modules/bufferutil install: gyp ERR! find Python - Set the environment variable PYTHON
5.216 .../node_modules/bufferutil install: gyp ERR! find Python - Set the npm configuration variable python:
5.217 .../node_modules/bufferutil install: gyp ERR! find Python npm config set python "/path/to/pythonexecutable"
5.218 .../node_modules/bufferutil install: gyp ERR! find Python For more information consult the documentation at:
5.218 .../node_modules/bufferutil install: gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
5.218 .../node_modules/bufferutil install: gyp ERR! find Python **********************************************************
5.218 .../node_modules/bufferutil install: gyp ERR! find Python
5.219 .../node_modules/bufferutil install: gyp ERR! configure error
5.219 .../node_modules/bufferutil install: gyp ERR! stack Error: Could not find any Python installation to use
5.219 .../node_modules/bufferutil install: gyp ERR! stack at PythonFinder.fail (/root/.cache/node/corepack/v1/pnpm/9.14.2/dist/node_modules/node-gyp/lib/find-python.js:306:11)
5.219 .../node_modules/bufferutil install: gyp ERR! stack at PythonFinder.findPython (/root/.cache/node/corepack/v1/pnpm/9.14.2/dist/node_modules/node-gyp/lib/find-python.js:164:17)
5.220 .../node_modules/bufferutil install: gyp ERR! stack at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
5.220 .../node_modules/bufferutil install: gyp ERR! stack at async configure (/root/.cache/node/corepack/v1/pnpm/9.14.2/dist/node_modules/node-gyp/lib/configure.js:27:18)
5.220 .../node_modules/bufferutil install: gyp ERR! stack at async run (/root/.cache/node/corepack/v1/pnpm/9.14.2/dist/node_modules/node-gyp/bin/node-gyp.js:81:18)
5.220 .../node_modules/bufferutil install: gyp ERR! System Linux 6.8.0-1015-oracle
5.220 .../node_modules/bufferutil install: gyp ERR! command "/usr/local/bin/node" "/root/.cache/node/corepack/v1/pnpm/9.14.2/dist/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
5.220 .../node_modules/bufferutil install: gyp ERR! cwd /squid/node_modules/.pnpm/bufferutil@4.0.8/node_modules/bufferutil
5.220 .../node_modules/bufferutil install: gyp ERR! node -v v20.18.1
5.220 .../node_modules/bufferutil install: gyp ERR! node-gyp -v v10.2.0
5.221 .../node_modules/bufferutil install: gyp ERR! not ok
5.221 .../node_modules/utf-8-validate install: gyp ERR! find Python
5.221 .../node_modules/utf-8-validate install: gyp ERR! find Python Python is not set from command line or npm configuration
5.221 .../node_modules/utf-8-validate install: gyp ERR! find Python Python is not set from environment variable PYTHON
5.221 .../node_modules/utf-8-validate install: gyp ERR! find Python checking if "python3" can be used
5.221 .../node_modules/utf-8-validate install: gyp ERR! find Python - executable path is ""
5.222 .../node_modules/utf-8-validate install: gyp ERR! find Python - "" could not be run
5.222 .../node_modules/utf-8-validate install: gyp ERR! find Python checking if "python" can be used
5.222 .../node_modules/utf-8-validate install: gyp ERR! find Python - executable path is ""
5.222 .../node_modules/utf-8-validate install: gyp ERR! find Python - "" could not be run
5.223 .../node_modules/utf-8-validate install: gyp ERR! find Python
5.223 .../node_modules/utf-8-validate install: gyp ERR! find Python **********************************************************
5.223 .../node_modules/utf-8-validate install: gyp ERR! find Python You need to install the latest version of Python.
5.223 .../node_modules/utf-8-validate install: gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
5.224 .../node_modules/utf-8-validate install: gyp ERR! find Python you can try one of the following options:
5.225 .../node_modules/utf-8-validate install: gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
5.225 .../node_modules/utf-8-validate install: gyp ERR! find Python (accepted by both node-gyp and npm)
5.226 .../node_modules/utf-8-validate install: gyp ERR! find Python - Set the environment variable PYTHON
5.226 .../node_modules/utf-8-validate install: gyp ERR! find Python - Set the npm configuration variable python:
5.226 .../node_modules/utf-8-validate install: gyp ERR! find Python npm config set python "/path/to/pythonexecutable"
5.226 .../node_modules/utf-8-validate install: gyp ERR! find Python For more information consult the documentation at:
5.226 .../node_modules/utf-8-validate install: gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
5.226 .../node_modules/utf-8-validate install: gyp ERR! find Python **********************************************************
5.226 .../node_modules/utf-8-validate install: gyp ERR! find Python
5.226 .../node_modules/utf-8-validate install: gyp ERR! configure error
5.227 .../node_modules/utf-8-validate install: gyp ERR! stack Error: Could not find any Python installation to use
5.227 .../node_modules/utf-8-validate install: gyp ERR! stack at PythonFinder.fail (/root/.cache/node/corepack/v1/pnpm/9.14.2/dist/node_modules/node-gyp/lib/find-python.js:306:11)
5.227 .../node_modules/utf-8-validate install: gyp ERR! stack at PythonFinder.findPython (/root/.cache/node/corepack/v1/pnpm/9.14.2/dist/node_modules/node-gyp/lib/find-python.js:164:17)
5.227 .../node_modules/utf-8-validate install: gyp ERR! stack at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
5.227 .../node_modules/utf-8-validate install: gyp ERR! stack at async configure (/root/.cache/node/corepack/v1/pnpm/9.14.2/dist/node_modules/node-gyp/lib/configure.js:27:18)
5.228 .../node_modules/utf-8-validate install: gyp ERR! stack at async run (/root/.cache/node/corepack/v1/pnpm/9.14.2/dist/node_modules/node-gyp/bin/node-gyp.js:81:18)
5.228 .../node_modules/utf-8-validate install: gyp ERR! System Linux 6.8.0-1015-oracle
5.228 .../node_modules/utf-8-validate install: gyp ERR! command "/usr/local/bin/node" "/root/.cache/node/corepack/v1/pnpm/9.14.2/dist/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
5.228 .../node_modules/utf-8-validate install: gyp ERR! cwd /squid/node_modules/.pnpm/utf-8-validate@5.0.10/node_modules/utf-8-validate
5.228 .../node_modules/utf-8-validate install: gyp ERR! node -v v20.18.1
5.228 .../node_modules/utf-8-validate install: gyp ERR! node-gyp -v v10.2.0
5.229 .../node_modules/utf-8-validate install: gyp ERR! not ok
5.231 .../node_modules/bufferutil install: Failed
5.233  ELIFECYCLE  Command failed with exit code 1.
------
Dockerfile:11
--------------------
   9 |     WORKDIR /squid
  10 |     COPY package.json pnpm-lock.yaml .
  11 | >>> RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod
  12 |
  13 |     # --- dev dependencies to build
--------------------
ERROR: failed to solve: process "/bin/sh -c pnpm install --prod" did not complete successfully: exit code: 1

J’ai un correctif pour le téléchargement des données de la v1 :


C’est pnpm pour lequel il manque un build ARM64. Je ne vois pas proprement gérer ce cas. Ajouter ces dépendances de build pour tout le monde (64bits) ça alourdi l’image pour ces derniers. Les utilisateurs ARM sont censés être des bricoleurs, du coup est-ce qu’une ligne dans le readme ferait l’affaire ?

L’autre solution, c’est essayer d’utiliser npm ou yarn qui ont peut-être des builds ARM64 disponibles. Y a-t-il une raison d’avoir choisi pnpm pour ce projet ?

Il y a aussi la solution de build ARM et ARM64 depuis la CI avec podman, mais je pense qu’on ferait mieux d’investir notre temps et notre énergie dans les cas généraux, pas pour tous les cas exotiques. Rien contre toi Nicolas hein :wink:

Oups pardon :see_no_evil:. Il s’agit d’une sortie de CI téléchargée via le script scripts/download_genesis.sh · main · nodes / duniter-squid · GitLab. Son adresse est donc : https://nodes.pages.duniter.org/-/rust/duniter-v2s/-/jobs/131675/artifacts/release/block_hist.json.

Pas tout à fait d’accord, on va avoir plein de gens qui ont des raspberry yunohost, ça me semble naturel de supporter ARM par défaut. Par contre, effectivement il ne faut pas trop alourdir les images.

Recommandé par squid et Manutopik, je l’utilise systématiquement et apprécie sa gestion du cache global sur le système.

Je n’ai pas encore creusé pourquoi podman supportait mieux la crosscompilation, mais je serais très content d’arriver à publier des images pour ARM depuis mon ordi. La CI c’est l’idéal (enfin non, c’est Nix, mais bon…) mais je ne m’en suis jamais sorti, donc soit on a des contributeurs réactifs sur les CI, soit on trouve une autre solution.

D’ailleurs, si c’est pnpm qui ne fournit pas d’image ARM, je ne vois pas ce que ça changerait. Je n’ai pas beaucoup de visibilité sur la gestion des architectures par docker et pas trop de temps pour creuser en ce moment.

J’ai ajouté deux commits à duniter-squid!26 pour expliciter le build et avoir une ligne prête à être dé-commenté pour le build de conteneur ARM64.

J’ai prévu de mettre en place une CI qui build et déploie les conteneurs sur https://hub.docker.com/u/duniter ou sur le registry de GitLab. Mais bon, c’est pas pour tout de suite :slight_smile:

2 Likes