Discussion dockerisation logiciels

Il est dockerisé. C’est ce que j’utilise pour mon noeud mirroir Ğ1 et mon noeud forgeron Ğ1-test.

C’est commencé où ?

3 Likes

Ah super pour 1.9 ! J’avais pas suivi.

Pour Cesium+ j’ai pas suivi, un jour qqun s’est pointé en visio dev en disant qu’il travaillait dessus et il n’a pas laissé de contact ni de traces, donc c’est comme si c’était un point mort ><

Je veux bien jeter un oeil, mais il va falloir me tenir la main pour le mode opératoire d’installation et la configuration.

Aussi mon petit serveur perso est aux limites de sa capacité avec les deux noeuds duniter v1 qui tournent dessus. Donc pour tester ça risque d’être chaud.

1 Like

Malheureusement, c’est là qu’on manque de connaissances. J’avais tenté de regrouper toutes les informations ici : How to install Cesium+ Data Pod mais sans succès.

Et apparemment il y a trois noeuds actifs en ce moment : https://ginspecte.mithril.re/service_types/5

2 Likes

Salut, j’avais effectivement lancé un nœud cesium+ qui était en apparence fonctionnel, mais je me suis rendu compte que les documents ne se synchronisais pas avec les autres nœuds… par exemple les descriptions des comptes, les adresses, etc, saisie sur mon pod, n’était pas visible des autres pods.
Je n’ai pas réussi à comprendre pourquoi, mais je n’y ai pas passé assez de temps non plus.
Du coup, j’ai préféré le couper, plutôt que de provoquer de la confusion pour les utilisateurs.

2 Likes

Que faut-il mettre dans la conf pour les endpoints ? L’exemple de la doc est :

duniter.p2p.includes.endpoints: [ “ES_CORE_API g1-test.data.duniter.fr 443”, “ES_USER_API g1-test.data.duniter.fr 443”, “ES_SUBSCRIPTION_API g1-test.data.duniter.fr 443” ]

Mais g1-test.data.duniter.fr n’existe pas. À quels types de services ça correspond ?

Je ne sais pas à quoi ça correspond exactement, mais j’avais ça dans le mien :

duniter.p2p.includes.endpoints: [
   "ES_CORE_API g1.data.duniter.fr 443",
   "ES_USER_API g1.data.duniter.fr 443",
   "ES_SUBSCRIPTION_API g1.data.duniter.fr 443"
]
1 Like

Ça ne me semble pas correct. Apparemment les hôtes en question doivent répondre sur le chemin /network/peering Voici ce qu’il y a dans la conf de l’install récente pointée par Hugo :

duniter.p2p.includes.endpoints: [   
   "ES_CORE_API g1.data.le-sou.org 443",
   "ES_USER_API g1.data.le-sou.org 443",
   "ES_SUBSCRIPTION_API g1.data.le-sou.org 443",
   "ES_CORE_API g1.data.e-is.pro 443",
   "ES_USER_API g1.data.e-is.pro 443",
   "ES_SUBSCRIPTION_API g1.data.e-is.pro 443"
]

https://g1.data.le-sou.org/network/peering
https://g1.data.e-is.pro/network/peering

@HugoTrentesaux une idée de à quoi ça correspond ?

2 Likes

Apparemment, g1.data.duniter.fr n’existe plus.
Alors que g1.data.le-sou.org et g1.data.e-is.pro sont fonctionnels eux.
C’est peut-être pour ça que mon pod ne se synchronisait plus avec les autres !

Il y a aussi le pod g1.data.adn.life qui est fonctionnel.

Oui, ça doit justement correspondre aux endpoints de synchronisation des documents. Les pods Cesium+ ont un fonctionnement “p2p” au sens où ils répliquent les documents. Donc oui, @jnoel ça explique pourquoi ton pod ne se synchronisait pas : il essayait de se connecter à un noeud HS.

2 Likes

Que je comprenne bien : ce sont d’autres pods Cesium+ ?

1 Like

Oui, il me semble :slight_smile:

2 Likes

Ça fait sens. Merci.

Je retente avec les bons pods alors !

3 Likes

Il existe des pods en service sur la ğ1-test ?

Effectivement, ça à l’air de fonctionner, je vois le nombre de documents qui augmente de plus en plus sur mon pod !
Je vais en profiter pour le mettre à jour et je pourrai le relancer.
Merci

4 Likes

Bon, ça avance bon train : j’ai une image Docker et en théorie il n’y a plus qu’à tuner le paramétrage.

Mais elastisearch plante au démarrage avec un message complètement obscur :

cesium@0090e0c528ef:/opt/cesium-plus-pod-1.9.1$ docker-entrypoint 
[2023-01-31 20:54:00,574][INFO ][node                     ] [0090e0c528ef] version[2.4.6], pid[169], build[5376dca/2017-07-18T12:17:44Z]
[2023-01-31 20:54:00,575][INFO ][node                     ] [0090e0c528ef] initializing ...
[2023-01-31 20:54:00,981][INFO ][plugins                  ] [0090e0c528ef] modules [reindex, lang-expression, lang-groovy], plugins [mapper-attachments, cesium-plus-pod-core, cesium-plus-pod-subscription, cesium-plus-pod-user], sites []
[2023-01-31 20:54:00,998][INFO ][env                      ] [0090e0c528ef] using [1] data paths, mounts [[/opt/cesium-plus-pod-1.9.1/data (/dev/mapper/luks-12a534db-1dbc-4d69-9a2c-c39bd4f5105c)]], net usable_space [4.8gb], net total_space [880.8gb], spins? [possibly], types [ext4]
[2023-01-31 20:54:00,998][INFO ][env                      ] [0090e0c528ef] heap size [989.8mb], compressed ordinary object pointers [true]
[2023-01-31 20:54:01,130][INFO ][http                     ] [0090e0c528ef] Using [org.elasticsearch.http.netty.NettyHttpServerTransport] as http transport, overridden by [cesium-plus-core]
Exception in thread "main" java.lang.ExceptionInInitializerError
Likely root cause: java.security.AccessControlException: access denied ("java.io.FilePermission" "/etc/ld.so.conf" "read")
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
	at java.security.AccessController.checkPermission(AccessController.java:886)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
	at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
	at java.io.File.exists(File.java:825)
	at jnr.ffi.LibraryLoader$StaticDataHolder.<clinit>(LibraryLoader.java:421)
	at jnr.ffi.LibraryLoader.getSearchPaths(LibraryLoader.java:353)
	at jnr.ffi.LibraryLoader.load(LibraryLoader.java:325)
	at jnr.ffi.LibraryLoader.load(LibraryLoader.java:304)
	at org.abstractj.kalium.NaCl$SingletonHolder.<clinit>(NaCl.java:51)
	at org.abstractj.kalium.NaCl.sodium(NaCl.java:29)
	at org.duniter.core.service.Ed25519CryptoServiceImpl.<init>(Ed25519CryptoServiceImpl.java:76)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at java.lang.Class.newInstance(Class.java:442)
	at org.duniter.core.beans.BeanFactory.newBean(BeanFactory.java:122)
	at org.duniter.elasticsearch.beans.ESBeanFactory.newBean(ESBeanFactory.java:60)
	at org.duniter.core.beans.BeanFactory.getBean(BeanFactory.java:60)
	at org.duniter.elasticsearch.service.ServiceLocator$Provider.get(ServiceLocator.java:126)
	at org.duniter.elasticsearch.service.ServiceLocator$Provider.get(ServiceLocator.java:117)
	at <<<guice>>>
	at org.elasticsearch.node.Node.<init>(Node.java:213)
	at org.elasticsearch.node.Node.<init>(Node.java:140)
	at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:143)
	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:194)
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:286)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:45)
Refer to the log for complete error details.

Bien entendu le fichier /etc/ld.so.conf est accessible en lecture :

cesium@0090e0c528ef:/opt/cesium-plus-pod-1.9.1$ ls -Rl /etc/ld.so*
-rw-r--r-- 1 root root 21388 Jan 31 20:19 /etc/ld.so.cache
-rw-r--r-- 1 root root    34 Mar  2  2018 /etc/ld.so.conf

/etc/ld.so.conf.d:
total 8
-rw-r--r-- 1 root root 44 Mar 20  2016 libc.conf
-rw-r--r-- 1 root root 68 Feb  6  2019 x86_64-linux-gnu.conf

Et les logs ne donnent pas beaucoup plus d’info :

[2023-01-31 20:54:00,574][INFO ][node                     ] [0090e0c528ef] version[2.4.6], pid[169], build[5376dca/2017-07-18T12:17:44Z]
[2023-01-31 20:54:00,575][INFO ][node                     ] [0090e0c528ef] initializing ...
[2023-01-31 20:54:00,981][INFO ][plugins                  ] [0090e0c528ef] modules [reindex, lang-expression, lang-groovy], plugins [mapper-attachments, cesium-plus-pod-core, cesium-plus-pod-subscription, cesium-plus-pod-user], sites []
[2023-01-31 20:54:00,998][INFO ][env                      ] [0090e0c528ef] using [1] data paths, mounts [[/opt/cesium-plus-pod-1.9.1/data (/dev/mapper/luks-12a534db-1dbc-4d69-9a2c-c39bd4f5105c)]], net usable_space [4.8gb], net total_space [880.8gb], spins? [possibly], types [ext4]
[2023-01-31 20:54:00,998][INFO ][env                      ] [0090e0c528ef] heap size [989.8mb], compressed ordinary object pointers [true]
[2023-01-31 20:54:01,130][INFO ][http                     ] [0090e0c528ef] Using [org.elasticsearch.http.netty.NettyHttpServerTransport] as http transport, overridden by [cesium-plus-core]
[2023-01-31 20:54:01,835][ERROR][bootstrap                ] Exception
java.lang.ExceptionInInitializerError
	at jnr.ffi.LibraryLoader.getSearchPaths(LibraryLoader.java:353)
	at jnr.ffi.LibraryLoader.load(LibraryLoader.java:325)
	at jnr.ffi.LibraryLoader.load(LibraryLoader.java:304)
	at org.abstractj.kalium.NaCl$SingletonHolder.<clinit>(NaCl.java:51)
	at org.abstractj.kalium.NaCl.sodium(NaCl.java:29)
	at org.duniter.core.service.Ed25519CryptoServiceImpl.<init>(Ed25519CryptoServiceImpl.java:76)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at java.lang.Class.newInstance(Class.java:442)
	at org.duniter.core.beans.BeanFactory.newBean(BeanFactory.java:122)
	at org.duniter.elasticsearch.beans.ESBeanFactory.newBean(ESBeanFactory.java:60)
	at org.duniter.core.beans.BeanFactory.getBean(BeanFactory.java:60)
	at org.duniter.elasticsearch.service.ServiceLocator$Provider.get(ServiceLocator.java:126)
	at org.duniter.elasticsearch.service.ServiceLocator$Provider.get(ServiceLocator.java:117)
	at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:46)
	at org.elasticsearch.common.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42)
	at org.elasticsearch.common.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66)
	at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:85)
	at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:104)
	at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:47)
	at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:886)
	at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:43)
	at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:59)
	at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:46)
	at org.elasticsearch.common.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42)
	at org.elasticsearch.common.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66)
	at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:85)
	at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:104)
	at org.elasticsearch.common.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42)
	at org.elasticsearch.common.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66)
	at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:85)
	at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:104)
	at org.elasticsearch.common.inject.FactoryProxy.get(FactoryProxy.java:54)
	at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:47)
	at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:886)
	at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:43)
	at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:59)
	at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:46)
	at org.elasticsearch.common.inject.InjectorBuilder$1.call(InjectorBuilder.java:201)
	at org.elasticsearch.common.inject.InjectorBuilder$1.call(InjectorBuilder.java:193)
	at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:879)
	at org.elasticsearch.common.inject.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:193)
	at org.elasticsearch.common.inject.InjectorBuilder.injectDynamically(InjectorBuilder.java:175)
	at org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.java:110)
	at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:93)
	at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:70)
	at org.elasticsearch.common.inject.ModulesBuilder.createInjector(ModulesBuilder.java:46)
	at org.elasticsearch.node.Node.<init>(Node.java:213)
	at org.elasticsearch.node.Node.<init>(Node.java:140)
	at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:143)
	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:194)
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:286)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:45)
Caused by: java.security.AccessControlException: access denied ("java.io.FilePermission" "/etc/ld.so.conf" "read")
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
	at java.security.AccessController.checkPermission(AccessController.java:886)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
	at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
	at java.io.File.exists(File.java:825)
	at jnr.ffi.LibraryLoader$StaticDataHolder.<clinit>(LibraryLoader.java:421)
	... 55 more

Ça a l’air tellement bête que je me dis que je ne dois pas être le seul à être tombé là-dessus :confused:

Il semble que ce soit une erreur de permission Java (de la JVM) pas des permissions système :

Extrait :

Within your <jre location>\lib\security\java.policy try adding:

grant { permission java.security.AllPermission; };

And see if it allows you. If so, you will have to add more granular permissions.

See:

Java 8 Documentation for java.policy files

1 Like

Oui c’est bien un truc de policy, mais celles-ci sont normalement définies dans l’appli. Là je rajoute à la main tout un tas de trucs dans le fichier java.policy global, et ça pète à chaque fois un peu plus loin avec une autre règle de sécu.

Il y a un truc qui fait que ce mécanisme ne fonctionne pas dans mon image Docker.

Je déteste Java…

EDIT: J’ai fini par comprendre qu’il ne fallait pas complètement écraser le fichier de conf par défaut de elasticsearch. Car on y trouve en particulier:

security.manager.enabled: false

Haha, je ris jaune. Elle est belle la sécurité de Java ^^

Bon… Ça tourne à peu près proprement. Je vais réviser tout ça jeudi. Là c’est bed time :slight_smile:

4 Likes

Pareil. C’est une des raisons qui m’a retiré l’envie de creuser davantage. Surtout en voyant que les gens qui avaient l’habitude de java arrivaient sans problème à les contourner, mais se gardaient bien de documenter ces petits pièges.

Merci beaucoup d’avoir eu le courage de passer outre !!

2 Likes